Hadoop知識整理

Hadoop是什麼

1)Hadoop是一個由Apache基金會所開發的分佈式系統基礎架構。

2)主要解決,海量數據的存儲和海量數據分析計算的問題。

3)廣義上來說,Hadoop通常是指一個更廣泛的概念——Hadoop生態圈。

Hadoop知識整理

Hadoop三大發行版本

Hadoop三大發行版本:Apache、Cloudera、Hortonworks。

Apache版本最原始(最基礎)的版本,對於入門學習最好。

Cloudera在大型互聯網企業中用的較多。

Hortonworks文檔較好。

1. Apache Hadoop

官網地址:http://hadoop.apache.org/releases.html

下載地址:https://archive.apache.org/dist/hadoop/common/

2. Cloudera Hadoop

官網地址:https://www.cloudera.com/downloads/cdh/5-10-0.html

下載地址:http://archive-primary.cloudera.com/cdh5/cdh/5/

(1)2008年成立的Cloudera是最早將Hadoop商用的公司,為合作伙伴提供Hadoop的商用解決方案,主要是包括支持、諮詢服務、培訓。

(2)2009年Hadoop的創始人Doug Cutting也加盟Cloudera公司。Cloudera產品主要為CDH,Cloudera Manager,Cloudera Support

(3)CDH是Cloudera的Hadoop發行版,完全開源,比Apache Hadoop在兼容性,安全性,穩定性上有所增強。

(4)Cloudera Manager是集群的軟件分發及管理監控平臺,可以在幾個小時內部署好一個Hadoop集群,並對集群的節點及服務進行實時監控。Cloudera Support即是對Hadoop的技術支持。

(5)Cloudera的標價為每年每個節點4000美元。Cloudera開發並貢獻了可實時處理大數據的Impala項目。

3. Hortonworks Hadoop

官網地址:https://hortonworks.com/products/data-center/hdp/

下載地址:https://hortonworks.com/downloads/#data-platform

(1)2011年成立的Hortonworks是雅虎與硅谷風投公司Benchmark Capital合資組建。

(2)公司成立之初就吸納了大約25名至30名專門研究Hadoop的雅虎工程師,上述工程師均在2005年開始協助雅虎開發Hadoop,貢獻了Hadoop80%的代碼。

(3)雅虎工程副總裁、雅虎Hadoop開發團隊負責人Eric Baldeschwieler出任Hortonworks的首席執行官。

(4)Hortonworks的主打產品是Hortonworks Data Platform(HDP),也同樣是100%開源的產品,HDP除常見的項目外還包括了Ambari,一款開源的安裝和管理系統。

(5)HCatalog,一個元數據管理系統,HCatalog現已集成到Facebook開源的Hive中。Hortonworks的Stinger開創性的極大的優化了Hive項目。Hortonworks為入門提供了一個非常好的,易於使用的沙盒。

(6)Hortonworks開發了很多增強特性並提交至核心主幹,這使得Apache Hadoop能夠在包括Window Server和Windows Azure在內的Microsoft Windows平臺上本地運行。定價以集群為基礎,每10個節點每年為12500美元。

Hadoop的優勢

1)高可靠性:Hadoop底層維護多個數據副本,所以即使Hadoop某個計算元素或存儲出現故障,也不會導致數據的丟失。

2)高擴展性:在集群間分配任務數據,可方便的擴展以千計的節點。

3)高效性:在MapReduce的思想下,Hadoop是並行工作的,以加快任務處理速度。

4)高容錯性:能夠將失敗的任務重新分配。

Hadoop組成

Hadoop知識整理

在Hadoop1.X時代,Hadoop中的MapReduce同時處理業務邏輯運算和資源調度,耦合性較大,在Hadoop2.X時代,增加了Yarn。Yarn只負責子資源的調度,MapReduce只負責運算。

HDFS架構概述

HDFS(Hadoop Distributed File System)的架構概述:


1)NameNode(nn):存儲文件的元數據,如文件名,文件目錄結構,文件屬性(生成時間,副本數,文件權限),以及每個文件列表和塊所在的DataNode等。

2)DataNode(dn):在本地文件系統存儲文件塊數據,以及數據的校驗。

3)Secondary NameNode(2nn):用來監控HDFS狀態的輔助後臺程序,每隔一段時間獲取元數據的快照。

Yarn架構概述:

Hadoop知識整理

1)ResourceManager作用:

1.處理客戶請求

2.監控NodeManager

3.啟動或監控ApplicationMaster

4.資源的分配和調度

2)NodeManager(NM)的主要作用

1.管理單個節點的資源

2.處理來自ResourceManager的命令

3.處理來自ApplicationMaster的命令

3)ApplicationMaster(AM)作用如下:

1.負責數據的切分

2.為應用程序申請資源並分配內部的任務

3.任務的監控與容錯

4)Container

Container是Yarn中的資源的抽象,它封裝了某個節點上的多維度資源,如內存,cpu,磁盤,網絡等。

工作方式:

Hadoop知識整理

(0) Mr 程序提交到客戶端所在的節點。

(1)Yarnrunner 向 Resourcemanager 申請一個 Application。

(2)rm 將該應用程序的資源路徑返回給 yarnrunner。

(3)該程序將運行所需資源提交到 HDFS 上。

(4)程序資源提交完畢後,申請運行 mrAppMaster。

(5)RM 將用戶的請求初始化成一個 task。

(6)其中一個 NodeManager 領取到 task 任務。

(7)該 NodeManager 創建容器 Container,併產生 MRAppmaster。

(8)Container 從 HDFS 上拷貝資源到本地。

(9)MRAppmaster 向 RM 申請運行 maptask 資源。

(10)RM 將運行 maptask 任務分配給另外兩個 NodeManager,另兩個 NodeManager 分

別領取任務並創建容器。

(11)MR 向兩個接收到任務的 NodeManager 發送程序啟動腳本,這兩個 NodeManager

分別啟動 maptask,maptask 對數據分區排序。

(12)MrAppMaster 等待所有 maptask 運行完畢後,向 RM 申請容器,運行 reduce task。

(13)reduce task 向 maptask 獲取相應分區的數據。

(14)程序運行完畢後,MR 會向 RM 申請註銷自己。

MapReduce架構概述:

MapReduce將計算過程分為兩個階段:Map和Reduce。
1)Map階段並行處理輸入數據

2)Reduce階段對Map結果進行彙總

Hadoop運行環境搭建

虛擬機:hadoop101,關閉防火牆。

創建用戶,hadoop:

<code>useradd hadoop
passwd hadoop/<code>

配置hadoop用戶具有root權限:

<code>chmod -v u+w /etc/sudoers #給這個文件添加寫權限
vi /etc/sudoers  #修改 sudoers

## Allow root to run any commands anywhereroot    ALL=(ALL)       ALLsss    ALL=(ALL)       ALL (添加這一行)/<code>

## Allow root to run any commands anywhere
root ALL=(ALL) ALL
hadoop ALL=(ALL) ALL (添加這一行)

保存,退出

<code>chmod -v u-w /etc/sudoers  #刪除 sudoers 的寫的權限/<code> 

在/opt目錄下創建文件夾

在/opt目錄下創建module、software文件夾:

<code>sudo mkdir module
sudo mkdir software/<code>

修改module、software文件夾的所有者:

<code>sudo chown hadoop:hadoop   module/ software//<code>

安裝JDK:

1.卸載現有JDK

(1)查詢是否安裝Java軟件:

<code>rpm -qa | grep java/<code>

(2)如果安裝的版本低於1.7,卸載該JDK:

<code>sudo rpm -e 軟件包/<code>

(3)查看JDK安裝路徑:

<code>which java/<code>

2.將安裝包導入software目錄下:

<code>cd software/  ls
hadoop-2.7.2.tar.gz  jdk-8u144-linux-x64.tar.gz/<code>

