astamuse Lab

astamuse Labとは、アスタミューゼのエンジニアとデザイナーのブログです。アスタミューゼの事業・サービスを支えている知識と舞台裏の今を発信しています。

もう待てない、Spark2.0の導入と実践

こんにちは、福田です。

すっかり秋らしくなり、過ごしやすくなりました。皆様いかがお過ごしでしょうか。

前回は、コンパクトで高速な大規模キーワード辞書の実装について書きました。

今回は、先月末(9/29)にリリースされたCDH向けのSpark2.0 β版のセットアップです。

最先端の開発環境を手にすべく、立ち上がります。

Spark2.0の魅力

  • Whole stage code generationによるSQL、DataFrameライブラリの大幅なパフォーマンス向上(2-10倍)
  • ML(機械学習)ライブラリの改善・充実(RDDベースからDataFrameベースに)
  • DataSet APIの導入によるさらなる型安全性

その他、SQL2003 準拠の関数サポート、ネイティブでのCSVサポートなど、嬉しいアップデートが目白押しです。

※詳しくはリリースノート参照

Spark Release 2.0.0 | Apache Spark

胸が高鳴ります。

ClouderaのSpark2.0 βリリース、3つのポイント

  • Cloudera Managerのアドオンサービスとなっており、マネージドサービスとして利用できる
  • 現行バージョン(1.6.0)と平行して運用できる
  • 導入の手順がシンプルで簡単

セットアップ開始

Apache Spark 2.0 Beta Now Available for CDH - Cloudera Engineering Blog

こちらのリリースブログの記事を参考にインストールします。

f:id:astamuse:20161021175646p:plain

それでは、見ていきましょう。

Spark Beta 2.0 CSDのインストール

Spark 2.0 Beta CSDファイルをダウンロードします。

$ wget http://archive.cloudera.com/beta/spark2/csd/SPARK2_ON_YARN-2.0.0.cloudera.beta1.jar
--2016-10-07 11:29:01--  http://archive.cloudera.com/beta/spark2/csd/SPARK2_ON_YARN-2.0.0.cloudera.beta1.jar
Resolving archive.cloudera.com (archive.cloudera.com)... 151.101.72.167
Connecting to archive.cloudera.com (archive.cloudera.com)|151.101.72.167|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 15309 (15K) [application/java-archive]
Saving to: ‘SPARK2_ON_YARN-2.0.0.cloudera.beta1.jar’

100%[================================================================================>] 15,309      --.-K/s   in 0s       

2016-10-07 11:29:02 (366 MB/s) - ‘SPARK2_ON_YARN-2.0.0.cloudera.beta1.jar’ saved [15309/15309]


ダウンロードしたCSDファイルをCloudera Manager Serverを稼働させているホストの/opt/cloudera/csdディレクトリに置きます。

# mv SPARK2_ON_YARN-2.0.0.cloudera.beta1.jar /opt/cloudera/csd/


同ファイルの所有権をcloudera-scm:cloudera-scmに、パーミッションを644にそれぞれ変更します。

# chown cloudera-scm:cloudera-scm /opt/cloudera/csd/SPARK2_ON_YARN-2.0.0.cloudera.beta1.jar  
# chmod 644 /opt/cloudera/csd/SPARK2_ON_YARN-2.0.0.cloudera.beta1.jar  
# ls -alh /opt/cloudera/csd/SPARK2_ON_YARN-2.0.0.cloudera.beta1.jar  
-rw-r--r-- 1 cloudera-scm cloudera-scm 15K Sep 22 09:52 /opt/cloudera/csd/SPARK2_ON_YARN-2.0.0.cloudera.beta1.jar


Cloudera Manager Serverを再起動します。

