1. 程式人生 > >大資料平臺入門--hadoop虛擬機器偽分散式安裝

大資料平臺入門--hadoop虛擬機器偽分散式安裝

裡面我遇到的幾個問題:

1、因為沒有配置主機名,所以文中所有涉及到配置主機名的地方“bigdata-senior01.chybinmy.com”均應修改成“localhost”,否則啟動namenode的時候會報錯:

Failed to start namenode.

java.io.IOException: Failed on local exception: java.net.SocketException: Unresolved address; Host Details : local host is: "bigdata-senior01.chybinmy.com"; destination host is

2、關閉服務的時候沒有關閉secondnamenode

3、可以寫兩個sh指令碼來啟動和停止服務。

啟動指令碼

${HADOOP_HOME}/sbin/hadoop-daemon.sh start namenode

${HADOOP_HOME}/sbin/hadoop-daemon.sh start datanode

${HADOOP_HOME}/sbin/hadoop-daemon.sh start secondarynamenode

${HADOOP_HOME}/sbin/yarn-daemon.sh start resourcemanager

${HADOOP_HOME}/sbin/yarn-daemon.sh start nodemanager

${HADOOP_HOME}/sbin/start-yarn.sh

${HADOOP_HOME}/sbin/mr-jobhistory-daemon.sh start historyserver

停止指令碼

${HADOOP_HOME}/sbin/hadoop-daemon.sh stop namenode

${HADOOP_HOME}/sbin/hadoop-daemon.sh stop datanode

${HADOOP_HOME}/sbin/hadoop-daemon.sh stop secondarynamenode

${HADOOP_HOME}/sbin/yarn-daemon.sh stop resourcemanager

${HADOOP_HOME}/sbin/yarn-daemon.sh stop nodemanager

${HADOOP_HOME}/sbin/stop-yarn.sh

${HADOOP_HOME}/sbin/mr-jobhistory-daemon.sh stop historyserver

轉載內容如下:

十三、Hadoop所用的使用者設定

1、 建立一個名字為hadoop的普通使用者

  1. [[email protected] ~]# useradd hadoop

  2. [[email protected] ~]# passwd hadoop

2、 給hadoop使用者sudo許可權

[[email protected] ~]# vim /etc/sudoers

設定許可權,學習環境可以將hadoop使用者的許可權設定的大一些,但是生產環境一定要注意普通使用者的許可權限制。

  1. root ALL=(ALL) ALL

  2. hadoop ALL=(root) NOPASSWD:ALL

注意:如果root使用者無權修改sudoers檔案,先手動為root使用者新增寫許可權。

[[email protected] ~]# chmod u+w /etc/sudoers

3、 切換到hadoop使用者

  1. [[email protected] ~]# su - hadoop

  2. [[email protected] ~]$

4、 建立存放hadoop檔案的目錄

[[email protected] ~]$ sudo mkdir /opt/modules

5、 將hadoop資料夾的所有者指定為hadoop使用者

如果存放hadoop的目錄的所有者不是hadoop,之後hadoop執行中可能會有許可權問題,那麼就講所有者改為hadoop。

[[email protected] ~]# sudo chown -R hadoop:hadoop /opt/modules

十四、解壓Hadoop目錄檔案

1、 複製hadoop-2.5.0.tar.gz到/opt/modules目錄下。

2、 解壓hadoop-2.5.0.tar.gz

  1. [[email protected] ~]# cd /opt/modules

  2. [[email protected] hadoop]# tar -zxvf hadoop-2.5.0.tar.gz

十五、配置Hadoop

1、 配置Hadoop環境變數

[[email protected] hadoop]# vim /etc/profile

追加配置:

  1. export HADOOP_HOME="/opt/modules/hadoop-2.5.0"

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

執行:source /etc/profile 使得配置生效

驗證HADOOP_HOME引數:

  1. [[email protected] /]$ echo $HADOOP_HOME

  2. /opt/modules/hadoop-2.5.0

2、 配置 hadoop-env.sh、mapred-env.sh、yarn-env.sh檔案的JAVA_HOME引數

[[email protected] ~]$ sudo vim  ${HADOOP_HOME}/etc/hadoop/hadoop-env.sh
  1. 修改JAVA_HOME引數為:

  2. export JAVA_HOME="/opt/modules/jdk1.7.0_67"

3、 配置core-site.xml

enter image description here

[[email protected] ~]{HADOOP_HOME}/etc/hadoop/core-site.xml

(1) fs.defaultFS引數配置的是HDFS的地址。

  1. <property>

  2. <name>fs.defaultFS</name>

  3. <value>hdfs://bigdata-senior01.chybinmy.com:8020</value>

  4. </property>

