Hadoop于2006年1月28日誕生,至今已有10年,它改變了企業(yè)對數據的存儲、處理和分析的過程,加速了大數據的發(fā)展,形成了自己的極其火爆的技術生態(tài)圈,并受到非常廣泛的應用。在2016年Hadoop十歲生日之際,InfoQ策劃了一個Hadoop熱點系列文章,為大家梳理Hadoop這十年的變化,技術圈的生態(tài)狀況,回顧以前,激勵當下。本文是InfoQ處于一線開發(fā)的社區(qū)編輯對盧億雷老師進行的采訪,對大家關心的問題進行了專業(yè)的解答。
InfoQ:Hadoop會考慮內存或磁盤動態(tài)管理技術嗎?
盧億雷:隨著實時計算的發(fā)展,Hadoop會考慮內存管理技術的。動態(tài)管理的目的一個是資源自動發(fā)現(xiàn),一個是系統(tǒng)的效率。從資源自動發(fā)現(xiàn)來看,比如新的Hadoop版本已經支持根據機器內存大小的不同,自動計算可以使用的內存量;從系統(tǒng)效率角度來講,比如新的Hadoop已經支持對內存/ssd/硬盤的分級存儲管理,可以更高效地使用存儲。
InfoQ:基于Hadoop實現(xiàn)的設計本身,它能做到的最好性能是什么?以及哪些瓶頸是設計本身造成的,不可改變的?
盧億雷:基于Hadoop架構設計本身,它能做到最好的性能是大批量數據離線統(tǒng)計,對于多次迭代計算等是它現(xiàn)在設計本身的瓶頸。但是隨著YARN的發(fā)展,Hadoop的計算層變得越來越像一個純粹的計算資源管理系統(tǒng),Spark/Storm/Flink等多種計算模型都可以在YARN上來執(zhí)行,極大豐富了Hadoop支持的計算,可以說,Hadoop已經變得更像一個大數據的框架,相信它的性能也會越來越好。
InfoQ:Hadoop能否在底層就實現(xiàn)基于廣義shema的存儲結構,而不是現(xiàn)在的block,這樣會不會性能更好?
盧億雷:Hadoop原來設計主要是基于文本存儲,后續(xù)也進行了改進,可以設計特定的Schema存儲結構來提高性能,如Hive中使用的RCFile,就是按需取字段,這樣大大減少磁盤和網絡IO,可以提高性能。另一方面,Hadoop底層存儲是高度抽象的,具體的存儲結構甚至可以由用戶來自定義,比如現(xiàn)在就有用AWS做底層存儲的模塊,還有用阿里云做底層存儲的模塊,用戶可以根據自己的需求來優(yōu)化相應的存儲結構。
InfoQ:Hadoop越來越跟隨著spark的方向在開發(fā),那是不是spark新功能的出現(xiàn)會比較大的影響到Hadoop的發(fā)展?
盧億雷:之前談到,Hadoop的YARN已經可以支持多種計算模型,Spark就可以在YARN上來執(zhí)行。從這個層面來講,Spark新功能的出現(xiàn),會讓Hadoop使用者更多地受益,YARN的優(yōu)化也會更好地支持Spark的新功能。另一方面,在大數據量的存儲方面,Hadoop的HDFS基本上就是大數據事實上的存儲標準,Spark的大數據輸入/輸出也是基于HDFS的。
InfoQ:Hadoop代碼越來越大,學起來成本更大,怎樣才能更優(yōu)雅的掌握?
盧億雷:廣義的Hadoop指Hadoop家族,包括HDFS/MapReduce/YARN/HBase/Zookeeper等等組件,狹義的Hadoop單單指HDFS/MapReduce/YARN,建議先從這些組件學起。
首先需要學習和理解分布式存儲和分布式計算的原理,可以參考Google的相關論文,然后自己手動搭建一個Hadoop平臺,測試各種組件,學習寫MapReduce程序,之后可以學習使用HBase的搭建和基本使用。對這些都有一個基本概念之后,可以先編程使用這些組件,看可以解決自己的什么實際問題。最后,學習最好的資源就是Hadoop的社區(qū)和源碼,是大數據學習的不二選擇。如果有條件的話,在一個大數據公司工作,實際使用它們,會學習更快的。
InfoQ:Hadoop解決異構存儲介質上的功能現(xiàn)在有生產環(huán)境可以用嗎?或者對應性能測試怎么樣?
盧億雷:Hadoop解決異構存儲介質上的功能主要支持普通硬盤、SSD、內存這三個存儲介質,且在Hadoop2.6以后重點實現(xiàn)了,管理員可以在一個限定的Datanode跨磁盤存儲層,以及應用程序可利用的API將數據存儲到這些不同的存儲層。這意味著管理員可以優(yōu)化他們的應用程序通過使用Hadoop運行:在SSD存儲層以提高讀/寫延遲;內存存儲層進行快速讀/寫;普通硬盤可以進行歸檔存儲層,以提高存儲效率。所以可以在生產環(huán)境上使用的,前提是需要有同學對這塊了解才可以。具體的測試性能需要看對應的應用場景,如果搭配的好,性能提升是比較顯現(xiàn),但是也需要注意的是如果內部數據交換比較多或者帶寬有限制,從而導致文件IO不是瓶頸,帶寬才是瓶頸,則性能基本不會有提升?偟膩碚f如果業(yè)務沒有特別的要求,其實也不用Hadoop的異構存儲的功能。
InfoQ:Hadoop有從底層來設計支持DAG優(yōu)化(比如現(xiàn)在有的Tez,F(xiàn)link)mapreduce嗎?
盧億雷:目前沒有,如果要從底層支持DAG優(yōu)化,那就是重寫Hadoop架構了。其實現(xiàn)在的YARN已經把計算的管理獨立了出來,完全可以在YARN上玩出計算的各種花樣,F(xiàn)有的Tez、Flink等都是基于Hadoop之上來實現(xiàn)DAG優(yōu)化的。大家都知道ApacheTez是基于HadoopYarn之上的DAG(有向無環(huán)圖,DirectedAcyclicGraph)計算框架。它把Map/Reduce過程拆分成若干個子過程,同時可以把多個Map/Reduce任務組合成一個較大的DAG任務,減少了Map/Reduce之間的文件存儲。同時合理組合其子過程,減少任務的運行時間,由Hortonworks開發(fā)并提供主要支持;而Flink是一個開源的針對批量數據和流數據的處理引擎,且支持DAG的運算。像Tez、Flink等都可以直接運行在YARN上,所以對于Hadoop來也不是必須一定要在底層上支持DAG的優(yōu)化,這樣分層后也有利于各自的發(fā)展。
InfoQ:集群在上百臺機器的規(guī)模,增加(移出)十來臺機器時怎么遷移其上的數據?
盧億雷:通過rebalance來實現(xiàn),前提是帶寬需要做控制。一般大規(guī)模的集群都會有一個rebalance在持續(xù)運行的。如Hadoop的rebalance是一個非自動的管理功能,換句話說,它是由人工啟動的。在任意一臺能夠連接到HDFS的機器上命令行下輸入hadoopbalancer[-threshold]即會啟動。如果集群處于不平衡狀態(tài),這個過程就會在不平衡的節(jié)點之間遷移數據,如果rebalance過程沒有被打斷的話,完成此次rebalance目標后過程會自動停止。
受訪嘉賓:盧億雷,精碩科技(AdMaster)技術副總裁兼總架構師,大數據資深專家,CCF(中國計算學會)大數據專委委員,北航特聘教授。主要負責數據的采集、清洗、存儲、挖掘等整個數據流過程,確保提供高可靠、高可用、高擴展、高性能系統(tǒng)服務,提供Hadoop/HBase/Storm/Spark/ElasticSearch等離線、流式及實時分布式計算服務。對分布式存儲和分布式計算、超大集群、大數據分析等有深刻理解及實踐經驗。有超過10年云計算、云存儲、大數據經驗。曾在聯(lián)想、百度、Carbonite工作,并擁有多篇大數據相關的專利和論文。
核心關注:拓步ERP系統(tǒng)平臺是覆蓋了眾多的業(yè)務領域、行業(yè)應用,蘊涵了豐富的ERP管理思想,集成了ERP軟件業(yè)務管理理念,功能涉及供應鏈、成本、制造、CRM、HR等眾多業(yè)務領域的管理,全面涵蓋了企業(yè)關注ERP管理系統(tǒng)的核心領域,是眾多中小企業(yè)信息化建設首選的ERP管理軟件信賴品牌。
轉載請注明出處:拓步ERP資訊網http://www.ezxoed.cn/