順番は逆ですが、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
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を使ったサンプルを動かそうとしたのですが、重過ぎて終わる気配がなかったので諦めました…。
うちの環境で、ホントに使えるのかな…?