Hadoopストリーミング:PythonでHadoopMapReduceプログラムを作成する



Hadoopストリーミングに関するこのブログ投稿は、膨大な量のビッグデータを処理するためにPythonでHadoopMapReduceプログラムを作成する方法を学ぶためのステップバイステップガイドです。

毎日生成されるデジタルデータの量は、デジタルメディア、モノのインターネットなどの開発の出現により、指数関数的に増加しています。このシナリオでは、これらのデータを保存および操作するための次世代のツールとテクノロジーを作成する際に課題が生じています。これがHadoopストリーミングの出番です!以下に示すのは、2013年から世界で毎年生成されるデータの増加を示すグラフです。IDCは、毎年作成されるデータの量が2025年に180ゼッタバイトに達すると予測しています。

data-by-2025-hadoop-streaming





出典: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)

実行:

  1. 次の内容のファイルを作成し、word.txtという名前を付けます。

猫マウスライオン鹿タイガーライオン象ライオン鹿

  1. mapper.pyスクリプトとreducer.pyスクリプトを、上記のファイルが存在する同じフォルダーにコピーします。

  1. ターミナルを開き、ファイルのディレクトリを見つけます。Command:ls:ディレクトリ内のすべてのファイルを一覧表示しますcd:ディレクトリ/フォルダを変更します

  1. ファイルの内容を参照してください。
    コマンド:猫 ファイル名

> 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に関するライブのインストラクター主導のコースがあります。

質問がありますか?コメント欄にご記入ください。折り返しご連絡いたします。