開発者ドキュメント

Ubuntu14.04にビッグデータ対応のApacheAccumuloNoSQLデータベースをインストールする方法

序章

Apache Accumuloは、GoogleのBigTableに基づくオープンソースの分散型NoSQLデータベースです。 これは、非常に大きなデータセット(ビッグデータと呼ばれることが多い)に対してCRUD(Create Read Update Delete)操作を効率的に実行するために使用されます。 プロジェクトがセルレベルのアクセス制御の形できめ細かいセキュリティを必要とする場合、Accumuloは他の同様の分散データベース(HBaseやCouchDBなど)よりも優先されます。

Accumuloは、他のApacheソフトウェアの上に構築されています。 Accumuloは、データをキーと値のペアの形式で表し、そのデータをファイルとしてHDFS(ApacheのHadoop分散ファイルシステム)に保存します。 また、Apache ZooKeeperを使用して、すべてのプロセス間で設定を同期します。

このチュートリアルでは、次の方法を学習します。

前提条件

次のものが必要になります。

ステップ1—JDK7をインストールして構成する

Accumulo、HDFS、およびZooKeeperはすべてJavaで記述されており、実行するにはJVM(Java仮想マシン)が必要です。 それでは、JDKをインストールすることから始めましょう。

パッケージリストのインデックスを更新します。

sudo apt-get update

apt-getを使用してOpenJDK7をインストールします。

sudo apt-get install openjdk-7-jdk

nanoを使用して、シェル環境ファイル.bashrcを編集します。

nano ~/.bashrc

ファイルの最後に環境変数としてJAVA_HOMEを追加します。

export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-i386

JAVA_HOMEの値は、サーバーのアーキテクチャによって異なる場合があります。 たとえば、64ビットサーバーでは、値は/usr/lib/jvm/java-7-openjdk-amd64になります。 /usr/lib/jvm/ディレクトリの内容を一覧表示すると、正確なパスを確認できます。 パスがここに表示されているものと異なる場合は、ここや他の場所で適切な変更を加えてください。

ファイルを保存してnanoを終了します。 次のように入力して、現在のセッションの環境変数を更新します。

. ~/.bashrc

nanoを使用して、JVMのjava.security構成ファイルを編集します。

sudo nano $JAVA_HOME/jre/lib/security/java.security

パラメータsecurerandom.sourceを検索し、次のように行を変更します。

securerandom.source=file:/dev/./urandom

ファイルを保存してnanoを終了します。 この変更は、JVMの起動時間を短縮するために必要です。 この変更を行わないと、ほとんどの仮想サーバーで非常に長い起動時間が発生する可能性があります。

ステップ2—SSHをインストールします

Hadoopは、デーモンを管理するためにSSHとRsyncを必要とします。 次のコマンドを使用してそれらをインストールします。

sudo apt-get install ssh rsync

ステップ3—パスワードなしのSSH接続を有効にする

Hadoopは、パスワードの入力を求められることなく、SSH経由でサーバーに接続できる必要があります。

ssh-keygenを使用してRSAキーを生成します。

ssh-keygen -P ''

プロンプトが表示されたらENTERを押して、デフォルト値を選択します。

生成されたキーをauthorized_keysファイルに追加します。

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

localhostおよび0.0.0.0を既知のホストのリストに追加する必要があります。 これを行う最も簡単な方法は、sshコマンドを実行することです。

最初にlocalhostを追加しましょう。

ssh localhost

次のようなメッセージが表示されます。

The authenticity of host 'localhost (127.0.0.1)' can't be established.
ECDSA key fingerprint is bf:01:63:5b:91:aa:35:db:ee:f4:7e:2d:36:e7:de:42.
Are you sure you want to continue connecting (yes/no)?

yesと入力し、ENTERを押します。

ログインが完了したら、次のように入力して子SSHセッションを終了します。

exit

ここで0.0.0.0を追加しましょう。

ssh 0.0.0.0

yesと入力し、プロンプトが表示されたらENTERを押します。

もう一度、次のように入力して、子SSHセッションを終了します。

exit

これでSSHのセットアップが完了しました。

ステップ4—ダウンロードディレクトリを作成する

このチュートリアル用にいくつかのファイルをダウンロードします。 本当に必要というわけではありませんが、すべてのダウンロードを別のディレクトリに保存することをお勧めします。

mkdir -p ~/Downloads

ディレクトリを入力します。

cd ~/Downloads

ステップ5—ApacheHadoopをダウンロードする

執筆時点で、Hadoopの最新の安定バージョンは2.6.0です。 wgetを使用してダウンロードしてください。

wget "http://www.eu.apache.org/dist/hadoop/common/stable/hadoop-2.6.0.tar.gz"

ステップ6—ApacheZooKeeperをダウンロードする

ZooKeeperの最新の安定バージョンは3.4.6です。 wgetを使用してダウンロードしてください。

wget "http://www.eu.apache.org/dist/zookeeper/stable/zookeeper-3.4.6.tar.gz"

ステップ7—ApacheAccumuloをダウンロードする

Accumuloの最新の安定バージョンは1.6.1です。 wgetを使用してダウンロードしてください。

