Hadoop是一個由Apache基金會所開發的分散式基礎架構,Hadoop的框架最核心的設計就是:HDFS和MapReduce。HDFS為海量的數據提供了存儲,而MapReduce則為海量的數據提供了計算,特點是:高可靠性,高擴展性,高效性,高容錯性。 Hadoop與Google三篇論文 Googl ...
Hadoop是一個由Apache基金會所開發的分散式基礎架構,Hadoop的框架最核心的設計就是:HDFS和MapReduce。HDFS為海量的數據提供了存儲,而MapReduce則為海量的數據提供了計算,特點是:高可靠性,高擴展性,高效性,高容錯性。
Hadoop與Google三篇論文
- Google-File-System :http://blog.bizcloudsoft.com/wp-content/uploads/Google-File-System%E4%B8%AD%E6%96%87%E7%89%88_1.0.pdf
- Google-Mapreduce:http://blog.bizcloudsoft.com/wp-content/uploads/Google-MapReduce%E4%B8%AD%E6%96%87%E7%89%88_1.0.pdf
- Google-Bigtable:http://blog.bizcloudsoft.com/wp-content/uploads/Google-Bigtable%E4%B8%AD%E6%96%87%E7%89%88_1.0.pd
Hadoop架構
Hadoop1.x與Hadoop2.x的區別:
Hadoop整體框架來看:
Hadoop1.0由分散式存儲系統HDFS和分散式計算框架MapReduce組成,其中HDFS由一個NameNode和多個DateNode組成,MapReduce由一個JobTracker和多個TaskTracker組成。
1.x與2.x區別
HDFS角度來看:
- Hadoop2.x新增了HDFS HA增加了standbynamenode進行熱點備份,解決了1.x的單點故障
- Hadoop2.x新增了HDFS federation,解決了 HDFS的水平擴展能力。
Mapreduce角度來看:
2.x相比與1.x新增了YRAN框架,Mapreduce的運行環境發生了變化
在1.0中:由一個JobTracker和若幹個TaskTracker兩類服務組成,其中JobTracker負責資源管理和所有作業的控制,TaskTracker負責接收來自JobTracker的命令並執行它。所以MapReduce即是任務調度框架又是計算框架,1.0中會出現JobTracker大包大攬任務過重,而且存在單點故障問題,並且容易出現OOM問題,資源分配不合理等問題。
在2.0中:MASTER端由ResourceManager進行資源管理調度,有ApplicationMaster進行任務管理和任務監控。SLAVE端由NodeManager替代TaskTracker進行具體任務的執行,所以MapReduce2.0只是一個計算框架,具體資源調度全部交給Yarn框架。
2.X和3.X最主要區別:
對比 |
2.X特性 |
3.X特性 |
License |
Hadoop 2.x - Apache 2.0,開源 |
Hadoop 3.x - Apache 2.0,開源 |
支持的最低Java版本 |
java的最低支持版本是java 7 |
java的最低支持版本是java 8 |
容錯 |
可以通過複製(浪費空間)來處理容錯。 |
可以通過Erasure編碼處理容錯。 |
數據平衡 |
對於數據,平衡使用HDFS平衡器。 |
對於數據,平衡使用Intra-data節點平衡器,該平衡器通過HDFS磁碟平衡器CLI調用。 |
存儲Scheme |
使用3X副本Scheme |
支持HDFS中的擦除編碼。 |
存儲開銷 |
HDFS在存儲空間中有200%的開銷。 |
存儲開銷僅為50%。 |
存儲開銷示例 |
如果有6個塊,那麼由於副本方案(Scheme),將有18個塊占用空間。 |
如果有6個塊,那麼將有9個塊空間,6塊block,3塊用於奇偶校驗。 |
YARN時間線服務 |
使用具有可伸縮性問題的舊時間軸服務。 |
改進時間線服務v2並提高時間線服務的可擴展性和可靠性。 |
預設埠範圍 |
在Hadoop 2.0中,一些預設埠是Linux臨時埠範圍。所以在啟動時,他們將無法綁定。 |
但是在Hadoop 3.0中,這些埠已經移出了短暫的範圍。 |
工具 |
使用Hive,pig,Tez,Hama,Giraph和其他Hadoop工具。 |
可以使用Hive,pig,Tez,Hama,Giraph和其他Hadoop工具。 |
相容的文件系統 |
HDFS(預設FS),FTP文件系統:它將所有數據存儲在可遠程訪問的FTP伺服器上。 Amazon S3(簡單存儲服務)文件系統Windows Azure存儲Blob(WASB)文件系統。 |
它支持所有前面以及Microsoft Azure Data Lake文件系統。 |
Datanode資源 |
Datanode資源不專用於MapReduce,我們可以將它用於其他應用程式。 |
此處數據節點資源也可用於其他應用程式。 |
MR API相容性 |
與Hadoop 1.x程式相容的MR API,可在Hadoop 2.X上執行 |
此處,MR API與運行Hadoop 1.x程式相容,以便在Hadoop 3.X上執行 |
支持Microsoft Windows |
它可以部署在Windows上。 |
它也支持Microsoft Windows。 |
插槽/容器 |
Hadoop 1適用於插槽的概念,但Hadoop 2.X適用於容器的概念。通過容器,我們可以運行通用任務。 |
它也適用於容器的概念。 |
單點故障 |
具有SPOF的功能,因此只要Namenode失敗,它就會自動恢復。 |
具有SPOF的功能,因此只要Namenode失敗,它就會自動恢復,無需人工干預就可以剋服它。 |
HDFS聯盟 |
在Hadoop 1.0中,只有一個NameNode來管理所有Namespace,但在Hadoop 2.0中,多個NameNode用於多個Namespace。 |
Hadoop 3.x還有多個名稱空間用於多個名稱空間。 |
可擴展性 |
我們可以擴展到每個群集10,000個節點。 |
更好的可擴展性。 我們可以為每個群集擴展超過10,000個節點。 |
更快地訪問數據 |
由於數據節點緩存,我們可以快速訪問數據。 |
這裡也通過Datanode緩存我們可以快速訪問數據。 |
HDFS快照 |
Hadoop 2增加了對快照的支持。 它為用戶錯誤提供災難恢復和保護。 |
Hadoop 2也支持快照功能。 |
平臺 |
可以作為各種數據分析的平臺,可以運行事件處理,流媒體和實時操作。 |
這裡也可以在YARN的頂部運行事件處理,流媒體和實時操作。 |
群集資源管理 |
對於群集資源管理,它使用YARN。 它提高了可擴展性,高可用性,多租戶。 |
對於集群,資源管理使用具有所有功能的YARN。 |
3.x的新特性參考:https://www.cnblogs.com/smartloli/p/9028267.html ;https://www.cnblogs.com/smartloli/p/8827623.html
HDFS(Hadoop Distributed File System)架構概述
- NameNode(NN):存儲文件的元數據,如文件名,文件目錄結構,文件屬性(生成時間,副本數,文件許可權),以及每個文件的塊列表和所在的DataNode等。
- DataNode(DN):在本地文件系統存儲的文件數據,以及塊數據的校驗和。
- Secondary NameNode(2NN):用來監控HDFS狀態的輔助後臺程式,每隔一段時間獲取HDFS元數據的快照。
YARN架構概述
MapReduce將計算過程分為兩個階段:Map和Reduce,如圖2-25所示
1)Map階段並行處理輸入數據
2)Reduce階段對Map結果進行彙總
大數據技術生態體系
圖中涉及的技術名詞解釋如下:
1)Sqoop:Sqoop是一款開源的工具,主要用於在Hadoop、Hive與傳統的資料庫(MySql)間進行數據的傳遞,可以將一個關係型資料庫(例如 :MySQL,Oracle 等)中的數據導進到Hadoop的HDFS中,也可以將HDFS的數據導進到關係型資料庫中。
2)Flume:Flume是Cloudera提供的一個高可用的,高可靠的,分散式的海量日誌採集、聚合和傳輸的系統,Flume支持在日誌系統中定製各類數據發送方,用於收集數據;同時,Flume提供對數據進行簡單處理,並寫到各種數據接受方(可定製)的能力。
3)Kafka:Kafka是一種高吞吐量的分散式發佈訂閱消息系統,有如下特性:
(1)通過O(1)的磁碟數據結構提供消息的持久化,這種結構對於即使數以TB的消息存儲也能夠保持長時間的穩定性能。
(2)高吞吐量:即使是非常普通的硬體Kafka也可以支持每秒數百萬的消息。
(3)支持通過Kafka伺服器和消費機集群來分區消息。
(4)支持Hadoop並行數據載入。
4)Storm:Storm用於“連續計算”,對數據流做連續查詢,在計算時就將結果以流的形式輸出給用戶。
5)Spark:Spark是當前最流行的開源大數據記憶體計算框架。可以基於Hadoop上存儲的大數據進行計算。
6)Oozie:Oozie是一個管理Hdoop作業(job)的工作流程調度管理系統。
7)Hbase:HBase是一個分散式的、面向列的開源資料庫。HBase不同於一般的關係資料庫,它是一個適合於非結構化數據存儲的資料庫。
8)Hive:Hive是基於Hadoop的一個數據倉庫工具,可以將結構化的數據文件映射為一張資料庫表,並提供簡單的SQL查詢功能,可以將SQL語句轉換為MapReduce任務進行運行。 其優點是學習成本低,可以通過類SQL語句快速實現簡單的MapReduce統計,不必開發專門的MapReduce應用,十分適合數據倉庫的統計分析。
10)R語言:R是用於統計分析、繪圖的語言和操作環境。R是屬於GNU系統的一個自由、免費、源代碼開放的軟體,它是一個用於統計計算和統計製圖的優秀工具。
11)Mahout:Apache Mahout是個可擴展的機器學習和數據挖掘庫。
12)ZooKeeper:Zookeeper是Google的Chubby一個開源的實現。它是一個針對大型分散式系統的可靠協調系統,提供的功能包括:配置維護、名字服務、 分散式同步、組服務等。ZooKeeper的目標就是封裝好複雜易出錯的關鍵服務,將簡單易用的介面和性能高效、功能穩定的系統提供給用戶。
推薦系統框架圖
Hadoop集群搭建
虛擬機環境準備 -----/etc/hosts:
- 克隆虛擬機
- 修改克隆虛擬機的靜態IP
- 修改主機名
- 關閉防火牆
- 創建用戶gll
- 配置gll用戶具有root許可權
- 在/opt目錄下創建文件夾
(1)在/opt目錄下創建module、software文件夾 [atguigu@hadoop101 opt]$ sudo mkdir module [atguigu@hadoop101 opt]$ sudo mkdir software (2)修改module、software文件夾的所有者cd [atguigu@hadoop101 opt]$ sudo chown atguigu:atguigu module/ software/ [atguigu@hadoop101 opt]$ ll 總用量 8 drwxr-xr-x. 2 atguigu atguigu 4096 1月 17 14:37 module drwxr-xr-x. 2 atguigu atguigu 4096 1月 17 14:38 software
安裝JDK
卸載現有JDK
(1)查詢是否安裝Java軟體: [atguigu@hadoop101 opt]$ rpm -qa | grep java (2)如果安裝的版本低於1.7,卸載該JDK: [atguigu@hadoop101 opt]$ sudo rpm -e 軟體包 (3)查看JDK安裝路徑: [atguigu@hadoop101 ~]$ which java
在Linux系統下的opt目錄中查看軟體包是否導入成功
[atguigu@hadoop101 opt]$ cd software/ [atguigu@hadoop101 software]$ ls hadoop-2.7.2.tar.gz jdk-8u144-linux-x64.tar.gz
解壓JDK到/opt/module目錄下
[atguigu@hadoop101 software]$ tar -zxvf jdk-8u144-linux-x64.tar.gz -C /opt/module/
配置JDK環境變數
(1)先獲取JDK路徑 [atguigu@hadoop101 jdk1.8.0_144]$ pwd /opt/module/j