シェアする

  • このエントリーをはてなブックマークに追加





【Hadoop】MapReduceを書いてみる

シェアする

  • このエントリーをはてなブックマークに追加
  • 0

前回はwindowsでHadoopのサンプルアプリ(wordcount)を

環境構築して動かしてみました。

今回は実際にMapReduceをプログラムしてみようと思います。

ここでは、おなじみの形態素解析を行い、文章の品詞を

カウントするという処理を作ってみたいと思います。

環境

実施環境としては、

・windows10

・Eclipse

・Maven

・java 1.8

・kuromoji 形態素解析エンジン

を使って行います。

また、対象の文章はこちらもおなじみ桃太郎の一節から。

という文章のテキストファイルを用いることとします。

Mavenプロジェクト作成

EclipseにてMavenプロジェクトを作成します。

また、pom.xmlにhadoop関連と、kuromojiの依存関係を追加します。

※ここでhadoop-coreのversionを0.20.2としているのは、

それ以降のversionでは、Eclipseでjavaアプリケーションを素で実行すると、

hadoop側のプログラムでjava.io.FileクラスのsetReadable()メソッドなど、

フォルダのパーミッションを変更する処理があるのですが、

こちらがjava側の仕様でWindowsでは動作しません

そのため、このパーミッション変更処理がないversionで動かす必要があり、

0.20.2としています。

MapReduceプログラム作成

プログラム全文を以下のように記述します。

全体構成

元となるクラス内で、内部クラスとして、Map用のクラス、Reducer用のクラスを

記述しています。

このあたりは、Hadoop Tutorialの構成を参考にしています。

Mapクラス解説

MapクラスはMapperを拡張して作成します。

MapもReduceも共にデータをkey、valueで格納することを想定しており、

Mapperジェネリクスの型はKEYIN、VALUEIN、KEYOUT、VALUEOUTとなります。

valueはWritableインターフェースを実装した型を期待しています。

writableはhadoop内でシリアライズ、デシリアライズを行うようにするための

ものであり、データ転送に適したものである必要があるということです。

Tokenizerがkuromojiの定義でありtokenizeメソッドで解析します。

また、このmapメソッドはテキストファイルの1行ごとに呼び出されます。

kuromojiは解析すると、以下のような内容がTokenクラスに格納されます。

品詞は4つ細分類され、それぞれの読みや発音などの情報が格納されます。

Surface form Part-of-Speech Base form Reading Pronunciation
名詞,代名詞,一般,* ワタシ
助詞,連体化,*,*
名前 名詞,一般,*,* 名前 ナマエ
助詞,係助詞,*,*
hoge 名詞,一般,*,* * ?
です 助動詞,*,*,* です デス
記号,句点,*,*

今回は細分類のうち、1番初めのものを使用しています。

その取得箇所がtoken.getPartOfSpeechLevel1()となります。

contextにwriteしている箇所は、

キーとなる品詞の数が1個存在するという形でため込んでいるということになります。

Reduce解説

ここで行っていることは、Mapでキーごとに1個と数えたものを

集計しています。

この処理で品詞ごとの数をカウントしています。

main解説

ここでは実際の処理の準備になります。

Jobクラスを生成し、

・実行クラス

・Mapperクラス

・Combinerクラス

・Reducerクラス

・OUTのキークラス

・OUTのvalueクラス

・入力ファイル読込先

・出力ファイル出力先

を定義しています。

job.waitForCompletionにて処理完了を待つということになります。

実行する

javaアプリケーションとして実行

mainメソッドを含んでいるので、当然にjavaアプリケーションとして

実行可能です。

実行の構成にて処理引数に入力パス、出力パスと指定すればOKです。

出力パスは存在するとエラーになるので注意が必要です。

Hadoopで実行

Hadoopで実行するためには、まずEclipse側で

maven packageしてjarを生成します。

そして、以下のコマンドを実行します。

結果

今回の入力結果では、以下のような結果になるかと思います。

まとめ

今回はHadoopのMapReduceを実際に作成してみました。

Hadoopで扱えるデータの型には色々な種類があるので、

興味のある方はそれらを使って、実際に手を動かしてみると

良いかと思います。

それでは!!

ブログランキング・にほんブログ村へ
にほんブログ村


人気ブログランキング

20代前半までは東京で音楽をやりながら両手の指以上の業種でアルバイト生活をしていましたが、某大手プロバイダのテレアポのバイトでPCの知識の無さに愕然とし、コンピュータをもっと知りたい!と思ったことをきっかけに25歳の時にITの世界に未経験で飛び込みました。
紆余曲折を経て、現在は個人事業主としてお仕事させていただいており、10年ほどになります。
web制作から企業システム構築、ツール開発など、フロントエンドもバックエンドもサーバーもDBAも依頼があれば何でもやってきた雑食系エンジニアです。

今風にいうとフルスタックエンジニアということになるのかしら??

→ 詳細プロフィールというか、生い立ちはこちら

→スキルシートをご覧になる場合はこちら

→お仕事のご依頼やお見積りなどお問い合わせはこちらから!

シェアする

  • このエントリーをはてなブックマークに追加

フォローはいかがですか?