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