こんにちは、福田です。
すっかり秋らしくなり、過ごしやすくなりました。皆様いかがお過ごしでしょうか。
前回は、コンパクトで高速な大規模キーワード辞書の実装について書きました。
今回は、先月末(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
こちらのリリースブログの記事を参考にインストールします。
それでは、見ていきましょう。
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の設定ファイルの変更内容を確認し、再起動を行います。
設定の変更箇所
Cloudera Management Serviceの再起動を完了させます。
パッケージのダウンロード、配布と有効化
parcelのリストにSpark2が現れることを確認し、ダウンロード、配備、有効化を行います。
Downloadをクリックしてダウンロード
Distributeをクリックしてファイルを配備
Activateをクリックして有効化
有効化完了。
はやる気持ちを抑えきれず、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(サービスの追加)から、ウィザードを起動
Spark2を選択後、Continueをクリック。
引き続き、HistoryServerとGatewayロールを割り当てるhostを選択し、
ウィザードに従いサービスの追加を完了させます。
※既存のSparkとは別に、Spark2のロールを割り当てる必要があります。
おめでとうございます!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を駆使して生産性・開発効率を上げていきましょう。