51
classmethod.jp Run Spark on EMRって どんな仕組みになってるの? AWS勉強会 in 北海道札幌! Developers.IO Meetup 05 1 2014/06/28 能登

Run Spark on EMRってどんな仕組みになってるの?

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Run Spark on EMRってどんな仕組みになってるの?

classmethod.jp

Run Spark on EMRって!どんな仕組みになってるの?

AWS勉強会 in 北海道札幌!Developers.IO Meetup 05

1

2014/06/28 能登 諭

Page 2: Run Spark on EMRってどんな仕組みになってるの?

classmethod.jp2

注意!!!"

このスライドの内容は現在は一部適切ではない内容になっています。!"

このスライドの元ネタであるAWSの記事が2014-10-22にアップデートされました。!

https://aws.amazon.com/articles/Elastic-MapReduce/4926593393724923!"

このアップデートでYARNに対応したSparkのBootstrap ActionがAWSより提供されるようになりました。!

http://blogs.aws.amazon.com/bigdata/post/Tx15AY5C50K70RV/Installing-Apache-Spark-on-an-Amazon-EMR-Cluster!

"このスライドはアップデート前のSpark 0.8.1 on Hadoop 1.0.3 (AMI 2.x)について書かれたものです。Bootstrap Actionの概要を知るにはいいですが、現状はAWSからYARNに対応したBootstrap Actionが提供されたという部分

が異なりますのでご注意下さいm(_ _)m!

Page 3: Run Spark on EMRってどんな仕組みになってるの?

classmethod.jp

自己紹介• 氏名:能登 諭(のと さとし)"• Twitter:@n3104"

• 得意分野:Hadoop"

• 好きなAWSサービス:EMR

3

Page 4: Run Spark on EMRってどんな仕組みになってるの?

classmethod.jp4

みなさん、EMR使ってますか?

Page 5: Run Spark on EMRってどんな仕組みになってるの?

classmethod.jp5

私はそろそろ実案件で!利用することになりそうですw

(前職はCDHをオンプレで

使ってました)

Page 6: Run Spark on EMRってどんな仕組みになってるの?

classmethod.jp

EMRとは• http://aws.amazon.com/jp/elasticmapreduce/"• 正式名称はAmazon Elastic MapReduce。"• AWSが提供するHadoopのディストリビューション。"

• オンプレとの一番の違いは保守が不要な点。"• 基本的にS3に入出力ファイルを置くことになるため"• HDFSの障害を考慮しなくてよくなる。"

• 容量制限を気にする必要がなくなる。

6

Page 7: Run Spark on EMRってどんな仕組みになってるの?

classmethod.jp

そもそもHadoopとは• http://hadoop.apache.org/"• HDFS(分散ファイルシステム)とMapReduce(分散処理基盤)をコアとするミドルウェア群。"

• 中心はHDFS(分散ファイルシステム)。これがあるおかけでMapReduceで効率的に分散処理ができる。"

• 最近はYARN(次世代MapReduce)が出てきたので、MapReduce以外の処理モデルもサポートし、より汎用的な分散処理基盤という位置づけに。

7

Page 8: Run Spark on EMRってどんな仕組みになってるの?

classmethod.jp8

EMRではMapReduce以外にも!PigやHiveというアプリケーションを!

利用することが出来ます

Page 9: Run Spark on EMRってどんな仕組みになってるの?

classmethod.jp9

Page 10: Run Spark on EMRってどんな仕組みになってるの?

classmethod.jp10

こんな感じでマネジメント!コンソール上でPigやHiveを!

追加できます

Page 11: Run Spark on EMRってどんな仕組みになってるの?

classmethod.jp11

最初から用意されている!Additional applications以外にも!

EMRクラスタに任意の!アプリケーションを!追加することができます

Page 12: Run Spark on EMRってどんな仕組みになってるの?

classmethod.jp12

具体的には、、

Page 13: Run Spark on EMRってどんな仕組みになってるの?

classmethod.jp13

Q: Hadoop 以外のデータ処理エンジンを使用できますか?!

http://aws.amazon.com/jp/elasticmapreduce/faqs/

Page 14: Run Spark on EMRってどんな仕組みになってるの?

classmethod.jp14

はい。EMR の一部のお客様は、処理エンジンとして Spark および Shark(インメモリ MapReduce およびデータウェアハウス)を使用できます。使用方法については、この記事を参照し

てください。

