我们正在尝试为多个Outlook帐户使用通用数据。假设数据存储在属于data@outlook.com的容器中,我想将其读作datasc1@outlook.com,我的朋友想从datasc2@outlook.com上读取。
我有共同帐户的存储帐户名,容器名称(公共容器),但是当我尝试使用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)。
提前致谢。
答案 0 :(得分:4)
如果只指向文件夹而不是特定文件,它是否有效? 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/';
我能够针对配置为"公共容器"的容器创建类似的外部表。
如果您不想使用公共容器,可以直接在Hive脚本中将存储密钥包含在配置变量中,如:
set fs.azure.account.key.storageaccount.blob.core.windows.net=ACCESS_KEY_OF_CONTAINER;
或者,您可以使用自定义创建向导的其他存储帐户部分在配置时配置群集,并使用存储帐户的访问权限,或使用Add-AzureHDInsightStorage cmdlet修改创建集群之前的集群配置。
本文提供了大量有关HDInsight与Azure Blob存储之间交互的相关信息:http://azure.microsoft.com/en-us/documentation/articles/hdinsight-hadoop-use-blob-storage/
答案 1 :(得分:2)
我通过在core-site.xml
中添加以下提到的属性解决了这个问题<property>
<name>fs.azure.account.key.<storage account name>.blob.core.windows.net</name>
<value><account key value></value>
</property>
现在,从 azure portal 转到存储帐户,并将访问类型更改为“容器”(默认情况下为“私有”)