FileAlreadyExistsException 发生在我在 Amazon EMR 上使用 Hive 引擎从 Pre



我尝试使用 Presto 和 Amazon EMR 上的 Hive 引擎(如 ETL)将数据从 S3 存储桶导出到其他 S3 存储桶,但在导出数据时发生了 FileAlreadyExistsException。如何使用 Presto 导出数据?

环境

  • EMR-4.3.0
  • 蜂巢 1.0.0
  • 普雷斯托沙盒 0.130

错误

我尝试了以下操作:

$ hive
hive> CREATE EXTERNAL TABLE logs(log string)
   -> LOCATION 's3://foo-bucket/logs/';
hive> CREATE EXTERNAL TABLE s3_export(log string)
   -> ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
   -> LOCATION 's3://foo-bucket/export/';
hive> exit;
$ presto-cli --catalog hive --schema default
presto:default> INSERT INTO s3_export SELECT log FROM logs;
Query 20160203_125741_00018_ba5sw, FAILED, 3 nodes
Splits: 7 total, 1 done (14.29%)
0:01 [39 rows, 4KB] [49 rows/s, 5.13KB/s]
Query 20160203_125741_00018_ba5sw failed: java.nio.file.FileAlreadyExistsException: /tmp

这是由于Presto Hive连接器不喜欢EMR(4.2和4.3)用于hive.s3.staging-directory /tmp/符号链接引起的,您可以使用配置API覆盖hive.s3.staging-directory并将其设置为/mnt/tmp/,如下所示:

classification=presto-connector-hive,properties=[hive.s3.staging-directory=/mnt/tmp/]

我已经通过以下命令解决了这个问题:

presto-cli --catalog hive --schema default --execute 'select log from logs' | aws s3 cp - s3://foo-bucket/export/data.txt

相关内容

  • 没有找到相关文章

最新更新