前言
前面只是大概介紹了一下Hadoop,現在就開始搭建集群了。我們下嘗試一下搭建一個最簡單的集群。之后為什么要這樣搭建會慢慢的分享,先要看一下效果吧!
一、Hadoop的三種運行模式(啟動模式)
1.1、單機模式(獨立模式)(Local或Standalone Mode)
-默認情況下,Hadoop即處於該模式,用於開發和調式。
-不對配置文件進行修改。
-使用本地文件系統,而不是分布式文件系統。
-Hadoop不會啟動NameNode、DataNode、JobTracker、TaskTracker等守護進程,Map()和Reduce()任務作為同一個進程的不同部分來執行的。
-用於對MapReduce程序的邏輯進行調試,確保程序的正確。
1.2、偽分布式模式(Pseudo-Distrubuted Mode)
-Hadoop的守護進程運行在本機機器,模擬一個小規模的集群
-在一台主機模擬多主機。
-Hadoop啟動NameNode、DataNode、JobTracker、TaskTracker這些守護進程都在同一台機器上運行,是相互獨立的Java進程。
-在這種模式下,Hadoop使用的是分布式文件系統,各個作業也是由JobTraker服務,來管理的獨立進程。在單機模式之上增加了代碼調試功能,允許檢查內存使用情況,HDFS輸入輸出,
以及其他的守護進程交互。類似於完全分布式模式,因此,這種模式常用來開發測試Hadoop程序的執行是否正確。
-修改3個配置文件:core-site.xml(Hadoop集群的特性,作用於全部進程及客戶端)、hdfs-site.xml(配置HDFS集群的工作屬性)、mapred-site.xml(配置MapReduce集群的屬性)
-格式化文件系統
1.3、全分布式集群模式(Full-Distributed Mode)
-Hadoop的守護進程運行在一個集群上
-Hadoop的守護進程運行在由多台主機搭建的集群上,是真正的生產環境。
-在所有的主機上安裝JDK和Hadoop,組成相互連通的網絡。
-在主機間設置SSH免密碼登錄,把各從節點生成的公鑰添加到主節點的信任列表。
-修改3個配置文件:core-site.xml、hdfs-site.xml、mapred-site.xml,指定NameNode和JobTraker的位置和端口,設置文件的副本等參數
-格式化文件系統
二、搭建偽分布式集群的前提條件
環境:在ubuntu17.04
jdk1.8.0_131
hadoop 2.8.1
2.1、能夠正常運行的Ubuntu操作系統
在Ubuntu下,軟件安裝到/opt下,當前正在使用的用戶,對於opt目錄需要有讀寫權限:
1)將opt的權限給為777(漏洞文件),不推薦在生產環境中使用。但是可以在學習和調試環境中使用。
2)sudo
在啟動Hadoop的各個守護進程的時候,需要使用sudo。
在管理Hadoop的時候,實際上由不同的用戶啟動不同集群的守護進程。
統一使用當前的用戶管理所有集群。
3)該目錄的所有者設置為當前用戶
2.2、安裝JDK,並配置環境變量
1)將jdk安裝包放在家目錄下
2)解壓到opt目錄下
sudo tar zxvf jdk-8u131-linux-x64.tar.gz -C /opt
此時在/opt目錄下:會有一個jdk1.8.0_131
3)創建軟鏈接
sudo ln -snf /opt/jdk1.8.0_131 /opt/jdk
注意:創建軟連接的目的是為了,我們在做項目的時候,可能會用到不同的jdk版本,這是要換軟件的話,只需要修改軟鏈接就可以了。而不用修改配置文件。
4)配置環境變量
局部環境變量:~/.bashrc
全局環境變量:/etc/profile
export JAVA_HOME=/opt/jdk
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin
source 相關文件(更新配置文件)
5)查看是否安裝成功
java、javac、java -version
三、搭建偽分布式集群
3.1、安裝hadoop
1)解壓hadoop安裝包到opt目錄下
sudo tar zxvf hadoop-2.8.1.tar.gz -C /opt
2)創建軟鏈接
ln -snf /opt/hadoop-2.8.1 /opt/hadoop
3)配置環境變量
在/etc/profile文件中加入以下內容:
export HADOOP_HOME=/opt/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
source /etc/profile
4)使用hadoop version命令測試是否配置成功
3.2、配置hadoop
配置文件存放在/opt/hadoop/etc/hadoop中有n多個文件,暫時我們只需要修改的只有5個
1)hadoop-env.sh
大約在25行左右
export JAVA_HOME=${JAVA_HOME}改成export JAVA_HOME=/opt/jdk
注意:在配置文件中有提示我們怎么設置,我們一般不刪除,二回選擇注釋它的提示。
2)core-site.xml
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://1.0.0.5:9000</value> </property> </configuration>
分析:1.0.0.5是你主節點所在主機的ip,而9000為端口
3)hdfs-site.xml
<configuration> <property> <name>dfs.nameservices</name> <value>hadoop-cluster</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:///data/hadoop/hdfs/nn</value> </property> <property> <name>dfs.namenode.ch eckpoint.dir</name> <value>file:///data/hadoop/hdfs/snn</value> </property> <property> <name>dfs.namenode.checkpoint.edits.dir</name> <value>file:///data/hadoop/hdfs/snn</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:///data/hadoop/hdfs/dn</value> </property> </configuration>
4)mapred-site.xml
在hadoop的相關目錄中沒有此文件,但是有一個mapred-site.xml.template文件,將該文件復制一份為mapred-site.xml
cp mapred-site.xml.template mapred-site.xml
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
5)yarn-site.xml
<configuration> <!-- 指定ResourceManager的地址--> <property> <name>yarn.resourcemanager.hostname</name> <value>1.0.0.5</value> </property> <!-- 指定reducer獲取數據的方式--> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.nodemanager.local-dirs</name> <value>file:///data/hadoop/yarn/nm</value> </property> </configuration>
7)創建相關目錄
sudo mkdir -p /data/hadoop/hdfs/nn sudo mkdir -p /data/hadoop/hdfs/dn sudo mkdir -p /data/hadoop/hdfs/snn sudo mkdir -p /data/hadoop/yarn/nm
注意:
如果使用sudo啟動hadoop的相關進程,這幾目錄的權限可以不用管。
如果是使用當前的用戶啟動相關進程,對於opt目錄,當前用戶得有讀寫權限,對於/data目錄也需要讀寫權限。
遇到問題:
筆者就是在這個目錄權限的問題吃el很大得虧。首先為了不使用sudo我將/data目錄的權限修改為777,然后進行
HDFS集群格式化的時候,出現:
這時我在想為什么呢?原來我只是給data目錄設置了讀寫權限,但是沒有給它的子目錄設置讀寫權限。所以:
chmod -R 777 /data 遞歸設置權限
8)對HDFS集群進行格式化,HDFS集群是用來存儲數據的。
hdfs namenode -format
3.3、啟動集群
1)啟動HDFS集群
hadoop-daemon.sh start namenode 啟動主節點
hadoop-daemon.sh start datanode 啟動從節點
2)啟動YARN集群
yarn-daemon.sh start resourcemanager
yarn-daemon.sh start nodemanager
3)啟動作業歷史服務器
mr-jobhistory-daemon.sh start historyserver
4)jps命令查看是否啟動成功
5)HDFS和YARN集群都有相對應的WEB監控頁面
HDFS:http://ip:50070
YARN:http://ip:8088
6)HDFS集群的簡單操作命令
hdfs dfs -ls /
hdfs dfs -mkdir -p /user/zyh
7) YARN集群的操作----提交任務/作業
計算PI值的作業:
yarn jar /opt/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.1.jar pi 4 100
四、一個問題
我之前沒有注意發現我的yarn的從節點沒有啟動起來,在執行計算PI值的時候沒有成功才看到:
查看日志發現是配置文件:
在hdfs-site-web.xml中:
查看http://1.0.0.5:50070可以查看從節點是否啟動:
在執行上面使用yarn集群來計算pi值得命令:
查看http://1.0.0.5:8088可以看出計算pi值得任務正在執行:
最后成功:
這里就截圖了,電腦卡住了,上圖中在web頁面可以查看到任務執行成功,終端中會顯示執行結果!
喜歡就點“推薦”哦!