Hadoop的優勢
1)高可靠性:因爲Hadoop假設計算元素和存儲會出現故障,因爲它維護多個工作數據副本,在出現故障時可以對失敗的節點重新分佈處理。
2)高擴展性:在集羣間分配任務數據,可方便的擴展數以千計的節點。
3) 高效性:在MapReduce的思想下,Hadoop是並行工作的,以加快任務處理速度。
4)高容錯性:自動保存多份副本數據,並且能夠自動將失敗的任務重新分配。
Hadoop組成
1)Hadoop HDFS:一個高可靠、高吞吐量的分佈式文件系統。
2)Hadoop MapReduce:一個分佈式的離線並行計算框架。
3)Hadoop YARN:作業調度與集羣資源管理的框架。
4)Hadoop Common:支持其他模塊的工具模塊。
2.1 HDFS(Hadoop Distributed File System)架構概述
1)NameNode(nn):存儲文件的元數據,如文件名,文件目錄結構,文件屬性(生成時間、副本數、文件權限),以及每個文件的塊列表和塊所在的DataNode等。
2)DataNode(dn):在本地文件系統存儲文件塊數據,以及塊數據的校驗和。
3)Secondary NameNode(2nn):用來監控HDFS狀態的輔助後臺程序,每隔一段時間獲取HDFS元數據的快照。
2.2 YARN架構概述
1)ResourceManager(rm):處理客戶端請求、啓動/監控ApplicationMaster、監控NodeManager、資源分配與調度;
2)NodeManager(nm):單個節點上的資源管理、處理來自ResourceManager的命令、處理來自ApplicationMaster的命令;
3)ApplicationMaster:數據切分、爲應用程序申請資源,並分配給內部任務、任務監控與容錯。
4)Container:對任務運行環境的抽象,封裝了CPU、內存等多維資源以及環境變量、啓動命令等任務運行相關的信息。
2.3 MapReduce架構概述
MapReduce將計算過程分爲兩個階段:Map和Reduce
1)Map階段並行處理輸入數據
2)Reduce階段對Map結果進行彙總
配置Hadoop環境變量
首先去官網下載hadoop壓縮包 點擊打開鏈接
將下載好的hadoop壓縮包和jdk壓縮包一樣上傳到Linux系統,用命令解壓的到目標文件夾:
tar -xvf hadoop-2.7.3.tar.gz -C ~/training/
解壓好之後,進到解壓的目錄下,使用命令pwd列出文件所在的目錄,copy一下:
之後 使用vi命令: vi ~/.bash_profile:
HADOOP_HOME="/root/training/hadoop-2.7.3" export HADOOP_HOME PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH export PATH
使用source ~/.bash_profile 使命令生效
搭建Hadoop本地模式:
Hadoop環境分爲三種模式,一種是本地模式,一種是僞分佈式,還有一種是全分佈式。 僞分佈式一般適用於開發,生產環境上是全分佈式,僞分佈式一臺機器就可以了,但是全分佈式至少3臺機器。
如果想搭建本地模式很簡單只需要改一個文件,進入/root/training/hadoop-2.7.3/etc/hadoop 這個個路徑下,
vi hadoop-env.sh,修改裏面的export JAVA_HOME="" 指向你jdk的路徑即可
如下:
順便介紹一個命令,如果你不記得你的JAVA_HOME的地址,可以用一個命令查看:echo $JAVA_HOME
最後各式一下hadoop, 輸入命令: hdfs namenode -format 即可
最後 start-all.sh即可
僞分佈式環境搭建
有了上面的本地模式,搭建僞分佈式模式就相對簡單的多:只需要配置/root/training/hadoop-2.7.3/etc/hadoop這個目錄下的的文件即可:
(1) hadoop-env.sh
這個文件中的jdk的安裝路徑,在上面的本地模式已經配置過。
(2) hdfs-site.xml
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
這個屬性設置的是HDFS文件的副本個數,默認爲因爲我們是僞分佈式,只有一臺機器,nameNode 和DataNode都在一臺機器上,所以設置爲1.
(2)core-site.xml
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/root/training/hadoop-2.7.3/tmp</value>
</property>
這兩個參數,第一個設置的是HDFS的訪問接口,第二個是HDFS的存放目錄
(3)mapred-site.xml
這個文件是不存在的,但是有這個文件mapred-site.xml.template這個文件,我們可以複製一個:
cp mapred-site.xml.template mapred-site.xml
這樣在裏面添加: 這個表示的是MapReduce的運行環境
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
(4)yarn-site.xml
<property>
<name>yarn.resourcemanager.hostname</name>
<value>localhost</value>
</property> <property>
<name>yarn.nodemanager.aux-servsuoyuices</name>
<value>mapreduce_shuffle</value>
</property>
第一個是yarn的主節點,第二個表示MapReduce的運行方式
配置完之後:hdfs namenode -format
start-all.sh
即可啓動hadoop
輸入命令jps,列出所有的進程如下:
全分佈式:
全分佈式至少需要3臺機器,我們以3臺機器爲例,一臺運行NameNode,另外兩臺運行DataNode
配置起來跟僞分佈式差不多需要更改幾處文件
hdfs-site.xml
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
數據的副本數就不要是1了,改成2
添加另外兩臺dataNode,需要更改文件slaves:
這個裏面原來默認就是你本機,需要將localHost刪除,添加你的另外兩臺機器的ip即可,這臺機器作爲主機主節點運行NameNode,其他兩臺機器運行DataNode
三臺機器都要這麼配置那就太麻煩了,配置好了一個之後可以copy到另外的機器:
scp -r hadoop-xx root@ip:/root/xxx/
這個命令的含義就是將hadoop-xx 這個文件copy到主機ip上,名字是root。:後面是路徑
歡迎關注,一起學習大數據!
下週kafka專場,歡迎關注公衆號,獲得最新信息!