2017年4月20日 星期四

Hadoop 安裝 & Cluster 配置

相關軟體安裝、設定:
zookeeper 安裝、設定: http://sc8log.blogspot.tw/2017/04/zookeeper-cluster.html
hbase 安裝、設定: http://sc8log.blogspot.tw/2017/04/hbase-cluster.html


系統平台: UBUNTU 16.04

選定一台機器作為 Master
1. 在 Master 節點上配置 hadoop 用戶、確認己安裝 SSH server、安裝 Java 環境
2. 在 Master 節點上安裝 Hadoop,並完成配置
3. 在其他 Slave 節點上配置 hadoop 用戶、確認己安裝 SSH server、安裝 Java 環境
4. 將 Master 節點上的 /usr/local/hadoop 目錄複製到其他 Slave 節點上
5. 在 Master 節點上開啟 Hadoop

環境:
master    192.168.60.185
slave01   192.168.60.186
slave02   192.168.60.187
slave03   192.168.60.188

建立 Hadoop 帳號:
sudo useradd -m hadoop -s /bin/bash
sudo passwd hadoop
sudo adduser hadoop sudo

備註:
1.新增完Hadoop帳號後,先登出,再用 hadoop 帳號登入很重要
2.每一台主機(master、slave01、slave02、slave03)的測試帳號皆為 hadoop