Page 15: Run Spark on EMRってどんな仕組みになってるの?

classmethod.jp15

Run Spark and Shark on Amazon Elastic MapReduce!

http://aws.amazon.com/articles/Elastic-MapReduce/4926593393724923

Page 16: Run Spark on EMRってどんな仕組みになってるの?

classmethod.jp16

EMR上でSparkとSharkを!実行する方法についての記事です

Page 17: Run Spark on EMRってどんな仕組みになってるの?

classmethod.jp17

Bootstrap Actionという!機能を利用してSparkとSharkを!セットアップしています

Page 18: Run Spark on EMRってどんな仕組みになってるの?

classmethod.jp18

elastic-mapreduce --create --alive --name "Spark/Shark Cluster" --

bootstrap-action s3://elasticmapreduce/samples/spark/

0.8.1/install-spark-shark.sh --bootstrap-name "Spark/Shark" --

instance-type m1.xlarge --instance-count 3

Page 19: Run Spark on EMRってどんな仕組みになってるの?

classmethod.jp19

Page 20: Run Spark on EMRってどんな仕組みになってるの?

classmethod.jp

Sparkとは• https://spark.apache.org/"• Hadoopと同じ分散処理基盤。"

• 繰り返し処理とインメモリ処理をサポートするDAG(有向非循環グラフ)実行エンジン。"• DAGはDriverプログラムから生成されるのでDAGを直接記述するわけではない。"

• RDDs(Resilient Distributed Datasets)というモデルで、DAGの終端から先頭のデータソースに向かってデータを生成していくのが特徴。"

• Hadoopと比べて繰り返し処理が得意で、100倍ぐらい早く処理できる場合がある。"

• http://dev.classmethod.jp/etc/hadoop-reading-16/ を見れば概ね分かるはずw

20

Page 21: Run Spark on EMRってどんな仕組みになってるの?

classmethod.jp

Driverのプログラムval file = sc.textFile("s3://bigdatademo/sample/wiki/")! !val reducedList = file.map(l => l.split(" "))!! .map(l => (l(1), l(2).toInt)).reduceByKey(_+_, 3)! !reducedList.cache! !val sortedList = reducedList!! .map(x => (x._2, x._1)).sortByKey(false).take(50)

21

Page 22: Run Spark on EMRってどんな仕組みになってるの?

classmethod.jp

Sharkとは• http://shark.cs.berkeley.edu/"• 分散SQLエンジン。"• HiveをMapReduceではなくSparkで実行できるようにしたもの。"

• なのでクエリによってはSpark同様、Hiveよりも100倍ぐらい早く処理できる場合がある。

22

Page 23: Run Spark on EMRってどんな仕組みになってるの?

classmethod.jp23

Page 24: Run Spark on EMRってどんな仕組みになってるの?

classmethod.jp24

これでやっと本日のお題に!辿りつきましたw

Page 25: Run Spark on EMRってどんな仕組みになってるの?

classmethod.jp25

Run Spark on EMRって!どんな仕組みになってるの?

Page 26: Run Spark on EMRってどんな仕組みになってるの?

classmethod.jp26

ちなみに、、

Page 27: Run Spark on EMRってどんな仕組みになってるの?

classmethod.jp27

タイトルからSharkを抜いたのは!タイトルが長くなるためです。!

他意はありませんw

Page 28: Run Spark on EMRってどんな仕組みになってるの?

classmethod.jp28

ということでBootstrap Actionの!詳細について見て行きましょう

Page 29: Run Spark on EMRってどんな仕組みになってるの?

classmethod.jp

s3://elasticmapreduce/samples/spark/0.8.1/install-spark-shark.sh

• SparkとSharkをEMRクラスタにインストールするためのシェル"• 最初に必要なソフトウェアをダウンロード&展開"• 既にセットアップ済みのHadoopの設定ファイルを元にspark-

env.shを生成"

• Sparkで利用するライブラリをコピー"

• Sharkのセットアップ"

• Sparkのデーモンを起動"

• マスターの場合はstart-master.shを実行"

• スレーブの場合はspark-daemon.shを実行29

Page 30: Run Spark on EMRってどんな仕組みになってるの?

classmethod.jp

