Windows2008多ユーザリモートアクセス

レジストの設定を変更することより、マルチユーザアクセスできるようになります。
方法
スタット⇒regedit入力
レジストパスのHKEY_LOCAL_MACHINE \ SYSTEM \ CURRENTCONTROLSET \control\ TerminalServer\fSingleSessionPerUser
fSingleSessionPerUser存在しない場合、新規「fSingleSessionPerUser」を作成します。
fSingleSessionPerUserの値が1の場合、単ユーザです、0はマルチユーザです。

Hadoop-2.2.10 Single nodeのセットアップ

この文書はHadoopのローカルモードではなく、1機で分散処理環境の設定を説明します。設定後以下のインスタンスを起動します。

  • プライマリNameNode
  • セカンダリNameNode
  • DataNode
  • ResourceManager
  • NodeManager
  • (MapReduce)HistoryServer

目次

共通

◇アカウントの権限

sudo権限を持つアカウントで下記の手順で実行します。環境変数を保つするために、実行アカウントの.bashrcに下記のaliasを追加します。

alias sudo=’sudo -E’

◇必要の4つアカウントを作成します
hadoop以外のアカウントでは、アカウントを作成するとき、Homeディレクトリを作成しなくてもOKです。

  • hadoopユーザとグループの作成
  • 分散ファイルシステムサービス管理ユーザ:hdfs
  • リソース管理とノード管理サービスユーザ:yarn
  • MapReduceジョブ履歴管理サービス:mapred
sudo adduser hadoop
sudo adduser hdfs
sudo usermod -G hadoop hdfs
sudo adduser mapred
sudo usermod -G hadoop mapred
sudo adduser yarn
sudo usermod -G hadoop yarn

◇作業ディレクトリを作成します

mkdir /tmp/work

◇Java JDKをインストール

CentOSの場合、Java OpenJDKがすでにインストールされている可能性があります。java -versionで確認できます。この文書ではOracleのjdk-7u45-linux-x64.gzを/tmp/workにダウンロードしてインストールします。
ダウンロード後解凍してインストします。

cd /usr/local
tar xvzf /tmp/work/jdk-7u45-linux-x64.gz
ln -s jdk1.7.0_45 jdk

◇hadoop-2.2.0をダウロードして「/」に解凍します

cd /tmp/work
wget http://ftp.tsukuba.wide.ad.jp/software/apache/hadoop/common/stable2/hadoop-2.2.0.tar.gz
cd /
tar xvzf /tmp/hadoop-2.2.0.tar.gz
chown -R root:hadoop hadoop-2.2.0
ln -s /hadoop-2.2.0 hadoop

◇環境変数の設定

各アカウントに環境変数をそれぞれ追加するより、/etc/profileに追加すると便利です。

#java jdk home
export JAVA_HOME=/usr/local/jdk

#hadoop environment
export HADOOP_PREFIX=/hadoop
export HADOOP_MAPRED_HOME=$HADOOP_PREFIX
export HADOOP_COMMON_HOME=$HADOOP_PREFIX
export HADOOP_HDFS_HOME=$HADOOP_PREFIX
export HADOOP_YARN_HOME=$HADOOP_PREFIX

export YARN_HOME=$HADOOP_MAPRED_HOME
export HADOOP_CONF_DIR=$HADOOP_PREFIX/etc/hadoop
export YARN_CONF_DIR=$HADOOP_CONF_DIR

PATH=$JAVA_HOME/bin:$HADOOP_PREFIX/bin:$HADOOP_PREFIX/sbin:$PATH

◇${HADOOP_PREFIX}/etc/hadoop/hadoop-env.shファイルに下記の変数を設定します

export JAVA_HOME=${JAVA_HOME}
export HADOOP_LOG_DIR=${HADOOP_PREFIX}/logs/$USER
export HADOOP_PID_DIR=${HADOOP_PREFIX}/tmp

◇データ、コントロール情報を格納するディレクトリ領域を用意します

mkdir /hadoop-workspace22
mkdir /hadoop-workspace22/storage
mkdir /hadoop-workspace22/logs
mkdir /hadoop-workspace22/tmp
mkdir /hadoop-workspace22/run
chown -R hadoop:hadoop /hadoop-workspace22
chmod -R ug+w /hadoop-workspace22

◇core-site.xmlファイルを下記のように設定します

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9000/</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/hadoop-workspace22/tmp/${user.name}</value>
    </property>
    <property>      
      <name>hadoop.native.lib</name>      
      <value>true</value>      
      <description>Should native hadoop libraries, if present, be used.</description>   
    </property> 
    <property>
      <name>hadoop.logfile.size</name>      
      <value>10000000</value>      
      <description>The max size of each log file</description>   
    </property>  
    <property>      
      <name>hadoop.logfile.count</name>      
      <value>15</value>      
      <description>The max number of log files</description>   
    </property>
</configuration>

HDFS

◇hadoop-env.shに変数を追加、設定します。
${HADOOP_PREFIX}/etc/hadoop/hadoop-env.shにデータ格納領域の境変数を追加します。

