Apache Spark を使用した MapReduce
この記事では、Scala プログラミング言語の助けを借りて、Apache Spark を使用して MapReduce
ジョブを実行する方法を学びます。
MapReduce
の概要
MapReduce は Hadoop のプログラミング パラダイムであり、大量のデータを並列処理するように設計されています。 この処理または作業全体は、タスクとも呼ばれる小さなチャンクに分割することによって行われます。
これは master-slave
アーキテクチャに従っているため、master
ノードがタスクを割り当て、slave
ノードがより小さなジョブ (タスク) を実行します。 これらのスレーブ
(サーバーのクラスター) は、個々の出力を処理して提供します。
MapReduce には、mapper と reducer という 2つのコンポーネントがあります。 最初のフェーズでは、データがマッパーに供給され、受信データがキーと値のペアに変換されます。
マッパーによって生成される出力は、多くの場合、中間出力と呼ばれます。 マッパーのこの出力は、レデューサーへの入力として与えられます。レデューサーは、キーに基づいて集計ソート タイプの計算を行い、最終的な出力であるキーと値の最終的なペアを提供します。
MapReduce
を Apache Spark
で実行
MapReduce
は Hadoop
システムの重要な部分ですが、Spark
を使用して実行することもできます。 よく知られている MapReduce
プログラムを見てみましょう。これは、単語カウント コードをよりよく理解するための例として使用します。
したがって、問題のステートメントは、テキスト ファイルが与えられた場合、その中の各単語の頻度を数えなければならないということです。
前提条件:
以下のプログラムを実行するには、これらをシステムにインストールする必要があります。
- JDK8
- スカラ
- ハドゥープ
- スパーク
ファイルを HDFS ファイル システムに置き、spark
シェルを起動する必要があります。
コード例: 以下のコードは Spark
シェルで実行されました。
val ourData = sc.textFile("myFile.txt");
ourData.collect;
val splitLines = ourData.flatMap(line => line.split(" "));
splitLines.collect;
val mapperData = splitLines.map(word => (word,1));
mapperData.collect;
val reducerData = mapperData.reduceByKey(_+_)
reducerData.collect
上記のコードが実行されると、myfile.txt
に存在する各単語の頻度が表示されます。