ソフトウェアのダウンロード&展開cd /home/hadoop/"##Download Spark EMRwget http://bigdatademo.s3.amazonaws.com/0.8.1-dev1/spark-0.8.1-emr.tgz##Download Sharkwget https://github.com/amplab/shark/releases/download/v0.8.1/shark-0.8.1-bin-hadoop1.tgz##Download Scalawget http://www.scala-lang.org/files/archive/scala-2.9.3.tgz##DOwnload hivewget https://github.com/amplab/shark/releases/download/v0.8.1/hive-0.9.0-bin.tgz"tar -xvzf scala-2.9.3.tgztar -xvzf spark-0.8.1-emr.tgz tar -xvzf shark-0.8.1-bin-hadoop1.tgztar -xvzf hive-0.9.0-bin.tgz "ln -sf spark-0.8.1-emr sparkln -sf /home/hadoop/shark-0.8.1-bin-hadoop1/ /home/hadoop/sharkln -sf /home/hadoop/hive-0.9.0-bin /home/hadoop/hiveln -sf /home/hadoop/scala-2.9.3 /home/hadoop/scala

30

Page 31: Run Spark on EMRってどんな仕組みになってるの?

classmethod.jp

spark-env.shの生成とライブラリの追加MASTER=$(grep -i "job.tracker<" /home/hadoop/conf/mapred-site.xml | grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}')SPACE=$(mount | grep mnt | awk '{print $3"/spark/"}' | xargs | sed 's/ /,/g')PUB_HOSTNAME=$(GET http://169.254.169.254/latest/meta-data/public-hostname)"touch /home/hadoop/spark/conf/spark-env.shecho "export SPARK_CLASSPATH=/home/hadoop/spark/jars/*">> /home/hadoop/spark/conf/spark-env.shecho "export SPARK_MASTER_IP=$MASTER">> /home/hadoop/spark/conf/spark-env.shecho "export MASTER=spark://$MASTER:7077" >> /home/hadoop/spark/conf/spark-env.shecho "export SPARK_LIBRARY_PATH=/home/hadoop/native/Linux-amd64-64" >> /home/hadoop/spark/conf/spark-env.shecho "export SPARK_JAVA_OPTS=\"-Dspark.local.dir=$SPACE\"" >> /home/hadoop/spark/conf/spark-env.shecho "export SPARK_WORKER_DIR=/mnt/var/log/hadoop/userlogs/" >> /home/hadoop/spark/conf/spark-env.shcp /home/hadoop/spark/conf/metrics.properties.aws /home/hadoop/spark/conf/metrics.properties"cp /home/hadoop/lib/gson-* /home/hadoop/spark/jars/##cp /home/hadoop/lib/aws-java-sdk-* /home/hadoop/spark/jars/cp /home/hadoop/conf/core-site.xml /home/hadoop/spark/conf/cp /home/hadoop/lib/EmrMetrics*.jar /home/hadoop/spark/jars/cp /home/hadoop/hive/lib/hive-builtins-0.9.0-shark-0.8.1.jar /home/hadoop/spark/jars/cp /home/hadoop/hive/lib/hive-exec-0.9.0-shark-0.8.1.jar /home/hadoop/spark/jars/cp /home/hadoop/shark/target/scala-2.9.3/shark_2.9.3-0.8.1.jar /home/hadoop/spark/jars/

31

Page 32: Run Spark on EMRってどんな仕組みになってるの?

classmethod.jp

Shark関係のセットアップtouch /home/hadoop/shark/conf/shark-env.shcp /home/hadoop/lib/gson-* /home/hadoop/shark/lib_managed/jars/cp /home/hadoop/lib/aws-java-sdk-* /home/hadoop/shark/lib_managed/jars/cp /home/hadoop/lib/EmrMetrics*.jar /home/hadoop/shark/lib_managed/jars/cp /home/hadoop/hadoop-core.jar /home/hadoop/shark/lib_managed/jars/org.apache.hadoop/hadoop-core/hadoop-core-1.0.4.jar cp /home/hadoop/conf/core-site.xml /home/hadoop/hive/conf/"echo "export HIVE_HOME=/home/hadoop/hive/" >> /home/hadoop/shark/conf/shark-env.shecho "export SPARK_HOME=/home/hadoop/spark" >> /home/hadoop/shark/conf/shark-env.shecho "source /home/hadoop/spark/conf/spark-env.sh">> /home/hadoop/shark/conf/shark-env.shecho "export SCALA_HOME=/home/hadoop/scala" >> /home/hadoop/shark/conf/shark-env.sh"cat > /home/hadoop/hive/conf/hive-site.xml << EOF<?xml version="1.0"?><?xml-stylesheet type="text/xsl" href="configuration.xsl"?><configuration><property><name>mapred.job.tracker</name><value>yarn</value></property><property><name>fs.default.name</name> <value>hdfs://$MASTER:9000</value></property></configuration>EOF

