Hive 结果未保存到 S3 存储桶中
Posted
技术标签:
【中文标题】Hive 结果未保存到 S3 存储桶中【英文标题】:Hive results not being saved into S3 bucket 【发布时间】:2017-06-09 00:47:25 【问题描述】:我无法将 Hive 输出保存到 S3。我已经尝试ssh
ing 进入主节点并在 Hive 中运行我的命令,但它不保存输出。我还尝试从 AWS 的 EMR 控制台运行 Hue 中的命令,但它仍然没有保存到 S3。我还添加了脚本作为一个步骤,但它仍然没有保存。我能够获得结果的唯一方法是在 Hue 中运行它,然后单击查看结果并以这种方式下载,然后将它们推送到 S3。我不知道为什么会这样。这是我正在运行的查询。
with temp as (
select /*+ streamtable(l) */ a.id, a.name, a.page
from my_table a
join my_other_table l on (a.id = l.id)
group by a.page, a.id, a.name)
insert overwrite directory 's3://bucket/folder/folder2/folder3/folder4/folder5/folder6/folder7/'
select page, count(distinct id) over (PARTITION BY page)
from temp
group by page;
作为说明,我希望解决方案在添加步骤时起作用,因为我计划按顺序添加x
步骤数。
【问题讨论】:
【参考方案1】:我看到 Amazon EMR 输出到 Amazon S3 的正常方式是在 Amazon S3 中使用 CREATE EXTERNAL TABLE
发送到 LOCATION
。
例如:
CREATE EXTERNAL TABLE IF NOT EXISTS output_table
(gram string, year int, ratio double, increase double)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE
LOCATION 's3://my-bucket/directory';
然后,只需将INSERT
数据放入该表:
INSERT OVERWRITE TABLE output_table
SELECT gram FROM table...
【讨论】:
您提供的第一个 sn-p 代码从位置 S3 在 Hive 中创建了一个表,这是正确的,是的,这就是我从 S3 中的数据创建表的方式。我想从 Hive ----> S3 出发。据我所知,查询的前缀是insert overwrite directory
,后跟 S3 存储桶。
上述语法有效。您只需 INSERT 到表中,它就会被写入 S3。【参考方案2】:
我找到了解决办法。
问题是S3
位置中的斜杠,您希望覆盖的目录的基本路径应该不包含斜杠。
【讨论】:
以上是关于Hive 结果未保存到 S3 存储桶中的主要内容,如果未能解决你的问题,请参考以下文章
如何同时将视频上传到 s3 为其创建缩略图并使用 nodejs 将其保存到同一存储桶中的另一个文件夹中?