すのふら

すのふら

日々の備忘録

EMR起動時のインストールコンポーネントについて調べる

前回Sparkについて調べた。

次はSpark、というかhadoopをEMRで立てるので、どういう設定になっているのかを調べる。

インストールされるコンポーネントだけで今は精一杯なので、とりあえずそこだけわかっていることをメモしておく。


インストールされるコンポーネント

f:id:snofra:20171113194630p:plain ざっくりした説明は 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にデータを保存できるAWSHDFS。おそらく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

HDFS コマンドラインクライアントとライブラリ。


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の違い - たごもりすメモ

www.slideshare.net

  • httpFS Serverってやつがいる。こいつはクライアント側とHDFS側の間に立っているやつ。
  • クライアントがHDFSからデータを取ってきたいときは、httpFS Serverに対してはhttp REST APIでアクセスする。
  • httpFSサーバ側はクライアントのリクエストを受け取ったらHDFSからデータを取ってきて返す。

こんな感じなんだと思う。

それを踏まえてEMRを見ると、初期状態だとおそらくMaster node内に存在しているんじゃないかなーと推測。

f:id:snofra:20171113201058p:plain

そう思った理由っていうのも、環境設定の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についてもっと深堀っていきたい。