LoginSignup
9

More than 5 years have passed since last update.

SparkSQL を YARN 上で動作させる

Last updated at Posted at 2014-12-02

本日は Hive on Tez の話をしようと思いましたが,昨日の記事 の中でも触れられている Spark かつ SQL on Hadoop である SparkSQL on YARN の話に話題を変更してお届けします.

SparkSQL とは

名前通り,Spark をランタイムとした SQL インタフェースです.デザインの特徴として,SparkDSL との親和性と,Hive の Metastore, SerDe, UDF 互換性が保たれているという点があげられます.SparkSQL のドキュメントとしては,以下のものがあります:

Spark on YARN での HiveQL 互換クエリの動かし方

ここからは,Hadoop 2 クラスタを既に持っている方のために,Spark on YARN における Spark の動作のさせ方について説明します.なお,今回の説明ではディストリビューション固有の説明は行いません.

Spark 側の設定

あなたの利用している Hadoop2 系クラスタが Spark ダウンロードページに存在しない場合,Spark のソースコードをダウンロードしてきて Spark をビルドする必要があります.例えば,最新版である Hadoop 2.5.2 や 2.6.0 を利用しようとした場合は以下のような手順で Spark をビルドします.

export MAVEN_OPTS="-Xmx2g -XX:MaxPermSize=512M -XX:ReservedCodeCacheSize=512m"
tar xzvf spark-1.1.1.tgz
cd spark
./make-distribution.sh --tgz -Phadoop-2.4 -Pyarn,hive,hive-thriftserver -Dhadoop.version=2.5.2

すると,spark-.tgz が生成されるのでこれを解凍し,Spark の設定ファイル(conf/spark-env.sh, conf/spark-defaults.conf)を記述します.この設定ファイルには,Spark 起動時のデフォルトの設定を記述します.

spark-env.sh は,Spark on YARN 起動に必須の設定を行います.特に,HADOOP_CONF_DIR の設定は必須になるので気をつけてください.HADOOP_CONF_DIR は,YARN の設定ファイル(yarn-site.xml)および hdfs の設定ファイル(hdfs-site.xml)がある場所をポイントします.

spark-env.sh
# Options read in YARN client mode
# - HADOOP_CONF_DIR, to point Spark towards Hadoop configuration files
# - SPARK_EXECUTOR_INSTANCES, Number of workers to start (Default: 2)
# - SPARK_EXECUTOR_CORES, Number of cores for the workers (Default: 1).
# - SPARK_EXECUTOR_MEMORY, Memory per Worker (e.g. 1000M, 2G) (Default: 1G)
# - SPARK_DRIVER_MEMORY, Memory for Master (e.g. 1000M, 2G) (Default: 512 Mb)
# - SPARK_YARN_APP_NAME, The name of your application (Default: Spark)
# - SPARK_YARN_QUEUE, The hadoop queue to use for allocation requests 
# - SPARK_YARN_DIST_FILES, Comma separated list of files to be distributed with the job.
# - SPARK_YARN_DIST_ARCHIVES, Comma separated list of archives to be distributed with the job.
HADOOP_CONF_DIR=/home/ozawa/hadoop/etc/hadoop/
SPARK_EXECUTOR_INSTANCES=16
SPARK_EXECUTOR_MEMORY=4G
SPARK_DRIVER_MEMORY=2G
spark-defaults.conf
spark.serializer                   org.apache.spark.serializer.KryoSerializer
spark.shuffle.manager              SORT
spark.shuffle.consolidateFiles     true
spark.shuffle.spill                true

SparkSQL を起動する

SparkSQL を起動してみましょう.

$ bin/spark-sql --master yarn-client

--master yarn-client を渡すことで,YARN の設定を読み込み,Spark の Application Master が立ち上がります.

spark-sql > 

SparkSQL 上では,Hive 互換クエリを実行することができます.external table を使ってデータをロードみましょう.

spark-sql > create external table if NOT EXISTS text100GB(text string) location 'hdfs:///user/ozawa/text';

ここまでで前準備は完了で,この table に対して,HiveQL クエリを実行することができるようになりました.あとは Hive と同じ要領で HiveQL を記述することが可能です.

SparkSQL の現状

Hive 0.12 ベースで作られていることも影響しているのか,Hive で動くクエリの一部は parse error になったりします.一方で,Hive on Spark という取り組みも行われており,互換性や既存ツールとの統合の面では Hive on SQL に一日の長がありまそうです.
どちらが普及してくるのか,見るのが楽しみな状況にありますので,適宜共有できればと思います.

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9