序章
Apache Accumuloは、GoogleのBigTableに基づくオープンソースの分散型NoSQLデータベースです。 これは、非常に大きなデータセット(ビッグデータと呼ばれることが多い)に対してCRUD(Create Read Update Delete)操作を効率的に実行するために使用されます。 プロジェクトがセルレベルのアクセス制御の形できめ細かいセキュリティを必要とする場合、Accumuloは他の同様の分散データベース(HBaseやCouchDBなど)よりも優先されます。
Accumuloは、他のApacheソフトウェアの上に構築されています。 Accumuloは、データをキーと値のペアの形式で表し、そのデータをファイルとしてHDFS(ApacheのHadoop分散ファイルシステム)に保存します。 また、Apache ZooKeeperを使用して、すべてのプロセス間で設定を同期します。
このチュートリアルでは、次の方法を学習します。
- Apache HDFSとZooKeeperのインストールと構成:Accumuloを起動する前に、これらのシステムをアクティブにする必要があります
- Accumuloのスタンドアロンインスタンスをインストールして構成します
前提条件
次のものが必要になります。
ステップ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
このファイルに次のプロパティを追加する必要があります。
-
dfs.replication
:この数値は、ブロックがHadoopによって複製される回数を指定します。 デフォルトでは、Hadoopはブロックごとに3
レプリカを作成します。 このチュートリアルでは、クラスターを作成していないため、値1
を使用します。 -
dfs.name.dir
:これは、namenodeが名前テーブルを格納できるファイルシステム内の場所を指します。 Hadoopはデフォルトで/tmp
を使用するため、これを変更する必要があります。hdfs_storage/name
を使用して名前テーブルを保存しましょう。 -
dfs.data.dir
:これは、データノードがブロックを格納する必要があるファイルシステム内の場所を指します。 Hadoopはデフォルトで/tmp
を使用するため、これを変更する必要があります。hdfs_storage/data
を使用してデータブロックを保存しましょう。
コメントを無視すると、これらのプロパティを追加すると、ファイルは次のようになります。
<?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つのプロセスが含まれている必要があります。
DataNode
NameNode
SecondaryNameNode
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.cfg
をzoo.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
このファイルに次の環境変数を追加します。
- HADOOP_HOME:Hadoopインストールへのパス
- ZOOKEEPER_HOME:ZooKeeperインストールへのパス
次の行をファイルに追加します。
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のユーザーマニュアルを参照してください。