(2) hadoop.tmp.dir配置的是Hadoop臨時目錄,比如HDFS的NameNode資料預設都存放這個目錄下,檢視*-default.xml等預設配置檔案,就可以看到很多依賴${hadoop.tmp.dir}的配置。

預設的hadoop.tmp.dir/tmp/hadoop-${user.name},此時有個問題就是NameNode會將HDFS的元資料儲存在這個/tmp目錄下,如果作業系統重啟了,系統會清空/tmp目錄下的東西,導致NameNode元資料丟失,是個非常嚴重的問題,所有我們應該修改這個路徑。

  • 建立臨時目錄:
    [[email protected] hadoop-2.5.0]$ sudo mkdir -p /opt/data/tmp
  • 將臨時目錄的所有者修改為hadoop
[[email protected] hadoop-2.5.0]$ sudo chown –R hadoop:hadoop /opt/data/tmp
  • 修改hadoop.tmp.dir
  1. <property>

  2. <name>hadoop.tmp.dir</name>

  3. <value>/opt/data/tmp</value>

  4. </property>

十六、配置、格式化、啟動HDFS

1、 配置hdfs-site.xml

enter image description here

[[email protected] hadoop-2.5.0]$ vim ${HADOOP_HOME}/etc/hadoop/hdfs-site.xml
  1. <property>

  2. <name>dfs.replication</name>

  3. <value>1</value>

  4. </property>

fs.replication配置的是HDFS儲存時的備份數量,因為這裡是偽分散式環境只有一個節點,所以這裡設定為1。

2、 格式化HDFS

enter image description here

[[email protected] ~]$ hdfs namenode –format

格式化是對HDFS這個分散式檔案系統中的DataNode進行分塊,統計所有分塊後的初始元資料的儲存在NameNode中。

格式化後,檢視core-site.xml裡hadoop.tmp.dir(本例是/opt/data目錄)指定的目錄下是否有了dfs目錄,如果有,說明格式化成功。

注意:

  1. 格式化時,這裡注意hadoop.tmp.dir目錄的許可權問題,應該hadoop普通使用者有讀寫許可權才行,可以將/opt/data的所有者改為hadoop。 
    [[email protected] hadoop-2.5.0]$ sudo chown -R hadoop:hadoop /opt/data

  2. 檢視NameNode格式化後的目錄。

   [[email protected] ~]$ ll /opt/data/tmp/dfs/name/current

enter image description here

fsimage是NameNode元資料在記憶體滿了後,持久化儲存到的檔案。

fsimage*.md5 是校驗檔案,用於校驗fsimage的完整性。

seen_txid 是hadoop的版本

vession檔案裡儲存:

  • namespaceID:NameNode的唯一ID。

  • clusterID:叢集ID,NameNode和DataNode的叢集ID應該一致,表明是一個叢集。

  1. #Mon Jul 04 17:25:50 CST 2016

  2. namespaceID=2101579007

  3. clusterID=CID-205277e6-493b-4601-8e33-c09d1d23ece4

  4. cTime=0

  5. storageType=NAME_NODE

  6. blockpoolID=BP-1641019026-127.0.0.1-1467624350057

  7. layoutVersion=-57

3、 啟動NameNode

  1. [[email protected] hadoop-2.5.0]$ ${HADOOP_HOME}/sbin/hadoop-daemon.sh start namenode

  2. starting namenode, logging to /opt/modules/hadoop-2.5.0/logs/hadoop-hadoop-namenode-bigdata-senior01.chybinmy.com.out

enter image description here

4、 啟動DataNode

  1. [[email protected] hadoop-2.5.0]$ ${HADOOP_HOME}/sbin/hadoop-daemon.sh start datanode

  2. starting datanode, logging to /opt/modules/hadoop-2.5.0/logs/hadoop-hadoop-datanode-bigdata-senior01.chybinmy.com.out

  • enter image description here

5、 啟動SecondaryNameNode

  1. [[email protected] hadoop-2.5.0]$ ${HADOOP_HOME}/sbin/hadoop-daemon.sh start secondarynamenode

  2. starting secondarynamenode, logging to /opt/modules/hadoop-2.5.0/logs/hadoop-hadoop-secondarynamenode-bigdata-senior01.chybinmy.com.out

enter image description here

6、 JPS命令檢視是否已經啟動成功,有結果就是啟動成功了。

  1. [[email protected] hadoop-2.5.0]$ jps

  2. 3034 NameNode

  3. 3233 Jps

  4. 3193 SecondaryNameNode

  5. 3110 DataNode

enter image description here

7、 HDFS上測試建立目錄、上傳、下載檔案

HDFS上建立目錄

[[email protected] hadoop-2.5.0]$ ${HADOOP_HOME}/bin/hdfs dfs -mkdir /demo1
  • 上傳本地檔案到HDFS上
  1. [[email protected] hadoop-2.5.0]$ ${HADOOP_HOME}/bin/hdfs dfs -put

  2. ${HADOOP_HOME}/etc/hadoop/core-site.xml /demo1

