如何使用不同的帐户将存储容器添加到 Azure?

How can I add a storage container to Azure with different account?

我们正在尝试为多个 Outlook 帐户使用一个通用数据。假设数据存储在属于 data@outlook.com 的容器中,我想将其读取为 datasc1@outlook.com,我的朋友想从 datasc2@[=​​32=].[=15 读取=]

我有普通帐户的存储帐户名称、容器名称(即 public 容器),但是当我尝试使用 Hive 使用以下命令读取数据时:

CREATE EXTERNAL TABLE deneme (t1 string, t2 string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '|' STORED AS TEXTFILE LOCATION 'wasb://container@storageaccount.blob.core.windows.net/OUR_DATA.txt';

或者我也尝试下面的命令

CREATE EXTERNAL TABLE deneme (t1 string, t2 string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '|' STORED AS TEXTFILE LOCATION 'wasb://container@storageaccount.blob.core.windows.net/OUR_DATA.txt?sig=ACCESS_KEY_OF_CONTAINER';

我收到以下错误:

FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException(message:Got exception: org.apache.hadoop.fs.azure.AzureException Uploads to to public accounts using anonymous access is prohibited.)

我们尝试了一些方法,我们将容器类型设置为“Public Blob”,但它不起作用。我们将我们的帐户添加到存储帐户默认目录,但它也不起作用。我尝试用 PIG 加载数据,它似乎可以工作,但是当我转储时,PIG 也失败了。

对我来说很奇怪的是,当我 运行 Hadoop 命令行下面的代码时,它运行得很好 :

hadoop fs -lsr wasb://container@storageaccount.blob.core.windows.net/

输出为:

lsr: DEPRECATED: Please use 'ls -R' instead.
-rwxrwxrwx   1  145391417 2015-05-18 10:58 wasb://container@storageaccount.blob.core.windows.net/OUR_DATA.txt
-rwxrwxrwx   1   25634418 2015-05-18 10:44 wasb://container@storageaccount.blob.core.windows.net/OUR_OTHER_DATA.txt

总结一下我们的问题是使用我们的 Azure 帐户从另一个 Azure 帐户读取数据,使用 HDInsight (Hive/PIG/Hadoop)。

如果您只指向文件夹而不是特定文件,是否有效? Hive 期望位置是文件夹路径,而不是特定文件。

CREATE EXTERNAL TABLE deneme (t1 string, t2 string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '|' 
STORED AS TEXTFILE
LOCATION 'wasb://container@storageaccount.blob.core.windows.net/';

我能够针对配置为 "Public Container" 的容器创建类似的外部 table。

如果您不想使用 public 容器,您可以直接在 Hive 脚本中将存储密钥包含在配置变量中,例如:

set fs.azure.account.key.storageaccount.blob.core.windows.net=ACCESS_KEY_OF_CONTAINER;

或者您可以使用自定义创建向导的 其他存储帐户 部分或使用 Add-AzureHDInsightStorage cmdlet 在创建集群之前修改集群配置。

这篇文章有一堆关于 HDInsight 和 Azure Blob Storage 交互的相关信息:http://azure.microsoft.com/en-us/documentation/articles/hdinsight-hadoop-use-blob-storage/

我通过在 core-site.xml

中添加下面提到的属性解决了这个问题
<property>
        <name>fs.azure.account.key.<storage account name>.blob.core.windows.net</name>
        <value><account key value></value>
</property>

现在,从 azure 门户 转到存储帐户并将访问类型更改为“容器”(默认情况下为“私人")