Hadoop 叢集安裝與配置
1 Hadoop 是什麼?
Apache Hadoop 是一個支援資料密集型分散式應用程式的開源軟體框架,能在大型叢集上執行應用程式。Hadoop 框架實現了 MapReduce 程式設計正規化,把應用程式分成許多小部分,每個部分能在任意節點上執行。並且 Hadoop 提供了分散式檔案系統儲存所有計算節點的資料,為叢集帶來非常高的頻寬。
2 搭建說明
- 本文幾乎所有操作都需要在三臺伺服器上進行同樣的操作,所以為了便於表示,在需要三臺伺服器上進行同樣操作的時候會使用
x3
進行標註。 - 命令當中的
#
代表root
使用者執行。 - 命令當中的
$
代表hadoop
使用者執行。 ###
為該命令的註釋。
注:可在一臺機子上配置好後利用 scp
命令進行復制,若在虛擬機器則可直接複製虛擬機器。
2.1 節點機器配置
NodeName | OS | CPU | RAM | Disk | IP |
---|---|---|---|---|---|
NameNode | CentOS 7.2 | E7-4830 v3 @ 2.10GHz x2 | 2G | 100G | 192.168.1.69 |
DataNode1 | CentOS 7.2 | E7-4830 v3 @ 2.10GHz x2 | 2G | 500G | 192.168.1.70 |
DataNode2 | CentOS 7.2 | E7-4830 v3 @ 2.10GHz x2 | 2G | 500G | 192.168.1.71 |
2.2 軟體包版本
Software | Version |
---|---|
JDK | Oracle JDK 1.8.0_131(非OpenJDK) |
Hadoop | 2.8.0 |
3 安裝JDK x3
# mkdir -p /usr/local/java
# cd /usr/local/java
# wget http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.tar.gz
# tar -xvzf jdk-8u131-linux-x64.tar.gz
### 設定新的 JDK 為預設 JDK,如果機器已經安裝 OpenJDK,可能需要先解除安裝。
# echo "export JAVA_HOME=/usr/local/java/jdk1.8.0_131/" >> /etc/profile
# echo "export PATH=$PATH:$JAVA_HOME/bin" >> /etc/profile
# source /etc/profile
### 測試執行
# $JAVA_HOME/bin/java -version
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
4 關閉防火牆 x3
直接關閉整個防火牆不是一個明智的選擇,在具體環境中應該挑選出需要的埠,進行放行,本文由於篇幅原因,不再詳細討論,故採用直接關閉防火牆的方法。
# systemctl stop firewalld.service
# systemctl disable firewalld.service
5 配置 hostname
及區域網對映 x3
# hostnamectl set-hostname namenode ### 為 namenode 節點設定 hostname
# hostnamectl set-hostname datanode1 ### 為 datanode1 節點設定 hostname
# hostnamectl set-hostname datanode2 ### 為 datanode2 節點設定 hostname
# echo "192.168.1.69 namenode" >> /etc/hosts
# echo "192.168.1.70 datanode1" >> /etc/hosts
# echo "192.168.1.71 datanode2" >> /etc/hosts
6 建立 hadoop 使用者以及 hadoop 使用者組 x3
# groupadd hadoop
# useradd -m -g hadoop hadoop
# passwd hadoop
7 SSH 免密登入
Hadoop 在 namenode
節點中使用 ssh 來訪問各節點伺服器,例如開啟或關閉 hadoop。顯然在大型叢集中,不可能手動逐個輸入密碼,在這種情況下,我們可以利用 ssh-agent
代理我們輸入密碼。
注:該設定只需要在 namenode
節點設定。
7.1 ssh-agent
配置 ssh-agent 開機自動執行
# echo 'eval $(ssh-agent)' >> /etc/profile
# source /etc/profile
7.2 配置免密登入
在 namenode
節點上登入 hadoop 使用者
$ ssh-keygen -t rsa -f ~/.ssh/id_rsa ### 輸入金鑰
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ chmod 644 ~/.ssh/authorized_keys
$ ssh-copy-id datanode1 ### 將公鑰 copy 到 datanode1
$ ssh-copy-id datanode2 ### 將公鑰 copy 到 datanode2
$ ssh-add ~/.ssh/id_rsa ### 使用 ssh-agent 實現免密登入
$ ssh datanode1 ### 測試無需密碼即可登入 datanode1
8 磁碟掛載(可選) x3
# mkdir /home/hadoop/hdfs
# mount /dev/sdb1 /home/hadoop/hdfs/
# chown -R hadoop:hadoop /home/hadoop/hdfs/
# echo "/dev/sdb1 /home/hadoop/hdfs ext4 defaults 0 0" >> /etc/fstab
9 安裝 Hadoop x3
# cd /usr/local
# wget https://mirrors.scau.edu.cn/hadoop/hadoop-2.8.0.tar.gz ### 使用自己的映象源
# wget https://mirrors.ustc.edu.cn/apache/hadoop/common/hadoop-2.8.0/hadoop-2.8.0.tar.gz
# tar -xvzf hadoop-2.8.0.tar.gz
# chown -R hadoop:hadoop hadoop-2.8.0
10 配置 Hadoop x3
複製預設配置檔案,在升級 hadoop 版本時可獨立出來。
$ mkdir ~/config/
$ cp -r /usr/local/hadoop-2.8.0/etc/hadoop/ ~/config/
指定 hadoop 執行所使用的 JDK 與配置目錄, vim ~/config/hadoop/hadoop-env.sh
$ export JAVA_HOME=/usr/local/java/jdk1.8.0_131/
$ export HADOOP_CONF_DIR=/home/hadoop/config/hadoop/
### 最好將該環境變數也加入 /etc/profile
# echo "export HADOOP_CONF_DIR=/home/hadoop/config/hadoop/" >> /etc/profile
10.1 log 儲存位置
修改 hadoop log 儲存位置。
$ echo "export HADOOP_LOG_DIR=~/log/hadoop" >> ~/config/hadoop/hadoop-env.sh
修改 YARN log 儲存位置,$ vim config/hadoop/yarn-env.sh
。
YARN_LOG_DIR="/home/hadoop/log/yarn/"
10.2 配置 core-site.xml
$ vim ~/config/hadoop/core-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<description>預設檔案系統及埠</description>
<name>fs.defaultFS</name>
<value>hdfs://namenode/</value>
<final>true</final>
</property>
</configuration>
10.3 配置 hdfs-site.xml
$ vim ~/config/hadoop/hdfs-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<description>namedoe 儲存永久性的後設資料目錄列表</description>
<name>dfs.namenode.name.dir</name>
<value>/home/hadoop/hdfs/name/</value>
<final>true</final>
</property>
<property>
<description>datanode 存放資料塊的目錄列表</description>
<name>dfs.datanode.data.dir</name>
<value>/home/hadoop/hdfs/data/</value>
<final>true</final>
</property>
</configuration>
10.4 配置 mapred-site.xml
$ vim ~/config/hadoop/mapred-site.xml
<?xml version="1.0"?>
<configuration>
<property>
<description>MapReduce 執行框架設為 Hadoop YARN. </description>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<description>Map 和 Reduce 執行的比例,Map 執行到百分之幾後開始 Reduce 作業</description>
<!-- 此處設為1.0 即為 完成 Map 作業後才開始 Reduce 作業,記憶體情況不夠的可設為 1.0 預設值為 0.05 -->
<name>mapreduce.job.reduce.slowstart.completedmaps</name>
<value>1.0</value>
</property>
</configuration>
10.5 配置 yarn-site.xml
$ vim ~/config/hadoop/yarn-site.xml
<?xml version="1.0"?>
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<description>The address of the applications manager interface in the RM.</description>
<name>yarn.resourcemanager.address</name>
<value>namenode:8032</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<description>儲存中間資料的本地目錄</description>
<name>yarn.nodemanager.local-dirs</name>
<value>/home/hadoop/nm-local-dir</value>
<final>true</final>
</property>
<property>
<description>每個容器可在 RM 申請的最大記憶體</description>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>2048</value>
<final>true</final>
</property>
<property>
<description>每個容器可在 RM 申請的最小記憶體</description>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>300</value>
<final>true</final>
</property>
<property>
<description>自動檢測節點 CPU 與 Mem</description>
<name>yarn.nodemanager.resource.detect-hardware-capabilities</name>
<value>true</value>
</property>
<property>
<description>The address of the scheduler interface.</description>
<name>yarn.resourcemanager.scheduler.address</name>
<value>namenode:8030</value>
</property>
<property>
<description>The address of the RM web application.</description>
<name>yarn.resourcemanager.webapp.address</name>
<value>namenode:8088</value>
</property>
<property>
<description>The address of the resource tracker interface.</description>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>namenode:8031</value>
</property>
<property>
<description>The hostname of the RM.</description>
<name>yarn.resourcemanager.hostname</name>
<value>namenode</value>
</property>
</configuration>
10.6 配置 slaves
$ vim ~/config/hadoop/slaves
namenode
datanode1
datanode2
11 最佳化 namenode 節點命令使用
$ echo "export PATH=$PATH:/usr/local/hadoop-2.8.0/bin/:/usr/local/hadoop-2.8.0/sbin/" >> ~/.bash_profile
$ source ~/.bash_profile
12 啟動叢集及測試
測試之前最好重啟一遍三臺機器,以確保配置都生效,並且沒有其他問題。
登入 namenode
節點
$ ssh-add ~/.ssh/id_rsa ### 驗證金鑰
$ hadoop namenode -format ### 初始化叢集
$ start-dfs.sh ### 啟動 HDFS
$ start-yarn.sh ### 啟動 YARN
12.1 叢集總覽
NodeName | Web | Address |
---|---|---|
namenote | HDFS | http://192.168.1.69:50070 |
RM | http://192.168.1.69:8088 | |
NM | http://192.168.1.69:8042 | |
datanode1 | HDFS | http://192.168.1.70:50075 |
NM | http://192.168.1.70:8042 | |
datanode2 | HDFS | http://192.168.1.71:50075 |
NM | http://192.168.1.71:8042 |
12.2 測試用例
hadoop 自帶了許多測試用例,所以可以很方便的快速測試叢集是否搭建成功。
$ yarn jar /usr/local/hadoop-2.8.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.0.jar randomwriter random-data
執行上述命令後,開啟 RM 以及 NM 的 URL ,檢視任務是否被執行,如執行,則搭建成功。
12.3 圖片展示
13 總結
本文從零開始搭建了具有三個節點伺服器的 Hadoop 叢集,示範了 Hadoop 搭建叢集的基本配置。並且從中我們可以知道 Hadoop 叢集的每臺機子的配置幾乎是相同的,這是大量重複性的勞動,因此使用 docker
會大大加快叢集的部署。文中的配置檔案,是我根據我自己的三臺伺服器的機器硬體所決定的引數,讀者應該根據自己的實際情況選擇引數的設定,下文的參考資料給出了各種屬性的說明以及預設值。
14 參考資料
相關文章
- Hadoop叢集安裝配置Hadoop
- 完全分散式模式hadoop叢集安裝與配置分散式模式Hadoop
- 【Hadoop】 分散式Hadoop叢集安裝配置Hadoop分散式
- Hadoop叢集安裝Hadoop
- hadoop叢集安裝檔案Hadoop
- 《生產環境下Hadoop大叢集安裝與配置+DNS+NFS》HadoopDNSNFS
- Hadoop叢集安裝詳細教程Hadoop
- WAS叢集安裝配置過程
- WeblogicServer11G叢集安裝與配置WebServer
- 學習一:hadoop 1.0.1叢集安裝Hadoop
- hadoop+hbase+zookeeper叢集安裝方法Hadoop
- mongo副本集叢集安裝配置Go
- 【原創】生產環境下Hadoop大叢集安裝與配置+DNS+NFSHadoopDNSNFS
- Storm叢集安裝與部署ORM
- hadoop叢集安裝遇到Duplicate metricsName:getProtocolVersionHadoopProtocol
- hadoop學習之hadoop完全分散式叢集安裝Hadoop分散式
- Windows下Weblogic 11G叢集安裝與配置WindowsWeb
- Zookeeper介紹與叢集安裝
- Hadoop3.0完全分散式叢集安裝部署Hadoop分散式
- 【redis叢集安裝】Redis
- zookeeper 叢集安裝
- kafka叢集安裝Kafka
- hbase叢集安裝
- StarRocks 叢集安裝
- cdh 叢集安裝
- Hadoop叢集安裝-CDH5(5臺伺服器叢集)HadoopH5伺服器
- Hadoop叢集安裝-CDH5(3臺伺服器叢集)HadoopH5伺服器
- ElasticSearch 6.6.0叢集安裝Elasticsearch
- TiDB叢集安裝TiDB
- Elasticsearch 叢集安裝部署Elasticsearch
- 【Zookeeper】zookeeper叢集安裝
- 記HBase叢集安裝
- hadoop叢集內lzo的安裝與配置Hadoop
- Spark 叢集搭建從零開始之3 Spark Standalone叢集安裝、配置與測試Spark
- Spark2.4.5叢集安裝與本地開發Spark
- zookeeper 叢集安裝(單點與分散式成功安裝)分散式
- kubernetes叢集安裝
- elasticsearch叢集安裝(3臺)Elasticsearch