Hadoop單機/偽分散式叢集搭建(新手向)
此文已由作者朱笑笑授權網易雲社群釋出。
歡迎訪問網易雲社群,瞭解更多網易技術產品運營經驗。
本文主要參照官網的安裝步驟實現了Hadoop偽分散式叢集的搭建,希望能夠為初識Hadoop的小夥伴帶來借鑑意義。
環境:
(1)系統環境:CentOS 7.3.1611 64位
(2)Java版本:OpenJDK 1.8.0
配置Hadoop單節點叢集前準備
1、建立hadoop使用者:
新建使用者用於hadoop使用:
(1)開啟終端,輸入命令su,回車,輸入root的密碼以root使用者登入,並建立名為hadoop的新使用者:
useradd -m Hadoop -s /bin/bash
(2)修改使用者密碼:
passwd hadoop
(3)為使用方便,給hadoop使用者提升許可權,否則hadoop使用者在使用sudo命令時會報出:hadoop不在sudoers檔案中。此事將被報告;
a. 切換到root使用者,檢視/etc/sudoers檔案許可權,預設許可權為只讀
b. 修改/etc/sudoers檔案許可權為讀寫許可權:chmod 777 /etc/sudoers
c. 修改/etc/sudoers檔案內容,執行visudo或者vim /etc/sudoers
如下圖,在 root ALL=(ALL) ALL 這行下面增加一行內容:hadoop ALL=(ALL) ALL (當中的間隔為tab,說明:格式為{使用者名稱 網路中的主機=(執行命令的目標使用者) 執行的命令範圍}),如下圖所示:
若要在執行sudo命令時免輸入密碼,可以將上述新增的內容改為:hadoop ALL=(ALL) NOPASSWD:ALL。
d. 儲存退出,恢復/etc/sudoers檔案的訪問許可權為440;
(4)切換至hadoop使用者;
2、安裝SSH及配置免密碼登入
叢集和單節點模式都需要使用SSH登陸,一般情況下,CentOS中預設安裝了SSH client、SSH server,可以通過以下命令進行檢驗:
rpm -qa | grep ssh
若已經安裝,則返回如下內容,說明已經包含了SSH client和SSH server,無需再安裝:
若沒有安裝SSH client、SSH server,則可以通過yum進行安裝:
sudo yum install openssh-clients
sudo yum install openssh-server
測試SSH是否可用,可輸入如下命令:
ssh localhost
首次登陸出現如下提示(圖中為使用root使用者登入,hadoop使用者同理),輸入yes即可,在使用者的主資料夾(/home/使用者名稱)下會生成.ssh目錄。然後根據提示輸入hadoop使用者密碼,登陸本機:
我們發現每一次使用ssh登入都需要輸入密碼,為方便起見,配置ssh為免密碼登入:
(1)切換為hadoop使用者;
(2)利用ssh-keygen生成金鑰,並將金鑰加入到授權中,修改授權檔案許可權:
cd ~/.ssh/
ssh-keygen -t rsa
cat id_rsa.pub >>authorized_keys
chmod 600 ./authorized_keys
此時,使用ssh localhost無需密碼便可登陸。
3、安裝Java環境
Java環境可以選擇Oracle的JDK,或者OpenJDK。按照https://wiki.apache.org/hadoop/HadoopJavaVersions中所說,hadoop 2.7版本及以後的版本至少要求Java 7。CentOS 7.3下預設安裝了OpenJDK 1.8,但只是Java JRE,不是JDK,為便於開發,建議安裝JDK。
建議使用yum進行安裝,預設安裝路徑為/usr/lib/jvm/java-1.8.0-openjdk:
安裝成功後配置JAVA_HOME環境變數:
vim ~/.bashrc
在最後一行新增變數:
使環境變數生效:
source ~/.bashrc
設定好後檢驗一下是否正確,輸出一下內容則設定正確:
安裝Hadoop
通過http://www.apache.org/dyn/closer.cgi/hadoop/common/下載Hadoop,這裡選擇了Hadoop 2.7.3版本,下載時選擇hadoop-2.7.3.tar.gz格式,其中src格式的為Hadoop的原始碼,需要進行編譯後才可使用。
安裝Hadoop至/usr/local/中(也可選擇別的路徑),Hadoop解壓後即可使用:
sudo tar -zxf ~/Download/hadoop-2.7.3.tar.gz -C /usr/local
cd /usr/local/
sudo mv ./hadoop-2.7.3/ ./hadoop
sudo chown -R hadoop:hadoop ./hadoop
檢查Hadoop是否可用:
cd /usr/local/hadoop
./bin/hadoop version
說明:若未進行Java的環境變數配置,想要./bin/hadoop執行成功,則需要修改hadoop的etc/hadoop/hadoop-env.sh檔案中的JAVA_HOME變數,指定為java路徑,如圖:
至此,Hadoop預設模式即本地模式(單機模式)已經配置成功。
Hadoop偽分散式配置
Hadoop可以在單節點上以偽分散式的方式執行,Hadoop程序以分離的Java進行來執行,節點既作為Namenode也作為DataNode,同時,讀取的是Hdfs中的檔案。
偽分散式需要修改2個配置檔案core-site.xml和hdfs-site.xml,配置檔案位於hadoop的/etc/hadoop資料夾下。
修改core-site.xml為:
修改hdfs-site.xml為:
修改配置檔案成功後,通過ssh登陸:
執行NameNode的格式化:
出現如圖情況,表示成功,若“Exitting with status 1”則是出錯:
接下去開啟NameNode和DataNode守護程序:
若出現SSH的提示,輸入yes即可:
啟動完成後,通過jsp來判斷是否成功啟動,若成功啟動則會列出如下程序,如果沒有NameNode或DataNode,則表明配置不成功,需要檢查上述步驟或通過啟動日誌排查,日誌記錄在hadoop的logs資料夾中:
成功啟動後,可以訪問http://localhost:50070來檢視NameNode和Datanode資訊及HDFS中檔案:
執行Hadoop偽分散式例項
單機模式grep讀取的是本地資料,偽分散式讀取的則是Hdfs上的資料。
執行MR任務需要在Hdfs上建立使用者目錄,這裡<username>為hadoop:
在Hdfs上建立input資料夾作為輸入內容存放的檔案目錄,將hadoop中etc/hadoop資料夾中的檔案複製到Hdfs中:
執行grep任務,偽分散式的MR任務執行方式與單機模式相同,區別在於偽分散式讀取的是HDFS中的檔案,單機模式是讀取本地檔案:
檢視執行結果,即Hdfs中output結果:
Hadoop執行程式時,輸出目錄不能存在,若要再次執行作業,則需要先刪除輸出資料夾:
./bin/hdfs dfs -rm -r output
關閉程序:
注意:下次啟動Hadoop時,則無需再次進行NameNode的初始化,只需要執行./sbin/start-dfs.sh即可。
啟動YARN
YARN(Yet Another Resource Negotiator)是新的MapReduce框架,從MapReduce中分離出來,負責資源管理與任務排程。YARN運行於MapReduce之上,提供了高可用性、高擴充套件性。上述的啟動Hadoop僅僅是啟動了MapReduce的環境。
啟動YARN來進行資源管理和任務排程需要修改幾個配置:
修改配置mapred-site.xml,首先將etc/hadoop/mapred-site.xml.template重名,然後修改配置:
修改yarn-site.xml配置:
配置完成後可以啟動YARN,通過執行hadoop中./sbin/start-yarn.sh指令碼來啟動(執行前先執行./sbin/start-dfs.sh):
啟動後通過jps檢視,可以看到多了NodeManager和ResourceManager兩個後臺進行,如圖:
開啟歷史伺服器,便於在Web中檢視任務執行情況:
啟動YARN後,執行例項方法與上述一樣。觀察日誌資訊可以發現,不啟動YARN時,是“mapred.LocalJobRunner”在跑任務,啟用YARN之後,是“mapred.YARNRunner”在跑任務。啟動YARN可以通過Web介面檢視任務的執行情況:http://localhost:8088/cluster,如圖:
關閉YARN和歷史伺服器:
注意:若不想啟動YARN,需要將mapred-site.xml重新命名,改回mapred-site.xml.template.
Hadoop環境變數配置
上述內容中,我們都是通過先進入到/usr/local/hadoop目錄中,再執行./sbin/[執行指令碼]或./bin/[執行指令碼],為便於平時的操作方便,我們可以配置Path環境變數來簡化我們的操作,配置如下,完成後便可直接執行hadoop中./sbin和./bin目錄下的指令碼:
網易雲免費體驗館,0成本體驗20+款雲產品!
更多網易技術、產品、運營經驗分享請點選。
相關文章:
【推薦】 NOS服務監控實踐
【推薦】 如何準確又通俗易懂地解釋大資料及其應用價值?
【推薦】 MongoDB的正確使用姿勢