1. 程式人生 > 實用技巧 >HDFS 全分散式叢集搭建

HDFS 全分散式叢集搭建

全分散式叢集搭建

1、系統配置

1.1、時間

1.2、JDK

1.3、免祕鑰登入

【我做的是節點之間免密登入,可以給主節點做單向的免祕鑰登入】

【伺服器時間必須統一】

【關閉防火牆,關閉安全機制】


這裡我就不做過多的筆記,後面還有很多的配置等著,10幾分鐘左右的事情。

2、修改配置檔案:

這是基於偽分散式檔案上面更改的:

core-site.xml

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://MDNode01:9000</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <!--修改檔案儲存的路徑-->
        <value>/var/mgs/hadoop/full</value>
    </property>
</configuration>

hdfs-site.xml

<configuration>
    <property>
        <name>dfs.replication</name>
        <!--因為我搭建的只有3臺DataNode伺服器,副本數設定為2-->
        <value>2</value>
    </property>
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <!--指向另一臺節點的執行緒上執行-->
        <value>MDNode02:50090</value>
    </property>
</configuration>

slaves

#配置從節點
MDNode02
MDNode03
Mdnode04

分發Hadoop資料包

[root@MDNode01 opt]# pwd
/opt
[root@MDNode01 opt]# ll
total 4
drwxr-xr-x 3 root root 4096 Nov 14  2019 mgs
#將Hadoop分發到不同的節點上面
[root@MDNode01 opt]# scp -r mgs/ MDNode04:`pwd`

分發HADOOP_HOME的配置

3、格式叢集

[root@MDNode01 hadoop-2.7.5]# hdfs namenode -format
19/11/13 23:52:54 INFO namenode.FSImage: Allocated new BlockPoolId: BP-987421903-192.168.25.50-1573660374725
19/11/13 23:52:54 INFO common.Storage: Storage directory /var/mgs/hadoop/full/dfs/name has been successfully formatted.
19/11/13 23:52:55 INFO namenode.FSImageFormatProtobuf: Saving image file /var/mgs/hadoop/full/dfs/name/current/fsimage.ckpt_0000000000000000000 using no compression
19/11/13 23:52:55 INFO namenode.FSImageFormatProtobuf: Image file /var/mgs/hadoop/full/dfs/name/current/fsimage.ckpt_0000000000000000000 of size 321 bytes saved in 0 seconds.
19/11/13 23:52:55 INFO namenode.NNStorageRetentionManager: Going to retain 1 images with txid >= 0
19/11/13 23:52:55 INFO util.ExitUtil: Exiting with status 0
19/11/13 23:52:55 INFO namenode.NameNode: SHUTDOWN_MSG: 
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at MDNode01/192.168.25.50
************************************************************/

在info後面的時候可以發現配置完成

[root@MDNode01 hadoop-2.7.5]# cd /var/mgs/hadoop/full/dfs/
[root@MDNode01 dfs]# ll
total 4
drwxr-xr-x 3 root root 4096 Nov 13 23:52 name
[root@MDNode01 dfs]# cd name
[root@MDNode01 name]# ll
total 4
drwxr-xr-x 2 root root 4096 Nov 13 23:52 current
[root@MDNode01 name]# cd current/
[root@MDNode01 current]# ll
total 16
-rw-r--r-- 1 root root 321 Nov 13 23:52 fsimage_0000000000000000000
-rw-r--r-- 1 root root  62 Nov 13 23:52 fsimage_0000000000000000000.md5
-rw-r--r-- 1 root root   2 Nov 13 23:52 seen_txid
-rw-r--r-- 1 root root 204 Nov 13 23:52 VERSION
[root@MDNode01 current]# cat VERSION 
#Wed Nov 13 23:52:54 CST 2019
namespaceID=330427894
clusterID=CID-c042ece5-6da9-4158-9fc2-527bf4688fbc
cTime=0
storageType=NAME_NODE
blockpoolID=BP-987421903-192.168.25.50-1573660374725
layoutVersion=-63
[root@MDNode01 current]# 

可以看到當期的節點是一個主節點上面生成的目錄,其他的子節點上面在沒有啟動的時候不會生成配置檔案

4、啟動叢集

