Hadoop MapReduce用のGridDBコネクタの使い方

GridDB Hadoop MapReduce Connectorは、Hadoop MapReduceアプリケーションのソースコードを少し変更することで、GridDBをデータストレージエンジンとして使うことを可能にするものです。 このブログでは、GridDBのHadoop HDFS(Hadoop Distributed File System)コネクタをインストールして使用する方法をみていきます。

依存性のあるモジュールをインストールする

新しいCentOS 6.8のイメージから、まずはOracle JDK、Hadoop(Bigtop)、GridDBをインストールします。

Oracle JDK

Java SE Development Kit 8 DownloadsからLinux x64 JDK RPMをダウンロードし、RPMを使用してインストールします。

Bigtop

curl http://www.apache.org/dist/bigtop/bigtop-1.1.0/repos/centos6/bigtop.repo > /etc/yum.repos.d/bigtop.repo
yum -y install hadoop-\*

/etc/hostsにあなたのマシンのホスト名のエントリがあることを確認します。

10.2.0.4 griddbhadoopblog

テストにAzure VMを使用しているので、ローカルSSDをHadoopのデータディレクトリとしてマウントする必要があります。

# mkdir /mnt/resource/hadoop-hdfs
# chown -R hdfs.hdfs /mnt/resource/hadoop-hdfs
# mount -o bind /mnt/resource/hadoop-hdfs/ /var/lib/hadoop-hdfs/

これで、namenodeをフォーマットし、Hadoop HDFSサービスを開始することができるようになります。

# sudo -u hdfs hadoop namenode -format
# service hadoop-hdfs-namenode start
# service hadoop-hdfs-datanode start

次に、必要なHDFSディレクトリをすべて作成します(How to install Hadoop distribution from Bigtop 0.5.0を参照)。

sudo -u hdfs hadoop fs -mkdir /tmp
sudo -u hdfs hadoop fs -chmod -R 1777 /tmp
sudo -u hdfs hadoop fs -mkdir -p /var/log/hadoop-yarn
sudo -u hdfs hadoop fs -chown yarn:mapred /var/log/hadoop-yarn
sudo -u hdfs hadoop fs -mkdir -p /user/history
sudo -u hdfs hadoop fs -chown mapred:mapred /user/history
sudo -u hdfs hadoop fs -chmod 770 /user/history
sudo -u hdfs hadoop fs -mkdir -p /tmp/hadoop-yarn/staging
sudo -u hdfs hadoop fs -chmod -R 1777 /tmp/hadoop-yarn/staging
sudo -u hdfs hadoop fs -mkdir -p /tmp/hadoop-yarn/staging/history/done_intermediate
sudo -u hdfs hadoop fs -chmod -R 1777 /tmp/hadoop-yarn/staging/history/done_intermediate
sudo -u hdfs hadoop fs -chown -R mapred:mapred /tmp/hadoop-yarn/staging

HDFSにアクセスするシステムユーザごとに、HDFSホームディレクトリを作成します。

sudo -u hdfs hadoop fs -mkdir -p /user/$USER
sudo -u hdfs hadoop fs -chown $USER:$USER /user/$USER
sudo -u hdfs hadoop fs -chmod 770 /user/$USER

これで、YARNを開始してクラスターをテストできるようになりました。

# service hadoop-yarn-resourcemanager start
# service hadoop-yarn-nodemanager start

例えば、HadoopテストでJavaのドキュメントの単語数を調べる場合以下のようになります。

$ hdfs dfs -put /usr/share/doc/java-1.6.0-openjdk-1.6.0.40/
$ time yarn jar /usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar wordcount java-1.6.0-openjdk-1.6.0.40 wordcount-out
$ hdfs dfs -get wordcount-out

GridDB

GridDBは、「GridDB Community Edition RPMインストールガイド」の指示に従ってインストールします。 GridDB SEまたはAEを使用している場合は、詳細が多少異なる場合があります。 詳細は、「GridDB SE/AEクイックスタートガイド」を参照してください。

