Azure HDInsight與Hadoop周邊系統集成
傳統的Hadoop系統提供給用戶2個非常優秀的框架,MR計算框架和HDFS存儲框架,盡管MR已經顯得有些老邁而緩慢,但是HDFS還是很多 應用系統的基石,很多應用都可以把HDFS作為系統的基本數據輸入和輸出方式。HDFS的基本特征就是數據是分布式切塊存儲,通過多副本冗余的方式來提供 數據持久性保障,并且可以通過節點的增加來進行系統的擴容,這也是很多用戶和系統所看重的特點。目前在Hadoop社區里面有各種各樣的組件和解決方案用 于處理海量數據、可靠性消息、數據分析及預測等多種領域。
Microsoft Azure是一個開放的平臺,用戶當然可以在Azure上通過運行虛擬機的方式運行Hadoop系統來實現自己的業務功能,但是Azure平臺還提供了 AzureHDInsight這種PaaS服務來幫助客戶更簡單的部署和管理他們的Hadoop系統。AzureHDInsight是一套核心的計算組 件,請注意我只說了它是負責計算相關的工作。在計算的方面,目前HDInsight提供了3種不同的Cluster類型,標準的 Hadoop(HIVE),HBaseCluster,StormCluster,未來Azure還會根據用戶的需求引入其他Hadoop的集群。每種不 同的Cluster類型我們都進行了針對這個組件相關的一些特殊設計和處理,這樣可以針對特定的組件進行優化和配置。從架構上看HDInsight和傳統 的HadoopCluster有一些不同,我們在用戶接入層有一層安全網關負責接入客戶端請求以及認證,然后將認證后的請求轉發到后端可用的 headnode上,這種方式不但給Hadoop提供了安全認證以及端口的保護,而且也實現了NameNode的高可用性。如果是 HBaseCluster,后端還會有3個zookeeper節點的HA方案。如果用戶需要直接訪問headnode,我們可以通過將cluster部署 到RegionVNET的方式來支持,這個功能需要通過Powershell來指定VirtualNetworkId和SubnetName參數來實現, 注意這個參數是ID而不是VNET的Name,可以通過(Get-AzureVNetSite-VNetName$VNetName).Id得到,這樣就 可以將Cluster與你其他的VM放在同一個VNET里面進行直接通信了。另外最近我們在HDInsight上支持了自定義腳本操作,這個功能非常有意 義,可以用于安裝新的組件例如Spark和R,也可以用來給現有的組件進行補丁的更新,具體的細節你可以參考 http://azure.microsoft.com/en-us/documentation/articles/hdinsight-hadoop-script-actions/
除了計算功能之外,Microsoft Azure還提供了功能強大的存儲功能,Azure Storage是Azure最基礎的服務之一,提供了高持久性、高可用的分布式存儲系統完全可以媲美HDFS,所以在HDInsight中我們使用了 AzureStorage而不是HDFS的技術,也就是說HDInsight實現了在Hadoop上的計算與存儲分離。這樣處理的優勢非常明顯,用戶可以 根據計算的用量來動態創建和銷毀Cluster而不需要考慮數據的問題,只需要保持使用同樣的存儲賬號、容器、基于AzureSQL DB的Hive元數據庫。這種基于使用成本的優化方式是傳統的Hadoop和HDFS所不能實現的,具體的信息可以參考 http://www.windowsazure.cn/zh-cn/documentation/articles/hdinsight-use-blob-storage/
Hadoop的強大之處并不是因為只有MR和HDFS,發揮更多作用的還是周邊的生態系統組件,這些組件不斷的在豐富和擴展Hadoop的功能, 讓客戶更加容易的發揮其作用,所以HDInsight必須能夠與其他的相關系統進行集成才能與開源社區和客戶相連。 在HDInsight平臺上除了自身默認支持的功能外,通過自定義腳本操作很多Hadoop周邊的系統都可以運行在HDInsight之上,但是而然會有 一些周邊的系統需要通過HDFS直接與Hadoop系統進行連接,例如用于日志收集的ApacheFlume。在這種情況下,為了和Hadoop生態系統 保持更好的兼容,微軟在Hadoop的sourcecode上也貢獻了關于這個部分的源代碼,我們可以通過下面的git命令獲取ApacheHadoop 的源代碼并在hadoop-common\hadoop-tools\hadoop-azure下看到在HDFS上支持AzureStorage方面的代 碼。
git clone git://git.apache.org/hadoop-common.git
通過編譯后我們可以將生成的hadoop-azure-3.0.0-SNAPSHOT.jar以及引用的microsoft- windowsazure-storage-sdk-0.6.0.jar復制到你需要的相關Hadoop組件的classpath路徑內,然后在 hadoopclient中的core-site.xml中添加
<property>
<name>fs.azure.account.key.{youraccount}.blob.core.chinacloudapi.cn</name>
<value>{yourkey}</value>
</property>
這樣Hadoop生態系統中相關的其他系統中通過wasb://來代替hdfs://達到與HDInsight的集成的效果
如果你有任何疑問, 歡迎訪問 MSDN 社區,由專家來為您解答Windows Azure各種技術問題,或者撥打世紀互聯客戶服務熱線400-089-0365/010-84563652咨詢各類服務信息。
本文轉發自: http://blogs.msdn.com/b/cciccat/archive/2014/12/09/integrated-hadoop-ecosystem-with-azure-hdinsight.aspx