32

Page 33: Run Spark on EMRってどんな仕組みになってるの?

classmethod.jp

デーモンの起動grep -Fq "\"isMaster\": true" /mnt/var/lib/info/instance.jsonif [ $? -eq 0 ];then /home/hadoop/spark/bin/start-master.shelse nc -z $MASTER 7077 while [ $? -eq 1 ]; do echo "Can't connect to the master, sleeping for 20sec" sleep 20 nc -z $MASTER 7077 done echo "Conneting to the master was successful" echo "export SPARK_JAVA_OPTS=\"-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Dspark.local.dir=$SPACE\"" >> /home/hadoop/spark/conf/spark-env.sh echo "export SPARK_PUBLIC_DNS=$PUB_HOSTNAME" >> /home/hadoop/spark/conf/spark-env.sh /home/hadoop/spark/bin/spark-daemon.sh start org.apache.spark.deploy.worker.Worker `hostname` spark://$MASTER:7077fi

33

Page 34: Run Spark on EMRってどんな仕組みになってるの?

classmethod.jp34

ということで、、

Page 35: Run Spark on EMRってどんな仕組みになってるの?

classmethod.jp35

仕組みとしては!Bootstrap Actionを利用して!

SparkとSharkのインストールと!デーモンの起動を行っていました

Page 36: Run Spark on EMRってどんな仕組みになってるの?

classmethod.jp36

こんな感じで!Bootstrap Actionを利用して!任意のアプリケーションを!

EMRクラスタに!追加することが出来ます

Page 37: Run Spark on EMRってどんな仕組みになってるの?

classmethod.jp37

なお、、

Page 38: Run Spark on EMRってどんな仕組みになってるの?

classmethod.jp38

EMRはインスタンスタイプ毎に!Hadoopの各種デーモンの設定を!

最適化しています!http://docs.aws.amazon.com/

ElasticMapReduce/latest/DeveloperGuide/emr-hadoop-

config.html

Page 39: Run Spark on EMRってどんな仕組みになってるの?

classmethod.jp39

一方、今回のBootstrap Actionは!SparkをStandalone Modeで!

実行しています!https://spark.apache.org/docs/0.8.1/

spark-standalone.html

Page 40: Run Spark on EMRってどんな仕組みになってるの?

classmethod.jp40

Standalone Modeの場合は!spark-env.shでWorker数や!メモリサイズを指定して!

インスタンスタイプに合わせた!最適化が作業が必要になります

Page 41: Run Spark on EMRってどんな仕組みになってるの?

classmethod.jp41

そのため、、

Page 42: Run Spark on EMRってどんな仕組みになってるの?

classmethod.jp42

実際にプロダクション環境で!利用する際には!

インスタンスタイプに応じた!チューニングが必要になる!という認識です(´・ω・`)

Page 43: Run Spark on EMRってどんな仕組みになってるの?

classmethod.jp43

ですが、、

Page 44: Run Spark on EMRってどんな仕組みになってるの?

classmethod.jp44

SparkはYARN(Hadoop2)での!起動もサポートしています!

https://spark.apache.org/docs/0.8.1/running-on-yarn.html

Page 45: Run Spark on EMRってどんな仕組みになってるの?

classmethod.jp45

よって、、

Page 46: Run Spark on EMRってどんな仕組みになってるの?

classmethod.jp46

Hadoop2(YARN)で!EMRを起動すれば!

Sparkを実行できる(はず)!!そうなればチューニング作業が!不要になる(はず)!!!

Page 47: Run Spark on EMRってどんな仕組みになってるの?

classmethod.jp47

とはいえ、自分でYARN用の!Bootstrap Actionを書くのは!

しんどい( ´Д`)=3

Page 48: Run Spark on EMRってどんな仕組みになってるの?

classmethod.jp48

結論は、、

Page 49: Run Spark on EMRってどんな仕組みになってるの?

classmethod.jp49

EMRのAdditional applicationsに!Sparkがオプションとして!追加されるといいなー(^O^)

Page 50: Run Spark on EMRってどんな仕組みになってるの?

classmethod.jp50

ご静聴ありがとうございましたm(_ _)m

Page 51: Run Spark on EMRってどんな仕組みになってるの?