Apache Spark 2.2環境の構築AWSのAmazon LinuxインスタンスにApache Spark 2.2環境を構築する。Amazon Linuxだけでなく、CentOS 7でも並行して確認しているので、そちらでも問題ないだろう。Apache Sparkによってビッグデータを高速に処理、分析することが可能となる。今回はバイナリでなくソースからApache Sparkをビルドして構築する。 インストールの準備Spark 2.2からはJava 8以上が必要となる。Amazon Linuxなら以下のコマンドでOpenJDK 8をインストールできるだろう。 # yum install java-1.8.0-openjdk-devel 元々OpenJDK 7がインストール済みでOpenJDK 8をインストールした場合、alternativesコマンドでJREの切り替えが必要となる。コマンドを実行して以下のような状況になっていれば、2を選択してJRE 8に切り替えることができる。 # alternatives --config java There are 2 programs which provide 'java'. Selection Command ----------------------------------------------- *+ 1 /usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/java 2 /usr/lib/jvm/jre-1.8.0-openjdk.x86_64/bin/java Enter to keep the current selection[+], or type selection number: 2 尚、Sparkをビルドするためには少なくともメモリ4GB程度は必要なようだ。従って、AWSのインスタンスタイプで言えば、t2.medium程度以上が必要になる。 今回、ソースからSparkをビルドしてインストールするため、ダウンロードするのは例えば"spark-2.2.1.tgz"のようなファイル名になる。これを書いている時点で最新のSpark 2.2.1をソースからビルドする。ダウンロードしたファイルを/usr/local等任意のディレクトリに置いてtarで展開する。 Download Apache Spark # tar zxvf spark-2.2.1.tgz Apache Sparkのインストール次にMavenの環境変数を設定し、mvnコマンドでSparkをビルドする。とりあえず、Hadoopは使わないので以下のコマンドでビルドすれば良いだろう。尚、Mavenは"spark-2.2.1.tgz"を展開した中に含まれているので別途インストールしなくても良い。 # export MAVEN_OPTS="-Xmx2g -XX:ReservedCodeCacheSize=512m" # cd spark-2.2.1 # ./build/mvn -DskipTests clean package 必要なファイルのダウンロード(なので、Sparkをビルドするサーバはインターネットに接続できる必要がある)等を行いながら、10分前後でSparkのビルドが完了した。以下のような表示が出ていればビルドは成功している。 [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 09:48 min [INFO] Finished at: 2018-01-03T20:26:13+09:00 [INFO] Final Memory: 84M/899M [INFO] ------------------------------------------------------------------------ Apache Sparkの動作確認Sparkのビルドに成功したらサンプルプログラムで動作確認をしてみよう。 $ ./bin/run-example SparkPi 10 上記のサンプルプログラムを実行すると、多量のログの中に以下のような結果が得られるはずだ。 Pi is roughly 3.1416151416151417 続いてSpark Shellも起動してみよう。 $ ./bin/spark-shell Welcome to ____ __ / __/__ ___ _____/ /__ _\ \/ _ \/ _ `/ __/ '_/ /___/ .__/\_,_/_/ /_/\_\ version 2.2.1 /_/ Using Scala version 2.11.8 (OpenJDK 64-Bit Server VM, Java 1.8.0_151) Type in expressions to have them evaluated. Type :help for more information. scala> Spark session(spark変数として予め用意されている)を使って"README.md"ファイルを読み込んでみる。spark.read.textFileメソッドでテキストファイルを読み込むことができる。 scala> val textFile = spark.read.textFile("README.md") textFile: org.apache.spark.sql.Dataset[String] = [value: string] textFileメソッドからはDataFrameが返されるので、countメソッドで読み込んだ"README.md"ファイルの行数(Rowの数)を数えてみる。 scala> textFile.count() res0: Long = 103 Scalaでアプリケーションを書くSparkのアプリケーションはScala、Java、及びPythonで書くことができる。ここではScalaでアプリケーションを書いて実行してみる。以下はSparkのサイトにあるサンプルをほとんどそのままコピーしたものだ。処理内容はSparkのインストールディレクトリの直下にある"README.md"を読み込んでaとbの文字数をそれぞれカウントするだけのものである。 import org.apache.spark.sql.SparkSession object SimpleApp { def main(args: Array[String]) { val logFile = "/usr/local/spark-2.2.1/README.md" val spark = SparkSession.builder.appName("Simple Application").getOrCreate() val logData = spark.read.textFile(logFile).cache() val numAs = logData.filter(line => line.contains("a")).count() val numBs = logData.filter(line => line.contains("b")).count() println(s"Lines with a: $numAs, Lines with b: $numBs") } } 上記を"SimpleApp.scala"としてsrc/main/scalaディレクトリに保存する。例えば、プロジェクトのディレクトリがSimpleAppならば、SimpleApp/src/main/scala/SimpleApp.scalaになる。 このアプリケーションを実行するためには、sbtでビルドしてjarにパッケージする必要がある。そのためにはプロジェクトディレクトリの直下に"build.sbt"を用意しなければならない。SimpleApp/build.sbtの内容は以下である。 name := "Simple Project" version := "1.0" scalaVersion := "2.11.8" libraryDependencies += "org.apache.spark" %% "spark-sql" % "2.2.0" sbtは以下のコマンドでインストールすることができる。 $ curl https://bintray.com/sbt/rpm/rpm | sudo tee /etc/yum.repos.d/bintray-sbt-rpm.repo $ sudo yum install sbt 結果として、このようなディレクトリ・ファイル構成になっていれば良い。 . |-- build.sbt `-- src `-- main `-- scala `-- SimpleApp.scala sbtと"build.sbt"を用意したらプロジェクトディレクトリで $ sbt package するとアプリケーションをビルドできる。アプリケーションのビルドが成功すると、プロジェクトディレクトリのtarget/scala-2.11ディレクトリの下に"simple-project_2.11-1.0.jar"が生成されるはずである。 アプリケーションの実行sbtでパッケージされたjarを実行するには、spark-submitコマンドを使用する。プロジェクトディレクトリの直下で以下のコマンドを入力すれば、アプリケーションを実行できる。 $ /usr/local/spark-2.2.1/bin/spark-submit --class "SimpleApp" --master local[*] target/scala-2.11/simple-project_2.11-1.0.jar アプリケーションの実行が成功すると、以下のような結果が得られる。 Lines with a: 61, Lines with b: 30 Spark SQLのアプリケーションについては以下にまとめた。
(2018/01/05)
Copyright© 2004-2022 モバイル開発系(K) All rights reserved.
[Home]
|