export HADOOP_WORKSPACE=/hadoop-workspace22
export HADOOP_LOG_DIR=${HADOOP-WORKSPACE}/logs/$USER
export HADOOP_PID_DIR=${HADOOP-WORKSPACE}/run

◇hdfs-site.xmlファイルを下記のように設定します。

<configuration>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:///hadoop-workspace22/storage/${user.name}/dfs/name</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:///hadoop-workspace22/storage/${user.name}/dfs/data</value>
    </property>
    <property>
        <name>dfs.namenode.checkpoint.dir</name>
        <value>file:///hadoop-workspace22/storage/${user.name}/dfs/namesecondary</value>
    </property>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
</configuration>

◇HDFS領域をフォーマットします

sudo -u hdfs ${HADOOP_PREFIX}/bin/hdfs namenode -format

◇HDFSデーモンを起動します。

sudo -u hdfs ${HADOOP_PREFIX}/sbin/hadoop-daemon.sh start namenode
sudo -u hdfs ${HADOOP_PREFIX}/sbin/hadoop-daemon.sh start secondarynamenode
sudo -u hdfs ${HADOOP_PREFIX}/sbin/hadoop-daemon.sh start datanode

◇HDFS上のディレクトリを作成し、アクセス権限を与えます

sudo -u hdfs ${HADOOP_PREFIX}/bin/hadoop fs -chown hdfs:hadoop /
sudo -u hdfs ${HADOOP_PREFIX}/bin/hadoop fs -chmod 755 /
sudo -u hdfs ${HADOOP_PREFIX}/bin/hadoop fs -mkdir /tmp
sudo -u hdfs ${HADOOP_PREFIX}/bin/hadoop fs -chown hdfs:hadoop /tmp
sudo -u hdfs ${HADOOP_PREFIX}/bin/hadoop fs -chmod 1777 /tmp
sudo -u hdfs ${HADOOP_PREFIX}/bin/hadoop fs -mkdir /user
sudo -u hdfs ${HADOOP_PREFIX}/bin/hadoop fs -chown hdfs:hadoop /user
sudo -u hdfs ${HADOOP_PREFIX}/bin/hadoop fs -chmod ug+w /user

◇Web UIのアクセスURLは以下の通りです。

http://localhost:50070/ #NameNode
http://localhost:50090/ #Secondary NameNode

YARN

◇yarn-env.shに下記の環境変数を追加する

export HADOOP_WORKSPACE=/hadoop-workspace22
export YARN_LOG_DIR=${HADOOP_WORKSPACE}/logs
export YARN_PID_DIR=${HADOOP_WORKSPACE}/run

◇yarn-site.xmlファイルに下記の設定を追加する

<configuration>

<!-- Site specific YARN configuration properties -->
    <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>/hadoop-workspace22/${user.name}/nm/local</value>
        <description>
              the local directories used by the nodemanager
              (default: /tmp/nm-local-dir)
        </description>
    </property>
<!--
    <property>
        <name>yarn.nodemanager.address</name>
        <value>0.0.0.0:0</value>
        <description>the nodemanagers bind to this port</description>
    </property> 
-->
    <property>
        <name>yarn.nodemanager.resource.memory-mb</name>
        <value>8192</value>
        <description>
            the amount of memory on the NodeManager in GB (default: 8192)
        </description>
    </property>
    <property>
        <name>yarn.nodemanager.remote-app-log-dir</name>
        <value>/hadoop-workspace22/logs/${user.name}/nm</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>/hadoop-workspace22/logs/${user.name}/nm</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>
    <property>
        <name>mapreduce.job.hdfs-servers</name>
        <value>${fs.defaultFS}</value>
        <!-- yarn-default.xml deprecated key: fs.default.name  -->
    </property>
</configuration>

◇ローカルファイルシステムのディレクトリを作成して権限を付与します

sudo mkdir /hadoop-workspace22/logs/yarn
sudo mkdir -p /hadoop-workspace22/logs/yarn/nm
sudo mkdir -p /hadoop-workspace22/logs/yarn/nm/local
sudo chown -R yarn:hadoop /hadoop-workspace22/logs/yarn
sudo chmod ug+w /hadoop-workspace22/logs/yarn

◇HDFS上に必要なディレクトリを作成します

#yarn.nodemanager.remote-app-log-dir
sudo -u hdfs ${HADOOP_PREFIX}/bin/hadoop fs -mkdir /hadoop-workspace22/logs
sudo -u hdfs ${HADOOP_PREFIX}/bin/hadoop fs -mkdir /hadoop-workspace22/logs/yarn
sudo -u hdfs ${HADOOP_PREFIX}/bin/hadoop fs -mkdir /hadoop-workspace22/logs/yarn/nm
sudo -u hdfs ${HADOOP_PREFIX}/bin/hadoop fs -chown yarn:hadoop /hadoop-workspace22/logs/yarn/nm
sudo -u hdfs ${HADOOP_PREFIX}/bin/hadoop fs -chmod 1777 /hadoop-workspace22/logs/yarn/nm

◇yarnサービスを起動します。

