Hadoop是由Apache基金會使用Java語言開發的分布式開源軟體架構,使用者可以在不瞭解分布式底層細節的情況下,開發分布式程式,充分利用叢集的能力進行高速運算和儲存。本文介紹如何在Linux作業系統的ECS執行個體上快速搭建Hadoop分布式環境。
前提條件
搭建Hadoop環境時,已有的ECS執行個體必須滿足以下條件:
公網IP:執行個體已指派公網IP地址或綁定Elastic IP Address(EIP)。
作業系統:Linux作業系統。
執行個體安全性群組的入方向規則已允許存取22、443、8088(Hadoop YARN預設的Web UI連接埠)、9870(Hadoop NameNode預設的Web UI連接埠)連接埠。具體操作,請參見添加安全性群組規則。
背景資訊
Apache Hadoop軟體庫是一個架構,它允許通過簡單的編程模型在由多台電腦群組成的叢集上對大規模資料集進行分散式處理。該架構設計能夠從單個伺服器擴充到數千台機器,每台機器都提供本地計算和儲存能力。Hadoop並不依賴硬體來實現高可用性,而是將其自身設計為能夠在應用程式層檢測並處理故障,因此能在可能各自存在故障風險的電腦叢集之上,提供高度可用的服務。
Hadoop的核心組件是HDFS(Hadoop Distributed File System)和MapReduce:
HDFS:是一個Distributed File System,可用於應用程式資料的分布式儲存和讀取。
MapReduce:是一個分散式運算架構,MapReduce的核心思想是把計算任務分配給叢集內的伺服器執行。通過對計算任務的拆分(Map計算和Reduce計算),再根據任務調度器(JobTracker)對任務進行分散式運算。
更多資訊,請參見Hadoop官網。
Hadoop與Java開發套件(JDK)緊密整合,不同版本的Hadoop對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,如您使用其他版本,請參考Hadoop官網指南。更多資訊,請參見Hadoop Java Versions。
步驟一:安裝JDK
遠端連線已建立的ECS執行個體。
具體操作,請參見通過密碼或密鑰認證登入Linux執行個體。
執行以下命令,下載JDK 1.8安裝包。
wget https://download.java.net/openjdk/jdk8u41/ri/openjdk-8u41-b04-linux-x64-14_jan_2020.tar.gz
執行以下命令,解壓下載的JDK 1.8安裝包。
tar -zxvf openjdk-8u41-b04-linux-x64-14_jan_2020.tar.gz
執行以下命令,移動並重新命名JDK安裝包。
本樣本中將JDK安裝包重新命名為
java8
,您可以根據需要使用其他名稱。sudo mv java-se-8u41-ri/ /usr/java8
執行以下命令,配置Java環境變數。
如果您將JDK安裝包重新命名為其他名稱,需將以下命令中的
java8
替換為實際的名稱。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
執行以下命令,查看JDK是否成功安裝。
java -version
返回類似如下資訊,表示JDK已安裝成功。
步驟二:安裝Hadoop
執行以下命令,下載Hadoop安裝包。
wget https://mirrors.bfsu.edu.cn/apache/hadoop/common/hadoop-3.2.4/hadoop-3.2.4.tar.gz
執行以下命令,將Hadoop安裝包解壓至
/opt/hadoop
。sudo tar -zxvf hadoop-3.2.4.tar.gz -C /opt/ sudo mv /opt/hadoop-3.2.4 /opt/hadoop
執行以下命令,配置Hadoop環境變數。
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
執行以下命令,修改設定檔
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'
執行以下命令,測試Hadoop是否安裝成功。
hadoop version
返回類似如下資訊,表示Hadoop已安裝成功。
步驟三:配置Hadoop
修改Hadoop設定檔
core-site.xml
。執行以下命令,進入編輯頁面。
sudo vim /opt/hadoop/etc/hadoop/core-site.xml
輸入
i
,進入編輯模式。在
<configuration></configuration>
節點內,插入如下內容。<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
。執行以下命令,進入編輯頁面。
sudo vim /opt/hadoop/etc/hadoop/hdfs-site.xml
輸入
i
,進入編輯模式。在
<configuration></configuration>
節點內,插入如下內容。<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免密登入
執行以下命令,建立公開金鑰和私密金鑰。
ssh-keygen -t rsa
回顯資訊如下所示,表示建立公開金鑰和私密金鑰成功。
執行以下命令,將公開金鑰添加到
authorized_keys
檔案中。cd .ssh cat id_rsa.pub >> authorized_keys
步驟五:啟動Hadoop
執行以下命令,初始化
namenode
。hadoop namenode -format
啟動Hadoop。
重要出於系統安全和穩定性考慮,Hadoop官方不推薦使用root使用者來啟動Hadoop服務,直接使用root使用者會因為許可權問題無法啟動Hadoop。您可以通過非root使用者身份啟動Hadoop服務,例如
ecs-user
使用者等。如果您一定要使用root使用者啟動Hadoop服務,請在瞭解Hadoop許可權控制及相應風險之後,修改以下設定檔。
請注意:使用root使用者啟動Hadoop服務會帶來嚴重的安全風險,包括但不限於資料泄露、惡意軟體更容易獲得系統最高許可權、意料之外的許可權問題或行為。更多許可權說明,請參見Hadoop官方文檔。
執行以下命令,啟動HDFS服務。
這個指令碼會啟動NameNode、SecondaryNameNode和DataNode等組件,從而啟動HDFS服務。
start-dfs.sh
回顯資訊如下所示時,表示HDFS服務已啟動。
執行以下命令,啟動YARN服務。
這個指令碼會啟動ResourceManager、NodeManager和ApplicationHistoryServer等組件,從而啟動YARN服務。
start-yarn.sh
回顯資訊如下所示時,表示YARN服務已啟動。
執行以下命令,可以查看成功啟動的進程。
jps
成功啟動的進程如下所示。
在本地瀏覽器地址欄輸入
http://<ECS公網IP>:8088
,訪問YARN的Web UI介面。通過該介面可以查看整個叢集的資源使用方式、應用程式狀態(比如MapReduce作業)、隊列資訊等。
重要需確保在ECS執行個體所在安全性群組的入方向中允許存取Hadoop YARN所需的8088連接埠,否則無法訪問。具體操作,請參見添加安全性群組規則。
在本地瀏覽器地址欄輸入
http://<ECS公網IP>:9870
,訪問NameNode的Web UI介面。該介面提供了有關HDFS檔案系統狀態、叢集健康情況、活動節點列表、NameNode日誌等資訊。
顯示如下介面,則表示Hadoop分布式環境已搭建完成。
重要需確保在ECS執行個體所在安全性群組的入方向中允許存取Hadoop NameNode所需9870連接埠,否則無法訪問。具體操作,請參見添加安全性群組規則。