我在HDinsight上使用Hive,我想将作业的输出存储在Azure存储(blob)中。我试过了
INSERT OVERWRITE DIRECTORY 'wasb://mycontainer@myaccount.blob.core.windows.net/'
SELECT name, COUNT(*) as count FROM test
GROUP BY name
ORDER BY count DESC
但是这返回错误“错误:java.lang.RuntimeException:配置对象时出错”。你能帮我把作业的输出重定向到Azure blob存储吗?
答案 0 :(得分:1)
要指向Azure Blob存储,您需要使用wasb://
或wasbs://
uri前缀,例如:
INSERT OVERWRITE DIRECTORY 'wasb://mycontainer@myaccount.blob.core.windows.net/output' ...
本文有很多例子:http://azure.microsoft.com/en-us/documentation/articles/hdinsight-hadoop-use-blob-storage/
我认为你还需要在路径中提供一个目录。看起来INSERT OVERWRITE希望能够以root用户不允许的方式对目录进行操作。你能尝试一下:
INSERT OVERWRITE DIRECTORY 'wasb://mycontainer@myaccount.blob.core.windows.net/output'
SELECT name, COUNT(*) as count FROM test
GROUP BY name
ORDER BY count DESC;
另外,不要忘记使用;
终止表达式最后,如果以上操作不起作用,您是否可以通过运行确认您可以从Hive会话中访问相关存储帐户:
dfs -ls wasb://mycontainer@myaccount.blob.core.windows.net/;
答案 1 :(得分:0)
正如RickH之前提到的,你错过了两件事 - 容器名下的目录和SELECT语句后的半逗号。以下代码应该可以使用。
INSERT OVERWRITE DIRECTORY 'wasb://mycontainer@myaccount.blob.core.windows.net/2'
SELECT name, COUNT(*) as count FROM test
GROUP BY name
ORDER BY count DESC;