CLOVER🍀

That was when it all began.

Apache Hadoopをインストールする

順番は逆ですが、HBaseに続いてHadoopのインストールをやりたいと思います。Hadoop 2系とか、知らんですよー。

Apache Hadoop
http://hadoop.apache.org/

あくまで、現時点ではHBaseをHDFS上で動かしたいがためにHadoopをインストールしようとしているので、HadoopのバージョンはHBaseが依存しているものに合わせます。

先日インストールしたHBaseのバージョンは0.95.2で、こちらが依存しているHadoopのバージョンは2.0.5 alphaなので、このtar.gzをダウンロードしました。

では、Hadoopは「/usr/local/apache-hadoop」にインストールするものとして、以降進めていきます。

$ cd /usr/local/
$ sudo mkdir apache-hadoop
$ cd apache-hadoop/
$ sudo cp [Hadoopのダウンロードディレクトリ]/hadoop-2.0.5-alpha.tar.gz ./.
$ sudo tar -zxvf hadoop-2.0.5-alpha.tar.gz
$ sudo rm hadoop-2.0.5-alpha.tar.gz
$ sudo chown -R [Hadoopの起動ユーザ].[Hadoopの起動ユーザ] hadoop-2.0.5-alpha/
$ sudo ln -s hadoop-2.0.5-alpha current

各プロセスのユーザ分離とかは、今回は考えません。

で、以下のサイトを見ながら設定とかしたいのですが…

Setting up a Single Node Cluster
http://hadoop.apache.org/docs/r2.0.5-alpha/hadoop-project-dist/hadoop-common/SingleCluster.html

いかんせん、具体的な値があんまり載っていないのでよくわかりません。それに、環境変数の設定とか、ディレクトリの指示がなんかおかしいような?環境変数をどこのディレクトリに設定するかもなんか微妙…。

というわけで、こちらのサイトを参考にさせていただきました。

Hadoop2.0セットアップ
http://metasearch.sourceforge.jp/wiki/index.php?Hadoop2.0%A5%BB%A5%C3%A5%C8%A5%A2%A5%C3%A5%D7

環境変数HADOOP_PREFIXを.bashrcに設定。

export HADOOP_PREFIX=/usr/local/apache-hadoop/current
PATH=${HADOOP_PREFIX}/bin:${PATH}

環境変数についてはいろいろ書いていましたが、なんかこれだけでも大丈夫そう?あとはPATHも通しておきました。

再評価。

$ . .bashrc

hostsファイルで、ホスト名が127.0.0.1になっていないといけないらしいので、修正。
/etc/hosts

127.0.0.1	localhost
127.0.0.1	ubuntu

Ubuntuだと、127.0.1.1になってるんですよね…。

で、問題はここから。擬似分散環境を作りたいのですが、いろいろ設定が…。

設定ファイルを書く時は、本を見たりパラメータはクラスタのセットアップページを見たりしたのですが

Cluster Setup
http://hadoop.apache.org/docs/r2.0.5-alpha/hadoop-project-dist/hadoop-common/ClusterSetup.html

正直、何が正しいかわかんない(笑)。みなさん、よく設定されているなぁと…。

で、設定した結果から。

まずは、$HADOOP_PREFIX/etc/hadoop/core-site.xml

<configuration>
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://localhost</value>
  </property>
</configuration>

$HADOOP_PREFIX/etc/hadoop/hdfs-site.xml

<configuration>
  <property>
    <name>dfs.replication</name>
    <value>1</value>
  </property>
  <property>
    <name>hadoop.tmp.dir</name>
    <value>/usr/local/apache-hadoop/tmp</value>
  </property>
  <property>
    <name>dfs.namenode.name.dir</name>
    <value>/usr/local/apache-hadoop/dfs/name</value>
  </property>
  <property>
    <name>dfs.datanode.data.dir</name>
    <value>/usr/local/apache-hadoop/dfs/data</value>
  </property>
</configuration>

$HADOOP_PREFIX/etc/hadoop/mapred-site.xmlは存在しなかったので、

$ cp etc/hadoop/mapred-site.xml.template etc/hadoop/mapred-site.xml

とコピーして作成。中身はこんな感じ。

<configuration>
  <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
  </property>
  <property>
    <name>yarn.app.mapreduce.am.staging-dir</name>
    <value>/usr/local/apache-hadoop/yarn/staging</value>
  </property>
  <property>
    <name>mapreduce.jobhistory.intermediate-done-dir</name>
    <value>/usr/local/apache-hadoop/mr-history/tmp</value>
  </property>
  <property>
    <name>mapreduce.jobhistory.done-dir</name>
    <value>/usr/local/apache-hadoop/mr-history/done</value>
  </property>