[root@MDNode01 hadoop-2.7.5]# start-dfs.sh 
Starting namenodes on [MDNode01]
MDNode01: starting namenode, logging to /opt/mgs/hadoop-2.7.5/logs/hadoop-root-namenode-MDNode01.out
Mdnode04: starting datanode, logging to /opt/mgs/hadoop-2.7.5/logs/hadoop-root-datanode-MDNode04.out
MDNode03: starting datanode, logging to /opt/mgs/hadoop-2.7.5/logs/hadoop-root-datanode-MDNode03.out
MDNode02: starting datanode, logging to /opt/mgs/hadoop-2.7.5/logs/hadoop-root-datanode-MDNode02.out
Starting secondary namenodes [MDNode02]
MDNode02: starting secondarynamenode, logging to /opt/mgs/hadoop-2.7.5/logs/hadoop-root-secondarynamenode-MDNode02.out

可以看到節點啟動正常,【在叢集自己所有機器都做相互之間的免祕鑰登入在哪個節點都可以啟動】

接下來我們檢視所有的java程序,

[root@MDNode01 current]# jps
1305 NameNode
1387 Jps
[root@MDNode01 current]# 
[root@MDNode02 hadoop-2.7.5]# jps
1872 Jps
1719 SecondaryNameNode
1599 DataNode
[root@MDNode02 hadoop-2.7.5]# 

[root@MDNode03 hadoop-2.7.5]# jps
1434 DataNode
1518 Jps
[root@MDNode03 hadoop-2.7.5]# 
[root@MDNode04 hadoop-2.7.5]# jps
1507 Jps
1423 DataNode
[root@MDNode04 hadoop-2.7.5]# 

OK,

不懂的節點出錯建議去檢視自己節點的日誌。

這樣就可以觀察到不同節點的資料了。

建立一個預設的目錄:

[root@MDNode01 current]# hdfs dfs -mkdir -p /user/root

5、上傳檔案

[root@MDNode01 software]# for i in `seq 100000`;do echo "hello shaoyayu $i" >> test.txt;done
[root@MDNode01 software]# ll -lh
total 395M
-rw-r--r-- 1 root root 207M Nov 14  2019 hadoop-2.7.5.tar.gz
-rw-r--r-- 1 root root 187M Nov 14  2019 jdk-8u221-linux-x64.tar.gz
-rw-r--r-- 1 root root 2.0M Nov 14 00:21 test.txt
#指定上傳的大小是1M=1048576個位元組。預設的是128M的大小,路徑預設的存放在/user/root的目錄下面
[root@MDNode01 software]# hdfs dfs -D dfs.blocksize=1048576 -put test.txt 

視覺化觀察:

可以檢視到檔案本的副本數量,和存放的位置和檔案的大小。

可以去存放的節點之上找到相對於的副本

[root@MDNode02 subdir0]# pwd
/var/mgs/hadoop/full/dfs/data/current/BP-987421903-192.168.25.50-1573660374725/current/finalized/subdir0/subdir0
[root@MDNode02 subdir0]# ls -lh
total 2.1M
-rw-r--r-- 1 root root  1.0M Nov 14 00:26 blk_1073741825
-rw-r--r-- 1 root root  8.1K Nov 14 00:26 blk_1073741825_1001.meta
-rw-r--r-- 1 root root 1016K Nov 14 00:26 blk_1073741826
-rw-r--r-- 1 root root  8.0K Nov 14 00:26 blk_1073741826_1002.meta
[root@MDNode02 subdir0]# 
[root@MDNode03 hadoop-2.7.5]# cd /var/mgs/hadoop/full/dfs/data/current/BP-987421903-192.168.25.50-1573660374725/current/finalized
[root@MDNode03 finalized]# cd subdir0/subdir0/
[root@MDNode03 subdir0]# ls -lh
total 2.1M
-rw-r--r-- 1 root root  1.0M Nov 14 00:26 blk_1073741825
-rw-r--r-- 1 root root  8.1K Nov 14 00:26 blk_1073741825_1001.meta
-rw-r--r-- 1 root root 1016K Nov 14 00:26 blk_1073741826
-rw-r--r-- 1 root root  8.0K Nov 14 00:26 blk_1073741826_1002.meta
[root@MDNode03 subdir0]#

這就可以找到相對於的節點上的資料了

vi + blk_1073741825

......
hello shaoyayu 50458
hello shaoyayu 50459
hello shaoyayu 50460
hello shaoyayu 50461
h

vi + blk_1073741826

ello shaoyayu 50462
hello shaoyayu 50463
......
hello shaoyayu 100000

可以看到檔案在50416的位置後面已經被切割了,嚴格按照物理切割