Spark & Scala #1

分散並行処理Sparkについての学習を「分散平行処理」として少しずつ開始
ーーーーーーーーーーーーーーーーーーーーーーーーーーー
まずは、http://spark.apache.orgから、spark-2.3.1-bin-hadoop2.7.tgzをダウンロード。conf/log4j.propertiesのtemplateから、”log4j.rootCategory=WARN, console”として、WARNレベル以上のメッセージ制限を入れて、Spark-Shellを起動してみる。

なんだか、WARNといっぱい出現したが、無視して、はじめのScalaプログラムで、README.mdの行数カウンターを動かしてみる。

ここでは、linesというRDD(Resilient Distributed Datasets)耐障害性分散データセットが生成されて、それに対して色々な並行処理を行うことができるそうな。ついでに立ち上がったときに表示されるように、Spark context Web UI available at http://**.**.**.***:4040のSpark UIにアクセスすれば、タスクやクラスタに対する情報が見れる。

Sparkの中核となっている概念:
クラスタ上で複数の並列処理を起動するのがドライバプログラムであり、spark-shellそのものである。ドライバプログラムは、シェルを通じてscという変数で自動生成されるSparkContextオブジェクトを通じてSparkにアクセスする。

さきの例では、scにtextFile()を送って、テキストの行を表すRDDを生成した。ドライパプログラムは、エクゼキュータと呼ばれるノードの数を管理している。ここでは、ローカルマシンで単一の処理で行われたが、同じシェルをクラスタ接続することによって、データを並行分析できるそうな。先程のプログラムを少し修正して、”Python”という単語を含む最初の行の表示を行う。

ここでfilter()というような関数ベースの操作も、クラスタに渡って並行処理される。単一のドライバプログラムにコードを書けば、その一部が自動で複数のノード上で実行される。

難解!