讀取HDFS上的檔案內容

[[email protected] hadoop-2.5.0]$ ${HADOOP_HOME}/bin/hdfs dfs -cat /demo1/core-site.xml

enter image description here

從HDFS上下載檔案到本地

[[email protected] hadoop-2.5.0]$ bin/hdfs dfs -get /demo1/core-site.xml

enter image description here

十七、配置、啟動YARN

1、 配置mapred-site.xml

預設沒有mapred-site.xml檔案,但是有個mapred-site.xml.template配置模板檔案。複製模板生成mapred-site.xml。

[[email protected] hadoop-2.5.0]# cp etc/hadoop/mapred-site.xml.template etc/hadoop/mapred-site.xml
  • 新增配置如下:
  1. <property>

  2. <name>mapreduce.framework.name</name>

  3. <value>yarn</value>

  4. </property>

指定mapreduce執行在yarn框架上。

enter image description here

2、 配置yarn-site.xml

新增配置如下:

  1. <property>

  2. <name>yarn.nodemanager.aux-services</name>

  3. <value>mapreduce_shuffle</value>

  4. </property>

  5. <property>

  6. <name>yarn.resourcemanager.hostname</name>

  7. <value>bigdata-senior01.chybinmy.com</value>

  8. </property>

  • yarn.nodemanager.aux-services配置了yarn的預設混洗方式,選擇為mapreduce的預設混洗演算法。

  • yarn.resourcemanager.hostname指定了Resourcemanager執行在哪個節點上。

    enter image description here

3、 啟動Resourcemanager

[[email protected] hadoop-2.5.0]$ ${HADOOP_HOME}/sbin/yarn-daemon.sh start resourcemanager

enter image description here

4、 啟動nodemanager

[[email protected] hadoop-2.5.0]$ ${HADOOP_HOME}/sbin/yarn-daemon.sh start nodemanager

enter image description here

5、 檢視是否啟動成功

  1. [[email protected] hadoop-2.5.0]$ jps

  2. 3034 NameNode

  3. 4439 NodeManager

  4. 4197 ResourceManager

  5. 4543 Jps

  6. 3193 SecondaryNameNode

  7. 3110 DataNode

可以看到ResourceManager、NodeManager已經啟動成功了。

enter image description here

6、 YARN的Web頁面

enter image description here

十八、執行MapReduce Job

在Hadoop的share目錄裡,自帶了一些jar包,裡面帶有一些mapreduce例項小例子,位置在share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.0.jar,可以執行這些例子體驗剛搭建好的Hadoop平臺,我們這裡來執行最經典的WordCount例項。

1、 建立測試用的Input檔案

建立輸入目錄:

[[email protected] hadoop-2.5.0]$ bin/hdfs dfs -mkdir -p /wordcountdemo/input

建立原始檔案:

在本地/opt/data目錄建立一個檔案wc.input,內容如下。

enter image description here

將wc.input檔案上傳到HDFS的/wordcountdemo/input目錄中:

[[email protected] hadoop-2.5.0]$ bin/hdfs dfs -put /opt/data/wc.input /wordcountdemo/input

enter image description here

2、 執行WordCount MapReduce Job

  1. [[email protected] hadoop-2.5.0]$ bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-

  2. 2.5.0.jar wordcount /wordcountdemo/input /wordcountdemo/output

enter image description here

3、 檢視輸出結果目錄

  1. [[email protected] hadoop-2.5.0]$ bin/hdfs dfs -ls /wordcountdemo/output

  2. -rw-r--r-- 1 hadoop supergroup 0 2016-07-05 05:12 /wordcountdemo/output/_SUCCESS

  3. -rw-r--r-- 1 hadoop supergroup 60 2016-07-05 05:12 /wordcountdemo/output/part-r-00000

enter image description here

  • output目錄中有兩個檔案,_SUCCESS檔案是空檔案,有這個檔案說明Job執行成功。

  • part-r-00000檔案是結果檔案,其中-r-說明這個檔案是Reduce階段產生的結果,mapreduce程式執行時,可以沒有reduce階段,但是肯定會有map階段,如果沒有reduce階段這個地方有是-m-。

  • 一個reduce會產生一個part-r-開頭的檔案。

  • 檢視輸出檔案內容。

  1. [[email protected] hadoop-2.5.0]$ bin/hdfs dfs -cat /wordcountdemo/output/part-r-00000

  2. hadoop 3

  3. hbase 1

  4. hive 2

  5. mapreduce 1

  6. spark 2

  7. sqoop 1

  8. storm 1

結果是按照鍵值排好序的。

