談Hadoop生態的最新發展

在2016年Hadoop十歲生日之際,爲大家梳理Hadoop這十年的變化,技術圈的生態狀況,回顧以前,激勵當下。本文是對盧億雷老師進行的採訪,對大家關心的問題進行了專業的解答。

問:Hadoop會考慮內存或磁盤動態管理技術嗎?

盧億雷:隨着實時計算的發展,Hadoop會考慮內存管理技術的。動態管理的目的一個是資源自動發現, 一個是系統的效率.從資源自動發現來看,比如新的 Hadoop 版本已經支持根據機器內存大小的不同,自動計算可以使用的內存量; 從系統效率角度來講, 比如新的 Hadoop 已經支持對內存/ssd/硬盤的分級存儲管理, 可以更高效地使用存儲.

問:基於Hadoop實現的設計本身,它能做到的最好性能是什麼?以及哪些瓶頸是設計本身造成的,不可改變的?

盧億雷:基於Hadoop架構設計本身,它能做到最好的性能是大批量數據離線統計,對於多次迭代計算等是它現在設計本身的瓶頸。但是隨着 YARN 的發展, Hadoop 的計算層變得越來越像一個純粹的計算資源管理系統, Spark/Storm/Flink 等多種計算模型都可以在 YARN 上來執行, 極大豐富了 Hadoop支持的計算, 可以說, Hadoop已經變得更像一個大數據的框架,相信它的性能也會越來越好.

問:Hadoop能否在底層就實現基於廣義shema的存儲結構,而不是現在的block,這樣會不會性能更好?

盧億雷:Hadoop原來設計主要是基於文本存儲,後續也進行了改進,可以設計特定的Schema存儲結構來提高性能,如Hive中使用的RCFile,就是按需取字段,這樣大大減少磁盤和網絡IO,可以提高性能。另一方面, Hadoop底層存儲是高度抽象的, 具體的存儲結構甚至可以由用戶來自定義,比如現在就有用 AWS做底層存儲的模塊,還有用阿里雲做底層存儲的模塊, 用戶可以根據自己的需求來優化相應的存儲結構.

問:Hadoop越來越跟隨着Spark的方向在開發,那是不是Spark新功能的出現會比較大的影響到Hadoop的發展?

盧億雷:之前談到, Hadoop的YARN已經可以支持多種計算模型, Spark就可以在YARN上來執行. 從這個層面來講, Spark新功能的出現, 會讓 Hadoop使用者更多地受益, YARN的優化也會更好地支持Spark的新功能 。另一方面,在大數據量的存儲方面, Hadoop 的HDFS基本上就是大數據事實上的存儲標準, Spark的大數據輸入/輸出也是基於HDFS的。

問:Hadoop代碼越來越大,學起來成本更大,怎樣才能更優雅的掌握?

盧億雷:廣義的 Hadoop 指 Hadoop家族, 包括 HDFS/MapReduce/YARN/HBase/Zookeeper 等等組件, 狹義的 Hadoop 單單指 HDFS/MapReduce/YARN, 建議先從這些組件學起.

首先需要學習和理解分佈式存儲和分佈式計算的原理,可以參考 Google 的相關論文, 然後自己手動搭建一個Hadoop平臺,測試各種組件,學習寫MapReduce程序,之後可以學習使用HBase的搭建和基本使用.對這些都有一個基本概念之後, 可以先編程使用這些組件,看可以解決自己的什麼實際問題.最後,學習最好的資源就是 Hadoop的社區和源碼, 是大數據學習的不二選擇.如果有條件的話,在一個大數據公司工作,實際使用它們,會學習更快的。

InfoQ:Hadoop解決異構存儲介質上的功能現在有生產環境可以用嗎?或者對應性能測試怎麼樣?

盧億雷:Hadoop解決異構存儲介質上的功能主要支持普通硬盤、SSD、內存這三個存儲介質,且在Hadoop2.6以後重點實現了,管理員可以在一個限定的Datanode跨磁盤存儲層,以及應用程序可利用的API將數據存儲到這些不同的存儲層。這意味着管理員可以優化他們的應用程序通過使用Hadoop運行:在SSD存儲層以提高讀/寫延遲;內存存儲層進行快速讀/寫;普通硬盤可以進行歸檔存儲層,以提高存儲效率。所以可以在生產環境上使用的,前提是需要有同學對這塊瞭解纔可以。具體的測試性能需要看對應的應用場景,如果搭配的好,性能提升是比較顯現,但是也需要注意的是如果內部數據交換比較多或者帶寬有限制,從而導致文件IO不是瓶頸,帶寬纔是瓶頸,則性能基本不會有提升。總的來說如果業務沒有特別的要求,其實也不用Hadoop的異構存儲的功能。

問:Hadoop有從底層來設計支持DAG優化(比如現在有的Tez,Flink)mapreduce嗎?

盧億雷:目前沒有,如果要從底層支持DAG優化,那就是重寫Hadoop架構了。其實現在的YARN已經把計算的管理獨立了出來, 完全可以在 YARN上玩出計算的各種花樣。現有的Tez、Flink等都是基於Hadoop之上來實現DAG優化的。大家都知道Apache Tez是基於Hadoop Yarn之上的DAG(有向無環圖,Directed Acyclic Graph)計算框架。它把Map/Reduce過程拆分成若干個子過程,同時可以把多個Map/Reduce任務組合成一個較大的DAG任務,減少了 Map/Reduce之間的文件存儲。同時合理組合其子過程,減少任務的運行時間,由Hortonworks開發並提供主要支持;而Flink 是一個開源的針對批量數據和流數據的處理引擎,且支持DAG的運算。像Tez、Flink等都可以直接運行在YARN上,所以對於Hadoop來也不是必須一定要在底層上支持DAG的優化,這樣分層後也有利於各自的發展。

問:集羣在上百臺機器的規模,增加(移出)十來臺機器時怎麼遷移其上的數據?

盧億雷:通過rebalance來實現,前提是帶寬需要做控制。一般大規模的集羣都會有一個 rebalance 在持續運行的。如Hadoop的rebalance 是一個非自動的管理功能,換句話說,它是由人工啓動的。在任意一臺能夠連接到HDFS的機器上命令行下輸入 hadoop balancer [-threshold] 即會啓動。如果集羣處於不平衡狀態,這個過程就會在不平衡的節點之間遷移數據,如果rebalance過程沒有被打斷的話,完成此次rebalance目標後過程會自動停止。

受訪嘉賓:盧億雷,精碩科技(AdMaster)技術副總裁兼總架構師,大數據資深專家,CCF(中國計算學會)大數據專委委員,北航特聘教授。

在這裏我還是要推薦下我自己建的大數據學習交流qq裙:522189307 , 裙 裏都是學大數據開發的,如果你正在學習大數據 ,小編歡迎你加入,大家都是軟件開發黨,不定期分享乾貨(只有大數據開發相關的),包括我自己整理的一份最新的大數據進階資料和高級開發教程,歡迎進階中和進想深入大數據的小夥伴。上述資料加羣可以領取

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章