hadoopを疑似分散で動かす


n番煎じだが,既存手法を動かすのにhadoopが必要だったのでいれた

インストール

binファイルを http://hadoop.apache.org/releases.html からダウンロード
適所に配置(私は /usr/local以下においた)

wget http://ftp.tsukuba.wide.ad.jp/software/apache/hadoop/common/hadoop-2.7.4/hadoop-2.7.4.tar.gz
tar zxvf hadoop-2.7.4.tar.gz
sudo mv hadoop-2.7.4 /usr/local/hadoop

Hadoop各種設定

/etc/profile.d/hadoop.sh

  • JAVA_HOMEは自分のJAVA_HOMEに合わせる
export HADOOP_HOME=/usr/local/hadoop
export PATH="$HADOOP_HOME/bin:$PATH"
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib/native"
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export JAVA_HOME=/usr/lib/jvm/java-8-oracle

/etc/hadoop/core-site.xml

  • HDFS関連の記述
  • 今回は疑似分散なので,fs.default.nameはlocalhostに
  • tmp.dirでデータ保存領域を指定
[/etc/hadoop/core-site.xml]
<configuration>
    <property>
        <name>fs.default.name</name>
        <value>hdfs://localhost:9000</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/home/[username]/data/hadoop</value>
    </property>
</configuration>

hdfs-site.xml

[/etc/hadoop/hdfs-site.xml]
<configuration>
 <property>
  <name>dfs.replication</name>
  <value>1</value>
 </property>
</configuration>

mapred-site.xml

$ cp /etc/hadoop/mapred-site.xml.templete /etc/hadoop/mapred-site.xml
[/etc/hadoop/mapred-site.xml]
<configuration>
 <property>
  <name>mapred.job.tracker</name>
  <value>localhost:9001</value>
 </property>
</configuration>

localhostにパスフレーズ無しでsshで入れるか確認

  • ssh localhost をした時に,パスフレーズなしでログインできるか確認
  • できなければ,秘密鍵をauthorized_keysに追加
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

ファイルシステムをフォーマット

$ hdfs namenode -format

HDFSデーモンを起動

sbin/start-dfs.sh で起動
jpsで起動したかどうかを確認 (DataNode, NameNodeがあることを確認)

$ sbin/start-dfs.sh
$ jps
14560 DataNode
14375 NameNode
14791 SecondaryNameNode
15421 Jps

MapReduceの実行

ワークディレクトリをHDFS上に作成

$ hadoop fs -mkdir /user
$ hadoop fs -mkdir /user/<username>

exampleを実行

$ hadoop fs -put etc/hadoop input
$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.4.jar grep input output 'dfs[a-z.]+'

結果の確認

$ hadoop fs -cat output/*
8   dfs.audit.logger
4   dfs.class
3   dfs.server.namenode.
2   dfs.period
2   dfs.audit.log.maxfilesize
2   dfs.audit.log.maxbackupindex
1   dfsmetrics.log
1   dfsadmin
1   dfs.servers
1   dfs.replication
1   dfs.file

Yarnの設定

[/etc/hadoop/yarn-site.xml]
<configuration>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <property>
        <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
        <value>org.apache.hadoop.mapred.ShuffleHandler</value>
    </property>
    <property>
      <name>yarn.nodemanager.resource.memory-mb</name>
      <value>4096</value>
    </property>
    <property>
      <name>yarn.nodemanager.resource.cpu-vcores</name>
      <value>2</value>
    </property>
</configuration>

mapred-siteにメモリ情報を追記

[/etc/hadoop/mapred-site.xml]
<configuration>
  // 追記
  <property>
    <name>yarn.app.mapreduce.am.staging-dir</name>
    <value>/user</value>
  </property>
  <property>
    <name>mapreduce.map.memory.mb</name>
    <value>1024</value>
  </property>
  <property>
    <name>mapreduce.reduce.memory.mb</name>
    <value>1024</value>
  </property>
</configuration>

メモリ情報がないと,NodeManagerがうまく起動しなかった(ここで大変苦労した)

[logs/yarn--nodemanager-milk.log]
YarnRuntimeException: Recieved SHUTDOWN signal from Resourcemanager ,Registration of NodeManager failed, Message from ResourceManager: NodeManager from [hostname] doesn't satisfy minimum allocations, Sending SHUTDOWN signal to the NodeManager.

適切にメモリを設定しないと,こういうログが出る

参考サイト