十九、停止Hadoop

  1. [[email protected] hadoop-2.5.0]$ sbin/hadoop-daemon.sh stop namenode

  2. stopping namenode

  3. [[email protected] hadoop-2.5.0]$ sbin/hadoop-daemon.sh stop datanode

  4. stopping datanode

  5. [[email protected] hadoop-2.5.0]$ sbin/yarn-daemon.sh stop resourcemanager

  6. stopping resourcemanager

  7. [[email protected] hadoop-2.5.0]$ sbin/yarn-daemon.sh stop nodemanager

  8. stopping nodemanager

enter image description here

二十、 Hadoop各個功能模組的理解

1、 HDFS模組

HDFS負責大資料的儲存,通過將大檔案分塊後進行分散式儲存方式,突破了伺服器硬碟大小的限制,解決了單臺機器無法儲存大檔案的問題,HDFS是個相對獨立的模組,可以為YARN提供服務,也可以為HBase等其他模組提供服務。

2、 YARN模組

YARN是一個通用的資源協同和任務排程框架,是為了解決Hadoop1.x中MapReduce裡NameNode負載太大和其他問題而建立的一個框架。

YARN是個通用框架,不止可以執行MapReduce,還可以執行Spark、Storm等其他計算框架。

3、 MapReduce模組

MapReduce是一個計算框架,它給出了一種資料處理的方式,即通過Map階段、Reduce階段來分散式地流式處理資料。它只適用於大資料的離線處理,對實時性要求很高的應用不適用。

第七步、開啟歷史服務

二十一、歷史服務介紹

Hadoop開啟歷史服務可以在web頁面上檢視Yarn上執行job情況的詳細資訊。可以通過歷史伺服器檢視已經執行完的Mapreduce作業記錄,比如用了多少個Map、用了多少個Reduce、作業提交時間、作業啟動時間、作業完成時間等資訊。

二十二、開啟歷史服務

[[email protected] hadoop-2.5.0]$ sbin/mr-jobhistory-daemon.sh start historyserver、

開啟後,可以通過Web頁面檢視歷史伺服器:

二十三、Web檢視job執行歷史

1、 執行一個mapreduce任務

  1. [[email protected] hadoop-2.5.0]$ bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-

  2. 2.5.0.jar wordcount /wordcountdemo/input /wordcountdemo/output1

2、 job執行中

enter image description here

3、 檢視job歷史

enter image description here

enter image description here

歷史伺服器的Web埠預設是19888,可以檢視Web介面。

但是在上面所顯示的某一個Job任務頁面的最下面,Map和Reduce個數的連結上,點選進入Map的詳細資訊頁面,再檢視某一個Map或者Reduce的詳細日誌是看不到的,是因為沒有開啟日誌聚集服務。

二十四、開啟日誌聚集

4、 日誌聚集介紹

MapReduce是在各個機器上執行的,在執行過程中產生的日誌存在於各個機器上,為了能夠統一檢視各個機器的執行日誌,將日誌集中存放在HDFS上,這個過程就是日誌聚集。

5、 開啟日誌聚集

配置日誌聚集功能:

Hadoop預設是不啟用日誌聚集的。在yarn-site.xml檔案裡配置啟用日誌聚集。

  1. <property>

  2. <name>yarn.log-aggregation-enable</name>

  3. <value>true</value>

  4. </property>

  5. <property>

  6. <name>yarn.log-aggregation.retain-seconds</name>

  7. <value>106800</value>

  8. </property>

yarn.log-aggregation-enable:是否啟用日誌聚集功能。

yarn.log-aggregation.retain-seconds:設定日誌保留時間,單位是秒。

將配置檔案分發到其他節點:

  1. [[email protected] hadoop]$ scp /opt/modules/hadoop-2.5.0/etc/hadoop/yarn-site.xml bigdata-senior02.chybinmy.com:/opt/modules/hadoop-2.5.0/etc/hadoop/

  2. [[email protected] hadoop]$ scp /opt/modules/hadoop-2.5.0/etc/hadoop/yarn-site.xml bigdata-senior03.chybinmy.com:/opt/modules/hadoop-2.5.0/etc/hadoop/

重啟Yarn程序:

  1. [[email protected] hadoop-2.5.0]$ sbin/stop-yarn.sh

  2. [[email protected] hadoop-2.5.0]$ sbin/start-yarn.sh

重啟HistoryServer程序:

  1. [[email protected] hadoop-2.5.0]$ sbin/mr-jobhistory-daemon.sh stop historyserver

  2. [[email protected] hadoop-2.5.0]$ sbin/mr-jobhistory-daemon.sh start historyserver

6、 測試日誌聚集

執行一個demo MapReduce,使之產生日誌:

bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.0.jar wordcount /input /output1
  • 檢視日誌:

執行Job後,就可以在歷史伺服器Web頁面檢視各個Map和Reduce的日誌了。