安裝 JAVA:
1.安裝Java環境:
sudo add-apt-repository -y ppa:webupd8team/java   //add-apt-repository 不是內建指令,需安裝下列套件
########################################################
如出現 add-apt-repository: command not found,執行下列動作:
sudo rm -fR /var/lib/apt/lists/*
sudo apt-get update
sudo apt-get install -y python-software-properties
sudo apt-get install -y software-properties-common    #Ubuntu 14.04 之後的版本還需多安裝左邊的套件
########################################################
sudo apt-get update
sudo apt-get install -y oracle-java8-installer
sudo apt-get install -y oracle-java8-set-default
java -version
PS:
出現要確認安裝 JAVA 的確認訊息,按 ENTER 或 YES

2.設定 Java 路徑:
在 hadoop 家目錄中,執行指令
vi ~/.bashrc

在文字檔案最上面插入文字
export PATH=$PATH:/usr/local/hadoop/bin:/usr/local/hadoop/sbin
export JAVA_HOME=/usr/lib/jvm/java-8-oracle
儲存並離開。

執行指令:
source ~/.bashrc
讓剛才加入文字的部分生效

下載Hadoop
1.master 主機下載流程:
cd ~
sudo wget http://www.us.apache.org/dist/hadoop/common/hadoop-2.7.1/hadoop-2.7.1.tar.gz
sudo tar -zxvf ./hadoop-2.7.1.tar.gz -C /usr/local
cd /usr/local/
sudo mv ./hadoop-2.7.1/ ./hadoop
sudo chown -R hadoop:hadoop ./hadoop

2.再確認每台主機的名稱為: master、slave01、slave02、slave03,且能互通

3.修改 /etc/hosts 檔加入 hadoop(master & slave)
192.168.60.185    master
192.168.60.186    slave01
192.168.60.187    slave02
192.168.60.188    slave03

SSH 利用金鑰登入
1.讓 master 不用密碼,直接登入 slave。在 master 主機生成 ssh key
mkdir ~/.ssh
cd ~/.ssh
ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
scp ~/.ssh/id_rsa.pub hadoop@slave01:/home/hadoop/
scp ~/.ssh/id_rsa.pub hadoop@slave02:/home/hadoop/
scp ~/.ssh/id_rsa.pub hadoop@slave03:/home/hadoop/

2.在 slave01、slave02、slave03 主機裡,將 ssh 公鑰保存到相對應的位置
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys

3.回 master 主機測試,是否能直接登入
ssh slave01
ssh slave02
ssh slave03


配置叢集/分散式環境
在 master 主機上修改下列五個配置檔
1.修改 /usr/local/hadoop/etc/hadoop 的五個配置檔案:
slaves、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml

cd /usr/local/hadoop/etc/hadoop

2.1 修改 slaves
原內容為:
localhost
刪除,改成:
slave01
slave02
slave03

2.2 修改 core-site.xml
原內容為:
<configuration>
</configuration>
改成下列設定:
<configuration>
  <property>
     <name>fs.defaultFS</name>
     <value>hdfs://master:9000</value>
  </property>
  <property>
     <name>hadoop.tmp.dir</name>
     <value>file:/usr/local/hadoop/tmp</value>
     <description>Abase for other temporary directories.</description>
  </property>
</configuration>

2.3 修改 hdfs-site.xml
原內容為:
<configuration>
</configuration>
改成下列設定:
<configuration>
  <property>
     <name>dfs.namenode.secondary.http-address</name>
     <value>master:50090</value>
  </property>
  <property>
     <name>dfs.namenode.name.dir</name>
     <value>file:/usr/local/hadoop/tmp/dfs/name</value>
  </property>
  <property>
     <name>dfs.datanode.data.dir</name>
     <value>file:/usr/local/hadoop/tmp/dfs/data</value>
  </property>
  <property>
     <name>dfs.replication</name>
     <value>3</value>
  </property>
</configuration>
備註:因為有 3 台 slave,所以 dfs.replicaton 值改成 3

2.4 修改 mapred-site.xml
cp mapred-site.xml.template mapred-site.xml
原內容為:
<configuration>
</configuration>
改成下列設定:
<configuration>
  <property>
     <name>mapreduce.framework.name</name>
     <value>yarn</value>
  </property>
</configuration>

2.5 修改 yarn-site.xml
原內容為:
<configuration>
</configuration>
改成下列設定:
<configuration>
  <property>
     <name>yarn.resourcemanager.hostname</name>
     <value>master</value>
  </property>
  <property>
     <name>yarn.nodemanager.aux-services</name>
     <value>mapreduce_shuffle</value>
  </property>
</configuration>

3.將 master 上面的 hadoop 資料夾打包,傳輸給所有 slave 主機
cd /usr/local
rm -r ./hadoop/tmp
rm -r ./hadoop/logs/*
sudo tar -zcf ./hadoop.tar.gz ./hadoop
scp ./hadoop.tar.gz slave01:/home/hadoop
scp ./hadoop.tar.gz slave02:/home/hadoop
scp ./hadoop.tar.gz slave03:/home/hadoop

4.到 slave01、slave02、slave03 主機裡操作下列動作
sudo tar -zxf ~/hadoop.tar.gz -C /usr/local
sudo chown -R hadoop:hadoop /usr/local/hadoop

5.完成後,回到 master 主機,準備啟動 Hadoop 軟體 (「bin/hdfs namenode -format」這個指令,只要初次啟動時設定就好,以後不會用到)
NameNode 格式化:
/usr/local/hadoop/bin/hdfs namenode -format

DFS 啟動&關閉(在master上下指令就好)
#啟動
/opt/hadoop/sbin/start-dfs.sh
#關閉
/opt/hadoop/sbin/stop-dfs.sh

#啟動
/opt/hadoop/sbin/start-yarn.sh
#關閉
/opt/hadoop/sbin/stop-yarn.sh

第一次啟動時會要求授權 SSH 的「自動認證機制」ECDSA 密鑰授權給 slaves 主機


檢查 Hadoop 伺服器狀態:
1.DataNode 是否正常啟動
hdfs dfsadmin -report

看到 Live datanodes (3) 表示三台 slave 都正常啟動。

2.透過「jps」指令,來查看各個主機啟動的程序
master 至少需啟動四個服務:
ResourceManager
SecondaryNameNode
NameNode
Jps

Slave 至少需啟動三個服務:
NodeManager
DataNode
Jps

利用 WEB UI 查看系統狀態:
http://192.168.60.185:50070



MapReduce 運作測試:
1.修改 mapred-site.xml (手動在master、slaves 增加 jobhistory 記錄功能)
<configuration>
        <property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
        </property>
        <property>
                <name>mapreduce.jobhistory.address</name>
                <value>Master:10020</value>
        </property>
        <property>
                <name>mapreduce.jobhistory.webapp.address</name>
                <value>Master:19888</value>
        </property>
</configuration>

2.在 master 啟動 history 服務
mr-jobhistory-daemon.sh start historyserver

3.建立 HDFS 用戶目錄
hadoop fs -mkdir -p /user/hadoop

3.建立分散式系統目錄並複製檔案到分散式系統目錄內,準備進行測試
hadoop fs -mkdir input
hadoop fs -put /usr/local/hadoop/etc/hadoop/*.xml input

4.執行 MapReduce 測試
hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep input output 'dfs[a-z.]+'

5.顯示執行結果
hadoop fs -cat /user/hadoop/output/part-r-00000

6.透過 WEB UI 查看 MapReduce job history 狀態
http://192.168.60.185:8088/cluster


Apache Hadoop MapReduce 字數計算範例:
http://hadoop.apache.org/docs/current/hadoop-mapreduce-client/hadoop-mapreduce-client-core/MapReduceTutorial.html





沒有留言:

張貼留言

OCS Inventory 匯出資料到 Google 試算表(依電腦設備類型)

OCS Inventory 匯出到 Google 試算表的程式是從網路上其他高手分享出來( 參考資料出處 ),並依個人需求調整。 如要取用請注意,因程式是用 python 寫的,程式段落可能會移位導致無法正常運作。 下列程式調整SELECT電腦 設備類型 為Noteboo...