第二章-大数据处理框Hadoop
第二章-大數據處理框Hadoop
文章目錄
- 第二章-大數據處理框Hadoop
- Hadoop簡介
- Hadoop概念
- Hadoop版本
- Hadoop優化與發展
- Hadoop生態系統
- Hive
- Pig
- Hadoop重要組件
- Hadoop集群部署
Hadoop簡介
Hadoop概念
Hadoop是Apache軟件基金會旗下的一個開源分布式計算平臺,為用戶提供了系統底層細節透明的分布式基礎架構。Hadoop被公認為行業大數據標準開源軟件,在分布式環境下提供了海量數據的處理能力
Hadoop是基于Java語言開發的,具有很好的跨平臺特性,并且可以部署在廉價的計算機集群中。Hadoop可以支持多種編程語言:C/C++、Java、Python 等。
Hadoop的核心是分布式文件系統HDFS(Hadoop Distributed File System)和 MapReduce。
Hadoop是一個能夠對大量數據進行分布式處理的軟件框架,并且是以一種可靠、高效、可伸縮的方式進行處理的,它具有以下幾個方面的特性:
- 高可靠性
- 高效性
- 高可擴展性
- 高容錯性
- 成本低
Hadoop憑借其突出的優勢,已經在各個領域得到了廣泛的應用,而互聯網領域是其應用的主陣地
- Facebook主要將Hadoop平臺用于日志處理、推薦系統和數據倉庫等方面
- 國內采用Hadoop的公司主要有百度、阿里、網易、華為、中國移動等,其中,阿里的Hadoop 集群比較大
Hadoop在企業中的應用架構:
Hadoop版本
Apache Hadoop版本演變:
- Hadoop1.0
- Hadoop0.20.x
- Hadoop0.21.x
- Hadoop0.22.x
- Hadoop2.0
- Hadoop0.23.x
- Hadoop2.x
- Hadoop3.0
- Hadoop3.x
Hadoop 3.x 版本還沒有經過充分的測試,可能還存在些問題。目前還是推薦使用 Hadoop 2.x 版本。
Hadoop1.0 的核心組件僅包括 MapReduce 和 HDFS,存在單一名稱節點、單一命名空間、資源管理效率低等問題。Hadoop2.0 中設計了HDFS HA,提供名稱節點熱備機制;設計了HDFS Federation,管理多個命名空間;設計了新的資源管理框架 YARN。
Hadoop優化與發展
Hadoop的優化與發展主要體現在兩個方面:
- Hadoop 自身兩大核心組件 MapReduce 和 HDFS 的架構設計改進
- Hadoop 生態系統其它組件的不斷豐富,加入了Pig、Tez、Spark 等新組件
| Pig | 處理大規模數據的腳本語言,用戶只需要編寫幾條簡單的語句,系統會自動轉換為 MapReduce 作業 | 抽象層次低,需要手工編寫大量代碼 |
| Spark | 基于內存的分布式并行編程框架,具有較高的實時性,并且較好支持迭代計算 | 延遲高,而且不適合執行迭代計算 |
| Oozie | 工作流和協作服務引擎,協調Hadoop上運行的不同任務 | 沒有提供作業(Job)之間依賴關系管理機制,需要用戶自己處理作業之間依賴關系 |
| Tez | 支持DAG作業的計算框架,對作業的操作進行重新分解和組合,形成一個大的DAG作業,減少不必要操作 | 不同的MapReduce任務之間存在重復操作,降低了效率 |
| Kafka | 分布式發布訂閱消息系統,不同類型的分布式系統可以統一接入到Kafka,實現和Hadoop各個組件之間的不同類型數據的實時高效交換 | Hadoop生態系統中各個組件和其他產品之間缺乏統一的、高效的數據交換中介 |
Hadoop生態系統
Hadoop的項目結構不斷豐富發展,已經形成一個豐富的Hadoop生態系統
數據倉庫(Data Warehouse)是一個面向主題的、集成的、相對穩定的、反映歷史變化的數據集合,用于支持管理決策。
數據倉庫與數據庫的主要區別在于:
Hive
Hive是一個構建于 Hadoop 頂層的數據倉庫工具,支持大規模數據存儲、分析,具有良好的可擴展性,某種程度上可以看作是用戶編程接口,本身不存儲和處理數據。
- 依賴分布式文件系統 HDFS 存儲數據
- 依賴分布式并行計算模型 MapReduce 處理數據
- 定義了簡單的類似 SQL 的查詢語言——HiveQL,用戶可以通過編寫的 HiveQL 語句運行 MapReduce 任務
- 可以很容易把原來構建在關系數據庫上的數據倉庫應用程序移植到 Hadoop 平臺上
Hive本身提供了一系列對數據進行提取、轉換、加載(ETL)的工具,可以存儲、查詢和分析存儲在Hadoop中的大規模數據,這些工具能夠很好地滿足數據倉庫各種應用場景。
Hive在很多方面和傳統的關系數據庫類似,但是它的底層依賴的是 HDFS 和 MapReduce,所以在很多方面又有別于傳統數據庫。
| 數據插入 | 支持批量導入 | 支持單條和批量導入 |
| 數據更新 | 不支持 | 支持 |
| 索引 | 支持 | 支持 |
| 執行延遲 | 高 | 低 |
| 擴展性 | 好 | 有限 |
Hive應用實例:WordCount
- 采用 Hive 實現 WordCount 算法需要編寫較少的代碼量
- 在 MapReduce 的實現中,需要進行編譯生成 jar 文件來執行算法,而在 Hive 中不需要。HiveQL 語句的最終實現需要轉換為 MapReduce 任務來執行,這都是由 Hive 框架自動完成的,用戶不需要了解具體實現細節
Hive在企業大數據分析平臺中的應用,有時候 Pig 可以作為 Hive 的替代工具。
Pig
Pig是一個基于Hadoop的大規模數據分析平臺,它簡化了 Hadoop 常見的工作任務。Pig可加載數據、表達轉換數據以及存儲最終結果,Pig內置的操作使得半結構化數據變得有意義(如日志文件)。同時Pig可擴展使用Java中添加的自定義數據類型并支持數據轉換。
- 提供類似 SQL 的查詢語言Pig Latin
- 允許用戶通過編寫簡單的腳本來實現復雜的數據分析,而不需要編寫復雜的MapReduce應用程序
- Pig會自動把用戶編寫的腳本轉換成MapReduce作業在 Hadoop集群上運行,而且具備對生成的MapReduce程序進行自動優化的功能
- Hive一般處理的是結構化的數據,Pig可以處理非結構化數據。處理流程: LOAD-> 轉換 ->STORE/DUMP
Tez: 支持DAG作業的計算框架。核心思想是將 Map 和 Reduce 兩個操作進一步拆分,分解后的元操作可以任意靈活組合,產生新的操作,這些操作經過一些控制程序組裝后,可形成一個大的 DAG 作業。
Hadoop重要組件
Hadoop生態系統重要組件
| HDFS | 分布式文件系統 |
| MapReduce | 分布式并行編程模型 |
| YARN | 資源管理和調度器 |
| Tez | 運行在 YARN 之上的下一代 HAdoop 查詢處理框架 |
| Hive | Hadoop 上的數據倉庫 |
| HBase | Hadoop 上的非關系型的分布式數據庫 |
| Pig | 一個基于 Hadoop 的大規模數據分析平臺,提供類似 SQL 的查詢語言 Pig Latin |
| Sqoop | 用于在 Hadoop 與傳統數據庫之間進行數據傳遞 |
| Oozie | Hadoop 上的工作流管理系統 |
| Zookeeper | 提供分布式協調一致性服務 |
| Storm | 流計算框架 |
| Flume | 一個高可用的,高可靠,分布式的海量日志采集、聚合和傳輸的系統 |
| Ambari | Hadoop 快速部署工具,支持Apache Hadoop集群的供應、管理和監控 |
| Kafka | 一種高吞吐量的分布式發布訂閱消息系統,可以處理消費者規模的網站中的所有動作流數據 |
| Spark | 類似于Hadoop MapReduce的通用并行框架 |
Hadoop集群部署
Hadoop安裝方式:
- 單機模式:Hadoop 默認模式為非分布式模式(本地模式),無需進行其他配置即可運行。
- 偽分布式模式:Hadoop 可以在單節點上以偽分布式的方式運行,Hadoop 進程以分離的 Java 進程來運行,節點既作為 NameNode 也作為 DataNode,同時,讀取的是 HDFS 中的文件。
- 分布式模式:使用多個節點構成集群環境來運行 Hadoop
Hadoop框架中最核心的設計是為海量數據提供存儲的 HDFS 和對數據進行計算的 MapReduce。MapReduce的作業主要包括:
Hadoop集群的整體性能取決于CPU、內存、網絡以及存儲之 間的性能平衡。因此運營團隊在選擇機器配置時要針對不同 的工作節點選擇合適硬件類型。
一個基本的 Hadoop 集群中的節點主要有:
- NameNode:負責協調集群中的數據存儲
- DataNode:存儲被拆分的數據塊
- JobTracker:協調不同機器上數據計算任務
- TaskTracker:負責執行由 JobTracker 指派的任務
- SecondaryNameNode:幫助 NameNode 收集文件系統運行的狀態信息
在集群中,大部分的機器設備是作為 Datanode和 TaskTracker 工作的。NameNode提供整個 HDFS 文件系統的 NameSpace(命名 空間)管理、塊管理等所有服務,很多元數據是直接保存在 內存中的,因此需要更多的RAM,與集群中的數據塊數量 相對應,并且需要優化 RAM 的內存通道帶寬。SecondaryNameNode在小型集群中可以和 NameNode 共用一臺機器,較大的群集可以采用與NameNode相同的硬件。
Hadoop集群規模可大可小,初始時,可以從一個較小規模的集群開始,比如包含10個節點,然后,規模隨著存儲器和計算需求的擴大而擴大。
對于一個小的集群,名稱節點(NameNode)和 JobTracker 運行在單個節點上,通常是可以接受的。但是,隨著集群和存儲在HDFS 中的文件數量的增加,名稱節點需要更多的主存,這時,名稱節點和 JobTracker 就需要運行在不同的節點上。
第二名稱節點(SecondaryNameNode)會和名稱節點可以運行在 相同的機器上,但是,由于第二名稱節點和名稱節點幾乎具有相同的主存需求,因此,二者最好運行在不同節點上。
普通的Hadoop集群結構由一個兩階網絡構成。每個機架(Rack)有30-40個服務器,配置一個1GB的交換機,并向上傳輸到一個核心交換機或者路由器(1GB或以上)。
總結
以上是生活随笔為你收集整理的第二章-大数据处理框Hadoop的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 简单的MapReduce实践
- 下一篇: 第三章-分布式文件系统HDFS