搭建Hadoop環(huán)境
Hadoop是由Apache基金會(huì)使用Java語(yǔ)言開(kāi)發(fā)的分布式開(kāi)源軟件框架,用戶可以在不了解分布式底層細(xì)節(jié)的情況下,開(kāi)發(fā)分布式程序,充分利用集群的能力進(jìn)行高速運(yùn)算和存儲(chǔ)。本文介紹如何在Linux操作系統(tǒng)的ECS實(shí)例上快速搭建Hadoop分布式環(huán)境。
前提條件
搭建Hadoop環(huán)境時(shí),已有的ECS實(shí)例必須滿足以下條件:
公網(wǎng)IP:實(shí)例已分配公網(wǎng)IP地址或綁定彈性公網(wǎng)IP(EIP)。
操作系統(tǒng):Linux操作系統(tǒng)。
實(shí)例安全組的入方向規(guī)則已放行22、443、8088(Hadoop YARN默認(rèn)的Web UI端口)、9870(Hadoop NameNode默認(rèn)的Web UI端口)端口。具體操作,請(qǐng)參見(jiàn)添加安全組規(guī)則。
背景信息
Apache Hadoop軟件庫(kù)是一個(gè)框架,它允許通過(guò)簡(jiǎn)單的編程模型在由多臺(tái)計(jì)算機(jī)組成的集群上對(duì)大規(guī)模數(shù)據(jù)集進(jìn)行分布式處理。該框架設(shè)計(jì)能夠從單個(gè)服務(wù)器擴(kuò)展到數(shù)千臺(tái)機(jī)器,每臺(tái)機(jī)器都提供本地計(jì)算和存儲(chǔ)能力。Hadoop并不依賴硬件來(lái)實(shí)現(xiàn)高可用性,而是將其自身設(shè)計(jì)為能夠在應(yīng)用層檢測(cè)并處理故障,因此能在可能各自存在故障風(fēng)險(xiǎn)的計(jì)算機(jī)集群之上,提供高度可用的服務(wù)。
Hadoop的核心部件是HDFS(Hadoop Distributed File System)和MapReduce:
HDFS:是一個(gè)分布式文件系統(tǒng),可用于應(yīng)用程序數(shù)據(jù)的分布式存儲(chǔ)和讀取。
MapReduce:是一個(gè)分布式計(jì)算框架,MapReduce的核心思想是把計(jì)算任務(wù)分配給集群內(nèi)的服務(wù)器執(zhí)行。通過(guò)對(duì)計(jì)算任務(wù)的拆分(Map計(jì)算和Reduce計(jì)算),再根據(jù)任務(wù)調(diào)度器(JobTracker)對(duì)任務(wù)進(jìn)行分布式計(jì)算。
更多信息,請(qǐng)參見(jiàn)Hadoop官網(wǎng)。
Hadoop與Java開(kāi)發(fā)工具包(JDK)緊密集成,不同版本的Hadoop對(duì)JDK的要求也有所不同。
Hadoop 3.3:Java 8和Java 11
Hadoop 3.0.x~3.2.x:Java 8
Hadoop 2.7.x~2.10.x:Java 7和Java 8
本文使用的版本為Hadoop 3.2.4和Java 8,如您使用其他版本,請(qǐng)參考Hadoop官網(wǎng)指南。更多信息,請(qǐng)參見(jiàn)Hadoop Java Versions。
步驟一:安裝JDK
遠(yuǎn)程連接已創(chuàng)建的ECS實(shí)例。
具體操作,請(qǐng)參見(jiàn)使用Workbench工具以SSH協(xié)議登錄Linux實(shí)例。
執(zhí)行以下命令,下載JDK 1.8安裝包。
wget https://download.java.net/openjdk/jdk8u41/ri/openjdk-8u41-b04-linux-x64-14_jan_2020.tar.gz
執(zhí)行以下命令,解壓下載的JDK 1.8安裝包。
tar -zxvf openjdk-8u41-b04-linux-x64-14_jan_2020.tar.gz
執(zhí)行以下命令,移動(dòng)并重命名JDK安裝包。
本示例中將JDK安裝包重命名為
java8
,您可以根據(jù)需要使用其他名稱。sudo mv java-se-8u41-ri/ /usr/java8
執(zhí)行以下命令,配置Java環(huán)境變量。
如果您將JDK安裝包重命名為其他名稱,需將以下命令中的
java8
替換為實(shí)際的名稱。sudo sh -c "echo 'export JAVA_HOME=/usr/java8' >> /etc/profile" sudo sh -c 'echo "export PATH=\$PATH:\$JAVA_HOME/bin" >> /etc/profile' source /etc/profile
執(zhí)行以下命令,查看JDK是否成功安裝。
java -version
返回類似如下信息,表示JDK已安裝成功。
步驟二:安裝Hadoop
執(zhí)行以下命令,下載Hadoop安裝包。
wget http://mirrors.cloud.aliyuncs.com/apache/hadoop/common/hadoop-3.2.4/hadoop-3.2.4.tar.gz
執(zhí)行以下命令,將Hadoop安裝包解壓至
/opt/hadoop
。sudo tar -zxvf hadoop-3.2.4.tar.gz -C /opt/ sudo mv /opt/hadoop-3.2.4 /opt/hadoop
執(zhí)行以下命令,配置Hadoop環(huán)境變量。
sudo sh -c "echo 'export HADOOP_HOME=/opt/hadoop' >> /etc/profile" sudo sh -c "echo 'export PATH=\$PATH:/opt/hadoop/bin' >> /etc/profile" sudo sh -c "echo 'export PATH=\$PATH:/opt/hadoop/sbin' >> /etc/profile" source /etc/profile
執(zhí)行以下命令,修改配置文件
yarn-env.sh
和hadoop-env.sh
。sudo sh -c 'echo "export JAVA_HOME=/usr/java8" >> /opt/hadoop/etc/hadoop/yarn-env.sh' sudo sh -c 'echo "export JAVA_HOME=/usr/java8" >> /opt/hadoop/etc/hadoop/hadoop-env.sh'
執(zhí)行以下命令,測(cè)試Hadoop是否安裝成功。
hadoop version
返回類似如下信息,表示Hadoop已安裝成功。
步驟三:配置Hadoop
修改Hadoop配置文件
core-site.xml
。執(zhí)行以下命令,進(jìn)入編輯頁(yè)面。
sudo vim /opt/hadoop/etc/hadoop/core-site.xml
輸入
i
,進(jìn)入編輯模式。在
<configuration></configuration>
節(jié)點(diǎn)內(nèi),插入如下內(nèi)容。<property> <name>hadoop.tmp.dir</name> <value>file:/opt/hadoop/tmp</value> <description>location to store temporary files</description> </property> <property> <name>fs.defaultFS</name> <value>hdfs://localhost:9000</value> </property>
按
Esc
,退出編輯模式,并輸入:wq
保存并退出。
修改Hadoop配置文件
hdfs-site.xml
。執(zhí)行以下命令,進(jìn)入編輯頁(yè)面。
sudo vim /opt/hadoop/etc/hadoop/hdfs-site.xml
輸入
i
,進(jìn)入編輯模式。在
<configuration></configuration>
節(jié)點(diǎn)內(nèi),插入如下內(nèi)容。<property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:/opt/hadoop/tmp/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/opt/hadoop/tmp/dfs/data</value> </property>
按
Esc
,退出編輯模式,并輸入:wq
后保存并退出。
步驟四:配置SSH免密登錄
執(zhí)行以下命令,創(chuàng)建公鑰和私鑰。
ssh-keygen -t rsa
回顯信息如下所示,表示創(chuàng)建公鑰和私鑰成功。
執(zhí)行以下命令,將公鑰添加到
authorized_keys
文件中。cd .ssh cat id_rsa.pub >> authorized_keys
步驟五:?jiǎn)?dòng)Hadoop
執(zhí)行以下命令,初始化
namenode
。hadoop namenode -format
啟動(dòng)Hadoop。
重要出于系統(tǒng)安全和穩(wěn)定性考慮,Hadoop官方不推薦使用root用戶來(lái)啟動(dòng)Hadoop服務(wù),直接使用root用戶會(huì)因?yàn)闄?quán)限問(wèn)題無(wú)法啟動(dòng)Hadoop。您可以通過(guò)非root用戶身份啟動(dòng)Hadoop服務(wù),例如
ecs-user
用戶等。如果您一定要使用root用戶啟動(dòng)Hadoop服務(wù),請(qǐng)?jiān)诹私釮adoop權(quán)限控制及相應(yīng)風(fēng)險(xiǎn)之后,修改以下配置文件。
請(qǐng)注意:使用root用戶啟動(dòng)Hadoop服務(wù)會(huì)帶來(lái)嚴(yán)重的安全風(fēng)險(xiǎn),包括但不限于數(shù)據(jù)泄露、惡意軟件更容易獲得系統(tǒng)最高權(quán)限、意料之外的權(quán)限問(wèn)題或行為。更多權(quán)限說(shuō)明,請(qǐng)參見(jiàn)Hadoop官方文檔。
一般情況下,以下配置文件位于
/opt/hadoop/sbin
目錄下。在start-dfs.sh和stop-dfs.sh兩個(gè)文件中添加以下參數(shù)。
HDFS_DATANODE_USER=root HADOOP_SECURE_DN_USER=hdfs HDFS_NAMENODE_USER=root HDFS_SECONDARYNAMENODE_USER=root
在start-yarn.sh,stop-yarn.sh兩個(gè)文件中添加以下參數(shù)。
YARN_RESOURCEMANAGER_USER=root HADOOP_SECURE_DN_USER=yarn YARN_NODEMANAGER_USER=root
執(zhí)行以下命令,啟動(dòng)HDFS服務(wù)。
這個(gè)腳本會(huì)啟動(dòng)NameNode、SecondaryNameNode和DataNode等組件,從而啟動(dòng)HDFS服務(wù)。
start-dfs.sh
回顯信息如下所示時(shí),表示HDFS服務(wù)已啟動(dòng)。
執(zhí)行以下命令,啟動(dòng)YARN服務(wù)。
這個(gè)腳本會(huì)啟動(dòng)ResourceManager、NodeManager和ApplicationHistoryServer等組件,從而啟動(dòng)YARN服務(wù)。
start-yarn.sh
回顯信息如下所示時(shí),表示YARN服務(wù)已啟動(dòng)。
執(zhí)行以下命令,可以查看成功啟動(dòng)的進(jìn)程。
jps
成功啟動(dòng)的進(jìn)程如下所示。
在本地瀏覽器地址欄輸入
http://<ECS公網(wǎng)IP>:8088
,訪問(wèn)YARN的Web UI界面。通過(guò)該界面可以查看整個(gè)集群的資源使用情況、應(yīng)用程序狀態(tài)(比如MapReduce作業(yè))、隊(duì)列信息等。
重要需確保在ECS實(shí)例所在安全組的入方向中放行Hadoop YARN所需的8088端口,否則無(wú)法訪問(wèn)。具體操作,請(qǐng)參見(jiàn)添加安全組規(guī)則。
在本地瀏覽器地址欄輸入
http://<ECS公網(wǎng)IP>:9870
,訪問(wèn)NameNode的Web UI界面。該界面提供了有關(guān)HDFS文件系統(tǒng)狀態(tài)、集群健康狀況、活動(dòng)節(jié)點(diǎn)列表、NameNode日志等信息。
顯示如下界面,則表示Hadoop分布式環(huán)境已搭建完成。
重要需確保在ECS實(shí)例所在安全組的入方向中放行Hadoop NameNode所需9870端口,否則無(wú)法訪問(wèn)。具體操作,請(qǐng)參見(jiàn)添加安全組規(guī)則。