over 3 years ago

已經有新版本的安裝練習了可以參考新的
Hadoop2.6偽分佈式安裝

0.準備軟體&環境

CentOS-6.5-i386-bin-DVD1.iso
jdk-6u45-linux-i586.bin
hadoop-2.2.0.tar.gz

虛擬機四台,如下

電腦名稱 IP 執行的服務
master 192.168.200.101 NameNode、SecondaryNameNode、ResourceManager
slave1 192.168.200.102 DataNode、NodeManager
slave2 192.168.200.103 DataNode、NodeManager
slave3 192.168.200.104 DataNode、NodeManager

因為裝在64位元系統上會有要不要重新編譯的問題,所以這邊僅用32位元安裝
參考來源

1.安裝OS

安裝OS的時候選擇Minimal安裝,記得順便設定網路,沒設定的話等安裝完成先設定網路

這階段使用 root 執行

1.1快速啟用網路介面(重開機後消失)

ifconfig eth0 192.168.200.101 netmask 255.255.255.0
route add default gw 192.168.200.2
echo "nameserver 168.95.1.1" > /etc/resolv.conf

1.2編輯網路設定

vi /etc/sysconfig/network-scripts/ifcfg-eth0
ifcfg-eth0
DEVICE=eth0

HWADDR=00:0C:29:90:F5:98

TYPE=Ethernet

UUID=df3daad9-8aa3-4266-9875-7caac513d7bd

#ONBOOT由no改成yes
ONBOOT=yes

NM_CONTROLLED=yes

#BOOTPROTO由dhcp改成none
BOOTPROTO=none

#以下為新增的
IPADDR=192.168.200.105

NETMASK=255.255.255.0

GATEWAY=192.168.200.2

DNS1=168.95.1.1

IPV6INIT=no

存檔後重啟動網路介面

service network restart

1.3更新系統及安裝

#更新所有套件
yum -y update
#加裝以下套件之後要用
yum -y install wget openssh-clients

1.4群組及用戶

#建立群組
groupadd hadoop
#新增用戶
adduser hduser
#設定用戶密碼
passwd hduser
#將使用者加入群組
usermod -g hadoop hduser

1.5 增加hduser可執行sudo權限

visudo
#root    ALL=(ALL)       ALL 在此行之下增加
hduser  ALL=(ALL)       ALL

1.6關閉SELINUX

#立即生效
setenforce 0
#永久性修改要重啟
vi /etc/selinux/config
#由enforcing改成disabled
SELINUX=disabled

1.7關閉防火牆

即時生效,重啟後復原

#開啟
service iptables start
#關閉
service iptables stop

永久性生效,重啟後不會復原

#開啟
chkconfig iptables on
#關閉
chkconfig iptables off

1.8關閉SSH登入確認詢問

vi /etc/ssh/ssh_config
#找到StrictHostKeyChecking這行,將註解移除,並改為no
StrictHostKeyChecking no
#存檔後跳出並重啟SSH服務使其生效
service sshd restart

1.9增加主機名稱IP對照表

cat >> /etc/hosts << EOF
192.168.200.101 master
192.168.200.102 slave1
192.168.200.103 slave2
192.168.200.104 slave3
EOF

2安裝JDK

這階段還是使用 root 執行

2.1先移除舊版或是openJDK

最小安裝應該是沒有自帶,但是紀錄一下怎麼移除

rpm -qa | grep java
yum -y remove java-*

2.2下載安裝Oracle JDK

cd /usr
wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F" "http://download.oracle.com/otn-pub/java/jdk/6u45-b06/jdk-6u45-linux-i586.bin"
mv jdk-6u45-linux-i586.bin*  jdk-6u45-linux-i586.bin
chmod 777 jdk-6u45-linux-i586.bin
./jdk-6u45-linux-i586.bin
mv jdk1.6.0_45 java

JDK的下載要特別處理可見說明使用wget下載JDK

編輯全域環境變數

vi /etc/profile
#貼上以下內容
export JAVA_HOME=/usr/java
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib/rt.jar
export PATH=$PATH:$JAVA_HOME/bin
#存檔後跳出並使設定立即生效
source /etc/profile
#確認安裝結果
java -version

3安裝HADOOP

3.1先重開機並使用 hduser 登入

reboot

3.2本機SSH免密碼設定

ssh-keygen -t rsa -f ~/.ssh/id_rsa -P ""
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
ssh localhost
exit

3.3安裝HADOOP

cd /opt
sudo wget http://ftp.mirror.tw/pub/apache/hadoop/common/hadoop-2.2.0/hadoop-2.2.0.tar.gz
sudo tar -xvzf hadoop-2.2.0.tar.gz
sudo mv hadoop-2.2.0 hadoop
sudo chown -R hduser:hadoop /opt/hadoop

編輯用戶環境參數

vi ~/.bashrc
#貼上以下內容
export HADOOP_HOME=/opt/hadoop
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop

export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

