日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

第2章 大数据处理架构Hadoop

發(fā)布時(shí)間:2023/12/9 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第2章 大数据处理架构Hadoop 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

概述

Hadoop一個(gè)開源的、可運(yùn)行于大規(guī)模集群上的分布式計(jì)算平臺,它實(shí)現(xiàn)了MapReduce計(jì)算模型和分布式文件系統(tǒng)HDFS等功能。

它被公認(rèn)為行業(yè)大數(shù)據(jù)標(biāo)準(zhǔn)開源軟件。

名字的是由小孩子取的“一頭吃飽了的大象”。

由來

1997年年末,Doug Cutting道格·卡丁因工作不穩(wěn)定,自己用Java編寫了Lucene;(Doug Cutting是Lucene、Nutch、Hadoop、Avro的作者)Lucene其實(shí)是一個(gè)提供全文文本搜索的函數(shù)庫,它不是一個(gè)應(yīng)用軟件;

2000年3月,Lucene被放到了SourceForge上

2001年10月,Lucene被捐獻(xiàn)給Apache,作為Jakarta的一個(gè)子項(xiàng)目。

2002年8月, Doug Cutting創(chuàng)建了Nutch并托管于SourceForge上;

???????? Nutch項(xiàng)目遇到了棘手的難題,該搜索引擎框架無法擴(kuò)展到擁有數(shù)十億網(wǎng)頁的網(wǎng)絡(luò)。

2003年10月,谷歌發(fā)布分布式文件系統(tǒng)GFS(The Google File System)Google論文《Google File System》

2004年,Nutch的開源版本基于GFS開發(fā)了NDFS(Nutch Distributed File System,NDFS)解決了存儲的問題

2004年10月,谷歌發(fā)布《Google MapReduce》大數(shù)據(jù)分布式計(jì)算框架

2005年1月,Nutch加入Apache的孵化器

2005年,Nutch實(shí)現(xiàn)了谷歌的MpaReduce

2005年6月,Nutch孵化結(jié)束成為Lucene的子項(xiàng)目

2006年2月,Nutch中的NDFS和MapReduce獨(dú)立出來 ,成為Apache Lucene項(xiàng)目的子項(xiàng)目,稱為Hadoop;創(chuàng)始人Dong Cutting道格·卡丁加盟雅虎公司。

特性

  • 高可靠性

采用冗余數(shù)據(jù)存儲方式,即使一個(gè)副本發(fā)生故障,其他副本也可以保證正常對外提供服務(wù)。

  • 高效性

作為并行分布式計(jì)算平臺,采用分布式存儲和分布式計(jì)算兩大核心技術(shù),能夠高效地處理PB級數(shù)據(jù)。

  • 高擴(kuò)展性

Hadoop的設(shè)計(jì)目標(biāo)是可以高效穩(wěn)定地運(yùn)行在廉價(jià)的計(jì)算機(jī)集群上,可以擴(kuò)展到以千計(jì)的計(jì)算機(jī)節(jié)點(diǎn)上。

  • 高容錯(cuò)性

采用冗余數(shù)據(jù)存儲方式,自動(dòng)保存數(shù)據(jù)的多個(gè)副本,并且能夠自動(dòng)將失敗的任務(wù)進(jìn)行重新分配。

  • 成本低

Hadoop采用廉價(jià)的計(jì)算機(jī)集群,成本比較低,普通用戶也很容易用自己的PC搭建Hadoop運(yùn)行環(huán)境。

  • 運(yùn)行在Linux操作系統(tǒng)上

Hadoop基于Java開發(fā)的,可以較好地運(yùn)行在Linux操作系統(tǒng)上。

  • 支持多種編程語言

Hadoop上的應(yīng)用程序也可以使用其他語言編寫,如C++。

Hadoop的版本

Apache Hadoop版本分為三代,分別是Hadoop 1.0、Hadoop 2.0和Hadoop 3.0。

Hadoop 1.0

Hadoop 1.0包含0.20.x、0.21.x和0.22.x三個(gè)版本,其中,0.20.x最后演化成1.0.x,就了穩(wěn)定版,而0.21.x和0.22.x增加了HDFS HA等重要的新特性。

Hadoop1.0的核心組件(僅指MapReduce和HDFS,不包括Hadoop生態(tài)系統(tǒng)內(nèi)的Pig、Hive、HBase等其他組件)主要存在以下不足:

  • 抽象層次低

功能實(shí)現(xiàn)需要手工編寫代碼來完成,有時(shí)只是為了實(shí)現(xiàn)一個(gè)簡單的功能,也需要編寫大量的代碼

  • 表達(dá)能力有限

