Hadoop體系結構

Hadoop體系結構

★ Hadoop版本

Apache官方版本

Cloudera

Yahoo內部版本

★ 兩大核心

HDFS 和 MapReduce

HDFS是Hadoop File System   Hadoop文件系統   它是一個分佈式的文件系統

MapReduce  並行的計算框架   數據來源於HDFS

★ HDFS的架構

它是一個主從結構的

主結點:NameNode,且只有一個

從結點:DataNode,可以有多個

 

▲ NameNode功能

接收用戶的操作請求

維護文件系統的目錄結構

維護文件與block之間的關係,HDFS中的文件是分割成block來保存的。

還要維護block與DataNode之間的關係

▲ DataNode功能

存儲文件

存儲的是block塊,保存在DataNode的磁盤上

爲保證數據安全,文件有多個副本,保存在不同的DataNode中

★ MapRreduce的架構

也是一個主從結構

主結點:JobTracker

從結點:TaskTracker

 

▲ JobTracker功能

接收客戶提交的計算任務

把任務分配給TaskTracker執行

監控TaskTracker的執行情況

 

▲ TaskTracker功能

執行JobTracker分配給的任務

★ Hadoop的特點

擴容能力高:可以可靠地存儲和處理千兆PB數據

成本低:可以通過普通機器組成的服務器集羣來並行計算,從而達到目的

高效率:通過分發數據,可以在多個節點上並行parallel地處理數據

可靠性:依託的是Hadoop的並行機制,可以多個副本

 

★ Hadoop集羣的物理分佈

物理分佈圖如下所示,通過交換機連接

一個主節點,多個從節點。

 

★ 單節點的物理結構

NameNode DataNode  JobTracker  TaskTracker SecondaryNameNode這些進程是運行在虛擬機JVM上的。

★ Hadoop的部署方式

▲本地模式

略。

▲僞分佈模式

Hadop的進程(NameNodeDataNode,JobTracker,TaskTracker,SecondNameNode)運行在一臺物理機器上。

▲集羣模式

不同的進程運行在不同的物理機器上。

 

★僞分佈模式部署

▲ 軟件準備

         1. 安裝虛擬機,可以用vmware或virtualbox等虛擬機軟件

         2.安裝linux操作系統,及對系統的一些設置,如SSH  IP  等

         3.安裝jdk

         4.安裝Hadoop

PS:

※虛擬機的網絡配置,配置Host-only連接方式,找一個網段,組建一個單獨的網絡。安裝的虛擬機中的機器的IP設置成單獨的網段的IP,即可。

※如果網絡配置的是橋接,則虛擬機與物理機的IP地址要在同一個網段,否則不能正常訪問。

▲ 關閉防火牆

關閉:service iptables stop

驗證:service iptables status

 

關閉防火牆自動運行

關閉:chkconfig iptables off

驗證:chkconfig --list | grep iptables

 

▲ 設置ip地址

修改配置文件: vi /etc/sysconfig/network-scripts/ifcfg-eth0

配置完執行命令:service network restart

驗證:ifconfig   查看ip配置

 

▲ 修改主機名hostname

1.hostname hadooptest     #只對當前會話生效

2.vi /etc/sysconfig/network     #修改主機名  hostname後的名字爲要設置的主機名

 

▲ ip地址與hostname的綁定

vi /etc/hosts    #修改映射文件

▲ SSH免密碼登錄

執行命令:ssh-keygen -t rsa

創建公鑰id_rsa.pub和私鑰id_rsa

 

添加公鑰到authorized_keys文件中

cp ~/.ssh/id_rsa.pub  ~/.ssh/id_rsa/authorized_keys

 

ps:known_hosts文件中保存的是可以ssh免密碼登錄到的地址

當ssh localhost的時候,會給known_hosts文件中添加一條記錄,該條記錄,記錄的就是可以免密碼登錄的hostname或ip地址。

 

▲ JDK安裝

上傳jdk-6u24-linux-i586.bin 如果是64位的linux系統,則選擇對應的安裝文件

chmod a+x jdk-6u24-linux-i586.bin    #設置該bin文件的執行權限

./ jdk-6u24-linux-i586.bin

設置環境變量JAVA_HOME    #在/etc/profile文件中配置環境變量

source /etc/profile

驗證命令:java -version

▲ hadoop安裝

上傳haoop壓縮包hadoop-1.1.2.tar.gz

在/etc/profile文件中配置HADOOP_HOME環境變量

 

source /etc/profile

 

配置$HADOOP_HOME/conf/目錄下的四個配置文件,如下所示:

1. hadoop-env.sh

# The java implementation to use.  Required.

export JAVA_HOME=/usr/local/jdk1.6

2. core-site.xml

<configuration>

       <property>

               <name>fs.default.name</name>

               <value>hdfs://hadooptest:9000</value>

       </property>

       <property>

               <name>hadoop.tmp.dir</name>

               <value>/usr/local/hadoop1/tmp</value>

       </property>

</configuration>

3. hdfs-site.xml