</configuration>

$HADOOP_PREFIX/etc/hadoop/yarn-site.xml

<configuration>

<!-- Site specific YARN configuration properties -->
  <property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
  </property>
  <property>
    <name>yarn.resourcemanager.scheduler.class</name>
    <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>
    <description>In case you do not want to use the default scheduler</description>
  </property>
  <property>
    <name>yarn.nodemanager.local-dirs</name>
    <value>/usr/local/apache-hadoop/nm/local</value>
    <description>the local directories used by the nodemanager
    (default: /tmp/nm-local-dir)</description>
  </property>
  <property>
    <name>yarn.nodemanager.resource.memory-mb</name>
    <value>4096</value>
    <description>Amount of physical memory, in MB, that can be allocated
    for containers. (default: 8192)</description>
  </property>
  <property>
    <name>yarn.nodemanager.resource.cpu-cores</name>
    <value>4</value>
    <description>Number of CPU cores that can be allocated
    for containers. (default: 8)</description>
  </property>
  <property>
    <name>yarn.nodemanager.remote-app-log-dir</name>
    <value>/usr/local/apache-hadoop/nm/log</value>
    <description>directory on hdfs where the application logs are moved to
    (default: /tmp/logs)</description>
  </property>
  <property>
    <name>yarn.nodemanager.log-dirs</name>
    <value>/usr/local/apache-hadoop/nm/log</value>
    <description>the directories used by Nodemanagers as log directories
    (default: /tmp/logs)</description>
  </property>
  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce.shuffle</value>
    <description>shuffle service that needs to be set for Map Reduce to run</description>
  </property> 
</configuration>

ダメだったら、後で直します…。

で、設定したディレクトリを作成。

$ sudo mkdir -p /usr/local/apache-hadoop/tmp
$ sudo chown -R [Hadoopの起動ユーザ].[Hadoopの起動ユーザ] tmp
$ sudo mkdir -p /usr/local/apache-hadoop/dfs/name
$ sudo mkdir -p /usr/local/apache-hadoop/dfs/data
$ sudo chown -R [Hadoopの起動ユーザ].[Hadoopの起動ユーザ] /usr/local/apache-hadoop/dfs
$ sudo mkdir -p /usr/local/apache-hadoop/yarn/staging
$ sudo chown -R [Hadoopの起動ユーザ].[Hadoopの起動ユーザ] /usr/local/apache-hadoop/yarn
$ sudo mkdir -p /usr/local/apache-hadoop/mr-history/tmp
$ sudo mkdir -p /usr/local/apache-hadoop/mr-history/done
$ sudo chown -R [Hadoopの起動ユーザ].[Hadoopの起動ユーザ] /usr/local/apache-hadoop/mr-history
$ sudo mkdir -p /usr/local/apache-hadoop/nm/local
$ sudo mkdir -p /usr/local/apache-hadoop/nm/log
$ sudo chown -R [Hadoopの起動ユーザ].[Hadoopの起動ユーザ] /usr/local/apache-hadoop/nm

HDFSのフォーマット。

$ hdfs namenode -format

NameNode、SecondaryNameNode、DataNode、YARNのResourceManager、NodeManagerを順次起動。

$ $HADOOP_PREFIX/sbin/hadoop-daemon.sh start namenode
$ $HADOOP_PREFIX/sbin/hadoop-daemon.sh start datanode
$ $HADOOP_PREFIX/sbin/hadoop-daemon.sh start secondarynamenode
$ $HADOOP_PREFIX/sbin/yarn-daemon.sh start resourcemanager
$ $HADOOP_PREFIX/sbin/yarn-daemon.sh start nodemanager
$ $HADOOP_PREFIX/sbin/mr-jobhistory-daemon.sh start historyserver

停止。

$ $HADOOP_PREFIX/sbin/hadoop-daemon.sh stop namenode
$ $HADOOP_PREFIX/sbin/hadoop-daemon.sh stop datanode
$ $HADOOP_PREFIX/sbin/hadoop-daemon.sh stop secondarynamenode
$ $HADOOP_PREFIX/sbin/yarn-daemon.sh stop resourcemanager
$ $HADOOP_PREFIX/sbin/yarn-daemon.sh stop nodemanager
$ $HADOOP_PREFIX/sbin/mr-jobhistory-daemon.sh stop historyserver

YARNを使ったサンプルを動かそうとしたのですが、重過ぎて終わる気配がなかったので諦めました…。

うちの環境で、ホントに使えるのかな…?