# rpm -Uvh https://github.com/griddb/griddb_nosql/releases/download/v3.0.0/griddb_nosql-3.0.0-1.linux.x86_64.rpm

プロファイルスクリプトを使用してGrid DB環境変数を設定します。rootとして/etc/profile.d/griddb nosql.shを作成します。

#!/bin/bash
export GS_HOME=/var/lib/gridstore
export GS_LOG=$GS_HOME/log

ログアウトしてから戻って、設定が適用されます。
adminのGridDBパスワードを作成します。

# sudo su - gsadm -c "gs_passwd admin"
 (input your_password)

gs_cluster.jsonとgs_node.jsonのデフォルトの設定ファイルは、gs_cluster.jsonでクラスタの名前を入力する必要がある点を除けば、単一ノードの使用に適しています。
Hadoopと同様、Azureを使用しているので、ローカルSSDをGridDBのデータディレクトリとしてマウントする必要があります。

mkdir -p /mnt/resource/griddb_data
chown -R gsadm.gridstore /mnt/resource/griddb_data
mount -o bind /mnt/resource/griddb_data /var/lib/gridstore/data

次に、クラスタを起動し、ノードがgs_statでACTIVEであることを確認します。

sudo su - gsadm -c gs_startnode
sudo su - gsadm -c "gs_joincluster -c defaultCluster -u admin/admin -n 1"
sudo su - gsadm -c "gs_stat -u admin/admin"

Maven

ConnectorをビルドするにはMavenが必要で、CentOS / RHEL 6.8上で入手するには、ApacheのWebサイトからバイナリをダウンロードするのが最も簡単な方法です。

wget http://apache.mirror.iweb.ca/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz
tar zxvf apache-maven-3.3.9-bin.tar.gz
export PATH=$PATH:/path/to/apache-maven-3.3.9/bin

初期ビルドにのみ必要なので、プロファイルスクリプトを作成する必要はなく、手動でパスを設定すればよいでしょう。

GridDB Hadoop Connectorのダウンロードとビルド

gitを使用してGitHubリポジトリを複製するには、次のいずれかを使用します。

$ git clone https://github.com/griddb/griddb_hadoop_mapreduce.git

または、ZIPファイルをダウンロードして解凍します。

$ wget https://github.com/griddb/griddb_hadoop_mapreduce/archive/master.zip
$ unzip master.zip

次にConnectorをビルドします。

$ cd griddb_hadoop_mapreduce-master
$ cp /usr/share/java/gridstore.jar lib
$ mvn package

コネクタの使用

1つの例(ワードカウント)がGridDBコネクタに付属しています。 次のコマンドで実行することができます。

$ cd gs-hadoop-mapreduce-examples/
$ ./exec-example.sh --job wordcount \
    --define clusterName=$CLUSTER_NAME \
    --define user=$GRIDDB_USER \
    --define password=$GRIDDB_PASSWORD \
    <list of files to count>

パフォーマンスはどの程度向上したでしょうか? 上記の例では、HDFSがジョブを完了するのに36秒かかるのに対し、GridDBは35秒で完了することができました。 今回のテストは規模が小さかったため結果の数値の差も大きくありませんでしたが、今後のブログ記事では多様な構成でより適切なパフォーマンス比較を行う予定です。 次回は、既存のMapReduceアプリケーションをGridDB Hadoop Connectorを使用するために移植する方法を紹介します。

ブログの内容について疑問や質問がある場合は Q&A サイトである Stack Overflow に質問を投稿しましょう。 GridDB 開発者やエンジニアから速やかな回答が得られるようにするためにも "griddb" タグをつけることをお忘れなく。 https://stackoverflow.com/questions/ask?tags=griddb

Leave a Reply

Your email address will not be published. Required fields are marked *