wget "http://www.eu.apache.org/dist/accumulo/1.6.1/accumulo-1.6.1-bin.tar.gz"

ステップ8—インストールディレクトリを作成する

Accumulo関連のすべてのインストールを保存するディレクトリを作成します。

mkdir -p ~/Installs

ディレクトリを入力します。

cd ~/Installs

ステップ9—Hadoopをインストールして構成する

tarコマンドを使用して、hadoop-2.6.0-src.tar.gzの内容を抽出します。

tar -xvzf ~/Downloads/hadoop-2.6.0.tar.gz

注:このソフトウェアのいずれかの異なるバージョンをインストールした場合は、ファイル名に適切なバージョンを使用してください。

nanoを使用してhadoop-env.shを開きます。

nano ~/Installs/hadoop-2.6.0/etc/hadoop/hadoop-env.sh

export JAVA_HOMEで始まる行を探して、次のように変更します。

export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-i386

この値が.bashrcで設定した値と同じであることを確認してください。

デフォルトでは、Hadoopは多くのデバッグログを生成します。 この動作を停止するには、export HADOOP_OPTSで始まる行を探して、次のように変更します。

export HADOOP_OPTS="$HADOOP_OPTS -XX:-PrintWarnings -Djava.net.preferIPv4Stack=true"

保存して終了。

nanoを使用してcore-site.xmlを開きます。

nano ~/Installs/hadoop-2.6.0/etc/hadoop/core-site.xml

fs.defaultFSという名前の<property>ブロックを追加します。 その値は、ネームノードのホスト名とポートを指している必要があります(この場合、localhostとデフォルトのポート9000です)。 コメントを無視して、次のようにファイルを編集します。

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9000</value>
    </property>
</configuration>

保存して終了。

nanoを使用してhdfs-site.xmlを開きます。

nano ~/Installs/hadoop-2.6.0/etc/hadoop/hdfs-site.xml

このファイルに次のプロパティを追加する必要があります。

コメントを無視すると、これらのプロパティを追加すると、ファイルは次のようになります。

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
    <property>
        <name>dfs.name.dir</name>
        <value>hdfs_storage/name</value>
    </property>
    <property>
        <name>dfs.data.dir</name>
        <value>hdfs_storage/data</value>
    </property>
</configuration>

nanoを使用して、mapred-site.xmlという名前の新しいファイルを作成します。

nano ~/Installs/hadoop-2.6.0/etc/hadoop/mapred-site.xml

このファイルにmapred.job.trackerという名前のプロパティを追加します。 このプロパティには、MapReduceジョブトラッカーが実行されるホスト名とポート番号が含まれます。 セットアップには、localhostとデフォルトのポート9001を使用します。

次のコンテンツをファイルに追加します。

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
     <property>
         <name>mapred.job.tracker</name>
         <value>localhost:9001</value>
     </property>
</configuration>

Hadoopのベースディレクトリを入力します(Hadoopは現在のディレクトリにhdfs_storageディレクトリを作成するため、これは重要です)。

cd ~/Installs/hadoop-2.6.0/

NameNodeは、次のように入力して初期化できるようになりました。

~/Installs/hadoop-2.6.0/bin/hdfs namenode -format

かなりの出力が表示されるはずです。

次に、次のように入力してNameNodeを起動します。

~/Installs/hadoop-2.6.0/sbin/start-dfs.sh

開始するまで1〜2分待ちます。 開始すると、ブラウザを使用してhttp://<your-ip>:50070/にアクセスし、NameNodeのWebインターフェイスを参照できます。

トラブルシューティング

Webインターフェイスにアクセスできない場合は、次のコマンドを使用してNameNodeがアクティブかどうかを確認します。

jps

出力には、Jpsプロセスとともに次の3つのプロセスが含まれている必要があります。

NameNodeが出力に表示されない場合は、次の手順を実行します。 それらがブロック内で実行されない場合は、別々に実行する必要がある場合があります。 コメントはインラインで含まれています。

cd ~/Installs/hadoop-2.6.0/
~/Installs/hadoop-2.6.0/sbin/stop-dfs.sh # Stop Hadoop's nodes
rm -rf hdfs_storage # Delete the namenode data
rm -rf /tmp/hadoop-* # Delete the temporary directories
~/Installs/hadoop-2.6.0/bin/hdfs namenode -format # Reformat the namenode

start-dfs.shを使用してHadoopを再起動します。

~/Installs/hadoop-2.6.0/sbin/start-dfs.sh

これで、Webインターフェイスにアクセスできるようになります。

ステップ10—ZooKeeperをインストールして構成する

Installsディレクトリに入ります。

cd ~/Installs

tarを使用してzookeeper-3.4.6.tar.gzを抽出します。

tar -xvzf ~/Downloads/zookeeper-3.4.6.tar.gz

サンプルファイルzoo_sample.cfgzoo.cfgにコピーします。

cp ~/Installs/zookeeper-3.4.6/conf/zoo_sample.cfg ~/Installs/zookeeper-3.4.6/conf/zoo.cfg

これで、ZooKeeperの構成が完了しました。 次のように入力してZooKeeperを起動します。