MapReduce把復(fù)雜的分布式編程工作高度抽象為兩個(gè)函數(shù),即Map和Reduce,在降低開發(fā)人員程序開發(fā)復(fù)雜度的同時(shí),也帶來了表達(dá)能力有限的問題,實(shí)際生產(chǎn)環(huán)境的一些應(yīng)用是無法用簡單的Map和Reduce來完成的。

  • 開發(fā)者自己管理作業(yè)之間的依賴關(guān)系

一個(gè)作業(yè)(Job)只包含Map和Reduce兩個(gè)階段,通常的實(shí)際應(yīng)用問題需要大量的作業(yè)進(jìn)行協(xié)作才能順利解決,這些作業(yè)之間往往存在復(fù)雜的依賴關(guān)系,但是MapReduce框架本身并沒有提供相關(guān)的機(jī)制對這些依賴關(guān)系進(jìn)行有效管理,只能由開發(fā)者自己管理。

  • 難以看到程序整體邏輯

用戶的處理邏輯都隱藏在代碼細(xì)節(jié)中,沒有更高層次的抽象機(jī)制對程序整體邏輯進(jìn)行設(shè)計(jì),這就給代碼理解和后期維護(hù)帶來了障礙。

  • 執(zhí)行迭代操作效率低

對于一些大型的機(jī)器學(xué)習(xí)、數(shù)據(jù)挖掘任務(wù),往往需要多輪迭代才能得到結(jié)果。采用MapReduce實(shí)現(xiàn)這些算法時(shí),每次迭代都是一次執(zhí)行Map、Reduce任務(wù)的過程,這個(gè)過程的數(shù)據(jù)來自分布式文件系統(tǒng)HDFS,本次迭代的處理結(jié)果也被存放到HDFS中,繼續(xù)用于下一次迭代過程。反復(fù)讀寫HDFS中的數(shù)據(jù),大大降低了迭代操作的效率。

  • 資源浪費(fèi)

在MapReduce框架設(shè)計(jì)中,Reduce任務(wù)需要等待所有Map任務(wù)都完成后才可以開始,造成了不必要的資源浪費(fèi)。

  • 實(shí)時(shí)性差

只適用于離線批數(shù)據(jù)處理,無法支持交互式數(shù)據(jù)處理、實(shí)時(shí)數(shù)據(jù)處理。

Hadoop 2.0

Hadoop框架自身的改進(jìn):從1.0到2.0

組件

Hadoop1.0的問題

Hadoop2.0的改進(jìn)

HDFS

單一名稱節(jié)點(diǎn),存在單點(diǎn)失效的問題

設(shè)計(jì)了HDFS HA,提供名稱節(jié)點(diǎn)熱備份機(jī)制

單一命名空間,無法實(shí)現(xiàn)資源隔離

設(shè)計(jì)了HDFS聯(lián)邦,管理多個(gè)命名空間

MapReduce

資源管理效率低

設(shè)計(jì)了新的資源管理框架YARN

不斷完善的Hadoop生態(tài)系統(tǒng)

組件

功能

解決Hadoop中存在的問題

Pig

處理大規(guī)模數(shù)據(jù)的腳本語言,用戶只需要編寫幾條簡單的語句,系統(tǒng)會(huì)自動(dòng)轉(zhuǎn)換為MapReduce作業(yè)

抽象層次低,需要手工編寫大量代碼

Oozie

工作流和協(xié)作服務(wù)引擎,協(xié)調(diào)Hadoop上運(yùn)行的不同任務(wù)

沒有提供作業(yè)依賴關(guān)系管理機(jī)制,需要用戶自己處理作業(yè)之間的依賴關(guān)系

Tez

支持DAG作業(yè)的計(jì)算框架,對作業(yè)的操作進(jìn)行重新分解和組合,形成一個(gè)大的DAG作業(yè),減少不必要操作

不同的MapReduce任務(wù)之間存在重復(fù)操作,降低了效率

Kafka

