HDinsight 配置单元输出到 blob

HDinsight hive output to blob

我在 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

但是这返回了错误 "Error: java.lang.RuntimeException: Error in configuring object"。你能帮我把作业的输出重定向到 Azure blob 存储吗?

要指向 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 期望能够以根目录不允许的方式对目录进行操作。你能试试吗:

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/;

正如 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;