3.解壓JDK到/opt/module目錄下

<code>tar -zxvf jdk-8u144-linux-x64.tar.gz -C /opt/module//<code>

4. 配置JDK環境變量

<code>sudo vi /etc/profile/<code>

在文件末尾添加:

<code>#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_144
export PATH=$PATH:$JAVA_HOME/bin/<code>
<code>source /etc/profile #讓修改後的文件生效/<code>

安裝Hadoop

Hadoop下載地址:

https://archive.apache.org/dist/hadoop/common/hadoop-2.7.2/

1. 將hadoop-2.7.2.tar.gz導入到opt目錄下面的software文件夾下面

2.將Hadoop安裝包解壓到到/opt/module下面

<code> tar -zxvf hadoop-2.7.2.tar.gz -C /opt/module//<code>

3.將Hadoop添加到環境變量:

<code>sudo vi /etc/profile/<code>

文件末尾添加:

<code>##HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-2.7.2
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin/<code>

使配置生效:

<code>source /etc/profile/<code>

4. 重啟(如果Hadoop命令不能用再重啟)

Hadoop目錄結構

Hadoop知識整理

(1)bin目錄:存放對Hadoop相關服務(HDFS,YARN)進行操作的腳本

(2)etc目錄:Hadoop的配置文件目錄,存放Hadoop的配置文件

(3)lib目錄:存放Hadoop的本地庫(對數據進行壓縮解壓縮功能)

(4)sbin目錄:存放啟動或停止Hadoop相關服務的腳本

(5)share目錄:存放Hadoop的依賴jar包、文檔、和官方案例

Hadoop運行模式

Hadoop運行模式包括:本地模式、偽分佈式模式以及完全分佈式模式。

本地運行模式

官方Grep案例

1. 創建在hadoop-2.7.2文件下面創建一個input文件夾

<code> mkdir input/<code>

2. 將Hadoop的xml配置文件複製到input

<code> cp etc/hadoop/*.xml input/<code>

3. 執行share目錄下的MapReduce程序

<code> bin/hadoop jar
share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar grep input output 'dfs[a-z.]+'/<code> 


4. 查看輸出結果

<code> cat output/*/<code>

官方WordCount案例

1. 創建在hadoop-2.7.2文件下面創建一個wcinput文件夾

<code> mkdir wcinput/<code>

2. 在wcinput文件下創建一個wc.input文件

<code>cd wcinput
touch wc.input/<code>

3. 編輯wc.input文件

<code>vi wc.input/<code>

在文件中輸入如下內容

<code>hadoop yarn
hadoop mapreduce
atguigu
atguigu/<code>

保存退出::wq

4. 回到Hadoop目錄/opt/module/hadoop-2.7.2

5. 執行程序

<code>hadoop jar
share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount wcinput wcoutput/<code>

6. 查看結果

<code>cat wcoutput/part-r-00000/<code>
<code>atguigu 2
hadoop  2
mapreduce       1
yarn    1/<code>

偽分佈式運行模式

啟動HDFS並運行MapReduce程序

1. 分析

(1)配置集群

(2)啟動、測試集群增、刪、查

(3)執行WordCount案例

2. 執行步驟

(1)配置集群

(a)配置:hadoop-env.sh

Linux系統中獲取JDK的安裝路徑:

<code>echo $JAVA_HOME
/opt/module/jdk1.8.0_144/<code>

修改hadoop-env.sh中的JAVA_HOME 路徑:

<code>export JAVA_HOME=/opt/module/jdk1.8.0_144/<code>

(b)配置:core-site.xml

<code> 

fs.defaultFS
    hdfs://hadoop101:9000


 

	hadoop.tmp.dir
	/opt/module/hadoop-2.7.2/data/tmp
/<code>

(c)配置:hdfs-site.xml

<code> 

	dfs.replication
	1
/<code>

(2)啟動集群

(a)格式化NameNode(第一次啟動時格式化,以後就不要總格式化)

<code> bin/hdfs namenode -format/<code>

