在HDInsight中從Hadoop的兼容BLOB存儲查詢大數據的分析
在HDInsight中從Hadoop的兼容BLOB存儲查詢大數據的分析
低成本的Blob存儲是一個強大的。通用的Hadoop兼容Azure存儲解決方式無縫集成HDInsight。通過Hadoop分布式文件系統(HDFS)接口,完整的組件集合在HDInsight能夠
在Blob存儲數據的直接操作。在本教程中,學習怎樣建立一個容器的Blob存儲,然後在裏面處理的數據。
在BLOB存儲中存儲的數據能夠用於計算的HDInsight集群被安全地刪除,而不會丟失用戶數據。
註意:
該ASV://語法中不支持HDInsight群集3.0版。不會在以後的版本號支持。這意味著,提交到HDInsight群集版本號3.0明白使用不論什麽作業“ASV://”語法將失敗。應該使用wasb:
//語法。此外。作業提交了與現有metastore包含使用ASV明白提及資源創建的不論什麽HDInsight群集版本號3.0://語法將失敗。這些metastores將須要使用wasb又一次創建://處
理資源。
[WACOM.NOTE] HDInsight眼下僅僅支持塊的blob。
[WACOM.NOTE]最HDFS命令,如ls,copyFromLocal,MKDIR。等等,仍然正常工作。
僅僅特定於本機的HDFS執行(其被稱為DFS)的命令,如fschk和dfsadmin將顯示在Azure的Blob存儲不同的行為。
有關供應的HDInsight群集的信息,請參閱開始使用HDInsight或提供HDInsight集群。
在這篇文章中文件夾:
?HDInsight存儲架構
?對AzureBlob存儲優勢
?準備一個容器BLOB存儲
?在BLOB存儲地址的文件
?使用PowerShell訪問BLOB
?下一步
HDInsight存儲架構
下圖提供了HDInsight存儲架構的抽象視圖:
HDInsight提供訪問本地連接到計算節點上的分布式文件系統。該文件系統能夠使用全然限定的URI來訪問。
比如:
HDFS://<namenodehost>/<路徑>
此外,HDInsight提供訪問存儲在斑點存儲數據的能力。
語法訪問的Blob存儲是:
wasb[S]://<容器名稱>@<帳戶>.blob.core.windows.net/<路徑>
Hadoop的支持默認文件系統的概念。默認的文件系統意味著一個默認的計劃性和權威性;它也能夠被用於解決相對路徑。在HDInsight提供過程中。Azure存儲賬戶,並從該
帳戶特定的Blob存儲容器被指定為默認的文件系統。
除了這個存儲賬號,您能夠在提供過程中加入的是同一個Azure訂閱或不同的Azure訂閱額外的存儲帳戶。有關加入額外的存儲帳戶的說明,請參閱提供HDInsight集群。
?在連接到集群存儲帳戶的容器:因為帳戶名和密鑰存儲在核心site.xml中,你能夠全然訪問這些容器的blob。
?在未連接到集群存儲帳戶公眾容器或公共blob:你有僅僅讀權限在容器中的blob。
註意:
>公共容器。您能夠得到在該容器中全部可用的blob的列表,並獲得容器的元數據。公共BLOB讓你僅僅有當你知道確切的URL訪問的blob。欲了解很多其它信息,請參閱限制對容器
和的blob。
?私人容器未連接到集群存儲賬戶:除非你當你提交WebHCat作業定義存儲帳戶,您不能訪問在容器中的的blob。
還有就是在文章後面解釋。
在提供過程定義的存儲帳戶及其密鑰存儲在%HADOOP_HOME%/ conf文件夾/芯-site.xml中。 HDInsight的默認行為是使用中的核心site.xml文件裏定義的存儲帳戶。
這是不
建議編輯的芯 - site.xml文件。因為群集headnode(主)能夠又一次映像或遷移在不論什麽時間,不論什麽更改這些文件都將丟失。
多WebHCat工作,包含蜂巢。MapReduce的,Hadoop的流媒體和豬,能夠隨身攜帶的存儲賬戶,並與他們的元數據描寫敘述(它眼下的豬能夠與存儲帳戶。但沒有元數據)。在使
用本文中的PowerShell部分訪問BLOB ,有這樣的特征的一個演示例子。欲了解很多其它信息。請參閱使用HDInsight群集具有備用存儲帳戶和Metastores。
BLOB存儲容器存儲數據的鍵/值對,而且沒有文件夾層次結構。
然而在“/”字符能夠鍵名稱中使用。使其看起來好像一個文件存儲在文件夾結構中。
比如,一個blob的鍵能夠是輸
入/ log1.txt。沒有實際的輸入文件夾中存在,但因為“/”字符的鍵名的存在,它有一個文件路徑的外觀。
對Azure的BLOB存儲的優點
不具有隱含的性能成本計算和存儲共同定位的是由計算集群中被緊密配置到Azure中的數據中心,當中所述高速網絡使得它很有效的訪問的計算節點內存儲帳戶資源的方
式減輕裏面的Blob存儲中的數據。
有與存儲在存儲的Blob取代HDFS中的數據相關聯的幾個優點:
?數據重用和共享:在HDFS的數據所在的計算機集群中。
僅能夠訪問計算群集的應用程序能夠使用HDFS的API使用的數據。
在BLOB存儲的數據能夠通過HDFS API或通過Blob存
儲的REST API來訪問。因此,一組應用程序(包含其它HDInsight簇)和工具較大能夠用來產生和消耗的數據。
?數據歸檔:在Blob存儲中存儲的數據能夠用於計算的HDInsight集群被安全地刪除。而不會丟失用戶數據。
?數據存儲成本:存儲在DFS的數據為長期比存儲在Blob存儲數據更昂貴。因為計算集群的成本比一個BLOB存儲容器的成本較高。另外,因為該數據不必又一次載入為每個計
算集群的產生,要保存的數據載入成本。
?彈性向外擴展:在HDFS提供了一個向外擴展的文件系統。規模是由節點的數量來確定,你準備為你的集群。更改比例能夠成為一個更復雜的過程不是依賴於你自己主動獲得
BLOB存儲的彈性擴展能力。
?地理復制:您的Blob存儲容器。能夠通過在Azure門戶地緣復制。盡管這給你的地理恢復和數據冗余。故障切換到地理復制的位置會嚴重影響你的表現,並可能產生額外的
費用。因此,我們的建議是選擇地域復制明智且僅當數據的價值是值得的額外費用。
某些MapReduce工作和包可能產生的中間結果,你真的不希望存儲在BLOB存儲容器。在這樣的情況下,你仍然能夠選擇將數據存儲在本地HDFS。
其實,HDInsight使用DFS幾
這些中間結果Hive工作等過程。
準備一個容器BLOB存儲
要使用的blob,首先要創建一個Azure存儲賬戶。作為當中的一部分,您指定Azure中數據中心,將存儲創建使用此帳戶的對象。
集群和存儲帳戶必須駐留在同一個數據中心
(Hivemetastore SQL數據庫和Oozie的metastore SQL數據庫也必須位於同一個數據中心)。不管是生活,你創建的每個斑點是屬於一些容器中的存儲帳戶。
這樣的容器能夠
是HDInsight之外創建的現有一滴儲存容器中。或它能夠是一個HDInsight群集所創建的容器。
創建使用管理門戶的Blob容器HDInsight
當供應來自Azure管理門戶的HDInsight群集時,有兩種選擇:高速創建和自己定義創建。高速創建選項須要預先創建的Azure存儲賬戶。有關說明,請參閱怎樣創建一個存儲
帳戶。
使用高速創建選項,你能夠選擇一個現有的存儲帳戶。提供過程將創建一個新的容器具有同樣名稱的HDInsight群集名稱。假設具有同樣名稱的容器已經存在, - 將被使用
。
比如,myHDIcluster-1。此容器被用作默認文件系統。
使用自己定義創建,你的默認存儲帳戶下列選項之中的一個:
?利用現有的存儲
?創建新的存儲
?從還有一個訂閱使用存儲。
您還能夠創建自己的的Blob容器或使用現有的選項。
創建使用Azure中PowerShell的一個容器。
Azure中的PowerShell能夠用來創建的Blob容器。
以下是一個演示例子PowerShell腳本:
$subscriptionName = "<SubscriptionName>" # Azure subscription name $storageAccountName = "<AzureStorageAccountName>" # The storage account that you will create $containerName="<BlobContainerToBeCreated>" # The Blob container name that you will create # Connect to your Azure account and selec the current subscription Add-AzureAccount # The connection will expire in a few hours. Select-AzureSubscription $subscriptionName #only required if you have multiple subscriptions # Create a storage context object $storageAccountkey = get-azurestoragekey $storageAccountName | %{$_.Primary} $destContext = New-AzureStorageContext -StorageAccountName $storageAccountName -StorageAccountKey $storageAccountKey # Create a Blob storage container New-AzureStorageContainer -Name $containerName -Context $destContext
在BLOB存儲的文件地址
對於BLOB存儲訪問文件的URI方案是:
wasb[S]://<BlobStorageContainerName>@ <StorageAccountName>.blob.core.windows.net/<路徑>
註意:
語法尋址存儲模擬器(上HDInsight模擬器中執行)的文件是wasb://<容器名稱>@storageemulator。
URI方案提供了未加密的訪問與wasb:前綴,並用SSL加密wasbs訪問。
我們建議使用wasbs盡可能訪問數據。生活在同一Azure中數據中心內部,即使。
在<BlobStorageContainerName>標識的Blob存儲容器的名稱。在<StorageAccountName>標識Azure存儲帳戶名稱。一個全然合格的域名稱(FQDN)是必需的。
假設沒有<BlobStorageContainerName>和<StorageAccountName>已指定,則默認的文件系統使用。
對於默認的文件系統上的文件,你能夠使用相對路徑或絕對路徑。
比如,
附帶HDInsight集群Hadoop的MapReduce的examples.jar文件能夠被稱為使用下列操作之中的一個:
wasb:[email protected]/example/jars/hadoop-mapreduce-examples.jar wasb:///example/jars/hadoop-mapreduce-examples.jar /example/jars/hadoop-mapreduce-examples.jar
註意:
文件名稱是在HDInsight群集版本號1.6和2.1 Hadoop的examples.jar。
在<path>是文件或文件夾的HDFS路徑名。
因為BLOB存儲容器僅僅是一個key-value存儲,沒有真正的分級文件系統。 A“/”裏面的一個blob鍵被解釋為一個文件夾分隔符。
比如,為
的hadoop-mapreduce的-examples.jar團塊名稱是:
比如:jars/hadoop-mapreduce-examples.jar
使用Azure中的PowerShell訪問BLOB
請參閱安裝並在安裝和工作站上配置Azure中 PowerShell中配置Azure中 PowerShell的信息。您能夠使用Azure中PowerShell控制臺窗體或PowerShell_ISE執行的
PowerShell cmdlets。
使用以下命令列出的blob相關的cmdlet:
Get-Command *blob*
PowerShell的例子上傳文件
見上傳數據到HDInsight。
PowerShell的樣品下載文件
以下以腳本下載一個塊BLOB到當前文件夾。
在執行腳本之前,將文件夾更改到您具有寫入權限的文件夾。
$storageAccountName = "<AzureStorageAccountName>" # The storage account used for the default file system specified at provision. $containerName = "<BlobStorageContainerName>" # The default file system container has the same name as the cluster. $blob = "example/data/sample.log" # The name of the blob to be downloaded. # Use Add-AzureAccount if you haven‘t connected to your Azure subscription #Add-AzureAccount # The connection is good for 12 hours # Use these two commands if you have multiple subscriptions #$subscriptionName = "<SubscriptionName>" #Select-AzureSubscription $subscriptionName Write-Host "Create a context object ... " -ForegroundColor Green $storageAccountKey = Get-AzureStorageKey $storageAccountName | %{ $_.Primary } $storageContext = New-AzureStorageContext -StorageAccountName $storageAccountName -StorageAccountKey $storageAccountKey Write-Host "Download the blob ..." -ForegroundColor Green Get-AzureStorageBlobContent -Container $ContainerName -Blob $blob -Context $storageContext -Force Write-Host "List the downloaded file ..." -ForegroundColor Green cat "./$blob"
PowerShell的例子。用於刪除一個文件
以下的腳本說明怎樣刪除一個文件。 $ storageAccountName=“”#用於在提供指定的默認文件系統的存儲帳戶。
$容器名稱=“”#默認的文件系統容器具有同樣的名稱作為
集群。 $ BLOB=“為例/數據/ sample.log”#BLOB的名字被下載。
# Use Add-AzureAccount if you haven‘t connected to your Azure subscription #Add-AzureAccount # The connection is good for 12 hours # Use these two commands if you have multiple subscriptions #$subscriptionName = "<SubscriptionName>" #Select-AzureSubscription $subscriptionName Write-Host "Create a context object ... " -ForegroundColor Green $storageAccountKey = Get-AzureStorageKey $storageAccountName | %{ $_.Primary } $storageContext = New-AzureStorageContext -StorageAccountName $storageAccountName -StorageAccountKey $storageAccountKey Write-Host "Delete the blob ..." -ForegroundColor Green Remove-AzureStorageBlob -Container $containerName -Context $storageContext -blob $blob
PowerShell的例子文件夾中的文件列表
以下的腳本顯示了怎樣在一個“文件夾”列表中的文件。
接下來的演示例子顯示了怎樣使用Invoke-Hivecmdlet來執行DFS ls命令列出文件夾。
$storageAccountName = "<AzureStorageAccountName>" # The storage account used for the default file system specified at provision. $containerName = "<BlobStorageContainerName>" # The default file system container has the same name as the cluster. $blobPrefix = "example/data/" # Use Add-AzureAccount if you haven‘t connected to your Azure subscription #Add-AzureAccount # The connection is good for 12 hours # Use these two commands if you have multiple subscriptions #$subscriptionName = "<SubscriptionName>" #Select-AzureSubscription $subscriptionName Write-Host "Create a context object ... " -ForegroundColor Green $storageAccountKey = Get-AzureStorageKey $storageAccountName | %{ $_.Primary } $storageContext = New-AzureStorageContext -StorageAccountName $storageAccountName -StorageAccountKey $storageAccountKey Write-Host "List the files in $blobPrefix ..." Get-AzureStorageBlob -Container $containerName -Context $storageContext -prefix $blobPrefix
PowerShell的例子用於訪問沒有定義的存儲帳戶
此演示例子顯示了怎樣列出從沒有在規定的過程定義的存儲帳戶的文件夾。 $ CLUSTERNAME=“”
$undefinedStorageAccount = "<UnboundedStorageAccountUnderTheSameSubscription>" $undefinedContainer = "<UnboundedBlobContainerAssociatedWithTheStorageAccount>" $undefinedStorageKey = Get-AzureStorageKey $undefinedStorageAccount | %{ $_.Primary } Use-AzureHDInsightCluster $clusterName $defines = @{} $defines.Add("fs.azure.account.key.$undefinedStorageAccount.blob.core.windows.net", $undefinedStorageKey) Invoke-Hive -Defines $defines -Query "dfs -ls wasb://$undefinedContainer@$undefinedStorageAccount.blob.core.windows.net/;"
接下來的步驟
在本文中。您了解了怎樣使用與HDInsight的Blob存儲和BLOB存儲是HDInsight的一個基本組成部分。這使您能夠構建可擴展的。長期歸檔的數據採集解決方式,Azure中
Blob存儲和使用HDInsight解鎖存儲的數據內的信息。
要了解很多其它信息,請參閱以下文章:
?開始使用Azure中HDInsight入門
?上傳數據到HDInsight
?使用Hive與HDInsight
?使用Pig用HDInsight
本文翻譯自Microsoft Azure官網:http://azure.microsoft.com/en-us/documentation/articles/hdinsight-use-blob-storage/
在HDInsight中從Hadoop的兼容BLOB存儲查詢大數據的分析