分布式發(fā)布訂閱消息系統(tǒng),一般作為企業(yè)大數(shù)據(jù)分析平臺的數(shù)據(jù)交換樞紐,不同類型的分布式系統(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 2.0包含0.23.x和2.x兩大版本,它們完全不同于Hadoop 1.0,是一套全新的架構(gòu),均包含HDFS Federationt [?fed?'re??n](聯(lián)邦、聯(lián)合)YARN(Yet Another Resource Negotiator)兩個(gè)系統(tǒng)。Hadoop 2.0是基于JDK 1.7開發(fā)的,2015年4月JDK 1.7停止更新,Hadoop社區(qū)基于JDK 1.8發(fā)布了新的Hadoop版本,即Hadoop 3.0。

Federation HDFS與HDFS的區(qū)別

HDFS的局限性(HDFS只有一個(gè)active的namenode):

1. 在name中存儲所有的元數(shù)據(jù)(metadata),因此單個(gè)namenode所能存儲的對象(塊+文件)數(shù)據(jù)受到namenode所在JVM的heap size的限制。

2. 整個(gè)HDFS文件系統(tǒng)的吞吐量受限于單個(gè)namenode的吞吐量

3. 無法隔離namespace

Federation HDFS 與 HDFS的區(qū)別:

HDFS只有一個(gè)name space, 它使用全部的塊。而Federation HDFS 中有多個(gè)獨(dú)立的namespace,每個(gè)命名空間使用一個(gè)block Pool。

Bolck Pool : 維護(hù)單個(gè)命名空間的所有block。Data node是一個(gè)物理概念,而block pool是一個(gè)重新將block劃分的邏輯概念。同一個(gè)DataNode可以存儲 著屬于多個(gè)blocknode的多個(gè)塊。block允許一個(gè)命名空間在不通知其它命名空間的情況下為一個(gè)新的block創(chuàng)建blockID。同時(shí),一個(gè)namenode失效不會(huì)影響旗下的DataNode為其它namenode服務(wù)。

Federation HDFS 架構(gòu)圖:

?Federation HDFS HA架構(gòu)圖

?其中 NN1 NN3 屬于同一個(gè)namenode, NN2 NN4 屬于同一個(gè)namenode

Hadoop 3.0

Hadoop 3.0 JDK版本的最低依賴從1.7變成了1.8;Haddop3.0中引入 了一些重要的功能和優(yōu)化,包括HDFS可探險(xiǎn)編碼、多名稱節(jié)點(diǎn)支持、任務(wù)級別的MapReduce本地優(yōu)化、基于cgroup的內(nèi)存和磁盤IO隔離等。

支持HDFS中的糾刪碼Erasure Encoding;(檢錯(cuò)碼、糾錯(cuò)碼、刪錯(cuò)碼)代替副本機(jī)制

基于HDFS路由器的聯(lián)合

支持多個(gè)NameNode

DataNode內(nèi)部添加了負(fù)載均衡Disk Balancer

Hadoop生態(tài)系統(tǒng)

Hadoop除了核心的HDFS和MapReduce外,Hadoop生態(tài)系統(tǒng)還包括ZooKeeper、HBase、Hive、Pig、Mahout、Flume、Sqoop、Ambari等功能組件。

HDFS

HDFS 是Hadoop的分布式文件系統(tǒng),是Hadoop的核心之一,是針對谷歌文件系統(tǒng)GFS的開源實(shí)現(xiàn)。HDFS具有處理超大數(shù)據(jù)、流式處理、可以運(yùn)行在廉價(jià)的商用服務(wù)器上等優(yōu)點(diǎn)。因?yàn)镠DFS一開始就定位運(yùn)行在廉價(jià)的商用服務(wù)器上,因此,在設(shè)計(jì)上把硬件故障作為一種常態(tài)來考慮,實(shí)現(xiàn)了在部分硬件發(fā)生故障的情況下仍然能保證文件系統(tǒng)的整體可用性和可靠性。HDFS放寬了一部分可移植操作系統(tǒng)接口(Portable Operating System Interface,POSIX)約束,從而實(shí)現(xiàn)以流的形式訪問文件系統(tǒng)中的數(shù)據(jù)。HDFS在訪問應(yīng)用程序數(shù)據(jù)時(shí),可以具有很高的吞吐率,因此選擇HDFS作為底層數(shù)據(jù)存儲系統(tǒng)是較好的選擇。

HBase

HBase是一個(gè)提供高可靠性、高性能、可伸縮、實(shí)時(shí)讀寫、分布式的列式數(shù)據(jù)庫,一般采用HDFS作為其底層數(shù)據(jù)存儲系統(tǒng)。HBase是針對谷歌的BigTable的開源實(shí)現(xiàn),二者都采用了相同的數(shù)據(jù)模型,具有強(qiáng)大的非結(jié)構(gòu)化數(shù)據(jù)存儲能力。HBase具有良好的橫向擴(kuò)展能力,可以通過不斷增加廉價(jià)的商用服務(wù)器來提高存儲能力。

MapReduce

Hadoop MapReduce是谷歌MapReduce的開源實(shí)現(xiàn)。MapReduce是一種編程模型,用于大規(guī)模數(shù)據(jù)集(大于1TB)的并行運(yùn)算,它將復(fù)雜的、運(yùn)行于大規(guī)模集群上的并行計(jì)算過程高度地抽象為兩個(gè)函數(shù)----Map和Reduce。

MapReduce的核心思想就是“分而治之”,它把輸入的數(shù)據(jù)集切分為若干個(gè)獨(dú)立的數(shù)據(jù)塊,分發(fā)給一個(gè)主節(jié)點(diǎn)管理下的各個(gè)分節(jié)點(diǎn)來共同并行完成;最后,通過整合各個(gè)節(jié)點(diǎn)的中間結(jié)果得到最終結(jié)果。

Hive

Hive是一個(gè)基礎(chǔ)Hadoop的數(shù)據(jù)倉庫工具,可以用于對Hadoop文件中的數(shù)據(jù)集進(jìn)行整理、特殊查詢和分析存儲。它提供了類似關(guān)系數(shù)據(jù)庫SQL的查詢語言 ---- HiveSQL,Hive自身可以將HiveSQL語句轉(zhuǎn)換為MapReduce任務(wù)運(yùn)行,而不必開發(fā)專門的MapReduce應(yīng)用,因而十分適合數(shù)據(jù)倉庫的統(tǒng)計(jì)分析。

Pig

Pig是Hadoop生態(tài)系統(tǒng)的一個(gè)組件,提供了類似SQL的Pig Latin(包含F(xiàn)ilter、GroupBy、Join、OrderBy等操作,同時(shí)也支持用戶自定義函數(shù)),允許用戶通過編寫簡單的腳本來實(shí)現(xiàn)復(fù)雜的數(shù)據(jù)分析,而不需要編寫復(fù)雜的MapReduce應(yīng)用程序。Pig會(huì)自動(dòng)把用戶編寫的腳本轉(zhuǎn)換成MapReduce作業(yè)在Hadoop集群上運(yùn)行,而且具備對生成的MapReduce程序進(jìn)行自動(dòng)優(yōu)化的功能。

Pig可以加載數(shù)據(jù)、表達(dá)轉(zhuǎn)換數(shù)據(jù)以及存儲最終結(jié)果。Pig通常用于數(shù)據(jù)提取、轉(zhuǎn)換和加載(Extraction、Transformation、Loading,ETL)過程,即來自不同數(shù)據(jù)源的數(shù)據(jù)被收集過來后,使用Pig進(jìn)行統(tǒng)一加工處理,然后加載到數(shù)據(jù)倉庫Hive中,由Hive實(shí)現(xiàn)對海量數(shù)據(jù)的分析。

Pig并不適合所有的數(shù)據(jù)處理任務(wù),特別是當(dāng)需要查詢大數(shù)據(jù)集中的一小部分?jǐn)?shù)據(jù)時(shí)。

