Hadoop搭建叢集

豐澤發表於2018-06-26

一、什麼是Hadoop?

hadoop中有3個核心元件: 分散式檔案系統:HDFS —— 實現將檔案分散式儲存在很多的伺服器上 HDFS 採用Master/Slave的架構來儲存資料,這種架構主要由四個部分組成,分別為HDFS Client、NameNode、DataNode和Secondary NameNode。下面我們分別介紹這四個組成部分。

Client:就是客戶端。

   1、檔案切分。檔案上傳 HDFS 的時候,Client 將檔案切分成 一個一個的Block,然後進行儲存。

   2、與 NameNode 互動,獲取檔案的位置資訊。

   3、與 DataNode 互動,讀取或者寫入資料。

   4、Client 提供一些命令來管理 HDFS,比如啟動或者關閉HDFS。

   5、Client 可以通過一些命令來訪問 HDFS。
複製程式碼

NameNode:就是 master,它是一個主管、管理者。

   1、管理 HDFS 的名稱空間。

   2、管理資料塊(Block)對映資訊

   3、配置副本策略

   4、處理客戶端讀寫請求。
複製程式碼

DataNode:就是Slave。NameNode 下達命令,DataNode 執行實際的操作。

   1、儲存實際的資料塊。

   2、執行資料塊的讀/寫操作。
複製程式碼

Secondary NameNode:並非 NameNode 的熱備。當NameNode 掛掉的時候,它並不能馬上替換 NameNode 並提供服務。

   1、輔助 NameNode,分擔其工作量。

   2、定期合併 fsimage和fsedits,並推送給NameNode。

   3、在緊急情況下,可輔助恢復 NameNode。
複製程式碼

分散式運算程式設計框架:MAPREDUCE —— 實現在很多機器上分散式並行運算

MapReduce程式設計主要元件

InputFormat類:分割成多個splits和每行怎麼解析。

Mapper類:對輸入的每對<key,value>生成中間結果。

Combiner類:在map端,對相同的key進行合併。

Partitioner類:在shuffle過程中,將按照key值將中間結果分為R份,每一份都由一個reduce去完成。

Reducer類:對所有的map中間結果,進行合併。

OutputFormat類:負責輸出結果格式。

分散式資源排程平臺:YARN —— 幫使用者排程大量的mapreduce程式,併合理分配運算資源

二、hdfs叢集組成結構:

Hadoop搭建叢集

三、安裝hdfs叢集的具體步驟:

一、首先需要準備N臺linux伺服器

先準備4臺虛擬機器:1個namenode節點 + 3 個datanode 節點

二、修改各臺機器的主機名和ip地址

主機名:hdp-01 對應的ip地址:192.168.33.61

主機名:hdp-02 對應的ip地址:192.168.33.62

主機名:hdp-03 對應的ip地址:192.168.33.63

主機名:hdp-04 對應的ip地址:192.168.33.64

在windows中將各臺linux機器的主機名配置到的windows的本地域名對映檔案中: 192.168.33.61 hdp-01

192.168.33.62 hdp-02

192.168.33.63 hdp-03

192.168.33.64 hdp-04

配置linux伺服器的基礎軟體環境

防火牆

//臨時關閉 systemctl stop firewalld //禁止開機啟動 systemctl disable firewalld

systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
複製程式碼

安裝jdk:(hadoop體系中的各軟體都是java開發的)

1)利用alt+p 開啟sftp視窗,然後將jdk壓縮包拖入sftp視窗

2)然後在linux中將jdk壓縮包解壓到/root/apps 下

3)配置環境變數:JAVA_HOME PATH

vi /etc/profile 在檔案的最後,加入:

export JAVA_HOME=/root/apps/jdk1.8.0_60

export PATH=$PATH:$JAVA_HOME/bin
複製程式碼

4)修改完成後,記得 source /etc/profile使配置生效

5)檢驗:在任意目錄下輸入命令: java -version 看是否成功執行

6)將安裝好的jdk目錄用scp命令拷貝到其他機器

7)將/etc/profile配置檔案也用scp命令拷貝到其他機器並分別執行source命令

叢集內主機的域名對映配置

在hdp-01上,vi /etc/hosts

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4

::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.33.61 hdp-01

192.168.33.62 hdp-02

192.168.33.63 hdp-03

192.168.33.64 hdp-04

然後,將hosts檔案拷貝到叢集中的所有其他機器上

四、安裝hdfs叢集

1) 修改hadoop-env.sh

export JAVA_HOME=/root/apps/jdk1.8.0_60

2) 修改core-site.xml

<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://hdp-01:9000</value>
</property>
</configuration>
複製程式碼

3) 修改hdfs-site.xml

<configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>/root/dfs/name</value>
</property>

<property>
<name>dfs.datanode.data.dir</name>
<value>/root/dfs/data</value>
</property>
</configuration>
複製程式碼

4) 拷貝整個hadoop安裝目錄到其他機器

scp -r /root/apps/hadoop-2.8.0  hdp-02:/root/apps/
scp -r /root/apps/hadoop-2.8.0  hdp-03:/root/apps/
scp -r /root/apps/hadoop-2.8.0  hdp-04:/root/apps/
複製程式碼

5) 啟動HDFS

要點提示: 要執行hadoop的命令,需要在linux環境中配置HADOOP_HOME和PATH環境變數

vi /etc/profile
export JAVA_HOME=/root/apps/jdk1.8.0_60
export HADOOP_HOME=/root/apps/hadoop-2.8.0
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
複製程式碼

首先,初始化namenode的後設資料目錄

要在hdp-01上執行hadoop的一個命令來初始化namenode的後設資料儲存目錄

hadoop namenode -format

1.建立一個全新的後設資料儲存目錄

2.生成記錄後設資料的檔案fsimage

3.生成叢集的相關標識:如:叢集id——clusterID

然後,啟動namenode程式(在hdp-01上)

hadoop-daemon.sh start namenode

啟動完後,首先用jps檢視一下namenode的程式是否存在

然後,在windows中用瀏覽器訪問namenode提供的web埠:50070

http://hdp-01:50070(不能開啟中文輸入法)

然後,啟動眾datanode們(在任意地方)

hadoop-daemon.sh start datanode

6) 用自動批量啟動指令碼來啟動HDFS

1)先配置hdp-01到叢集中所有機器(包含自己)的免密登陸

2)配完免密後,可以執行一次 ssh 0.0.0.0

3)修改hadoop安裝目錄中/etc/hadoop/slaves(把需要啟動datanode程式的節點列入)

hdp-01
hdp-02
hdp-03
hdp-04
複製程式碼

4)在hdp-01上用指令碼:start-dfs.sh 來自動啟動整個叢集

5)如果要停止,則用指令碼:stop-dfs.sh

namenode的職責:

  • 1.維護後設資料資訊。
  • 2.管理hdfs的目錄數
  • 3.響應客戶端的請求。

五、HDFS中的shell操作

命令格式:hadoop fs -ls 檔案路徑

HDFS中的shell操作命令

相關文章