#存檔後使配置立即生效
source ~/.bashrc

#驗證可否呼叫hadoop指令
hadoop version

設定hadoop環境變數

#增加環境變數
cat >> /opt/hadoop/libexec/hadoop-config.sh << EOF
export JAVA_HOME=/usr/java
EOF

#增加環境變數
cat >> /opt/hadoop/etc/hadoop/hadoop-env.sh << EOF
export JAVA_HOME=/usr/java
EOF

建立本機暫存資料夾

mkdir -p $HADOOP_HOME/tmp

在Master上編輯slaves的名稱(使用cat覆蓋)

cat > /opt/hadoop/etc/hadoop/slaves << EOF
slave1
slave2
slave3
EOF

覆蓋core-site.xml

cat > /opt/hadoop/etc/hadoop/core-site.xml << EOF
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <property>
    <name>fs.default.name</name>
    <value>hdfs://master:9000</value>
  </property>  
  <property>
    <name>hadoop.tmp.dir</name>
    <value>/opt/hadoop/tmp</value>
  </property>
</configuration>
EOF

覆蓋hdfs-site.xml

cat > /opt/hadoop/etc/hadoop/hdfs-site.xml << EOF
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <property>
    <name>dfs.replication</name>
    <value>2</value>
  </property>  
  <property>
    <name>dfs.permissions</name>
    <value>false</value>
  </property>
</configuration>
EOF

覆蓋mapred-site.xml

cat > /opt/hadoop/etc/hadoop/mapred-site.xml << EOF
<?xml version="1.0"?>
<configuration>
  <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
  </property>
</configuration>
EOF

編輯yarn-site.xml
因為有一些環境變數所以要用vi

vi /opt/hadoop/etc/hadoop/yarn-site.xml
yarn-site.xml
<?xml version="1.0"?>
<configuration>
  <property>
    <name>yarn.resourcemanager.resource-tracker.address</name>
    <value>master:8031</value>
  </property>
  <property>
    <name>yarn.resourcemanager.scheduler.address</name>
    <value>master:8030</value>
  </property>
  <property>
    <name>yarn.resourcemanager.scheduler.class</name>
    <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>
  </property>
  <property>
    <name>yarn.resourcemanager.address</name>
    <value>master:8032</value>
  </property>
  <property>
    <name>yarn.nodemanager.local-dirs</name>
    <value>${hadoop.tmp.dir}/nodemanager/local</value>
  </property>
  <property>
    <name>yarn.nodemanager.address</name>
    <value>0.0.0.0:8034</value>
  </property>
  <property>
    <name>yarn.nodemanager.remote-app-log-dir</name>
    <value>${hadoop.tmp.dir}/nodemanager/remote</value>
  </property>
  <property>
    <name>yarn.nodemanager.log-dirs</name>
    <value>${hadoop.tmp.dir}/nodemanager/logs</value>
  </property>
  <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>
</configuration>

以上安裝完成第一台後,安裝slave的時候可以用scp複製安裝檔過去比較快
使用 root 身份

scp /usr/jdk-6u45-linux-i586.bin slave1:/usr
scp -rp /opt/hadoop slave1:/opt
ssh slave1 "chown -R hduser:hadoop /opt/hadoop"

把master的ssh公鑰複製到每一台slave上

ssh-copy-id -i ~/.ssh/id_rsa.pub hduser@slave1
ssh slave1
exit

都安裝完成後在Master執行格式化

hadoop namenode -format

格式化結果

DFS啟動&關閉(在master上下指令就好)

#啟動
/opt/hadoop/sbin/start-dfs.sh
#關閉
/opt/hadoop/sbin/stop-dfs.sh
#檢查起來的服務
jps

啟動dfs結果


在master上的jps

在slave上的jps

YARN啟動&關閉(在master上下指令就好)

#啟動
/opt/hadoop/sbin/start-yarn.sh
#關閉
/opt/hadoop/sbin/stop-yarn.sh
#檢查起來的服務
jps

啟動yarn


在master上的jps

在slave上的jps

HDFS Web UI: http://master:50070


YARN Web UI: http://master:8088

4 測試

cd ~/
mkdir in

cat > in/file << EOF
This is one line
This is another one
EOF

#新指令?先不要用
#hadoop dfs -copyFromLocal in /in

hadoop fs -mkdir /in
hadoop fs -put in/file /in
hadoop jar /opt/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jar wordcount /in /out
hadoop fs -cat /out/part-r-00000

使用指令檢視結果


可以在網頁上看到執行結果以及檔案存在那些節點

研究參考
http://solaimurugan.blogspot.tw/2013/11/setup-multi-node-hadoop-20-cluster.html
http://blog.yidooo.net/archives/hadoop-2-2-0-installation-and-configuration.html
http://shiyanjun.cn/archives/561.html

← eclipse generate javadocs Hadoop 2 完全分佈式安裝 HBase Zookeeper →
 
comments powered by Disqus