EMR起動時のインストールコンポーネントについて調べる
次はSpark、というかhadoopをEMRで立てるので、どういう設定になっているのかを調べる。
インストールされるコンポーネントだけで今は精一杯なので、とりあえずそこだけわかっていることをメモしておく。
インストールされるコンポーネント
ざっくりした説明は Amazon EMR 4.x リリースバージョンの詳細 - Amazon EMR を参照
2017年11月13日現在、emr-5.4.0かつSpark2.1.0を入れる。
その場合は、Cluster ManagerはYARNが入るっぽい。
EMRFS(EMR ファイルシステム)
EMRFS は、Amazon S3 にデータを保存する クラスターを可能にする HDFS の実装です。
EMR ファイルシステム (EMRFS) の使用 - Amazon EMR
→S3にデータを保存できるAWSのHDFS。おそらくHDFSを併設できる。
Amazon EMR および Hadoop は通常、クラスターを処理するときに以下のうち少なくとも 2 つのファイルシステムを使用します。
ストレージシステムとファイルシステムで作業する - Amazon EMR
emr-goodies
Hadoop エコシステムに役立つ追加のライブラリ 具体的にどのようなライブラリが入っているのかはよくわからず。
EMRのインスタンス上から調べてみると、構成は以下
/etc
└── var
└── aws
└── emr
└── packages
└── bigtop
└── emr-goodies
└── noarch
├── emr-goodies-2.4.0-1.amzn1.noarch.rpm
├── emr-goodies-hadoop-2.4.0-1.amzn1.noarch.rpm
└── emr-goodies-hive-2.4.0-1.amzn1.noarch.rpm
これだけ見ると、hadoopとhiveの追加ライブラリがあるってことはわかるけど、emr-goodies-2.4.0-1.amzn1.noarch.rpm
は何者なんだろ。
hadoop-client
'hdfs'、'hadoop'、'yarn' などの Hadoop コマンドラインクライアント。
hadoop-hdfs-datanode
ブロックを保存する HDFS ノードレベルのサービス 。
data nodeはHDFSのSlave node内に存在している。
https://oss.nttdata.com/hadoop/hadoop.html
複数マシンへHadoopをインストールする (1/3):CodeZine(コードジン)
hadoop-hdfs-namenode
ファイル名を追跡し、場所をブロックする HDFS サービス。
name nodeはHDFSのMaster node内に存在している。
https://oss.nttdata.com/hadoop/hadoop.html
複数マシンへHadoopをインストールする (1/3):CodeZine(コードジン)
hadoop-hdfs-library
hadoop-httpfs-server
HDFS オペレーションの HTTP エンドポイント。
httpfsっていうのは、「HDFS over HTTP」のことらしい。
じゃあそれ何なのよってことで調べると
HttpFS can be used to transfer data between clusters running different versions of Hadoop (overcoming RPC versioning issues), for example using Hadoop DistCP.
HttpFS can be used to access data in HDFS on a cluster behind of a firewall (the HttpFS server acts as a gateway and is the only system that is allowed to cross the firewall into the cluster). https://hadoop.apache.org/docs/stable/hadoop-hdfs-httpfs/index.html
HttpFSは、Hadoop DistCPなどを使用して、異なるバージョンのHadoopを実行している(RPCバージョン管理の問題を克服する)クラスタ間でデータを転送するために使用できます。
HttpFSは、ファイアウォールの背後にあるクラスタ上のHDFS内のデータにアクセスするために使用できます(HttpFSサーバーはゲートウェイとして機能し、ファイアウォールをクラスタに渡すことができる唯一のシステムです)。
以下サイトの分かりやすい絵を見るに
Hoop(httpfs)とwebhdfsの違い - たごもりすメモ
- httpFS Serverってやつがいる。こいつはクライアント側とHDFS側の間に立っているやつ。
- クライアントがHDFSからデータを取ってきたいときは、httpFS Serverに対してはhttp REST APIでアクセスする。
- httpFSサーバ側はクライアントのリクエストを受け取ったらHDFSからデータを取ってきて返す。
こんな感じなんだと思う。
それを踏まえてEMRを見ると、初期状態だとおそらくMaster node内に存在しているんじゃないかなーと推測。
そう思った理由っていうのも、環境設定のshellやxmlの設定を見る限りMaster node内を指定しているように見えたから。
/etc/hadoop-httpfs/conf.empty/httpfs-env.sh
# The hostname HttpFS server runs on # # export HTTPFS_HTTP_HOSTNAME=`hostname -f`
/etc/alternatives/hadoop-conf/hdfs-site.xml
<property> <name>dfs.namenode.rpc-address</name> <value>ip-xx-xx-xx-xx.ap-northeast-1.compute.internal:8020</value> </property> <property> <name>dfs.namenode.http-address</name> <value>ip-xx-xx-xx-xx.ap-northeast-1.compute.internal:50070</value> </property> <property> <name>dfs.namenode.https-address</name> <value>ip-xx-xx-xx-xx.ap-northeast-1.compute.internal:50470</value> </property>
hadoop-kms-server
Hadoop の KeyProvider API に基づく暗号キー管理サーバー。
EMRのHDFS部の暗号化はデフォルトでhadoop KMSを使用するらしい。
Hadoop KMS – Hadoop Key Management Server (KMS) - Documentation Sets
Apache Hadoop 2.9.1 – Transparent Encryption in HDFS
透過的なデータ暗号化であるそうなんだが、透過的なデータ暗号化って何ぞや?
ググってみるとRDB系の要素で使われるみたい。
透過的データ暗号化の概要
アプリケーション(SQL)側で暗号化/復号処理をしなくても、DBのデータファイルが暗号化される機能です。
データファイルや物理メディア(HDDなど)の窃取・盗難対策に有効です。
一方で、アプリケーション側にSQLインジェクションなどの脆弱性がある場合には、何の保護にもなりません。
MySQL 5.7の透過的データ暗号化
hadoop-yarn-nodemanager
Slave node上に設定。YARN上で各Slave nodeのリソース状況を確認できる。 分散処理技術「Hadoop」とは:NTTデータのHadoopソリューション
hadoop-yarn-resourcemanager
Master node上に設定。YARN上でNodeManagerの管理やアプリ自体の実行状況を確認できる。
分散処理技術「Hadoop」とは:NTTデータのHadoopソリューション
spark-client
Sparkのクライアント
spark-history-server
Sparkのジョブ履歴を格納するサーバー
spark-on-yarn
YARN のメモリ内実行エンジン
spark-yarn-slave
YARN スレーブで必要な Apache Spark ライブラリ
正直全然わからず。
もう少しレベルが上がったらhadoopについてもっと深堀っていきたい。