毎日生成されるデジタルデータの量は、デジタルメディア、モノのインターネットなどの開発の出現により、指数関数的に増加しています。このシナリオでは、これらのデータを保存および操作するための次世代のツールとテクノロジーを作成する際に課題が生じています。これがHadoopストリーミングの出番です!以下に示すのは、2013年から世界で毎年生成されるデータの増加を示すグラフです。IDCは、毎年作成されるデータの量が2025年に180ゼッタバイトに達すると予測しています。
出典:IDC
IBMは、毎日、ほぼ2.5兆バイトのデータが作成されており、世界のデータの90%が過去2年間に作成されていると述べています。このような膨大な量のデータを保存することは困難な作業です。 Hadoopは、従来のエンタープライズデータウェアハウスよりも効率的に大量の構造化データと非構造化データを処理できます。これらの膨大なデータセットは、コンピューターの分散クラスター全体に保存されます。 Hadoop Streamingは、膨大な量のデータを処理するアプリケーションを作成するために使用できるMapReduceフレームワークを使用します。
MapReduceフレームワークはJavaに基づいているため、開発者がJavaの経験がない場合、どのように作業できるのか疑問に思われるかもしれません。さて、開発者は、Javaの知識があまりなくても、好みの言語を使用してマッパー/リデューサーアプリケーションを作成できます。 Hadoopストリーミング PigやHiveのような新しいツールやテクノロジーに切り替えるのではなく。
Hadoopストリーミングとは何ですか?
Hadoopストリーミングは、Hadoopディストリビューションに付属するユーティリティです。ビッグデータ分析用のプログラムを実行するために使用できます。 Hadoopストリーミングは、Python、Java、PHP、Scala、Perl、UNIXなどの言語を使用して実行できます。このユーティリティを使用すると、実行可能ファイルまたはスクリプトをマッパーおよび/またはレデューサーとして使用して、Map / Reduceジョブを作成および実行できます。例えば:
$ HADOOP_HOME / bin / hadoop jar $ HADOOP_HOME / hadoop-streaming.jar
-入力myInputDirs
-myOutputDirを出力します
-フォルダ/ビン/猫
-レデューサー/ bin / wc
パラメータ説明:
PythonMapReduceコード:
mapper.py#!/ usr / bin / python import sys #Word Count例#入力はsys.stdinの行の標準入力STDINから取得されます:line = line.strip()#先頭と末尾の空白を削除words = line.split( )#行を単語に分割し、単語内の単語のリストとして返します。#結果を標準出力に書き込みますSTDOUT print '%s%s'%(word、1)#単語を出力します
Javaで辞書を作る方法
reducer.py
#!/ usr / bin / python import sys from operator import itemgetter#辞書を使用して単語をカウントにマッピングcurrent_word = None current_count = 0 word = None#入力はsys.stdinの行のSTDINから取得されます:line = line.strip ()word、count = line.split( ''、1)try:count = int(count)except ValueError:continue if current_word == word:current_count + = count else:if current_word:print '%s%s'% (current_word、current_count)current_count = count current_word = word if current_word == word:print '%s%s'%(current_word、current_count)
実行:
- 次の内容のファイルを作成し、word.txtという名前を付けます。
猫マウスライオン鹿タイガーライオン象ライオン鹿
- mapper.pyスクリプトとreducer.pyスクリプトを、上記のファイルが存在する同じフォルダーにコピーします。
- ターミナルを開き、ファイルのディレクトリを見つけます。Command:ls:ディレクトリ内のすべてのファイルを一覧表示しますcd:ディレクトリ/フォルダを変更します
- ファイルの内容を参照してください。
コマンド:猫 ファイル名
> mapper.pyのコンテンツ
コマンド:cat mapper.py
> reducer.pyの内容
コマンド:猫 reducer.py
ローカルファイル(例:word.txt)でマッパーとリデューサーを実行できます。マップを実行してHadoop分散ファイルシステム(HDFS)でリデュースするには、 Hadoopストリーミングjar。 したがって、HDFSでスクリプトを実行する前に、スクリプトをローカルで実行して、正常に機能していることを確認しましょう。
>マッパーを実行します
コマンド: 猫word.txt | python mapper.py
> reducer.pyを実行します
コマンド: 猫word.txt | python mapper.py |並べ替え-k1,1 | python reducer.py
マッパーとレデューサーが期待どおりに機能していることがわかります。これ以上の問題は発生しません。
の実行 Hadoop上のPythonコード
HadoopでMapReduceタスクを実行する前に、ローカルデータ(word.txt)をHDFSにコピーします
>例: hdfs dfs -put source_directory hadoop_destination_directory
コマンド: hdfs dfs -put /home/edureka/MapReduce/word.txt / user / edureka
jarファイルのパスをコピーします
jarのバージョンに基づくHadoopストリーミングjarのパスは次のとおりです。
/usr/lib/hadoop-2.2.X/share/hadoop/tools/lib/hadoop-streaming-2.2.X.jar
そのため、ターミナルでHadoopストリーミングjarを見つけて、パスをコピーします。
コマンド:
ls /usr/lib/hadoop-2.2.0/share/hadoop/tools/lib/hadoop-streaming-2.2.0.jar
MapReduceジョブを実行します
コマンド:
hadoop jar /usr/lib/hadoop-2.2.0/share/hadoop/tools/lib/hadoop-streaming-2.2.0.jar -file /home/edureka/mapper.py -mapper mapper.py -file / home / edureka / reducer.py -reducer reducer.py -input / user / edureka / word -output / user / edureka / Wordcount
Hadoopは、統計と情報のための基本的なWebインターフェースを提供します。 Hadoopクラスターが実行されている場合は、ブラウザーでhttp:// localhost:50070を開きます。これは、HadoopWebインターフェースのスクリーンショットです。
次に、ファイルシステムを参照し、生成されたワードカウントファイルを見つけて出力を確認します。以下はスクリーンショットです。
このコマンドを使用して、端末で出力を確認できます
コマンド: hadoop fs -cat / user / edureka / Wordcount / part-00000
これで、Hadoopストリーミングを使用してPythonで記述されたMapReduceプログラムを実行する方法を学びました。
Edurekaには、業界の実務家によって共同作成された、ビッグデータとHadoopに関するライブのインストラクター主導のコースがあります。
質問がありますか?コメント欄にご記入ください。折り返しご連絡いたします。