關注:Java提升營,最新文章第一時間送達,10T 免費學習資料隨時領取!!!
最近有人提出能不能發一些大數據相關的知識,No problem ! 今天先從安裝環境說起,搭建起自己的學習環境。
Hadoop的三種搭建方式以及使用環境:
- 單機版適合開發調試;
- 偽分布式適合模擬集群學習;
- 完全分布式適用生產環境。
這篇文件介紹如何搭建完全分布式的hadoop集群,一個主節點,兩個數據節點。
先決條件
- 准備3台服務器
虛擬機
、物理機
、雲上實例
均可,本篇使用Openstack
私有雲里面的3個實例進行安裝部署。
- 操作系統及軟件版本
服務器 | 系統 | 內存 | IP | 規划 | JDK | HADOOP |
---|---|---|---|---|---|---|
node1 | Ubuntu 18.04.2 LTS | 8G | 10.101.18.21 | master | JDK 1.8.0_222 | hadoop-3.2.1 |
node2 | Ubuntu 18.04.2 LTS | 8G | 10.101.18.8 | slave1 | JDK 1.8.0_222 | hadoop-3.2.1 |
node3 | Ubuntu 18.04.2 LTS | 8G | 10.101.18.24 | slave2 | JDK 1.8.0_222 | hadoop-3.2.1 |
- 三台機器安裝JDK
因為Hadoop是用Java語言編寫的,所以計算機上需要安裝Java環境,我在這使用JDK 1.8.0_222
(推薦使用Sun JDK)
安裝命令
sudo apt install openjdk-8-jdk-headless
配置JAVA環境變量,在當前用戶根目錄下的.profile文件最下面加入以下內容:
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
使用source
命令讓立即生效
source .profile
- host配置
修改三台服務器的hosts文件
vim /etc/hosts
#添加下面內容,根據個人服務器IP配置
10.101.18.21 master
10.101.18.8 slave1
10.101.18.24 slave2
免密登陸配置
- 生產秘鑰
ssh-keygen -t rsa
- master免密登錄到slave中
ssh-copy-id -i ~/.ssh/id_rsa.pub master
ssh-copy-id -i ~/.ssh/id_rsa.pub slave1
ssh-copy-id -i ~/.ssh/id_rsa.pub slave2
- 測試免密登陸
ssh master
ssh slave1
ssh slave2
Hadoop搭建
我們先在Master節點下載Hadoop包,然后修改配置,隨后復制到其他Slave節點稍作修改就可以了。
- 下載安裝包,創建Hadoop目錄
#下載
wget http://http://apache.claz.org/hadoop/common/hadoop-3.2.1//hadoop-3.2.1.tar.gz
#解壓到 /usr/local 目錄
sudo tar -xzvf hadoop-3.2.1.tar.gz -C /usr/local
#修改hadoop的文件權限
sudo chown -R ubuntu:ubuntu hadoop-3.2.1.tar.gz
#重命名文件夾
sudo mv hadoop-3.2.1 hadoop
- 配置Master節點的Hadoop環境變量
和配置JDK環境變量一樣,編輯用戶目錄下的.profile
文件, 添加Hadoop環境變量:
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
執行 source .profile
讓立即生效
- 配置Master節點
Hadoop 的各個組件均用XML文件進行配置, 配置文件都放在 /usr/local/hadoop/etc/hadoop
目錄中:
- core-site.xml:配置通用屬性,例如HDFS和MapReduce常用的I/O設置等
- hdfs-site.xml:Hadoop守護進程配置,包括namenode、輔助namenode和datanode等
- mapred-site.xml:MapReduce守護進程配置
- yarn-site.xml:資源調度相關配置
- 編輯
core-site.xml
文件,修改內容如下:
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
</configuration>
參數說明:
- fs.defaultFS:默認文件系統,HDFS的客戶端訪問HDFS需要此參數
- hadoop.tmp.dir:指定Hadoop數據存儲的臨時目錄,其它目錄會基於此路徑, 建議設置到一個足夠空間的地方,而不是默認的/tmp下
如沒有配置
hadoop.tmp.dir
參數,系統使用默認的臨時目錄:/tmp/hadoo-hadoop。而這個目錄在每次重啟后都會被刪除,必須重新執行format才行,否則會出錯。
- 編輯
hdfs-site.xml
,修改內容如下:
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.name.dir</name>
<value>/usr/local/hadoop/hdfs/name</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>/usr/local/hadoop/hdfs/data</value>
</property>
</configuration>
參數說明:
- dfs.replication:數據塊副本數
- dfs.name.dir:指定namenode節點的文件存儲目錄
- dfs.data.dir:指定datanode節點的文件存儲目錄
- 編輯
mapred-site.xml
,修改內容如下:
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.application.classpath</name>
<value>$HADOOP_HOME/share/hadoop/mapreduce/*:$HADOOP_HOME/share/hadoop/mapreduce/lib/*</value>
</property>
</configuration>
- 編輯
yarn-site.xml
,修改內容如下:
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_HOME</value>
</property>
</configuration>
- 編輯
workers
, 修改內容如下:
slave1
slave2
配置worker節點
- 配置Slave節點
將Master節點配置好的Hadoop打包,發送到其他兩個節點:
# 打包hadoop包
tar -cxf hadoop.tar.gz /usr/local/hadoop
# 拷貝到其他兩個節點
scp hadoop.tar.gz ubuntu@slave1:~
scp hadoop.tar.gz ubuntu@slave2:~
在其他節點加壓Hadoop包到/usr/local
目錄
sudo tar -xzvf hadoop.tar.gz -C /usr/local/
配置Slave1和Slaver2兩個節點的Hadoop環境變量:
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
啟動集群
- 格式化HDFS文件系統
進入Master節點的Hadoop目錄,執行一下操作:
bin/hadoop namenode -format
格式化namenode,第一次啟動服務前執行的操作,以后不需要執行。
截取部分日志(看第5行日志表示格式化成功):
2019-11-11 13:34:18,960 INFO util.GSet: VM type = 64-bit
2019-11-11 13:34:18,960 INFO util.GSet: 0.029999999329447746% max memory 1.7 GB = 544.5 KB
2019-11-11 13:34:18,961 INFO util.GSet: capacity = 2^16 = 65536 entries
2019-11-11 13:34:18,994 INFO namenode.FSImage: Allocated new BlockPoolId: BP-2017092058-10.101.18.21-1573450458983
2019-11-11 13:34:19,010 INFO common.Storage: Storage directory /usr/local/hadoop/hdfs/name has been successfully formatted.
2019-11-11 13:34:19,051 INFO namenode.FSImageFormatProtobuf: Saving image file /usr/local/hadoop/hdfs/name/current/fsimage.ckpt_0000000000000000000 using no compression
2019-11-11 13:34:19,186 INFO namenode.FSImageFormatProtobuf: Image file /usr/local/hadoop/hdfs/name/current/fsimage.ckpt_0000000000000000000 of size 401 bytes saved in 0 seconds .
2019-11-11 13:34:19,207 INFO namenode.NNStorageRetentionManager: Going to retain 1 images with txid >= 0
2019-11-11 13:34:19,214 INFO namenode.FSImage: FSImageSaver clean checkpoint: txid=0 when meet shutdown.
- 啟動Hadoop集群
sbin/start-all.sh
啟動過程遇到的問題與解決方案:
- 錯誤:master: rcmd: socket: Permission denied
解決:
執行 echo "ssh" > /etc/pdsh/rcmd_default
- 錯誤:JAVA_HOME is not set and could not be found.
解決:
修改三個節點的hadoop-env.sh
,添加下面JAVA環境變量
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
- 使用jps命令查看運行情況
Master節點執行輸出:
19557 ResourceManager
19914 Jps
19291 SecondaryNameNode
18959 NameNode
Slave節點執行輸入:
18580 NodeManager
18366 DataNode
18703 Jps
- 查看Hadoop集群狀態
hadoop dfsadmin -report
查看結果:
Configured Capacity: 41258442752 (38.42 GB)
Present Capacity: 5170511872 (4.82 GB)
DFS Remaining: 5170454528 (4.82 GB)
DFS Used: 57344 (56 KB)
DFS Used%: 0.00%
Replicated Blocks:
Under replicated blocks: 0
Blocks with corrupt replicas: 0
Missing blocks: 0
Missing blocks (with replication factor 1): 0
Low redundancy blocks with highest priority to recover: 0
Pending deletion blocks: 0
Erasure Coded Block Groups:
Low redundancy block groups: 0
Block groups with corrupt internal blocks: 0
Missing block groups: 0
Low redundancy blocks with highest priority to recover: 0
Pending deletion blocks: 0
-------------------------------------------------
Live datanodes (2):
Name: 10.101.18.24:9866 (slave2)
Hostname: slave2
Decommission Status : Normal
Configured Capacity: 20629221376 (19.21 GB)
DFS Used: 28672 (28 KB)
Non DFS Used: 16919797760 (15.76 GB)
DFS Remaining: 3692617728 (3.44 GB)
DFS Used%: 0.00%
DFS Remaining%: 17.90%
Configured Cache Capacity: 0 (0 B)
Cache Used: 0 (0 B)
Cache Remaining: 0 (0 B)
Cache Used%: 100.00%
Cache Remaining%: 0.00%
Xceivers: 1
Last contact: Mon Nov 11 15:00:27 CST 2019
Last Block Report: Mon Nov 11 14:05:48 CST 2019
Num of Blocks: 0
Name: 10.101.18.8:9866 (slave1)
Hostname: slave1
Decommission Status : Normal
Configured Capacity: 20629221376 (19.21 GB)
DFS Used: 28672 (28 KB)
Non DFS Used: 19134578688 (17.82 GB)
DFS Remaining: 1477836800 (1.38 GB)
DFS Used%: 0.00%
DFS Remaining%: 7.16%
Configured Cache Capacity: 0 (0 B)
Cache Used: 0 (0 B)
Cache Remaining: 0 (0 B)
Cache Used%: 100.00%
Cache Remaining%: 0.00%
Xceivers: 1
Last contact: Mon Nov 11 15:00:24 CST 2019
Last Block Report: Mon Nov 11 13:53:57 CST 2019
Num of Blocks: 0
- 關閉Hadoop
sbin/stop-all.sh
Web查看Hadoop集群狀態
在瀏覽器輸入 http://10.101.18.21:9870 ,結果如下:
在瀏覽器輸入 http://10.101.18.21:8088 ,結果如下: