これは、Hadoop MapReduceとGoogle DataProcを使用してWebページから抽出された大規模なドキュメントのセットで発生する単語の反転インデックスを作成するためのJavaプログラムです。
データセットとして、ここで入手可能なStanford Webbaseプロジェクトから派生した合計408ファイル(HTMLタグから抽出されたテキスト)の74ファイルのサブセットを使用しています。 2007年2月に行われたWebクロールから入手しました。これは、50,000を超えるWebサイトから合計1億を超えるWebページを使用している最大のコレクションの1つです。このバージョンはすでにクリーニングされています。
このプロジェクトでは、最初にローカル(スタンドアロン)モードを使用してサンプルHadoopクラスターを設定し、実際のデータセットでGoogle DataProcで完全に分散したモードで実際のプロジェクトを実装します。
Hadoopのサポートされている開発および生産プラットフォームであるため、GNU/Linuxでプロジェクトをセットアップする必要があります。 Hadoop Distributionを取得するには、Apacheダウンロードミラーの1つから最近の安定したリリースをダウンロードします。このプロジェクトはhadoop-3.1.1を使用して展開およびテストされたことに注意してください。ダウンロードしたHadoopディストリビューションを開梱します。配布フォルダーで、ファイルetc/hadoop/hadoop-env.sh環境変数パラメーターを次のように定義してください。
# add these line to the hadoop-env.sh or set them in terminal
export JAVA_HOME=/usr/java/latest
export PATH= ${JAVA_HOME} /bin: ${PATH}
export HADOOP_CLASSPATH= ${JAVA_HOME} /lib/tools.jar次に、次のコマンドを試してください。
$ bin/hadoopこれにより、Hadoopスクリプトの使用文書が表示されるはずです。これで、スタンドアロンモードでHadoopクラスターを起動する準備ができました。
この単純なHadoopジョブは、マッパーの引数として「入力」フォルダーから2つのテキストファイルを取得します。
# file01
5722018411 Hello World Bye World # file02
6722018415 Hello Hadoop Goodbye Hadoopそして、Hadoopジョブを送信して削減ステップを適用することにより、以下のように逆インデックスを生成します。
bye 5722018411:1
goodbye 6722018415:1
hadoop 6722018415:2
hello 5722018411:1 6722018415:1
world 5722018411:2 Hadoopジョブを送信するには、MadReduceの実装をjarファイルとしてパッケージ化する必要があります。そのために、このプロジェクトのInvertedIndex.javaファイルをHadoopの分布ルートフォルダーにコピーし、まだそこにいる間に次のコマンドを実行して、 InvertedIndex.javaをコンパイルしてjarファイルを作成します。
$ bin/hadoop com.sun.tools.javac.Main InvertedIndex.java
$ jar cf invertedindex.jar InvertedIndex * .classこのプロジェクトのinput/file01とinput/file02をコピーし、Hadoop Distrubutionフォルダーのinputフォルダー内に配置します。まだそこにいる間に、次のコマンドを実行してジョブを送信し、 inputフォルダーから入力ファイルを取得し、逆インデックスを生成し、 outputフォルダーに出力を保存します。
$ bin/hadoop jar invertedindex.jar InvertedIndex input outputそして最後に出力を見るには、以下のコマンドを実行します。
$ bin/hadoop dfs -cat output/part-r-00000このセクションでは、Google DataProcで3つのワーカーノードを備えたクラスターを作成し、実際のデータセットでinvertedindex.jarジョブを実行します。
まず、Google Cloudプラットフォームでアカウントが必要です。まだ持っていない場合は、300ドルの無料クレジットでトライアルにサインアップできます。
Googleクラウドコンソールでは、新しいプロジェクトを作成するか、既存のプロジェクトを選択します。この演習では、DataProcを使用します。 DataProcを使用して、Hadoopを実行しているコンピューティングインスタンスのクラスターをすばやく作成できます。 DataProcに代わるものは、各コンピューティングノードを個別にセットアップし、Hadoopにインストールし、HDFSをセットアップし、マスターノードをセットアップすることです。DataProcは、この厳しいプロセスを自動化します。
Google Cloud Consolでは、左側のナビゲーションリストからDataProcを選択します。 DataProcを使用しているのが初めての場合は、最初にDataProc APIを有効にする必要がある場合があります。 [クラスターの作成]をクリックすると、クラスター構成セクションになります。クラスターに一意の名前を指定し、目的のゾーンを選択します。マスターと3つのワーカーノードを作成する必要があります。マスターと各メンバーのデフォルト構成プロセッサ(N1スタンダード-4 4VCPU 15 GBメモリ)を選択し、ストレージを32 GB HDDストレージに削減します。ワーカーノードの数を3に変更します。他のすべてをデフォルトのままにして、「作成」をクリックします。
クラスターがセットアップされたので、ジョブを実行できるようになる前に、クラスターを構成する必要があります。コンソールのクラウドデータプロックセクションの下にあるクラスターのリストから作成したクラスターを選択します。 [VMインスタンス]タブに移動し、マスターロールを使用してインスタンスの横にあるSSHボタンをクリックします。
SSHボタンをクリックすると、Xtermや端末などのコマンドラインインターフェイス(CLI)に移動します。次の手順のすべてのコマンドは、CLIに入力されます。現在のユーザーのためのHDFSにホームディレクトリはありません。さらに進める前にこれを設定する必要があります。 (ユーザー名を見つけるには、 whoamiを実行します)
$ hadoop fs -mkdir -p /user/ < your username here > JAVA_HOMEすでにセットアップされており、再度セットアップする必要はありません。
新しいSSH端末を開くたびに、この手順を実行する必要があることに注意してください。このステップを削除するために、これをetc/hadoop/hadoop-env.shでJAVA_HOME 、 PATH 、 HADOOP_CLASSPATHにセットアップすることもできます。
$ export PATH= ${JAVA_HOME} /bin: ${PATH}
$ export HADOOP_CLASSPATH= ${JAVA_HOME} /lib/tools.jar今実行:
$ hadoop fs -lsエラーがない場合、これはクラスターが正常にセットアップされたことを意味します。エラーが発生した場合、環境変数が欠落しているか、ユーザーホームディレクトリが正しく設定されていないため、おそらくそうです。
環境変数が設定されていることを確認するには、コマンドenvを実行します。
注:クラスターを使用していない場合は、クラスターの請求を無効にしてください。実行しておくと、追加のクレジットがかかります。
このリンクからデータセットをダウンロードして、コンテンツを解凍します。 「開発」と「完全なデータ」という名前の2つのフォルダーがあります。 「開発」データは、開発とテストの目的で使用できます。
左ナビゲーションメニューの「DataProc」をクリックします。次に、クラスター用のデフォルトのGoogleクラウドストレージステージングバケットのアドレスを見つけます。
左ナビゲーションバーのストレージセクションに移動し、バケットのリストからクラスターのデフォルトバケットを選択します。 Upload Folderボタンをクリックし、 devdataとfulldataフォルダーを個別にアップロードします。
これで、実際のデータでMapReduceの実装を実行するためにHadoopジョブを提出する準備ができました。 SSHまたはnano / viコマンドを使用して、マスタークラスターにInvertedIndex.javaコピーまたは作成します。
次のコマンドを実行して、 jarファイルを作成します。
$ hadoop com.sun.tools.javac.Main InvertedIndex.java
$ jar cf invertedindex.jar InvertedIndex * .classこれで、仕事のための瓶ファイルができました。このJARファイルをクラスターのデフォルトのクラウドバケットに配置する必要があります。バケツにJARというフォルダーを作成し、そのフォルダーにアップロードするだけです。クラスターのマスターノード自体でJARファイルを作成した場合、次のコマンドを使用してJARフォルダーにコピーします。
$ hadoop fs -copyFromLocal ./invertedindex.jar
$ hadoop fs -cp ./invertedindex.jar gs://dataproc-69070.../JAR gs://dataproc-69070...パーツはクラスターのデフォルトのバケットです。 GS://がHadoop環境にバケツであり、ファイルシステム上の通常の場所ではないことを伝えるために準備する必要があります。
DataProcページの左ナビゲーションバーの「ジョブ」セクションに移動し、[ジョブの送信]をクリックします。次のように、ジョブパラメーターを入力します。
gs:///dataproc-69070.../JAR/invertedindex.jar 。gs:///dataproc-69070.../fulldata 。gs:///dataproc-69070.../fulloutput 。フォルダーは実行中に作成されます。既存のフォルダーの名前を指定すると、エラーが発生します。今、ジョブを提出します。実行中にログを見ることができます。
注: Java.lang.Interrupted Exceptionに遭遇した場合、安全に無視できます。あなたの仕事はまだ実行されます。
出力ファイルは、バケットの出力フォルダーに保存されます。このフォルダーを開くと、倒立インデックスがいくつかのセグメントにあることがわかります。ファイルをマージし、最終的なテキスト出力を作成するには、次のコマンドを実行します。
$ hadoop fs -getmerge gs://dataproc-69070.../fulloutput ./output.txt
$ hadoop fs -copyFromLocal ./output.txt
$ hadoop fs -cp ./output.txt gs://dataproc-69070.../output.txtこれで、データセット全体の反転インデックスを正常に作成しました。 grepを使用して、任意の単語のインデックスエントリを表示できます。
$ grep -w ' ^peace ' output.txt再コンパイルして新しいジョブを再度送信する場合は、以下のコマンドを使用して.jar 、 .class 、 .javaおよびhadoopファイルを削除できます。
$ hadoop fs -rm ./wordcount.jar ./output.txt WordCount * .class
$ hadoop fs -rm gs://dataproc-69070.../JAR/wordcount.jar ; gs://dataproc-69070.../output.txt
$ hadoop fs -rm gs://dataproc-69070.../fulloutput/ *
$ hadoop fs -rmdir gs://dataproc-69070.../fulloutput
この作業は、Creative Commons Attribution 4.0 Internationalライセンスの下でライセンスされています。