(b)啟動NameNode

<code>sbin/hadoop-daemon.sh  start namenod/<code>

(c)啟動DataNode

<code>sbin/hadoop-daemon.sh start datanode/<code>

(3)查看集群

(a)查看是否啟動成功

<code>jps/<code>
<code>13586 NameNode
13668 DataNode
13786 Jps/<code>

注意:jps是JDK中的命令,不是Linux命令。不安裝JDK不能使用jps

(b)web端查看HDFS文件系統

http://hadoop101:50070/dfshealth.html#tab-overview

如不能訪問,可參考以下幾個方案。

  1. 查看vi /etc/selinux/config的配置改成SELINUX=disabled
  2. 是否關閉了防火牆
  3. 查看你的$HADOOP_HOME/etc/hadoop下的core-site.xml和hdfs-site.xml是否配置好
  4. 查看你windows裡本地的配置文件的IP和主機名映射關係
  5. 必須在hadoop-env.sh文件中設置Java的絕對路徑

(c)查看產生的Log日誌

當前目錄:/opt/module/hadoop-2.7.2/logs

Hadoop知識整理

(d)思考:為什麼不能一直格式化NameNode,格式化NameNode,要注意什麼?

<code>cd data/tmp/dfs/name/current/
  
cat VERSION

clusterID=CID-f0330a58-36fa-4a2a-a65f-2688269b5837/<code>

注意:格式化NameNode,會產生新的集群id,導致NameNode和DataNode的集群id不一致,集群找不到以往數據。所以,格式NameNode時,一定要先刪除data數據和log日誌,然後再格式化NameNode。

(4)操作集群

(a)在HDFS文件系統上創建一個input文件夾

<code>bin/hdfs dfs -mkdir -p /user/hadoop/input/<code>

(b)將測試文件內容上傳到文件系統上

<code>bin/hdfs dfs -put wcinput/wc.input
  /user/hadoop/input//<code>

(c)查看上傳的文件是否正確

<code>bin/hdfs dfs -ls  /user/hadoop/input/
  
bin/hdfs dfs -cat  /user/hadoop/ input/wc.input/<code>

(d)運行MapReduce程序

<code>bin/hadoop jar
share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/hadoop/input/ /user/hadoop/output/<code>

(e)查看輸出結果

<code>bin/hdfs dfs -cat /user/hadoop/output/*/<code>

(f)將測試文件內容下載到本地

<code>hdfs dfs -get /user/hadoop/output/part-r-00000 ./wcoutput//<code>

(g)刪除輸出結果

<code>hdfs dfs -rm -r /user/hadoop/output/<code>

啟動YARN並運行MapReduce程序

1. 分析

(1)配置集群在YARN上運行MR

(2)啟動、測試集群增、刪、查

(3)在YARN上執行WordCount案例

2. 執行步驟

(1)配置集群

(a)配置yarn-env.sh

配置一下JAVA_HOME:

<code>export JAVA_HOME=/opt/module/jdk1.8.0_144/<code>

b)配置yarn-site.xml

<code> 

 		yarn.nodemanager.aux-services
 		mapreduce_shuffle


 

yarn.resourcemanager.hostname
hadoop101
/<code>

c)配置:mapred-env.sh

配置一下JAVA_HOME

<code>export JAVA_HOME=/opt/module/jdk1.8.0_144/<code>

d)配置: (對mapred-site.xml.template重新命名為) mapred-site.xml

<code>mv mapred-site.xml.template mapred-site.xml
vi mapred-site.xml/<code>
<code> 

		mapreduce.framework.name
		yarn
/<code>

(2)啟動集群

(a)啟動前必須保證NameNode和DataNode已經啟動

(b)啟動ResourceManager

<code>sbin/yarn-daemon.sh start resourcemanager/<code>

(c)啟動NodeManager

<code>sbin/yarn-daemon.sh start nodemanager/<code>

(3)集群操作

(a)YARN的瀏覽器頁面查看

http://hadoop101:8088/cluster

Hadoop知識整理

(b)刪除文件系統上的output文件

<code>bin/hdfs dfs -rm -R /user/hadoop/output/<code> 

(c)執行MapReduce程序

<code>bin/hadoop jar
 share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/hadoop/input  /user/hadoop/output/<code>

(d)查看運行結果

<code>bin/hdfs dfs -cat /user/hadoop/output/*/<code>

