一、什麼是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叢集組成結構:
三、安裝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 檔案路徑