當(dāng)數(shù)據(jù)查詢只面向相關(guān)技術(shù)人員,并且屬于即時(shí)性的數(shù)據(jù)處理需求時(shí),比較適合采用Pig編寫一個(gè)腳本來完成快速運(yùn)行處理,從而避免創(chuàng)建表等相關(guān)操作。

Mahout

Mahout是Apache軟件基金會(huì)旗下的一個(gè)開源項(xiàng)目,提供一些可擴(kuò)展的機(jī)器學(xué)習(xí)領(lǐng)域經(jīng)典算法實(shí)現(xiàn),旨在幫助開發(fā)人員更加方便快捷地創(chuàng)建智能應(yīng)用程序。

Zookeeper

Zookeeper是針對谷歌Chubby的一個(gè)開源實(shí)現(xiàn),是高效和可靠的協(xié)同工作系統(tǒng),提供分布式鎖之類的基本服務(wù)(如統(tǒng)一命名服務(wù)、狀態(tài)同步服務(wù)、集群管理、分布式應(yīng)用配置項(xiàng)的管理等),用于構(gòu)建分布式應(yīng)用,減輕分布式應(yīng)用程序所承擔(dān)的協(xié)調(diào)任務(wù)。

Flume

Flume是Cloudera提供的一個(gè)高可用的、高可靠的、分布式的海量日志采集、聚合和傳輸?shù)南到y(tǒng)。Flume支持在日志系統(tǒng)中定制各類數(shù)據(jù)發(fā)送方,用于收集數(shù)據(jù);同時(shí),Flume提供對數(shù)據(jù)進(jìn)行簡單處理并寫到各種數(shù)據(jù)接收方的能力。

Sqoop