配置歷史服務器

為了查看程序的歷史運行情況,需要配置一下歷史服務器。具體配置步驟如下:

1. 配置mapred-site.xml

<code>vi mapred-site.xml/<code>

在該文件裡面增加如下配置。

<code> 

mapreduce.jobhistory.address
hadoop101:10020

 

    mapreduce.jobhistory.webapp.address
    hadoop101:19888
/<code>

2. 啟動歷史服務器

<code>sbin/mr-jobhistory-daemon.sh start historyserver/<code>

3. 查看歷史服務器是否啟動

<code>jps/<code>

4. 查看JobHistory

http://hadoop101:19888/jobhistory

配置日誌的聚集

日誌聚集概念:應用運行完成以後,將程序運行日誌信息上傳到HDFS系統上。

日誌聚集功能好處:可以方便的查看到程序運行詳情,方便開發調試。

注意:開啟日誌聚集功能,需要重新啟動NodeManager 、ResourceManager和HistoryManager。

開啟日誌聚集功能具體步驟如下:

1. 配置yarn-site.xml

<code>vi yarn-site.xml/<code>

在該文件裡面增加如下配置。

<code> 

yarn.log-aggregation-enable
true


 

yarn.log-aggregation.retain-seconds
604800
/<code>

2. 關閉NodeManager 、ResourceManager和HistoryServer

<code>sbin/yarn-daemon.sh stop resourcemanager
sbin/yarn-daemon.sh stop nodemanager
sbin/mr-jobhistory-daemon.sh stop historyserver/<code>

3. 啟動NodeManager 、ResourceManager和HistoryServer

<code>sbin/yarn-daemon.sh start resourcemanager
sbin/yarn-daemon.sh start nodemanager
sbin/mr-jobhistory-daemon.sh start historyserver/<code>

4.刪除HDFS上已經存在的輸出文件

<code>bin/hdfs dfs -rm -R /user/hadoop/output/<code>

5. 執行WordCount程序

<code>hadoop jar
 share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/hadoop/input /user/hadoop/output/<code>

6. 查看日誌

http://hadoop101:19888/jobhistory

配置文件說明

Hadoop配置文件分兩類:默認配置文件和自定義配置文件,只有用戶想修改某一默認配置值時,才需要修改自定義配置文件,更改相應屬性值。

(1)默認配置文件:

Hadoop知識整理

(2)自定義配置文件:

core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml四個配置文件存放在$HADOOP_HOME/etc/hadoop這個路徑上,用戶可以根據項目需求重新進行修改配置。

完全分佈式運行模式

主要步驟:

1)準備3臺客戶機(關閉防火牆、靜態ip、主機名稱)hadoop102,hadoop103,hadoop104

2)安裝JDK

3)配置環境變量

4)安裝Hadoop

5)配置環境變量

6)配置集群

7)單點啟動

8)配置ssh

9)群起並測試集群

將hadoop102,hadoop103,hadoop104安裝JDK和Hadoop並配置環境變量。

集群部署規劃:

Hadoop知識整理

(1)首先配置Hadoop102的配置文件,再分發配置文件到其他節點。

<code>vi core-site.xml/<code>

在該文件中編寫如下配置

<code> 

		fs.defaultFS
      hdfs://hadoop102:9000


 

		hadoop.tmp.dir
		/opt/module/hadoop-2.7.2/data/tmp
/<code>

(2)HDFS配置文件

配置hadoop-env.sh

<code>vi hadoop-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_144/<code>

配置hdfs-site.xml

<code> vi hdfs-site.xml/<code>

在該文件中編寫如下配置