~/Installs/zookeeper-3.4.6/bin/zkServer.sh start

次のような出力が表示されます。

JMX enabled by default
Using config: ~/Installs/zookeeper-3.4.6/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

ステップ11—Accumuloをインストールして構成する

すべての依存関係が満たされたら、Accumulo自体のインストールに取り掛かります。

Installsディレクトリに入ります。

cd ~/Installs

tarを使用してaccumulo-1.6.1-bin.tar.gzを抽出します。

tar -xvzf ~/Downloads/accumulo-1.6.1-bin.tar.gz

Accumuloには、512 MB、1 GB、2 GB、および3GBのさまざまなメモリサイズのサーバーのサンプル構成が付属しています。 このチュートリアルでは、512MBの構成を使用します。 サーバーのメモリが多い場合は、別の構成を選択できます。

512MBの構成ファイルをconfディレクトリにコピーします。

cp ~/Installs/accumulo-1.6.1/conf/examples/512MB/standalone/* ~/Installs/accumulo-1.6.1/conf/

nanoを使用して、.bashrcファイルを使用して、シェル環境を再度編集します。

nano ~/.bashrc

このファイルに次の環境変数を追加します。

次の行をファイルに追加します。

export HADOOP_HOME=~/Installs/hadoop-2.6.0/
export ZOOKEEPER_HOME=~/Installs/zookeeper-3.4.6/

保存して終了。

.bashrcに追加した変数が現在のセッションで使用できるように、環境を更新します。

. ~/.bashrc

nanoを使用してaccumulo-env.shを編集します。

nano ~/Installs/accumulo-1.6.1/conf/accumulo-env.sh

デフォルトでは、AccumuloのHTTPモニターはローカルネットワークインターフェースにのみバインドします。 インターネット経由でアクセスできるようにするには、ACCUMULO_MONITOR_BIND_ALLの値をtrueに設定する必要があります。

export ACCUMULO_MONITOR_BIND_ALLで始まる行を見つけて、コメントを外します。 次のようになります。

export ACCUMULO_MONITOR_BIND_ALL="true"

保存して終了。

nanoを使用してaccumulo-site.xmlを編集します。

nano ~/Installs/accumulo-1.6.1/conf/accumulo-site.xml

Accumuloのワーカープロセスは、秘密鍵を使用して相互に通信します。 これは、安全な文字列に変更する必要があります。 プロパティinstance.secretを検索し、その値を変更します。 次の文字列を使用します:PASS1234。 プロパティのXMLは次のようになります。

<property>
    <name>instance.secret</name>
    <value>PASS1234</value>
    <description>A secret unique to a given instance that all servers must know in order to communicate with one another.
      Change it before initialization. To
      change it later use ./bin/accumulo org.apache.accumulo.server.util.ChangeSecret --old [oldpasswd] --new [newpasswd],
      and then update this file.
    </description>
</property>

次に、instance.volumesという名前の新しいプロパティを追加します。 このプロパティの値は、AccumuloがHDFSのどこにデータを保存するかを指定します。 ディレクトリ/accumuloにデータを保存しましょう。

<property>
    <name>instance.volumes</name>
    <value>hdfs://localhost:9000/accumulo</value>
</property>

プロパティtrace.token.property.passwordを見つけて、その値を安全なものに設定します。 次のステップで必要になるため、この値を覚えておいてください。 これをmypasswに設定します。

  <property>
    <name>trace.token.property.password</name>
    <value>mypassw</value>
  </property>

保存して終了。

Accumuloを初期化します。

~/Installs/accumulo-1.6.1/bin/accumulo init

インスタンス名を入力するように求められます。 任意の名前を使用してください。 DIGITAL_OCEANを選択します。

次に、パスワードの入力を求められます。 プロパティtrace.token.property.passwordに使用したものと同じパスワードを入力します。

コマンドが完了すると、Accumuloを起動できます。

~/Installs/accumulo-1.6.1/bin/start-all.sh

特定のシステムパラメータに高い値を推奨する警告がいくつか表示される場合があります。 このチュートリアルでは非常に小さなインスタンスを作成しているため、これらの警告は無視してかまいません。

起動が完了すると、ブラウザを使用してhttp://<your-server-ip>:50095にあるAccumuloのWebインターフェイスにアクセスできます。

結論

このチュートリアルでは、ApacheAccumuloとそれに依存する他のすべてのコンポーネントを設定する方法を学習しました。 今日、単一の小さなサーバーで実行できる疑似分散モードのHDFSを使用して、非常に単純なセットアップを作成しました。 本番シナリオで最適なパフォーマンスを得るには、HDFSを完全分散モードで実行する必要があります。

本番シナリオでは、これらのプロセスを少なくとも8GBのRAMと4つ以上のプロセッサコアを備えたサーバーにデプロイして、各プロセスが2GBを超えるメモリと個別のコアを使用できるようにすることも強くお勧めします。 または、コンポーネントを別々のサーバーに個別にデプロイすることもできます。

詳細については、ApacheAccumuloのユーザーマニュアルを参照してください。

モバイルバージョンを終了