EMR上でSparkのWeb UIにアクセスする方法

Amazon EMR

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

小ネタです。EMRでSparkのWeb UIにアクセスする際はYARN ResourceManagerのWeb UI経由でアクセスする必要がありました。

YARN ResourceManager経由でアクセス

前提

以下の環境を前提としています。

  • emr-4.6.0 でアプリケーションは Spark 1.6.1 on Hadoop 2.7.2 YARN with Ganglia 3.7.2
  • ハードウェア構成は m1.medium を 1 台(検証用なのでマスターノードのみ)
  • EC2キーペアを設定(SOCKSプロキシの利用に必要)

AWS CLIだと以下のようなコマンドになります。KeyName, SubnetId, log-uriをご自身の環境に合わせればそのまま利用できるはずです。

aws emr create-cluster --applications Name=Ganglia Name=Spark \
  --ec2-attributes '{"KeyName":"XXXX","InstanceProfile":"EMR_EC2_DefaultRole","SubnetId":"subnet-dXXXX"}' \
  --service-role EMR_DefaultRole --enable-debugging --release-label emr-4.6.0 \
  --log-uri 's3n://aws-logs-XXXX-ap-northeast-1/elasticmapreduce/' --name 'emr-4.6.0 spark' \
  --instance-groups '[{"InstanceCount":1,"InstanceGroupType":"MASTER","InstanceType":"m1.medium","Name":"Master Instance Group"}]' \
  --configurations '[{"Classification":"spark","Properties":{"maximizeResourceAllocation":"true"},"Configurations":[]}]' \
  --region ap-northeast-1

SOCKSプロキシはResourceManagerのWeb UIへアクセスする際に利用します。公式ドキュメントに書かれているオプション2のSOCKSプロキシを利用する方法でWeb UIにアクセスします。
Amazon EMR クラスターでホストされているウェブサイトの表示 - Amazon Elastic MapReduce

事前準備

まずはYARN上にSpark Applicaitonを起動しておく必要があるので、今回はspark-shellを起動しておきます。また、Web UIを表示した際に真っ白だと寂しいのでSparkのライセンスファイルをカウントする処理を実行しておきます。

まずはSSHでマスターノードに接続します。

ssh -i /path/to/XXXX.pem -l hadoop ec2-XXX-XXX-XXX-XXX.ap-northeast-1.compute.amazonaws.com

SSH経由でマスターノードにアクセスして、spark-shellを起動します。

[hadoop@ip-172-31-21-122 ~]$ spark-shell
...
scala> 

ライセンスファイルをカウントする処理を実行します。

scala> val textFile = sc.textFile("file:/usr/lib/spark/LICENSE")
textFile: org.apache.spark.rdd.RDD[String] = file:/usr/lib/spark/LICENSE MapPartitionsRDD[1] at textFile at <console>:27

scala> textFile.count()
res0: Long = 294

Spark Web UIへのアクセス

では実際にSparkのWeb UIを表示したいと思います。まずResourceManagerのWEB UIにアクセスし、そこからSparkのWeb UIにアクセスします。

ResourceManagerのWeb UIにアクセスすると、YARN Applicationの一覧にspark-shellが表示されているので、リンクをクリックします。
spark-web-interface-on-amazon-emr_1

Applicationの詳細画面に[Tracking URL]があるので、こちらをクリックします。
spark-web-interface-on-amazon-emr_2

無事、SparkのWeb UIが表示されました。
spark-web-interface-on-amazon-emr_3

直接アクセスしてみる

参考までに標準の4040ポートでアクセスしてみます。アクセスすると表示が崩れていることが分かります。
spark-web-interface-on-amazon-emr_4

最後に

最初標準のポートにアクセスして表示が崩れていて、多少悩んだので参考になれば幸いです。結局検索して以下のページを見つけて解決しました。
amazon emr - Spark UI on AWS EMR - Stack Overflow