<code>
		dfs.replication
		3


 

      dfs.namenode.secondary.http-address
      hadoop104:50090
/<code>

(3)YARN配置文件

配置yarn-env.sh

<code>vi yarn-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_144/<code>

配置yarn-site.xml

<code>vi yarn-site.xml/<code>

在該文件中增加如下配置

<code> 

		yarn.nodemanager.aux-services
		mapreduce_shuffle


 

		yarn.resourcemanager.hostname
		hadoop103
/<code>

(4)MapReduce配置文件

配置mapred-env.sh

<code>vi mapred-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_144/<code>

配置mapred-site.xml

<code>cp mapred-site.xml.template mapred-site.xml
vi mapred-site.xml/<code>

在該文件中增加如下配置

<code> 

mapreduce.framework.name
yarn
/<code>

在集群上分發配置好的Hadoop配置文件

利用rsync命令分發。

集群單點啟動

如果集群是第一次啟動,需要格式化NameNode

<code>hdfs namenode -format/<code>

在hadoop102上啟動NameNode

<code>hadoop-daemon.sh start namenode/<code>

在hadoop102、hadoop103以及hadoop104上分別啟動DataNode

<code>hadoop-daemon.sh start datanode/<code>

SSH無密登錄配置

Hadoop知識整理

再生成公鑰和私鑰:

<code>ssh-keygen -t rsa/<code>

然後敲(三個回車),就會生成兩個文件id_rsa(私鑰)、id_rsa.pub(公鑰)

將公鑰拷貝到要免密登錄的目標機器上

<code>ssh-copy-id hadoop102
ssh-copy-id hadoop103
ssh-copy-id hadoop104/<code>

注意:

還需要在hadoop103上採用hadoop賬號,配置一下無密登錄到hadoop102、hadoop103、hadoop104;

還需要在hadoop104上採用hadoop賬號配置一下無密登錄到hadoop102、hadoop103、hadoop104服務器上。

.ssh文件夾下(~/.ssh)的文件功能解釋

known_hosts:記錄ssh訪問過計算機的公鑰(public key)

id_rsa:生成的私鑰

id_rsa.pub:生成的公鑰

authorized_keys:存放授權過的無密登錄服務器公鑰

群起集群

配置slaves,進入/opt/module/hadoop-2.7.2/etc/hadoop/slaves目錄下

<code>vi slaves/<code>

在該文件中增加如下內容:

<code>hadoop102
hadoop103
hadoop104/<code>

注意:該文件中添加的內容結尾不允許有空格,文件中不允許有空行。

同步所有節點配置文件。

啟動集群

(1)如果集群是第一次啟動,需要格式化NameNode(注意格式化之前,一定要先停止上次啟動的所有namenode和datanode進程,然後再刪除data和log數據)

<code>bin/hdfs namenode -format/<code>

(2)啟動HDFS

<code>sbin/start-dfs.sh/<code>

(3)啟動YARN

<code>sbin/start-yarn.sh/<code>

注意:NameNode和ResourceManger如果不是同一臺機器,不能在NameNode上啟動 YARN,應該在ResouceManager所在的機器上啟動YARN。

(4)Web端查看SecondaryNameNode

(a)瀏覽器中輸入:http://hadoop104:50090/status.html

(b)查看SecondaryNameNode信息

Hadoop知識整理

集群啟動/停止方式總結

1. 各個服務組件逐一啟動/停止

(1)分別啟動/停止HDFS組件

<code>hadoop-daemon.sh  start / stop  namenode / datanode / secondarynamenode/<code>

(2)啟動/停止YARN

<code>yarn-daemon.sh  start / stop  resourcemanager / nodemanager/<code>

2. 各個模塊分開啟動/停止(配置ssh是前提)常用

(1)整體啟動/停止HDFS

<code>start-dfs.sh   /  stop-dfs.sh/<code>

(2)整體啟動/停止YARN

<code>start-yarn.sh  /  stop-yarn.sh/<code>


分享到:


相關文章: