在hadoop生態系統中,hadoop核心包括了hdfs以及mapreduce.java
機架感知rack-aware
使得master可以獲取整個集羣的基於網絡ip地址或者主機名的分佈圖。
經過一個腳本實現,腳本耦合少,參數只有網絡ip地址或者主機名。
相關配置項 topology.script.file.namenode
health-checker健康檢查的模塊
相似hadoop這種組件繁多的生態系統,精簡耦合是必須的,這個檢查模塊作得真是很小巧,
它只經過腳本的返回的結果中有沒有ERROR這個字符串來判斷健康狀態。
相關配置項 yarn.NM.health-checker 開頭的都是linux
slaves節點
slaves節點都寫在一個slaves文件裏一行一個.web
配置文件的更新
每當有配置文件的更新咱們都必須手動複製這些配置文件到每個節點,而後利用bin目錄下面以refresh開頭的命令來刷新,有時可能會出現一些問題,
嚴重的是可能還要重啓服務。這要是發生在生產環境中絕對是很可怕的事。shell
native庫
爲了提升性能(畢竟是java寫的),hadoop默認使用native庫來操做文件,native庫要本身編譯。其實就是一個so動態庫,若是沒有這個文件會自動切換爲java運行。
相關配置項 io.native.lib.availableapache
日誌功能
hadoop有自帶日誌聚合功能,可以把日誌聚合起來,你也能夠禁用。這樣日誌就會分散到各個節點.瀏覽器
各個節點使用hostname而不是ip
在dns裏修改解析很快,hostname通常也不須要更改.緩存
Hadoop IPC
Hadoop IPC 是一個hadoop內部的rpc方案,是一個簡潔的,低消耗的RPC機制。 提供更精確控制鏈接,超時,緩存等的能力。服務器
uber task模式。
這個模式是爲了限制mapreduce過程佔用的hadoop資源。可使用
maxmaps, maxreduces, 和maxbytes 來設置。其中maxbytes指輸入的文件大小網絡
container-executor
在yarn裏邊,mr工做將會在每一個節點上的container中執行。這個container設計上來講相似資源分割系統,可是目前只有內存分割的功能。
container的運行狀態和生命週期由nm管理,rm負責調度。
Secondary NameNode,Checkpoint Node,backup node
Secondary NameNode按期合併fsimage和edits日誌。 控制edits的大小。Checkpoint Node方案與Secondary NameNode的原理基本相同,
在節點上運行 bin/hdfs namenode -checkpoint查看你的配置有沒有問題.
backup node利用Hadoop自身的Failover措施,配置一個Backup Node,Backup Node在內存和本地磁盤均保存了HDFS系統最新的名字空間元數據信息。
若是NameNode發生故障,可用使用Backup Node中最新的元數據信息。不過當NameNode發生故障,目前還只能經過重啓NameNode的方式來恢復服務。當前版本的Backup Node還不具備熱備功能
在節點上運行 bin/hdfs namenode -backup 查看你的配置有沒有問題.
啓動前必須在節點上格式化namenode 而且保證與主節點上的VERSION文件是同樣的。
Checkpoint Node與backup node都是使用下面5個配置:
dfs.namenode.backup.address
dfs.namenode.backup.http-address
dfs.namenode.checkpoint.period 指定兩次checkpoint的最大時間間隔,默認3600秒。
dfs.namenode.checkpoint.dxns
dfs.namenode.checkpoint.check.period 每次通訊的間隔時間,默認5分鐘
選用cloudera的 hadoop2.0.0-cdh4.3.0
選用理由:依據cloudera的特點,cloudera知名,有實力,商用性強,生態系統組件完善,且各個組件版本對應正確,文檔維護好。
這裏 http://archive.cloudera.com/cdh4/cdh/4/ 有一整套的cdh生態系統下載列表。使用前先編譯hadoop native library 用cmake編譯,
你可能須要設置GENERATED_JAVAH爲java home的目錄.就看你有沒有提示錯誤了。若是是單獨編譯,一些頭文件放在
jar包裏必須本身解壓出來。只須要編譯libhadoop.so 跟libhdfs.so ,不用編譯 yarn 跟 mapreduce1的.
yarn下面有一個c寫的container-executor程序
另外,英特爾Hadoop發行版作得也很好,圖形界面的的管理很是簡單,再此也推薦一下。
英特爾Hadoop發行版免費版本只有50節點,8TB最大數據存儲量。
Facebook近日開源了它們的mapreduce框架Corona,也值得一試,看看可否更好知足業務需求。
申請的機器:
192.168.2.21 resourcemanage,namenode ,nodemamage datanode
192.168.2.22 nodemamage datanode
假設你已經安裝好了。
配置過程:
配置hadoop通常參考 *.default.xml文件,選擇你須要修改的配置項。 *.default.xml文件放在doc目錄裏
下面是咱們用的一些:
核心配置core-site.xml
fs.defaultFS 一個uri格式的字符串,這裏是:hdfs://192.168.2.21:9000
hdfs配置hdfs-site.xml
dfs.datanode.dns.nameserver 192.168.2.9 namenode聯繫各個節點時候須要解析hostname爲ip這是一個dns服務器。 在2.9的管理器上添加 21 22的機子
dfs.replication 2 數據保存份數
dfs.datanode.handler.count 10 節點的服務線程數,跟讀寫工做量有關。
dfs.datanode.data.dir file:///root/cdh/dfs/data datanode存儲塊數據的文件夾
dfs.namedata.name.dir file:///root/cdh/dfs/name,file:///root/cdh/dfs/name1 namenode存儲name表的文件夾 這裏存儲2份,一個做爲備份
dfs.namenode.backup.address 192.168.2.22:50100 backup node的地址
dfs.namenode.backup.http-address 192.168.2.22:50105 backup node的web界面
dfs.namenode.http-address 192.168.2.21:50070 namenode的web界面backup node將從這裏下載數據
dfs.datanode.max.xcievers 40960 至少要4096,爲了這裏設置10倍大小。這個數字是 DataNode 一次最大可以操做的文件數.爲未來上線的hbase作好準備。
配置 mapred-site.xml
mapreduce.framework.name yarn 第二代mapreduce框架
mapreduce.jobhistory.address 192.168.2.21:10020
mapreduce.jobhistory.webapp.address 192.168.2.21:19888
mapred.child.java.opts 設置java的運行時選項 當它報一些jvm級別的錯誤的時候,你須要添加一些選項 好比 class的位置之類的。跟你運行任何java程序的選項是同樣的。
mapreduce.job.counters.max MapReduce的計數器,默認120,調高點能夠運行比較大的mr運算。
配置 yarn-site.xml
yarn.nodemanager.aux-services mapreduce.shuffle yarn的map過程結束後產生的結果,會被mapreduce.shuffle收集起來reduce。這裏aux-services應該能夠本身實現。或者有人提供因此單獨配置出來。
yarn.nodemanager.aux-services.mapreduce.shuffle.class org.apache.hadoop.mapred.ShuffleHandler ShuffleHandler估計是一個反射,用接口來調用。
yarn.resourcemanager.address 192.168.2.21:8032 RM的鏈接地址
yarn.resourcemanager.scheduler.address 192.168.2.21:8030 調度接口地址
yarn.resourcemanager.resourc-tracker.address 192.168.2.21:8031
yarn.resourcemanager.admin.address 192.168.2.21:8033 RM的管理地址
yarn.resourcemanager.webapp.address 192.168.2.21:8088 RM的web ui地址 能夠用瀏覽器或者w3m訪問的
集羣部署過程:
在 slaves文件裏面添加21 22機子
將21,22的ssh登陸受權文件放到各自的驗證目錄裏,也就是 21 到自身、到22,22到自身、到21的ssh都是不須要輸入密碼的。若是集羣大了,你須要用腳原本完成。
確保21,22的dhcp服務端是開啓的。在dhcp服務端裏配置 hostname與ip的對應。
格式化namenode
bin/hdfs namenode -format
啓動集羣
sbin/start-all.sh //這shell腳本已經不推薦使用了。不過我使用是沒什麼問題的。
啓動以後 使用jps能夠看到下面的服務
datanode
namenode
NM
secondarynamenode
RM
只有 datanode,NM的是slave,若是少一個服務,你就要看看日誌了。
nohup bin/hdfs namenode -backup >/{日誌記錄目錄}/namenodebackup.log 2>&1 > /dev/null & //啓動22上面的namenodebackup 服務
實驗集羣
bin/hadoop fs -ls / 能夠看看根目錄下面有什麼內容 開始應該是空的
從本地複製文件到hdfs 可使用:bin/hadoop fs -copyFromLocal ~/1.txt /1.txt
而後 bin/hadoop fs -ls / 能夠看到1.txt已經在裏邊了。
運行yarn 的wordcount
bin/hadoop jar examples.jar workcount /1.txt /r
運行成功後目錄 /r 下面就會有 _SUCCESS 文件,其它相似part-r-00000的文件是輸出結果
bin/hadoop fs -cat /r4/part-r-00000 查看輸出結果。
值得一提的是 hadoop文件系統的命令跟linux下面的幾乎同樣,很容易看懂跟使用。
關閉集羣 sbin/stop-all.sh //也不推薦使用了。不知道爲何這樣。可能有些集羣不須要 mapreduce 功能。