在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://mycontainer@myaccount.blob.core.windows.net/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的例子上传文件
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/