<configuration>

       <property>

               <name>dfs.replication</name>

                <value>2</value>

       </property>

       <property>

               <name>dfs.permissions</name>

               <value>false</value>

       </property>

</configuration>

4. mapred-site.xml

<configuration>

       <property>

               <name>mapred.job.tracker</name>

               <value>hadooptest:9001</value>

       </property>

</configuration>

 

配置完成後格式化文件系統,執行如下命令

hadoop namenode -format

執行完成後的結果:

         [root@hadooptesthadoop1]# cd tmp

         [root@hadooptesttmp]# pwd

         /usr/local/hadoop1/tmp

         [root@hadooptesttmp]# ll

         total8

         drwxr-xr-x.5 root root 4096 Jul 15 18:32 dfs

         drwxr-xr-x.3 root root 4096 Jul 15 18:32 mapred

在上述配置文件core-site.xml文件中的配置文件中hadoop.tmp.dir指定的目錄下多出了兩個文件夾,分別是dfs和mapred,用來保存Hadoop運行時的一些臨時文件。

 

啓動Hadoop

執行命令:start-all.sh

 

驗證啓動是否成功:

執行命令:jps

如果出現如下五個進程,則表示hadoop啓動成功。

[root@hadooptest logs]# jps

4798 TaskTracker

5100 Jps

4597 SecondaryNameNode

4362 NameNode

4680 JobTracker

4472 DataNode

 

如果啓動失敗,可以參考下面的日誌文件中的報錯信息。

 

▲ 日誌文件

保存路徑:/usr/local/hadoop1/logs

         hadoop-root-datanode-hadooptest.log

         hadoop-root-jobtracker-hadooptest.log

         hadoop-root-namenode-hadooptest.log

         hadoop-root-secondarynamenode-hadooptest.log

         hadoop-root-tasktracker-hadooptest.log

以上五個日誌文件是運行時的日誌文件,分類保存日誌信息。

 

▲ Hadoop常用端口

50030  可以查看正在運行的job等  jobtracker.jsp

Hadoop Map/Reduce Administration

50070  查看HDFS文件系統的健康狀況   dfshealth.jsp

以上兩個是常用的端口,其它略。

 

 

 

★ Hadoop的配置文件

Hadoop的核心配置包括如下:core-site.xml    hadoop-env.xml   hdfs-site.xml  mapred-site.xml  master  slave 

▲ core-site.xml

core-site.xml爲Hadoop的核心屬性文件,參數爲Hadoop的核心功能,獨立於HDFS和MapReduce。

 

 

 

 

 

 

 

 

 

 

 

 

 


 

參數

含義

fs.default.name

設置Hadoop  namenode的hostname及port,

預設是Standalone mode

hadoop.tmp.dir

默認值/tmp/hadoop-${user.name}

在tmp下根據username生成不同的目錄

fs.checkpoint.dir

默認值${hadoop.tmp.dir}/dfs/namesecondary

Sencondary NameNode 鏡像存儲目錄

fs.checkpoint.period

默認值: 3600(秒)

控制 secondary namenode 的 checkpoint 時間間隔。如果距離上次 checkpoint 的時間大於這個參數的設定,就會觸發 checkpoint。secondary namenode 會把 namenode 的 fsimage 和 editlog 做 snapshot。如果存取 Hadoop 的次數頻繁或爲了減少重起 namenode 的 downtime,可以把這個值設小一點。

fs.checkpoint.size

默認值67108864(byte)

如果 Hadoop 非常的忙碌,editlog 可能會在短時間內變的很大,fs.checkpoint.period 的設定不見得可以完全預測這個狀況,所以保險的做法會多設定這個值,以保證當數據大到超過 fs.checkpoint.size 的值也會觸發 checkpoint。

io.file.buffer.size

默認值 4096

這是讀寫 sequence file 的 buffer size, 可減少 I/O 次數。在大型的 Hadoop cluster,建議可設定爲 65536 到 131072。

ipc.client.connection.maxidletime

默認值 10000(毫秒)

設定 Hadoop client 連接時最大的閒置,默認是是 10 秒。如果 Hadoop cluster 的網絡聯繫不穩,可以把這個值設到 60000(60秒)

ipc.server.tcpnodelay

默認值 false

在 Hadoop server 是否啓動 Nagle’s 算法。設 true 會 disable 這個演算法,關掉會減少延遲,但是會增加小數據包的傳輸。server site 不太需要這定這個值。

hadoop.security.authorization

默認值 false

是不是要開啓 賬號驗證機制,開啓之後 Hadoop 在執行任何動作之前都會先確認是否有權限。詳細的權限設定會放在 hadoop-policy.xml 裡。例如要讓 fenriswolf 這個 account 及 mapreduce group 可以 submit M/R jobs,要設定security.job.submission.protocol.acl

hadoop.security.authentication

默認值 simple

simple 表示沒有 authentication,Hadoop 會用 system account 及 group 來控管q權限。

fs.trash.interval

默認值 0(分)    清掉垃圾筒的時間。預設是不清, 所以在刪除文件時要自己執行

