Tag: Hadoop

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

    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を使用するために移植する方法を紹介します。