HDinsight hive输出到blob

时间:2015-05-13 22:43:34

标签: azure hadoop hive hdinsight

我在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存储吗?

2 个答案:

答案 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;