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