Sqoop是SQL-to-Hadoop的縮寫,主要用來在Hadoop和關(guān)系數(shù)據(jù)庫之間交換數(shù)據(jù),可以改善數(shù)據(jù)的互操作性。通過Sqoop可以方便地將數(shù)據(jù)從關(guān)系數(shù)據(jù)庫導(dǎo)入Hadoop,或者將數(shù)據(jù)從Hadoop導(dǎo)出到關(guān)系數(shù)據(jù)庫。Sqoop主要通過Java數(shù)據(jù)庫連接JDBC和關(guān)系數(shù)據(jù)庫進(jìn)行交互。Sqoop是專門為大數(shù)據(jù)集設(shè)計(jì)的,支持增量更新。

Ambari

Ambari是一種基于Web的工具,支持Hadoop集群的安裝、部署、配置和管理。

Tez

Tez是Apache開源的支持DAG作業(yè)的計(jì)算框架,直接源于MapReduce框架。其核心思想是將Map和Reduce兩個(gè)操作進(jìn)一步進(jìn)行拆分,即將Map拆分成Input、Processor、Sort、Merge和Output等,將Reduce拆分成Input、Shuffle、Sort、Merge、Processor和Output等,經(jīng)過分解后的這些元操作可以進(jìn)行任意組合產(chǎn)生新的操作,經(jīng)過一些控制程序組裝后就可形成一個(gè)大的DAG作業(yè)。

通過DAG作業(yè)的方式運(yùn)行MapReduce作業(yè),提供了程序運(yùn)行的整體處理邏輯,可以去除工作流當(dāng)中多余的Map階段,減少不必要的操作,提升數(shù)據(jù)處理的性能。

在Hadoop 2.0生態(tài)系統(tǒng)中,MapReduce、Hive、Pig等計(jì)算框架都需要最終以MapReduce任務(wù)的形式執(zhí)行數(shù)據(jù)分析,因此Tez框架可以發(fā)揮重要的作用。可以讓Tez框架運(yùn)行在YARN框架之上,然后讓MapReduce、Pig、Hive等計(jì)算框架運(yùn)行在Tez框架之上,從而借助于Tez框架實(shí)現(xiàn)對Map、Pig和Hive等的性能優(yōu)化,更好地解決現(xiàn)有MapReduce框架在迭代計(jì)算和交互計(jì)算方面存在的問題。

Tez在解決Hive、Pig延遲大、性能低等問題的思路上,和那些支持實(shí)時(shí)交互式查詢分析的產(chǎn)品(如Impala、Dremel和Drill等)是不同的。Impala、Dremel和Drill解決問題的思路是拋棄MapReduce計(jì)算框架,不再將類似SQL語句的HiveSQL或者Pig語句翻譯成MapReduce程序,而是采用與商用 并行關(guān)系數(shù)據(jù)庫類似的分布式查詢引擎,直接從HDFS或者HBase中用SQL語句查詢數(shù)據(jù),從而大大降低了延遲。Tez則不同,仍然采用MapReduce計(jì)算框架,但是對DAG的作業(yè)依賴關(guān)系進(jìn)行了裁剪,并將多個(gè)小作業(yè)合并成一個(gè)大作業(yè),這樣不僅計(jì)算量減少了,而且讀寫HDFS次數(shù)也會(huì)大大減少。

Kafka

Kafka是由LinkedIn開發(fā)的一種高吞吐量的分布式發(fā)布/訂閱消息系統(tǒng),用戶通過Kafka系統(tǒng)可以發(fā)布大量的消息,同時(shí)能實(shí)時(shí)訂閱消費(fèi)消息。Kafka設(shè)計(jì)的初衷是構(gòu)建一個(gè)可以處理海量日志、用戶行為和網(wǎng)站運(yùn)行統(tǒng)計(jì)等的數(shù)據(jù)處理框架。Kafka可以同時(shí)提供在線實(shí)時(shí)處理的低延遲和批量離線處理的高吞吐量。

在公司的大數(shù)據(jù)生態(tài)系統(tǒng)中,可以把Kafka作為數(shù)據(jù)交換樞紐,不同類型的分布式系統(tǒng)(如關(guān)系數(shù)據(jù)庫、NoSQL數(shù)據(jù)庫、流處理系統(tǒng)、批處理系統(tǒng)等)可以統(tǒng)一接入Kafka,從而實(shí)現(xiàn)和Hadoop各個(gè)組件之間的不同類型數(shù)據(jù)的實(shí)時(shí)高效交換,較好地滿足各種企業(yè)的應(yīng)用需求。

總結(jié)

以上是生活随笔為你收集整理的第2章 大数据处理架构Hadoop的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。