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