本篇引入了大數(shù)據(jù)hadoop生態(tài)系統(tǒng)的概念阵翎,并對其中各組件的功能優(yōu)勢和出現(xiàn)的背景做了一個簡單介紹孵睬。關(guān)于部分組件的詳細(xì)介紹將會在后期博客中給出殃恒,不正確之處歡迎各位看官指正模蜡。
什么是大數(shù)據(jù)生態(tài)系統(tǒng)
What does Hadoop Ecosystem mean?
Definition 1:
The Hadoop ecosystem refers to the various components of the Apache Hadoop software library, as well as to the accessories and tools provided by the Apache Software Foundation for these types of software projects, and to the ways that they work together.
Definition 2:
Hadoop EcosyHstem is neither a programming language nor a service, it is a platform or framework which is extremely popular for handling and analyzing large sets of data.You can consider it as a suite which encompasses a number of services (ingesting, storing, analyzing and maintaining) inside it.
大數(shù)據(jù)生態(tài)系統(tǒng)習(xí)慣被稱為Hadoop生態(tài)系統(tǒng)吞滞,這其中主要包含兩個原因:
? 1. 由多個具備各自特點(diǎn)或功能的組件共同構(gòu)成佑菩,并能夠相互協(xié)作完成大數(shù)據(jù)處理任務(wù)
? 2. hadoop組件是其中最早出現(xiàn)也是最基礎(chǔ)的組件
Hadoop 生態(tài)系統(tǒng)一覽圖
hadoop生態(tài)圈中的組件的角色如圖所示(關(guān)于各組件的詳細(xì)介紹會在下一節(jié)給出)盾沫,特別有趣的是,hadoop生態(tài)圈的組件大多具有動物或者昆蟲類的圖標(biāo)殿漠,而作為管理者zookeeper即表示動物園管理員赴精,即管理動物園生態(tài)圈。
Hadoop: 分布式存儲HDFS绞幌、分布式計(jì)算MAPREDUCE蕾哟、資源管理和調(diào)度YARN
Hadoop:當(dāng)人們思考大數(shù)據(jù)的時候,他們會立即想到 Hadoop莲蜘。Hadoop 是一個開源軟件架構(gòu)(logo 是一頭可愛的大象)谭确,它由 Hadoop 分布式文件系統(tǒng)(HDFS)構(gòu)成,它允許使用分布式硬件對大數(shù)據(jù)進(jìn)行存儲票渠、抽象和分析逐哈。如果你真的想讓某人對這個東西印象深刻,你可以跟他說 YARN(Yet Another Resource Scheduler)问顷,顧名思義昂秃,就是另一個資源調(diào)度器。提出 Hadoop 的 Apache 基金會择诈,還負(fù)責(zé) Pig械蹋、Hive 以及 Spark(這都是一些軟件的名字)等項(xiàng)目。
hadoop 1.x版本包含兩大部分:hdfs和mapreduce羞芍,其中hdfs(Hadoop distributed file system)負(fù)責(zé)數(shù)據(jù)高可靠性的分布式的存儲哗戈;mapreduce作為一種計(jì)算框架負(fù)責(zé)對海量數(shù)據(jù)進(jìn)行快速的分布式的計(jì)算。hadoop 2.x版本則在1.x的版本上添加了第三個部分YARN (Yet Another Resource Negotiator) ,YARN作為一種通用的資源管理系統(tǒng)荷科,可為上層應(yīng)用提供統(tǒng)一的資源管理和調(diào)度唯咬,控制整個集群并管理應(yīng)用程序向基礎(chǔ)計(jì)算資源的分配,通俗地講像是“管家”畏浆,其不僅限于MapReduce一種框架胆胰,也可以為其他框架使用,如Tez刻获、Spark蜀涨、Storm等(關(guān)于spark設(shè)置yarn模式將會在今后的博客中詳細(xì)介紹)。此外2.x版本對hdfs和mapreduce的功能進(jìn)行了擴(kuò)展蝎毡,對其性能也進(jìn)行了優(yōu)化厚柳。
Hive: 基于hdfs中的數(shù)據(jù)查詢
基于Hadoop的一個數(shù)據(jù)倉庫工具,可以將結(jié)構(gòu)化的數(shù)據(jù)文件映射為一張數(shù)據(jù)庫表沐兵,并提供簡單的sql查詢功能别垮,可以將sql語句轉(zhuǎn)換為MapReduce任務(wù)進(jìn)行運(yùn)行。
在hive出現(xiàn)之前扎谎,要查詢hdfs中的數(shù)據(jù)需要編寫mapreduce程序碳想,然后mapreduce的程序語法復(fù)雜難懂烧董、不易上手,而DBA(database administor)在數(shù)據(jù)庫中查詢的時候只需要編寫簡單易懂的sql查詢語句(簡單的類 SQL 查詢語言胧奔,稱為 HQL)逊移。為了解決這一問題,facebook開發(fā)了hive葡盗,其能夠?qū)⒑唵纬S玫膕ql語句轉(zhuǎn)換成復(fù)雜難懂的mapreduce任務(wù)螟左,顯著降低使用者的學(xué)習(xí)成本。Hive由Facebook開源觅够,最初用于解決海量結(jié)構(gòu)化的日志數(shù)據(jù)統(tǒng)計(jì)問題。
HBASE:
hbase是一個針對結(jié)構(gòu)化數(shù)據(jù)的可伸縮巷嚣,高可靠喘先,高性能,分布式和面向列的動態(tài)模式數(shù)據(jù)庫廷粒。和傳統(tǒng)關(guān)系型數(shù)據(jù)庫不同窘拯,hbase采用了bigtable的數(shù)據(jù)模型:增強(qiáng)了稀疏排序映射表(key/value)。其中坝茎,鍵由行關(guān)鍵字涤姊,列關(guān)鍵字和時間戳構(gòu)成,hbase提供了對大規(guī)模數(shù)據(jù)的隨機(jī)嗤放,實(shí)時讀寫訪問思喊,同時,hbase中保存的數(shù)據(jù)可以使用mapreduce來處理次酌,它將數(shù)據(jù)存儲和并行計(jì)算完美結(jié)合在一起恨课。
Spark:
spark是一個基于內(nèi)存計(jì)算的大數(shù)據(jù)框架,
? ● Spark Core:包含Spark的基本功能岳服;尤其是定義RDD的API剂公、操作以及這兩者上的動作。
? ● Spark SQL:提供通過Apache Hive的SQL變體Hive查詢語言(HiveQL)與Spark進(jìn)行交互的API吊宋。
? ● Spark Streaming:對實(shí)時數(shù)據(jù)流進(jìn)行處理和控制纲辽。
? ● MLlib:一個常用機(jī)器學(xué)習(xí)算法庫,算法被實(shí)現(xiàn)為對RDD的Spark操作璃搜。這個庫包含可擴(kuò)展的學(xué)習(xí)算法拖吼,比如分類、回歸等需要對大量數(shù)據(jù)集進(jìn)行迭代的操作腺劣。
? ● GraphX:控制圖绿贞、并行圖操作和計(jì)算的一組算法和工具的集合。
spark本身并不具備分布式文件系統(tǒng)橘原,因此spark可以依賴于HDFS籍铁,也可以基于其他的數(shù)據(jù)
相比于Mapreduce的離線的批量處理batch processing涡上,spark的速度更快,更適用于實(shí)時的迭代計(jì)算拒名,且spark提供的功能更加豐富
zookeeper:
ZooKeeper是一個分布式的吩愧,開放源碼的分布式應(yīng)用程序協(xié)調(diào)服務(wù),它是一個為分布式應(yīng)用提供一致性服務(wù)的軟件增显,提供的功能包括:配置維護(hù)雁佳、域名服務(wù)、分布式同步同云、組服務(wù)等糖权。
HUE:
Hue全稱Hadoop User Experience,是一個開源的Apache Hadoop UI系統(tǒng)炸站,最早是由Cloudera Desktop演化而來星澳,由Cloudera貢獻(xiàn)給開源社區(qū),它是基于Python Web框架Django實(shí)現(xiàn)的旱易。通過使用Hue我們可以在瀏覽器端的Web控制臺上與Hadoop集群進(jìn)行交互來分析處理數(shù)據(jù)禁偎,例如操作HDFS上的數(shù)據(jù),運(yùn)行MapReduce Job等等阀坏。在hue上配置notebook(實(shí)現(xiàn)多語言自動匹配)如暖,可以進(jìn)行hive和spark查詢等操作。
Apache Zeppelin:
Apache Zeppelin是一個提供了web版的類似ipython的notebook忌堂,用于做數(shù)據(jù)分析和可視化盒至。背后可以接入不同的數(shù)據(jù)處理引擎,包括spark, hive, tajo等浸船,原生支持scala, java, shell, markdown等妄迁。
Storm:
分布式實(shí)時計(jì)算系統(tǒng)。Storm為分布式實(shí)時計(jì)算提供了一組通用原語李命,可被用于“流處理”之中登淘,實(shí)時處理消息并更新數(shù)據(jù)庫。
Flume:
Flume(日志收集工具)是Cloudera提供的一個高可用的封字,高可靠的黔州,分布式的海量日志采集、聚合和傳輸?shù)南到y(tǒng)阔籽,F(xiàn)lume支持在日志系統(tǒng)中定制各類數(shù)據(jù)發(fā)送方流妻,用于收集數(shù)據(jù);同時笆制,F(xiàn)lume提供對數(shù)據(jù)進(jìn)行簡單處理绅这,并寫到各種數(shù)據(jù)接受方(可定制)的能力,在具體的數(shù)據(jù)流中在辆,數(shù)據(jù)源支持在flume中定制數(shù)據(jù)發(fā)送方证薇,從而支持收集各種不同協(xié)議數(shù)據(jù)度苔。
pig:
數(shù)據(jù)流語言和運(yùn)行環(huán)境,用以探究非常龐大的數(shù)據(jù)集浑度。pig運(yùn)行在MapReduce和HDFS之上
定義了一種數(shù)據(jù)流語言-pig latin寇窑,將腳本轉(zhuǎn)換為mapreduce任務(wù)在hadoop上執(zhí)行。
kafka:
Kafka是一種高吞吐量的分布式發(fā)布訂閱消息系統(tǒng)箩张。Kafka是一個分布式的甩骏,可劃分的,冗余備份的持久性的日志服務(wù)先慷。它主要用于處理活躍的流式數(shù)據(jù)饮笛。降低系統(tǒng)組網(wǎng)復(fù)雜度。降低編程復(fù)雜度论熙,各個子系統(tǒng)不在是相互協(xié)商接口缎浇,各個子系統(tǒng)類似插口插在插座上,Kafka承擔(dān)高速數(shù)據(jù)總線的作用赴肚。具有高吞吐率,支持Kafka Server間的消息分區(qū)二蓝,及分布式消費(fèi)誉券,同時保證每個Partition內(nèi)的消息順序傳輸,同時支持離線數(shù)據(jù)處理和實(shí)時數(shù)據(jù)處理刊愚。
redis:
Redis是一個開源的使用ANSI C語言編寫踊跟、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型鸥诽、Key-Value數(shù)據(jù)庫商玫,并提供多種語言的API。Redis 本質(zhì)上是一個高性能的key-value數(shù)據(jù)庫牡借。 redis的出現(xiàn)拳昌,很大程度補(bǔ)償了memcached這類key/value存儲的不足,在部 分場合可以對關(guān)系數(shù)據(jù)庫起到很好的補(bǔ)充作用钠龙。
Sqoop:
sql-to-hadoop的縮寫炬藤,主要用于在Hadoop(Hive)與傳統(tǒng)的數(shù)據(jù)庫(mysql、postgresql…)間進(jìn)行數(shù)據(jù)的傳遞碴里,可以將一個關(guān)系型數(shù)據(jù)庫(例如 : MySQL ,Oracle ,Postgres等)中的數(shù)據(jù)導(dǎo)進(jìn)到Hadoop的HDFS中沈矿,也可以將HDFS的數(shù)據(jù)導(dǎo)進(jìn)到關(guān)系型數(shù)據(jù)庫中。對于某些NoSQL數(shù)據(jù)庫它也提供了連接器咬腋。Sqoop羹膳,類似于其他ETL工具\(yùn)
? Oozie:
該服務(wù)用于運(yùn)行和調(diào)度Hadoop作業(yè),可以理解為一個工作流調(diào)度系統(tǒng)
mahout(數(shù)據(jù)挖掘算法庫):
mahout的主要目標(biāo)是創(chuàng)建一些可擴(kuò)展的機(jī)器學(xué)習(xí)領(lǐng)域經(jīng)典算法的實(shí)現(xiàn)根竿,旨在幫助開發(fā)人員更加方便快捷地創(chuàng)建只能應(yīng)用程序陵像。mahout現(xiàn)在已經(jīng)包含了聚類就珠,分類,推薦引擎(協(xié)同過濾)和頻繁集挖掘等廣泛使用的數(shù)據(jù)挖掘方法蠢壹。
資源管理器的簡單介紹(YARN和mesos):
隨著互聯(lián)網(wǎng)的高速發(fā)展嗓违,基于數(shù)據(jù) 密集型應(yīng)用 的計(jì)算框架不斷出現(xiàn),從支持離線處理的mapreduce图贸,到支持在線處理的storm蹂季,從迭代式計(jì)算框架到 流式處理框架s4,...疏日,在大部分互聯(lián)網(wǎng)公司中偿洁,這幾種框架可能都會采用,比如對于搜索引擎公司沟优,可能的技術(shù)方法如下:網(wǎng)頁建索引采用mapreduce框架涕滋,自然語言處理/數(shù)據(jù)挖掘采用spark,對性能要求到的數(shù)據(jù)挖掘算法用mpi等挠阁。公司一般將所有的這些框架部署到一個公共的集群中宾肺,讓它們共享集群的資源,并對資源進(jìn)行統(tǒng)一使用侵俗,這樣便誕生了資源統(tǒng)一管理與調(diào)度平臺锨用,典型的代表是mesos和yarn。
cloudrea impala:
? 一個開源的查詢引擎隘谣。與hive相同的元數(shù)據(jù)增拥,SQL語法,ODBC驅(qū)動程序和用戶接口寻歧,可以直接在HDFS上提供快速掌栅,交互式SQL查詢。impala不再使用緩慢的hive+mapreduce批處理码泛,而是通過與商用并行關(guān)系數(shù)據(jù)庫中類似的分布式查詢引擎猾封。可以直接從HDFS或者Hbase中用select弟晚,join和統(tǒng)計(jì)函數(shù)查詢數(shù)據(jù)忘衍,從而大大降低延遲。
關(guān)于大數(shù)據(jù)學(xué)習(xí)有很多開源資源卿城,更多資源參考將會在下一期的分享中給出枚钓,歡迎閱讀!