Hadoop核心架構(gòu)HDFS+MapReduce+Hbase+Hive內(nèi)部機(jī)理詳解摘要:通過(guò)對(duì)Hadoop分布式計(jì)算平臺(tái)最核心的分布式文件系統(tǒng)HDFS,、MapReduce處理過(guò)程,以及數(shù)據(jù)倉(cāng)庫(kù)工具Hive和分布式數(shù)據(jù)庫(kù)Hbase的介紹,,基本涵蓋了Hadoop分布式平臺(tái)的所有技術(shù)核心,。 編者按:HDFS和MapReduce是Hadoop的兩大核心,除此之外Hbase,、Hive這兩個(gè)核心工具也隨著Hadoop發(fā)展變得越來(lái)越重要,。本文作者張震的博文《Thinking in BigDate(八)大數(shù)據(jù)Hadoop核心架構(gòu)HDFS+MapReduce+Hbase+Hive內(nèi)部機(jī)理詳解》從內(nèi)部機(jī)理詳細(xì)的分析了HDFS、MapReduce,、Hbase,、Hive的運(yùn)行機(jī)制,從底層到數(shù)據(jù)管理詳細(xì)的將Hadoop進(jìn)行了一個(gè)剖析,。 CSDN推薦:歡迎免費(fèi)訂閱《Hadoop與大數(shù)據(jù)周刊》獲取更多Hadoop技術(shù)文獻(xiàn),、大數(shù)據(jù)技術(shù)分析、企業(yè)實(shí)戰(zhàn)經(jīng)驗(yàn),,生態(tài)圈發(fā)展趨勢(shì),。 以下是作者原文: 通過(guò)這一階段的調(diào)研總結(jié),從內(nèi)部機(jī)理的角度詳細(xì)分析,,HDFS,、MapReduce,、Hbase、Hive是如何運(yùn)行,,以及基于Hadoop數(shù)據(jù)倉(cāng)庫(kù)的構(gòu)建和分布式數(shù)據(jù)庫(kù)內(nèi)部具體實(shí)現(xiàn),。如有不足,后續(xù)及時(shí)修改,。 HDFS的體系架構(gòu) 整個(gè)Hadoop的體系結(jié)構(gòu)主要是通過(guò)HDFS來(lái)實(shí)現(xiàn)對(duì)分布式存儲(chǔ)的底層支持,,并通過(guò)MR來(lái)實(shí)現(xiàn)對(duì)分布式并行任務(wù)處理的程序支持。 HDFS采用主從(Master/Slave)結(jié)構(gòu)模型,,一個(gè)HDFS集群是由一個(gè)NameNode和若干個(gè)DataNode組成的(在最新的Hadoop2.2版本已經(jīng)實(shí)現(xiàn)多個(gè)NameNode的配置-這也是一些大公司通過(guò)修改hadoop源代碼實(shí)現(xiàn)的功能,,在最新的版本中就已經(jīng)實(shí)現(xiàn)了)。NameNode作為主服務(wù)器,,管理文件系統(tǒng)命名空間和客戶端對(duì)文件的訪問(wèn)操作,。DataNode管理存儲(chǔ)的數(shù)據(jù)。HDFS支持文件形式的數(shù)據(jù),。 從內(nèi)部來(lái)看,,文件被分成若干個(gè)數(shù)據(jù)塊,這若干個(gè)數(shù)據(jù)塊存放在一組DataNode上,。NameNode執(zhí)行文件系統(tǒng)的命名空間,,如打開(kāi)、關(guān)閉,、重命名文件或目錄等,,也負(fù)責(zé)數(shù)據(jù)塊到具體DataNode的映射。DataNode負(fù)責(zé)處理文件系統(tǒng)客戶端的文件讀寫(xiě),,并在NameNode的統(tǒng)一調(diào)度下進(jìn)行數(shù)據(jù)庫(kù)的創(chuàng)建,、刪除和復(fù)制工作。NameNode是所有HDFS元數(shù)據(jù)的管理者,,用戶數(shù)據(jù)永遠(yuǎn)不會(huì)經(jīng)過(guò)NameNode,。 如圖:HDFS體系結(jié)構(gòu)圖 圖中涉及三個(gè)角色:NameNode、DataNode,、Client,。NameNode是管理者,DataNode是文件存儲(chǔ)者,、Client是需要獲取分布式文件系統(tǒng)的應(yīng)用程序,。 文件寫(xiě)入: 1) Client向NameNode發(fā)起文件寫(xiě)入的請(qǐng)求。 2) NameNode根據(jù)文件大小和文件塊配置情況,,返回給Client它管理的DataNode的信息,。 3) Client將文件劃分為多個(gè)block,根據(jù)DataNode的地址,,按順序?qū)lock寫(xiě)入DataNode塊中,。 文件讀?。?/b> 1) Client向NameNode發(fā)起讀取文件的請(qǐng)求。 2) NameNode返回文件存儲(chǔ)的DataNode信息,。 3) Client讀取文件信息,。 HDFS作為分布式文件系統(tǒng)在數(shù)據(jù)管理方面可借鑒點(diǎn): 文件塊的放置:一個(gè)Block會(huì)有三份備份,一份在NameNode指定的DateNode上,,一份放在與指定的DataNode不在同一臺(tái)機(jī)器的DataNode上,,一根在于指定的DataNode在同一Rack上的DataNode上。備份的目的是為了數(shù)據(jù)安全,,采用這種方式是為了考慮到同一Rack失敗的情況,,以及不同數(shù)據(jù)拷貝帶來(lái)的性能的問(wèn)題。 MapReduce體系架構(gòu) MR框架是由一個(gè)單獨(dú)運(yùn)行在主節(jié)點(diǎn)上的JobTracker和運(yùn)行在每個(gè)集群從節(jié)點(diǎn)上的TaskTracker共同組成,。主節(jié)點(diǎn)負(fù)責(zé)調(diào)度構(gòu)成一個(gè)作業(yè)的所有任務(wù),,這些任務(wù)分布在不同的不同的從節(jié)點(diǎn)上。主節(jié)點(diǎn)監(jiān)視它們的執(zhí)行情況,,并重新執(zhí)行之前失敗的任務(wù),。從節(jié)點(diǎn)僅負(fù)責(zé)由主節(jié)點(diǎn)指派的任務(wù)。當(dāng)一個(gè)Job被提交時(shí),,JobTracker接受到提交作業(yè)和配置信息之后,,就會(huì)將配置信息等分發(fā)給從節(jié)點(diǎn),同時(shí)調(diào)度任務(wù)并監(jiān)控TaskTracker的執(zhí)行,。JobTracker可以運(yùn)行于集群中的任意一臺(tái)計(jì)算機(jī)上,。TaskTracker負(fù)責(zé)執(zhí)行任務(wù),它必須運(yùn)行在DataNode上,,DataNode既是數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn),,也是計(jì)算節(jié)點(diǎn)。JobTracker將map任務(wù)和reduce任務(wù)分發(fā)給空閑的TaskTracker,,這些任務(wù)并行運(yùn)行,并監(jiān)控任務(wù)運(yùn)行的情況,。如果JobTracker出了故障,,JobTracker會(huì)把任務(wù)轉(zhuǎn)交給另一個(gè)空閑的TaskTracker重新運(yùn)行。 HDFS和MR共同組成Hadoop分布式系統(tǒng)體系結(jié)構(gòu)的核心,。HDFS在集群上實(shí)現(xiàn)了分布式文件系統(tǒng),,MR在集群上實(shí)現(xiàn)了分布式計(jì)算和任務(wù)處理。HDFS在MR任務(wù)處理過(guò)程中提供了文件操作和存儲(chǔ)等支持,,MR在HDFS的基礎(chǔ)上實(shí)現(xiàn)了任務(wù)的分發(fā),、跟蹤、執(zhí)行等工作,,并收集結(jié)果,,二者相互作用,,完成分布式集群的主要任務(wù)。 Hadoop上的并行應(yīng)用程序開(kāi)發(fā)是基于MR編程框架,。MR編程模型原理:利用一個(gè)輸入的key-value對(duì)集合來(lái)產(chǎn)生一個(gè)輸出的key-value對(duì)集合,。MR庫(kù)通過(guò)Map和Reduce兩個(gè)函數(shù)來(lái)實(shí)現(xiàn)這個(gè)框架。用戶自定義的map函數(shù)接受一個(gè)輸入的key-value對(duì),,然后產(chǎn)生一個(gè)中間的key-value對(duì)的集合,。MR把所有具有相同的key值的value結(jié)合在一起,然后傳遞個(gè)reduce函數(shù),。Reduce函數(shù)接受key和相關(guān)的value結(jié)合,,reduce函數(shù)合并這些value值,形成一個(gè)較小的value集合,。通常我們通過(guò)一個(gè)迭代器把中間的value值提供給reduce函數(shù)(迭代器的作用就是收集這些value值),,這樣就可以處理無(wú)法全部放在內(nèi)存中的大量的value值集合了。 說(shuō)明:(第三幅圖為同伴自己畫(huà)的) 流程簡(jiǎn)而言之,,大數(shù)據(jù)集被分成眾多小的數(shù)據(jù)集塊,,若干個(gè)數(shù)據(jù)集被分在集群中的一個(gè)節(jié)點(diǎn)進(jìn)行處理并產(chǎn)生中間結(jié)果。單節(jié)點(diǎn)上的任務(wù),,map函數(shù)一行行讀取數(shù)據(jù)獲得數(shù)據(jù)的(k1,v1),,數(shù)據(jù)進(jìn)入緩存,通過(guò)map函數(shù)執(zhí)行map(基于key-value)排序(框架會(huì)對(duì)map的輸出進(jìn)行排序)執(zhí)行后輸入(k2,v2),。每一臺(tái)機(jī)器都執(zhí)行同樣的操作,。不同機(jī)器上的(k2,v2)通過(guò)merge排序的過(guò)程(shuffle的過(guò)程可以理解成reduce前的一個(gè)過(guò)程),最后reduce合并得到,,(k3,v3),,輸出到HDFS文件中。 談到reduce,,在reduce之前,,可以先對(duì)中間數(shù)據(jù)進(jìn)行數(shù)據(jù)合并(Combine),即將中間有相同的key的<key,value>對(duì)合并,。Combine的過(guò)程與reduce的過(guò)程類(lèi)似,,但Combine是作為map任務(wù)的一部分,在執(zhí)行完map函數(shù)后僅接著執(zhí)行,。Combine能減少中間結(jié)果key-value對(duì)的數(shù)目,,從而降低網(wǎng)絡(luò)流量。 Map任務(wù)的中間結(jié)果在做完Combine和Partition后,,以文件的形式存于本地磁盤(pán)上,。中間結(jié)果文件的位置會(huì)通知主控JobTracker,JobTracker再通知reduce任務(wù)到哪一個(gè)DataNode上去取中間結(jié)果,。所有的map任務(wù)產(chǎn)生的中間結(jié)果均按其key值按hash函數(shù)劃分成R份,,R個(gè)reduce任務(wù)各自負(fù)責(zé)一段key區(qū)間,。每個(gè)reduce需要向許多個(gè)map任務(wù)節(jié)點(diǎn)取的落在其負(fù)責(zé)的key區(qū)間內(nèi)的中間結(jié)果,然后執(zhí)行reduce函數(shù),,最后形成一個(gè)最終結(jié)果,。有R個(gè)reduce任務(wù),就會(huì)有R個(gè)最終結(jié)果,,很多情況下這R個(gè)最終結(jié)果并不需要合并成一個(gè)最終結(jié)果,,因?yàn)檫@R個(gè)最終結(jié)果可以作為另一個(gè)計(jì)算任務(wù)的輸入,開(kāi)始另一個(gè)并行計(jì)算任務(wù),。這就形成了上面圖中多個(gè)輸出數(shù)據(jù)片段(HDFS副本),。 Hbase數(shù)據(jù)管理 Hbase就是Hadoop database。與傳統(tǒng)的mysql,、oracle究竟有什么差別,。即列式數(shù)據(jù)與行式數(shù)據(jù)由什么區(qū)別。NoSql數(shù)據(jù)庫(kù)與傳統(tǒng)關(guān)系型數(shù)據(jù)由什么區(qū)別: Hbase VS Oracle 1,、 Hbase適合大量插入同時(shí)又有讀的情況,。輸入一個(gè)Key獲取一個(gè)value或輸入一些key獲得一些value。 2,、 Hbase的瓶頸是硬盤(pán)傳輸速度,。Hbase的操作,它可以往數(shù)據(jù)里面insert,,也可以u(píng)pdate一些數(shù)據(jù),,但update的實(shí)際上也是insert,只是插入一個(gè)新的時(shí)間戳的一行,。Delete數(shù)據(jù),,也是insert,只是insert一行帶有delete標(biāo)記的一行,。Hbase的所有操作都是追加插入操作,。Hbase是一種日志集數(shù)據(jù)庫(kù)。它的存儲(chǔ)方式,,像是日志文件一樣,。它是批量大量的往硬盤(pán)中寫(xiě),通常都是以文件形式的讀寫(xiě),。這個(gè)讀寫(xiě)速度,就取決于硬盤(pán)與機(jī)器之間的傳輸有多快,。而Oracle的瓶頸是硬盤(pán)尋道時(shí)間,。它經(jīng)常的操作時(shí)隨機(jī)讀寫(xiě)。要update一個(gè)數(shù)據(jù),,先要在硬盤(pán)中找到這個(gè)block,,然后把它讀入內(nèi)存,,在內(nèi)存中的緩存中修改,過(guò)段時(shí)間再回寫(xiě)回去,。由于你尋找的block不同,,這就存在一個(gè)隨機(jī)的讀。硬盤(pán)的尋道時(shí)間主要由轉(zhuǎn)速來(lái)決定的,。而尋道時(shí)間,,技術(shù)基本沒(méi)有改變,這就形成了尋道時(shí)間瓶頸,。 3,、 Hbase中數(shù)據(jù)可以保存許多不同時(shí)間戳的版本(即同一數(shù)據(jù)可以復(fù)制許多不同的版本,準(zhǔn)許數(shù)據(jù)冗余,,也是優(yōu)勢(shì)),。數(shù)據(jù)按時(shí)間排序,因此Hbase特別適合尋找按照時(shí)間排序?qū)ふ襎op n的場(chǎng)景,。找出某個(gè)人最近瀏覽的消息,,最近寫(xiě)的N篇博客,N種行為等等,,因此Hbase在互聯(lián)網(wǎng)應(yīng)用非常多,。 4、 Hbase的局限,。只能做很簡(jiǎn)單的Key-value查詢,。它適合有高速插入,同時(shí)又有大量讀的操作場(chǎng)景,。而這種場(chǎng)景又很極端,,并不是每一個(gè)公司都有這種需求。在一些公司,,就是普通的OLTP(聯(lián)機(jī)事務(wù)處理)隨機(jī)讀寫(xiě),。在這種情況下,Oracle的可靠性,,系統(tǒng)的負(fù)責(zé)程度又比Hbase低一些,。而且Hbase局限還在于它只有主鍵索引,因此在建模的時(shí)候就遇到了問(wèn)題,。比如,,在一張表中,很多的列我都想做某種條件的查詢,。但卻只能在主鍵上建快速查詢,。所以說(shuō),不能籠統(tǒng)的說(shuō)那種技術(shù)有優(yōu)勢(shì)。 5,、 Oracle是行式數(shù)據(jù)庫(kù),,而Hbase是列式數(shù)據(jù)庫(kù)。列式數(shù)據(jù)庫(kù)的優(yōu)勢(shì)在于數(shù)據(jù)分析這種場(chǎng)景,。數(shù)據(jù)分析與傳統(tǒng)的OLTP的區(qū)別,。數(shù)據(jù)分析,經(jīng)常是以某個(gè)列作為查詢條件,,返回的結(jié)果也經(jīng)常是某一些列,,不是全部的列。在這種情況下,,行式數(shù)據(jù)庫(kù)反應(yīng)的性能就很低效,。 行式數(shù)據(jù)庫(kù):Oracle為例,數(shù)據(jù)文件的基本組成單位:塊/頁(yè),。塊中數(shù)據(jù)是按照一行行寫(xiě)入的,。這就存在一個(gè)問(wèn)題,當(dāng)我們要讀一個(gè)塊中的某些列的時(shí)候,,不能只讀這些列,,必須把這個(gè)塊整個(gè)的讀入內(nèi)存中,再把這些列的內(nèi)容讀出來(lái),。換句話就是:為了讀表中的某些列,,必須要把整個(gè)表的行全部讀完,才能讀到這些列,。這就是行數(shù)據(jù)庫(kù)最糟糕的地方,。 列式數(shù)據(jù)庫(kù):是以列作為元素存儲(chǔ)的。同一個(gè)列的元素會(huì)擠在一個(gè)塊,。當(dāng)要讀某些列,,只需要把相關(guān)的列塊讀到內(nèi)存中,這樣讀的IO量就會(huì)少很多,。通常,,同一個(gè)列的數(shù)據(jù)元素通常格式都是相近的。這就意味著,,當(dāng)數(shù)據(jù)格式相近的時(shí)候,,數(shù)據(jù)就可以做大幅度的壓縮。所以,,列式數(shù)據(jù)庫(kù)在數(shù)據(jù)壓縮方面有很大的優(yōu)勢(shì),,壓縮不僅節(jié)省了存儲(chǔ)空間,同時(shí)也節(jié)省了IO,。(這一點(diǎn),,可利用在當(dāng)數(shù)據(jù)達(dá)到百萬(wàn),、千萬(wàn)級(jí)別以后,數(shù)據(jù)查詢之間的優(yōu)化,,提高性能,示場(chǎng)景而定) Hive數(shù)據(jù)管理 Hive是建立在Hadoop上的數(shù)據(jù)倉(cāng)庫(kù)基礎(chǔ)架構(gòu),。它提供了一系列的工具,,用來(lái)進(jìn)行數(shù)據(jù)提取、轉(zhuǎn)換,、加載,,這是一種可以存儲(chǔ)、查詢和分析存儲(chǔ)在Hadoop中的大規(guī)模數(shù)據(jù)機(jī)制,??梢园袶adoop下結(jié)構(gòu)化數(shù)據(jù)文件映射為一張成Hive中的表,并提供類(lèi)sql查詢功能,,除了不支持更新,、索引和事務(wù),sql其它功能都支持,??梢詫ql語(yǔ)句轉(zhuǎn)換為MapReduce任務(wù)進(jìn)行運(yùn)行,作為sql到MapReduce的映射器,。提供shell,、JDBC/ODBC、Thrift,、Web等接口,。優(yōu)點(diǎn):成本低可以通過(guò)類(lèi)sql語(yǔ)句快速實(shí)現(xiàn)簡(jiǎn)單的MapReduce統(tǒng)計(jì)。作為一個(gè)數(shù)據(jù)倉(cāng)庫(kù),,Hive的數(shù)據(jù)管理按照使用層次可以從元數(shù)據(jù)存儲(chǔ),、數(shù)據(jù)存儲(chǔ)和數(shù)據(jù)交換三個(gè)方面介紹。 (1)元數(shù)據(jù)存儲(chǔ) Hive將元數(shù)據(jù)存儲(chǔ)在RDBMS中,,有三種方式可以連接到數(shù)據(jù)庫(kù): ·內(nèi)嵌模式:元數(shù)據(jù)保持在內(nèi)嵌數(shù)據(jù)庫(kù)的Derby,,一般用于單元測(cè)試,只允許一個(gè)會(huì)話連接 ·多用戶模式:在本地安裝Mysql,,把元數(shù)據(jù)放到Mysql內(nèi) ·遠(yuǎn)程模式:元數(shù)據(jù)放置在遠(yuǎn)程的Mysql數(shù)據(jù)庫(kù) (2)數(shù)據(jù)存儲(chǔ) 首先,,Hive沒(méi)有專(zhuān)門(mén)的數(shù)據(jù)存儲(chǔ)格式,也沒(méi)有為數(shù)據(jù)建立索引,,用于可以非常自由的組織Hive中的表,,只需要在創(chuàng)建表的時(shí)候告訴Hive數(shù)據(jù)中的列分隔符和行分隔符,這就可以解析數(shù)據(jù)了,。 其次,,Hive中所有的數(shù)據(jù)都存儲(chǔ)在HDFS中,,Hive中包含4中數(shù)據(jù)模型:Tabel、ExternalTable,、Partition,、Bucket。 Table:類(lèi)似與傳統(tǒng)數(shù)據(jù)庫(kù)中的Table,,每一個(gè)Table在Hive中都有一個(gè)相應(yīng)的目錄來(lái)存儲(chǔ)數(shù)據(jù),。例如:一個(gè)表zz,它在HDFS中的路徑為:/wh/zz,,其中wh是在hive-site.xml中由${hive.metastore.warehouse.dir}指定的數(shù)據(jù)倉(cāng)庫(kù)的目錄,,所有的Table數(shù)據(jù)(不含External Table)都保存在這個(gè)目錄中。 Partition:類(lèi)似于傳統(tǒng)數(shù)據(jù)庫(kù)中劃分列的索引,。在Hive中,,表中的一個(gè)Partition對(duì)應(yīng)于表下的一個(gè)目錄,所有的Partition數(shù)據(jù)都存儲(chǔ)在對(duì)應(yīng)的目錄中,。例如:zz表中包含ds和city兩個(gè)Partition,,則對(duì)應(yīng)于ds=20140214,city=beijing的HDFS子目錄為:/wh/zz/ds=20140214/city=Beijing; Buckets:對(duì)指定列計(jì)算的hash,,根據(jù)hash值切分?jǐn)?shù)據(jù),,目的是為了便于并行,每一個(gè)Buckets對(duì)應(yīng)一個(gè)文件,。將user列分?jǐn)?shù)至32個(gè)Bucket上,,首先對(duì)user列的值計(jì)算hash,比如,,對(duì)應(yīng)hash=0的HDFS目錄為:/wh/zz/ds=20140214/city=Beijing/part-00000;對(duì)應(yīng)hash=20的,,目錄為:/wh/zz/ds=20140214/city=Beijing/part-00020。 ExternalTable指向已存在HDFS中的數(shù)據(jù),,可創(chuàng)建Partition,。和Table在元數(shù)據(jù)組織結(jié)構(gòu)相同,在實(shí)際存儲(chǔ)上有較大差異,。Table創(chuàng)建和數(shù)據(jù)加載過(guò)程,,可以用統(tǒng)一語(yǔ)句實(shí)現(xiàn),實(shí)際數(shù)據(jù)被轉(zhuǎn)移到數(shù)據(jù)倉(cāng)庫(kù)目錄中,,之后對(duì)數(shù)據(jù)的訪問(wèn)將會(huì)直接在數(shù)據(jù)倉(cāng)庫(kù)的目錄中完成,。刪除表時(shí),表中的數(shù)據(jù)和元數(shù)據(jù)都會(huì)刪除,。ExternalTable只有一個(gè)過(guò)程,,因?yàn)榧虞d數(shù)據(jù)和創(chuàng)建表是同時(shí)完成。世界數(shù)據(jù)是存儲(chǔ)在Location后面指定的HDFS路徑中的,,并不會(huì)移動(dòng)到數(shù)據(jù)倉(cāng)庫(kù)中,。 (3)數(shù)據(jù)交換 ·用戶接口:包括客戶端,、Web界面和數(shù)據(jù)庫(kù)接口 ·元數(shù)據(jù)存儲(chǔ):通常是存儲(chǔ)在關(guān)系數(shù)據(jù)庫(kù)中的,如Mysql,,Derby等 ·Hadoop:用HDFS進(jìn)行存儲(chǔ),,利用MapReduce進(jìn)行計(jì)算。 關(guān)鍵點(diǎn):Hive將元數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)庫(kù)中,,如Mysql,、Derby中。Hive中的元數(shù)據(jù)包括表的名字,、表的列和分區(qū)及其屬性、表的屬性(是否為外部表),、表數(shù)據(jù)所在的目錄等,。 Hive的數(shù)據(jù)存儲(chǔ)在HDFS中,大部分的查詢由MapReduce完成,。 總結(jié): 通過(guò)對(duì)Hadoop分布式計(jì)算平臺(tái)最核心的分布式文件系統(tǒng)HDFS,、MapReduce處理過(guò)程,以及數(shù)據(jù)倉(cāng)庫(kù)工具Hive和分布式數(shù)據(jù)庫(kù)Hbase的介紹,?;竞w了Hadoop分布式平臺(tái)的所有技術(shù)核心。從體系架構(gòu)到數(shù)據(jù)定義到數(shù)據(jù)存儲(chǔ)再到數(shù)據(jù)處理,,從宏觀到微觀的系統(tǒng)介紹,,為Hadoop平臺(tái)上大規(guī)模的數(shù)據(jù)存儲(chǔ)和任務(wù)處理打下基礎(chǔ)。 原文:Hadoop核心架構(gòu)HDFS+MapReduce+Hbase+Hive內(nèi)部機(jī)理詳解 (責(zé)編:Arron) |
|
來(lái)自: _超級(jí)賽亞人_ > 《hadoop》