# service cloudera-scm-server restart
Stopping cloudera-scm-server:  * cloudera-scm-server stopped
/etc/init.d/cloudera-scm-server: line 292: [[: [error] JVM PermGen is set less than 256m, CM server may run out of PermGen
space. Update CMF_JAVA_OPTS in /etc/default/cloudera-scm-server to fix this.: syntax error: operand expected (error token
is "[error] JVM PermGen is set less than 256m, CM server may run out of PermGen space. Update CMF_JAVA_OPTS in /etc/defau
lt/cloudera-scm-server to fix this.")
/etc/init.d/cloudera-scm-server: line 292: [[: [error] JVM MaxHeap is set less than 2G, CM server may run out of Heap spac
e. Update CMF_JAVA_OPTS in /etc/default/cloudera-scm-server to fix this.: syntax error: operand expected (error token is "
[error] JVM MaxHeap is set less than 2G, CM server may run out of Heap space. Update CMF_JAVA_OPTS in /etc/default/clouder
a-scm-server to fix this.")                                                                                                
Starting cloudera-scm-server:   



以降、Cloudera Manager管理コンソール(Web UI)での操作になります。

Cloudera Manager管理コンソールにログインします

Cloudera Management Serviceの再起動

Cloudera Management Serviceの設定ファイルの変更内容を確認し、再起動を行います。

設定の変更箇所 f:id:astamuse:20161019174453p:plain
Cloudera Management Serviceの再起動を完了させます。


パッケージのダウンロード、配布と有効化

parcelのリストにSpark2が現れることを確認し、ダウンロード、配備、有効化を行います。

Downloadをクリックしてダウンロード f:id:astamuse:20161021182654p:plain

Distributeをクリックしてファイルを配備 f:id:astamuse:20161019181013p:plain

Activateをクリックして有効化 f:id:astamuse:20161021182646p:plain

有効化完了。

はやる気持ちを抑えきれず、spark2-submitでジョブを投入、とここで思わぬエラーが。

Exception in thread "main" java.lang.Exception: When running with master 'yarn' either HADOOP_CONF_DIR or YARN_CONF_DIR must be set in the environment.
        at org.apache.spark.deploy.SparkSubmitArguments.validateSubmitArguments(SparkSubmitArguments.scala:256)
        at org.apache.spark.deploy.SparkSubmitArguments.validateArguments(SparkSubmitArguments.scala:233)
        at org.apache.spark.deploy.SparkSubmitArguments.<init>(SparkSubmitArguments.scala:110)
        at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:117)
        at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)


イYARN。

spark2のconfig一式がありません。どこでボタンを掛け違えたのか…



ちょ、ちょっとMatei!!

クラスタへのSpark2のサービスの追加を忘れていました。

After deploying the parcel, create a “spark2 service” from the Cluster dropdown.


Spark2サービスの追加

気を取り直して、クラスタへSpark2サービス追加を行います。

クラスタメニューのAdd Service(サービスの追加)から、ウィザードを起動 f:id:astamuse:20161019182554p:plain

Spark2を選択後、Continueをクリック。

引き続き、HistoryServerとGatewayロールを割り当てるhostを選択し、
ウィザードに従いサービスの追加を完了させます。

※既存のSparkとは別に、Spark2のロールを割り当てる必要があります。

f:id:astamuse:20161021183016p:plain

おめでとうございます!Spark2がサービスとしてクラスタに追加されました。

仕上げに、クライアント設定の再配備を行い、クラスタの再起動を行います。

これで、準備は整いました。

2つの新コマンド

Spark2.0 βを使うには、spark-shell, spark-submitコマンドの代わりに、

spark2-shell, spark2-submitを使います。

$ spark2-shell --master yarn
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel).
16/10/07 11:59:07 WARN spark.SparkContext: Use an existing SparkContext, some configuration may not take effect.
Spark context Web UI available at http://192.168.10.100:4040
Spark context available as 'sc' (master = yarn, app id = application_1475811551793_0010).
Spark session available as 'spark'.
Welcome to
     ____              __
    / __/__  ___ _____/ /__
   _\ \/ _ \/ _ `/ __/  '_/
  /___/ .__/\_,_/_/ /_/\_\   version 2.0.0.cloudera.beta1
     /_/
         
Using Scala version 2.11.8 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_101)
Type in expressions to have them evaluated.
Type :help for more information.

scala>

なんということでしょう。憧れのSpark 2.0が手の中に。

正式版リリースまでに準備をしていきましょう。

念のため、1.6.0の方も確認します。

$ spark-shell --master yarn
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel).
Welcome to
     ____              __
    / __/__  ___ _____/ /__
   _\ \/ _ \/ _ `/ __/  '_/
  /___/ .__/\_,_/_/ /_/\_\   version 1.6.0
     /_/

Using Scala version 2.10.5 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_101)
Type in expressions to have them evaluated.
Type :help for more information.
Spark context available as sc (master = yarn-client, app id = application_1475808153174_0002).
SQL context available as sqlContext.

scala>  

あとは、既存のジョブをScala-2.11、Spark-2.0向けにビルドし直してspark2-submitするだけです。

いくつか挙動が異なる部分や、互換性の問題も発生するかもしれません。

その場合はドキュメントを参照し、根気よく対応します。

Spark 2、そして開発へ

今日から、Spark 2.0があなたのパートナーです。

洗練されたパフォーマンスと新しいAPIを駆使して生産性・開発効率を上げていきましょう。

Copyright © astamuse company, ltd. all rights reserved.