前書き
Apache Accumuloは、Googleのhttp://research.google.com/archive/bigtable.html[BigTable]に基づいたオープンソースの分散NoSQLデータベースです。 非常に大きなデータセット(多くの場合、ビッグデータと呼ばれます)でCRUD(読み取り、更新、削除の作成)操作を効率的に実行するために使用されます。 プロジェクトがセルレベルのアクセス制御の形できめ細かいセキュリティを必要とする場合、Accumuloは他の同様の分散データベース(HBaseやCouchDBなど)よりも優先されます。
Accumuloは、他のApacheソフトウェアの上に構築されています。 Accumuloは、データをキーと値のペアの形式で表し、そのデータをファイルとしてHDFS(ApacheのHadoop分散ファイルシステム)に保存します。 また、Apache ZooKeeperを使用して、すべてのプロセス間で設定を同期します。
このチュートリアルでは、次の方法を学習します。
-
Apache HDFSとZooKeeperをインストールして構成します。これらのシステムは、Accumuloを開始する前にアクティブにする必要があります。
-
Accumuloのスタンドアロンインスタンスをインストールして構成する
前提条件
次のものが必要です。
-
Ubuntu 14.04サーバー(32ビットが望ましい)
-
sudoユーザー
-
少なくとも2 GBのhttps://www.digitalocean.com/community/tutorials/how-to-add-swap-on-ubuntu-14-04 [スワップスペース]
手順1-JDK 7のインストールと構成
Accumulo、HDFS、およびZooKeeperはすべてJavaで記述されており、実行するにはJVM(Java仮想マシン)が必要です。 それでは、JDKをインストールすることから始めましょう。
パッケージリストインデックスを更新します。
sudo apt-get update
`+ apt-get`を使用してOpenJDK 7をインストールします。
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-Apache Hadoopのダウンロード
執筆時点では、Hadoopの最新の安定バージョンは* 2.6.0 *です。 `+ wget +`を使用してダウンロードします。
wget "http://www.eu.apache.org/dist/hadoop/common/stable/"
ステップ6-Apache ZooKeeperのダウンロード
ZooKeeperの最新の安定バージョンは* 3.4.6 *です。 `+ wget +`を使用してダウンロードします。
wget "http://www.eu.apache.org/dist/zookeeper/stable/"
ステップ7-Apache Accumuloのダウンロード
Accumuloの最新の安定バージョンは* 1.6.1 *です。 `+ wget +`を使用してダウンロードします。
wget "http://www.eu.apache.org/dist/accumulo/1.6.1/"
手順8-インストールディレクトリの作成
Accumulo関連のすべてのインストールを保存するディレクトリを作成します。
mkdir -p ~/Installs
ディレクトリを入力します。
cd ~/Installs
ステップ9-Hadoopのインストールと構成
`+ hadoop-2.6.0-src.tar.gz `の内容を抽出するには、 ` tar +`コマンドを使用します。
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
+ <property> +`ブロック名 `+ fs.defaultFS`を追加します。 その値は、namenodeのホスト名とポートを指す必要があります(この例では、 `+ 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インターフェースを参照できます。
image:https://assets.digitalocean.com/articles/accumulo_nosqldatabase/1.png [Hadoop NameNode Webインターフェイス]
トラブルシューティング
Webインターフェイスにアクセスできない場合は、次のコマンドを使用してNameNodeがアクティブかどうかを確認します。
jps
出力には、次の3つのプロセスと `+ Jps +`プロセスが含まれている必要があります。
-
+ 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
`+ zookeeper-3.4.6.tar.gz `を抽出するには、 ` tar +`を使用します。
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、3 GBのさまざまなメモリサイズのサーバーのサンプル構成が付属しています。 このチュートリアルでは、512 MBの構成を使用します。 サーバーのメモリが多い場合は、別の構成を選択できます。
512 MBの設定ファイルを `+ conf +`ディレクトリにコピーします。
cp ~/Installs/accumulo-1.6.1/conf/examples/512MB/standalone/* ~/Installs/accumulo-1.6.1/conf/
+ .bashrc`ファイルを使用して、シェル環境を再度編集するには、
+ nano`を使用します。
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
`+ accumulo-env.sh `を編集するには、 ` nano +`を使用します。
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 `を検索し、その値を変更します。 この文字列「+」を使用します。 プロパティのXMLは次のようになります。
<property>
<name>instance.secret</name>
<value></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 」を見つけ、その値を安全な値に設定します。 次のステップで必要になるため、この値を覚えておいてください。 これを「+」に設定します。
<property>
<name>trace.token.property.password</name>
<value></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
特定のシステムパラメータのより高い値を推奨するいくつかの警告が表示される場合があります。 このチュートリアルでは非常に小さなインスタンスを作成しているため、これらの警告は無視できます。
起動が完了したら、ブラウザを使用してAccumuloのウェブインターフェース「+ http:// <your-server-ip>:50095+」にアクセスできます。
image:https://assets.digitalocean.com/articles/accumulo_nosqldatabase/2.png [Accumulo Web Interface]
結論
このチュートリアルでは、Apache Accumuloとそれが依存する他のすべてのコンポーネントのセットアップ方法を学びました。 今日、単一の小さなサーバー上で実行できる疑似分散モードのHDFSを使用して、非常に簡単なセットアップを作成しました。 運用シナリオで最適なパフォーマンスを得るには、HDFSを完全分散モードで実行する必要があります。
実稼働シナリオでは、各プロセスが2GBを超えるメモリと個別のコアを使用できるように、これらのプロセスを少なくとも8GBのRAMと4つ以上のプロセッサコアを備えたサーバーに展開することを強くお勧めします。 または、コンポーネントを異なるサーバーに個別に展開することもできます。
詳細については、Apache Accumuloのhttp://accumulo.apache.org/index.html [ユーザーマニュアル]を参照してください。