hadoop.native.lib

默認 Hadoop 會去找所有可用的 native libraries 並自動 load 進來使用

▲ hdfs-site.xml

 

參數列表

•dfs.block.size

•默認值67108864(字節)

•默認每個 block 是 64MB。如果確定存取的文件塊都很大可以改為 134217728(128MB)。Client 也可自行決定要使用的 block size 而不需要更改整個 cluster 的設定。

•dfs.safemode.threshold.pct

•默認值  0.999f

•  Hadoop 啓動時會進入 safemode,也就是安全模式,這時是不能寫入數據的。只有當99.9% 的 blocks 達到最小的 dfs.replication.min 數量(默認是3)纔會離開safe mode。在 dfs.replication.min 設的比較大或 data nodes 數量比較多時會等比較久。

 

•dfs.namenode.handler.count

•默認值 10

•設定 namenode server threads 的數量,這些 threads 會用 RPC 跟其他的 datanodes溝通。當 datanodes 數量太多時會發現很容易出現 RPC timeout,解決方法是提升網絡速度或提高這個值,但要注意的是 thread 數量多也表示 namenode 消耗的內存也隨着增加

•dfs.datanode.handler.count

•默認值  3

•  指定 data node 上用的 thread 數量。

 

•dfs.datanode.max.xcievers

•默認值 256

•這個值是指定 datanode 可同時處理的最大文件數量、

•dfs.datanode.du.reserved

•默認值 0

•默認值表示 data nodes 會使用整個磁盤,寫滿之後會導致無法再寫入 M/R jobs。如果還有其他程式共用這些目錄也會受到影響。建議保留至少 1073741824(1G) 的空間。

 

▲ mapred-site.xml

 

參數列表

 

•io.sort.mb

•默認值100

•緩存map中間結果的buffer大小(in MB)

•io.sort.record.percent

•默認值 0.05

•io.sort.mb中用來保存map output記錄邊界的百分比,其他緩存用來保存數據

•io.sort.spill.percent

•默認值0.80

•map開始做spill操作的閾值

•io.sort.factor

•默認值 10

•做merge操作時同時操作的stream數上限。

 

•min.num.spill.for.combine

•默認值3

•combiner函數運行的最小spill數

•mapred.compress.map.output

•默認值 false

•map中間結果是否採用壓縮

•mapred.map.output.compression.codec

•org.apache.hadoop.io.compress.DefaultCodec

•min.num.spill.for.combine

•默認值3

•combiner函數運行的最小spill數

•mapred.compress.map.output

•默認值 false

•map中間結果是否採用壓縮

•mapred.map.output.compression.codec

•org.apache.hadoop.io.compress.DefaultCodec

•mapred.reduce.parallel.copies

•默認值5

•每個reduce並行下載map結果的最大線程數

•mapred.reduce.copy.backoff

•默認值 300

•reduce下載線程最大等待時間(in sec)

•io.sort.factor

•默認值10

•org.apache.hadoop.io.compress.DefaultCodec

•mapred.job.shuffle.input.buffer.percent

•默認值0.7

•用來緩存shuffle數據的reduce task heap百分比

•mapred.job.shuffle.merge.percent

•默認值 0.66

•緩存的內存中多少百分比後開始做merge操作

•mapred.job.reduce.input.buffer.percent

•默認值0.0

•sort完成後reduce計算階段用來緩存數據的百分比

 

 

 

★ Hadoop HA

Hadoop1.0架構的問題

單點故障

•如果NameNode或者JobTraker關掉,那麼整個集羣癱瘓。

•對於7×24生產環境,是具有極大的風險。

 

第二部分:常見的HA方案

•第一種是可以設置一個NFS的目錄,存儲fsimage和editlog,存儲的是實時數據,這樣當namenode掛掉後能夠通過fsimage和editlog進行完全恢復。

•第二種是設置Secondary Namenode。

•問題:不能迅速的切換,需要花費一定時間恢復。

 

 

FaceBook的方案

•不改變namenode和datanode整體邏輯的基礎上,在其上層開發出AvaterNode,AvatarNode的意思就是支持互相切換。

•提供一個Primary Avatar和一個Standby Avatar,通過virual IP來設置IP地址。

•Primary Avatar對外提供服務,設置了NFS目錄,將FSImage和EditLog遠程存儲。Standby Avatar將NFS目錄中的FSImage和EditLog讀取過來進行同步,並且設置Standby Avatar一直處於safemode狀態,不影響正常操作。這樣Standby Avatar相當於一個熱拷貝,獲得了所有的實時數據。

 

 

 

Hadoop0.23 是如何解決的HA

 

提供2臺機器做雙機熱備

一臺爲Active 節點,一臺爲StandBy節點

同時只有Active節點對外提供服務

源數據存儲在共享存儲

StandBy會時刻到共享存儲拿Meta信息,以保證切換時不會丟掉數據

DataNode會向2臺機器彙報自己的信息

仍需要配置Sencondary NameNode接解決Edits log變大問題

 

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章