首页 > 代码库 > 在HDInsight中从Hadoop的兼容BLOB存储查询大数据的分析

在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://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的样例上传文件

见上传数据到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存储查询大数据的分析