Hadoop是一個由Apache基金會所開發的分佈式系統基礎架構。用戶能夠在不瞭解分佈式底層細節的狀況下,開發分佈式程序。充分利用集羣的威力進行高速運算和存儲。node
Hadoop is a distributed computing platform written in Java. It incorporates features similar to those of the Google File System and of MapReduce. For some details, see HadoopMapReduce.程序員
HDFS和MapReduce。HDFS爲海量的數據提供了存儲,則MapReduce爲海量的數據提供了計算。web
Hadoop的主要優勢有如下幾個:算法
(a) 高可靠性。Hadoop按位存儲和處理數據的能力值得人們信賴。數據庫
(b)高擴展性。Hadoop是在可用的計算機集簇間分配數據並完成計算任務的,這些集簇能夠方便地擴展到數以千計的節點中。編程
(c)高效性。Hadoop可以在節點之間動態地移動數據,並保證各個節點的動態平衡,所以處理速度很是快。ruby
(d)高容錯性。Hadoop可以自動保存數據的多個副本,而且可以自動將失敗的任務從新分配。服務器
(e)低成本。與一體機、商用數據倉庫以及QlikView、Yonghong Z-Suite等數據集市相比,hadoop是開源的,項目的軟件成本所以會大大下降。markdown
Hadoop實現了一個分佈式文件系統(Hadoop Distributed File System),簡稱HDFS。網絡
HDFS有高容錯性的特色,而且設計用來部署在低廉的(low-cost)硬件上;並且它提供高吞吐量(high throughput)來訪問應用程序的數據,適合那些有着超大數據集(large data set)的應用程序。HDFS放寬了(relax)POSIX的要求,能夠以流的形式訪問(streaming access)文件系統中的數據。
對外部客戶機而言,HDFS就像一個傳統的分級文件系統。能夠建立、刪除、移動或重命名文件,等等。可是 HDFS 的架構是基於一組特定的節點構建的,這是由它自身的特色決定的。
這些節點包括 NameNode(僅一個),它在 HDFS 內部提供元數據服務;DataNode,它爲 HDFS 提供存儲塊。因爲僅存在一個 NameNode,所以這是 HDFS 的一個缺點(單點失敗)。
存儲在 HDFS 中的文件被分紅塊,而後將這些塊複製到多個計算機中(DataNode)。這與傳統的 RAID 架構大不相同。塊的大小(一般爲 64MB)和複製的塊數量在建立文件時由客戶機決定。NameNode 能夠控制全部文件操做。HDFS 內部的全部通訊都基於標準的 TCP/IP 協議。
HDFS的部分特性:
1. 一致性,高可用性,分區容錯性
2. 存儲超大文件
3. 一次寫入,屢次讀取(流式數據訪問)
4. 運行在普通廉價的服務器上
5. 以高延遲爲代價
6. 不適合存儲大量小容量的文件
7. 會在多個datanode上存儲多份副本,默認3份,三份副本通常會保存在兩個或者兩個以上的服務器中
8. namenode 負責管理文件目錄,文件和block的對應關係以及block和datanode的對應關係
9. datanode負責存儲,大部分的容錯機制都是在datanode上實現
NameNode 是一個一般在 HDFS 實例中的單獨機器上運行的軟件。
它負責管理文件系統名稱空間和控制外部客戶機的訪問。NameNode 決定是否將文件映射到 DataNode 上的複製塊上。對於最多見的 3 個複製塊,第一個複製塊存儲在同一機架的不一樣節點上,最後一個複製塊存儲在不一樣機架的某個節點上。
NameNode自己不可避免地具備SPOF(Single Point Of Failure)單點失效的風險,主備模式並不能解決這個問題,經過Hadoop Non-stop namenode才能實現100% uptime可用時間。
The term 「secondary name-node」 is somewhat misleading. It is not a name-node in the sense that data-nodes cannot connect to the secondary name-node, and in no event it can replace the primary name-node in case of its failure.
The only purpose of the secondary name-node is to perform periodic checkpoints. The secondary name-node periodically downloads current name-node image and edits log files, joins them into new image and uploads the new image back to the (primary and the only) name-node. See User Guide.
So if the name-node fails and you can restart it on the same physical node then there is no need to shutdown data-nodes, just the name-node need to be restarted. If you cannot use the old node anymore you will need to copy the latest image somewhere else. The latest image can be found either on the node that used to be the primary before failure if available; or on the secondary
name-node.
The latter will be the latest checkpoint without subsequent edits logs, that is the most recent name space modifications may be missing there. You will also need to restart the whole cluster in this case.
This also applies to the case where a machine has crashed and rebooted, etc, and you need to get it to rejoin the cluster. You do not need to shutdown and/or restart the entire cluster in this case.
First, add the new node’s DNS name to the conf/slaves file on the master node.
Then log in to the new slave node and execute:
$ cd path/to/hadoop
$ bin/hadoop-daemon.sh start datanode
$ bin/hadoop-daemon.sh start tasktracker
There are web-based interfaces to both the JobTracker (MapReduce master) and NameNode (HDFS master) which display status pages about the state of the entire system.
By default, these are located at:
http://job.tracker.addr:50030/ and http://name.node.addr:50070/.
The JobTracker status page will display the state of all nodes, as well as the job queue and status about all currently running jobs and tasks. TheNameNode status page will display the state of all nodes and the amount of free space, and provides the ability to browse the DFS via the web.
$ bin/hadoop dfsadmin -report
DataNode 也是一個一般在 HDFS實例中的單獨機器上運行的軟件。
Hadoop 集羣包含一個 NameNode 和大量 DataNode。DataNode 一般以機架的形式組織,機架經過一個交換機將全部系統鏈接起來。Hadoop 的一個假設是:機架內部節點之間的傳輸速度快於機架間節點的傳輸速度。
DataNode 響應來自 HDFS 客戶機的讀寫請求。它們還響應來自 NameNode 的建立、刪除和複製塊的命令。NameNode 依賴來自每一個 DataNode 的按期心跳(heartbeat)消息。每條消息都包含一個塊報告,NameNode 能夠根據這個報告驗證塊映射和其餘文件系統元數據。若是 DataNode 不能發送心跳消息,NameNode 將採起修復措施,從新複製在該節點上丟失的塊。
Google的數據中心使用廉價的Linux PC機組成集羣,在上面運行各類應用。核心組件是3個:
(a) GFS(Google File System)。一個分佈式文件系統,隱藏下層負載均衡,冗餘複製等細節,對上層程序提供一個統一的文件系統API接口。Google根據本身的需求對它進行了特別優化,包括:超大文件的訪問,讀操做比例遠超過寫操做,PC機極易發生故障形成節點失效等。GFS把文件分紅64MB的塊,分佈在集羣的機器上,使用Linux的文件系統存放。同時每塊文件至少有3份以上的冗餘。中心是一個Master節點,根據文件索引,找尋文件塊。詳見Google的工程師發佈的GFS論文。
(b) MapReduce。Google發現大多數分佈式運算能夠抽象爲MapReduce操做。Map是把輸入Input分解成中間的Key/Value對,Reduce把Key/Value合成最終輸出Output。這兩個函數由程序員提供給系統,下層設施把Map和Reduce操做分佈在集羣上運行,並把結果存儲在GFS上。
(c) BigTable。一個大型的分佈式數據庫,這個數據庫不是關係式的數據庫。像它的名字同樣,就是一個巨大的表格,用來存儲結構化的數據。
(a)HDFS: Hadoop分佈式文件系統(Distributed File System)
(b)MapReduce:MapReduce是處理大量半結構化數據集合的編程模型
(c)HBase: 相似Google BigTable的分佈式NoSQL列數據庫。
(d)Hive:數據倉庫工具,由Facebook貢獻。
(e)Zookeeper:分佈式鎖設施,提供相似Google Chubby的功能,由Facebook貢獻。
(f)Avro:新的數據序列化格式與傳輸工具,將逐步取代Hadoop原有的IPC機制。
(g)Pig: 大數據分析平臺,爲用戶提供多種接口。
(h)Ambari:Hadoop管理工具,能夠快捷的監控、部署、管理集羣。
(i)Sqoop:於在HADOOP與傳統的數據庫間進行數據的傳遞。
Hadoop2.x中有兩個重要的變動:
(a)HDFS的NameNode能夠以集羣的方式部署,加強了NameNode的水平擴展能力和可用性
(b)MapReduce將JobTrack中的資源管理及任務生命週期管理(包括定時觸發及監控),拆分紅兩個獨立的組件,並改名爲YARN
(a)2.x解決了1.x中的namenode單點故障問題
(b)解決了namenode內存壓力過大難以擴展問題
(c)解決了JobTrack單點故障問題
(d)解決了JobTrack訪問壓力過大問題
(e)解決了對MapReduce以外的框架支持問題
1.在數據分析與挖掘中對數據的訪問性要求包括:交互性訪問、____、迭代計算、_____,HADOOP僅僅支持了其中____,而Spark則支持全部4種方式。
2.2004年Google發表的三篇著名的分佈式論文是關於分佈式計算、_分佈式數據庫、分佈式文件系統,分別對應的開源實現是____mapreduce_、BIGTABLE__、_GFS_______。
3.HDFS的默認文件會存儲____3份,若是有三臺HDFS節點,有兩臺機器宕機的狀況下文件會丟失嗎?不會
4.HDFS中Master 進程叫_, Slaves進程叫_____。
在MapReduce過程當中須要將任務進行分片,Shuffle:是描述數據從map端輸入到reduce的過程,在hadoop中, 大部分map task和reducetask是在不一樣的node執行,重要開銷是網絡開銷和磁盤IO開銷, 所以,shuffle的做用主要是:完整的從map task端傳輸到reduce端;跨節點傳輸數據時,儘量的減小對帶寬的消耗
(a) Hdfs是普遍使用的hadoop生態圈中的 分佈式文件系統,不少其餘組件都是依賴於hdfs進行實現,好比hadoop 的map reduce算法,hbase。 HDFS就像一個傳統的分級文件系統。能夠建立、刪除、移動或重命名文件 HDFS: Hadoop分佈式文件系統(Distributed File System) Spark的rdd也是一個很是有用的中間件,它爲spark各種組件提供在內存中表示數據的基本存儲格式。 (b)MapReduce:MapReduce是處理大量半結構化數據集合的編程模型 (c)HBase: 相似Google BigTable的分佈式NoSQL列數據庫。 (d)Hive:數據倉庫工具,由Facebook貢獻。 (e)Zookeeper:分佈式鎖設施,提供相似Google Chubby的功能,由Facebook貢獻。
HDFS基本操做
- 拷貝文件到HDFS
- 考出文件到本地文件系統
- 修改文件目錄權限
- HDFS NameNode/DataNode Web監控
例題:
1. 請按如下要求運行hadoop 自帶的wordcount程序
a) 將輸入文件wordcount1.txt和wordcount2.txt 拷貝到hdfs 的/input/
b) 修改文件的權限爲777
c)運行wordcount 的hadoop sample程序統計wordcount1.txt和wordcount2.txt 合計出現的單詞個數
d)將輸出結果拷貝到本地文件系統,答印結果.
e)將hdfs上的輸出文件夾out刪除
hadoop fs -copyFromLocal /data/wordcount/* /input/
hadoop fs -chmod 777 /input
hadoop jar hadoop-mapreduce-examples-2.7.2.jar wordcount /input /out
hadoop fs -copyToLocal /out /data/