關(guān)于Hadoop的HDFS集群
HDFS 集群是建立在 Hadoop 集群之上的,由于 HDFS 是 Hadoop 最主要的守護(hù)進(jìn)程,所以 HDFS 集群的配置過程是 Hadoop 集群配置過程的代表。
使用 Docker 可以更加方便地、高效地構(gòu)建出一個集群環(huán)境。
每臺計算機中的配置
Hadoop 如何配置集群、不同的計算機里又應(yīng)該有怎樣的配置,這些問題是在學(xué)習(xí)中產(chǎn)生的。本章的配置中將會提供一個典型的示例,但 Hadoop 復(fù)雜多樣的配置項遠(yuǎn)超于此。
HDFS 命名節(jié)點對數(shù)據(jù)節(jié)點的遠(yuǎn)程控制是通過 SSH 來實現(xiàn)的,因此關(guān)鍵的配置項應(yīng)該在命名節(jié)點被配置,非關(guān)鍵的節(jié)點配置要在各個數(shù)據(jù)節(jié)點配置。也就是說,數(shù)據(jù)節(jié)點與命名節(jié)點的配置可以不同,不同數(shù)據(jù)節(jié)點之間的配置也可以有所不同。
但是本章為了方便建立集群,將使用相同的配置文件通過 Docker 鏡像的形式同步到所有的集群節(jié)點,特做解釋。
具體步驟
總體思路是這樣的,我們先用一個包含 Hadoop 的鏡像進(jìn)行配置,配置成集群中所有節(jié)點都可以共用的樣子,然后再以它為原型生成若干個容器,構(gòu)成一個集群。
配置原型
首先,我們將使用之前準(zhǔn)備的 hadoop_proto 鏡像啟動為容器:
docker run -d --name=hadoop_temp --privileged hadoop_proto /usr/sbin/init
進(jìn)入 Hadoop 的配置文件目錄:
cd $HADOOP_HOME/etc/hadoop
現(xiàn)在對這里的文件的作用做簡單的描述:
| 文件 | 作用 |
| workers | 記錄所有的數(shù)據(jù)節(jié)點的主機名或 IP 地址 |
| core-site.xml | Hadoop 核心配置 |
| hdfs-site.xml | HDFS 配置項 |
| mapred-site.xml | MapReduce 配置項 |
| yarn-site.xml | YARN 配置項 |
注:YARN 的作用是為 MapReduce 提供資源管理服務(wù),此處暫時用不著。
我們現(xiàn)在設(shè)計這樣一個簡單的集群:
- 1 個命名節(jié)點 nn
- 2 個數(shù)據(jù)節(jié)點 dn1, dn2

首先編輯 workers ,更改文件內(nèi)容為:
dn1 ???????dn2
然后編輯 core-site.xml,在 中添加以下配置項:
<!-- 配置 HDFS 主機地址與端口號 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://nn:9000</value>
</property>
<!-- 配置 Hadoop 的臨時文件目錄 -->
<property>
<name>hadoop.tmp.dir</name>
<value>file:///home/hadoop/tmp</value>
</property>配置 hdfs-site.xml,在 中添加以下配置項:
<!-- 每個數(shù)據(jù)塊復(fù)制 2 份存儲 -->
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<!-- 設(shè)置儲存命名信息的目錄 -->
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///home/hadoop/hdfs/name</value>
</property>最后需要配置一下 SSH :
ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsassh-copy-id -i ~/.ssh/id_rsa hadoop@localhost
到此為止,集群的原型就配置完畢了,可以退出容器并上傳容器到新鏡像 cluster_proto :
docker stop hadoop_tempdocker commit hadoop_temp cluster_proto
此處如果有必要可以刪除臨時鏡像 hadoop_temp 。
部署集群
接下來部署集群。
首先,要為 Hadoop 集群建立專用網(wǎng)絡(luò) hnet :
docker network create --subnet=172.20.0.0/16 hnet
接下來創(chuàng)建集群容器:
docker run -d --name=nn --hostname=nn --network=hnet --ip=172.20.1.0 --add-host=dn1:172.20.1.1 --add-host=dn2:172.20.1.2 --privileged cluster_proto /usr/sbin/init docker run -d --name=dn1 --hostname=dn1 --network=hnet --ip=172.20.1.1 --add-host=nn:172.20.1.0 --add-host=dn2:172.20.1.2 --privileged cluster_proto /usr/sbin/init docker run -d --name=dn2 --hostname=dn2 --network=hnet --ip=172.20.1.2 --add-host=nn:172.20.1.0 --add-host=dn1:172.20.1.1 --privileged cluster_proto /usr/sbin/init
進(jìn)入命名節(jié)點:
docker exec -it nn su hadoop
格式化 HDFS:
hdfs namenode -format
如果沒有出錯,那么下一步就可以啟動 HDFS:
start-dfs.sh
成功啟動之后,jps 命令應(yīng)該能查到 NameNode 和 SecondaryNameNode 的存在。命名節(jié)點不存在 DataNode 進(jìn)程,因為這個進(jìn)程在 dn1 和 dn2 中運行。
至此,你可以檢測 HDFS 的運行,使用 HDFS 的方式也沒有差別(命名節(jié)點代表整個集群)。
到此這篇關(guān)于關(guān)于Hadoop的HDFS集群的文章就介紹到這了,更多相關(guān)HDFS集群內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java調(diào)用第三方http接口的常用方式總結(jié)
這篇文章主要介紹了Java調(diào)用第三方http接口的常用方式總結(jié),具有很好的參考價值,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-06-06
springboot配置templates直接訪問的實現(xiàn)
這篇文章主要介紹了springboot配置templates直接訪問的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12
一步步教你如何使用Java實現(xiàn)WebSocket
websocket協(xié)議是基于TCP的一種新的網(wǎng)絡(luò)協(xié)議,它實現(xiàn)了瀏覽器與服務(wù)器的全雙工通訊-允許服務(wù)器主動發(fā)起信息個客戶端,websocket是一種持久協(xié)議,http是非持久協(xié)議,下面這篇文章主要給大家介紹了關(guān)于如何使用Java實現(xiàn)WebSocket的相關(guān)資料,需要的朋友可以參考下2023-05-05