sudo -u yarn ${HADOOP_PREFIX}/sbin/yarn-daemon.sh start resourcemanager
sudo -u yarn ${HADOOP_PREFIX}/sbin/yarn-daemon.sh start nodemanager

◇Web UIのアクセスURLは以下の通りです

http://localhost:8088/ # ResourceManager
http://localhost:8042/ # NodeManager

MapReduce

◇mapred-env.shに下記の環境変数を設定する

export HADOOP_WORKSPACE=/hadoop-workspace22
export HADOOP_MAPRED_PID_DIR=$HADOOP_WORKSPACE/run
export HADOOP_MAPRED_LOG_DIR=$HADOOP_WORKSPACE/logs/$USER

◇mapred-site.xmlを設定する

<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
        <description>The runtime framework for executing MapReduce jobs.
        Can be one of local, classic or yarn.
        (default: local)
        </description>
    </property>
    <property>
        <name>mapreduce.cluster.local.dir</name>
        <value>/hadoop-workspace22/mapred/local</value>
        <description>The local directory where MapReduce stores intermediate
        data files.  May be a comma-separated list of
        directories on different devices in order to spread disk i/o.
        Directories that do not exist are ignored.
        (default: ${hadoop.tmp.dir}/mapred/local on LOCAL)
        </description>
    </property>
    <property>
        <name>mapreduce.jobtracker.system.dir</name>
        <value>/hadoop-workspace22/mapred/system</value>
        <description>The directory where MapReduce stores control files.
        (default: ${hadoop.tmp.dir}/mapred/system on HDFS)
        </description>
    </property>

    <property>
        <name>yarn.app.mapreduce.am.staging-dir</name>
        <value>/user</value>
    </property>
<!--    
    <property>
        <name>mapreduce.jobtracker.staging.root.dir</name>
        <value>/user</value>
        <description>The root of the staging area for users' job files
        In practice, this should be the directory where users' home
        directories are located (usually /user)
        (default: ${hadoop.tmp.dir}/mapred/staging on HDFS)
        </description>
    </property>
    -->
    <property>
        <name>mapreduce.cluster.temp.dir</name>
        <value>/hadoop-workspace22/mapred/temp</value>
        <description>A shared directory for temporary files.
        (default: ${hadoop.tmp.dir}/mapred/temp on LOCAL)
        </description>
    </property>
    <property>
        <name>mapreduce.jobhistory.intermediate-done-dir</name>
        <value>/hadoop-workspace22/mapred/history/intermediate_done</value>
    </property> 
    <property>
        <name>mapreduce.jobhistory.done-dir</name>
        <value>/hadoop-workspace22/mapred/history/done</value>
    </property> 
 
</configuration>

◇HDFS上に必要なディレクトリを追加します

sudo -u hdfs ${HADOOP_PREFIX}/bin/hadoop fs -mkdir /hadoop-workspace22/mapred/history
sudo -u hdfs ${HADOOP_PREFIX}/bin/hadoop fs -chown -R mapred:hadoop /hadoop-workspace22/mapred
sudo -u hdfs ${HADOOP_PREFIX}/bin/hadoop fs -chmod -R ug+wr /hadoop-workspace22/mapred

◇履歴サーバーを起動します

起動失敗した場合、/hadoop-workspace22/logs/mapredにあるログファイルを確認してHDFS上のディレクトリに書き込み権限があるかどうか再確認してください

sudo -u mapred ${HADOOP_PREFIX}/sbin/mr-jobhistory-daemon.sh start historyserver

◇履歴サーバWeb UIのアクセスURLは以下の通りです

http://localhost:19888/

テスト、確認

◇テストユーザ作成

sudo adduser htest
sudo usermod -a -G hadoop htest

◇HDFS上のユーザジョブ格納ディレクトリ作成

sudo -u hdfs ${HADOOP_PREFIX}/bin/hadoop fs -mkdir /user/htest
sudo -u hdfs ${HADOOP_PREFIX}/bin/hadoop fs -chown htest:htest /user/aidabo

◇ジョブ実行前のプロセス

jps|sort
17440 NameNode
17516 SecondaryNameNode
17572 DataNode
18950 ResourceManager
19183 NodeManager
29116 JobHistoryServer

◇MapReduceテスト

sudo -u htest ${HADOOP_PREFIX}/bin/hadoop jar /hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jar pi 5 10
sudo -u htest ${HADOOP_PREFIX}/bin/hadoop jar /hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jar randomwriter out

◇ジョブ起動中のプロセス

jps|sort
17440 NameNode
17516 SecondaryNameNode
17572 DataNode
18950 ResourceManager
19183 NodeManager
29116 JobHistoryServer
34499 RunJar
34705 MRAppMaster
35062 YarnChild
35072 YarnChild
35074 YarnChild
35079 YarnChild
35080 YarnChild

◇ジョブ終了後のプロセス

jps|sort
17440 NameNode
17516 SecondaryNameNode
17572 DataNode
18950 ResourceManager
19183 NodeManager
29116 JobHistoryServer

◇ジョブ実行終了後、historyserverから確認します。

http://localhost:19888/jobhistory