【问题标题】:Hive results not being saved into S3 bucketHive 结果未保存到 S3 存储桶中
【发布时间】:2017-06-09 00:47:25
【问题描述】:

我无法将 Hive 输出保存到 S3。我已经尝试sshing 进入主节点并在 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 步骤数。

【问题讨论】:

    标签: hadoop amazon-s3 hive amazon-emr hue


    【解决方案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 位置中的斜杠,您希望覆盖的目录的基本路径应该包含斜杠。

    【讨论】:

      猜你喜欢
      • 2012-03-18
      • 2013-12-21
      • 2012-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-08
      • 2022-01-23
      • 1970-01-01
      相关资源
      最近更新 更多