以前GFS(Google File System)とMapReduceのオープンソース版であるHadoopを紹介しましたが、引き続きHadoop MapReduceプログラムの開発を行うため、HadoopとMaven2の準備を行います。
以下の手順では、JavaTM 1.5.x以上をインストールの上、環境変数 JAVA_HOME が適切に設定されているものとします。
また、Windowsを利用している場合はあらかじめCygwinをインストールしておいてください。
以下の手順では、JavaTM 1.5.x以上をインストールの上、環境変数 JAVA_HOME が適切に設定されているものとします。
また、Windowsを利用している場合はあらかじめCygwinをインストールしておいてください。
Hadoopインストール
開発用ということで、ローカルでMapReduceが試せる環境を作ります。ダウンロードページから最新のHadoopをダウンロードし、適当なディレクトリに展開します。
以下、展開したディレクトリを[HADOOP_HOME]と表記します。
2008/10/01時点での最新版は0.18.1です。
[HADOOP_HOME]$ bin/hadoop
として、Usageが表示されればインストール完了です。
付属しているサンプルプログラム
grep
を起動してみます。[HADOOP_HOME]$ mkdir input
[HADOOP_HOME]$ cp conf/*.xml input
[HADOOP_HOME]$ bin/hadoop jar hadoop-*-examples.jar grep input output 'dfs[a-z.]+'
[HADOOP_HOME]$ cat output/*
conf/hadoop-site.xml
Hadoopに関する設定をするには、hadoop-site.xmlファイルに追加設定をしていきます。例えばHadoopが利用する一時ファイルを格納するディレクトリの位置を変更したい場合には、
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/Users/${user.name}/hadoop/tmp</value>
<description>A base for other temporary directories.</description>
</property>
</configuration>
という感じで記述します。
分散環境を利用するための設定もこのファイルで行います。
(デフォルトではローカル環境で動作するようになっています。)
詳しい設定値についてはhadoop-default.htmlをご覧ください。
Maven2プロジェクト作成
HadoopライブラリはMaven2レポジトリにデプロイされていないので、Maven2プロジェクトから扱えるように、あらかじめローカル環境にインストール、もしくはレポジトリにデプロイしておきます。$ mvn install:install-file \ -DgroupId=org.apache.hadoop \ -DartifactId=hadoop-core \ -Dversion=0.18.1 \ -Dpackaging=jar \ -Dfile=[HADOOP_HOME]/hadoop-0.18.1-core.jar
プロジェクトの作成
hadoop-examplesプロジェクトを作成し、dependencyの設定をします。またMapReduceではJavaTM 1.5.x以上が必要ですので、コンパイラの設定も行います。
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>st.happy_camper.hadoop</groupId>
<artifactId>hadoop-examples</artifactId>
<packaging>jar</packaging>
<version>0.0.1-SNAPSHOT</version>
・・・・
<build>
<plugins>
<plugin>
<groupid>org.apache.maven.plugins</groupid>
<artifactid>maven-compiler-plugin</artifactid>
<configuration>
<source>1.6</source>
<target>1.6</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
・・・・
</build>
<dependencies>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-core</artifactId>
<version>0.18.1</version>
<scope>provided</scope>
</dependency>
・・・・
</dependencies>
・・・・
</project>
hadoop-coreは実行時にはHadoop実行環境が提供していますので、スコープを
provided
にしてあります。パッケージング
[HADOOP_HOME]/src/examplesにあるサンプルのうち、org/apache/hadoop/examples/WordCount.javaをプロジェクトにコピーし、コンパイル、実行してみます。なお、パッケージはgroupId/artifactIdに合わせて変更して、テスト用のデータをsrc/test/resourcesに置いています。
+ hadoop-examples + src + main + java + st + happy_camper + hadoop + examples - WordCount.java + test + resources + input - hadoop-default.xml - hadoop-site.xml - pom.xml
パッケージングします。
$ mvn clean package
実行
src/test/resourcesに配置した入力データを使ってHadoopを起動してみます。$ [HADOOP_HOME]/bin/hadoop jar target/hadoop-examples-0.0.1-SNAPSHOT.jar \ st.happy_camper.hadoop.examples.WordCount \ src/test/resources/input/ \ target/output $ cat target/output/*
これでMapReduceプログラムの開発を行うための準備ができました。
これからいろいろなサンプルを動かしたり、実験プログラムを作ったりしてHadoopへの理解を深めていきます。