filealreadyexistsexception发生在我使用AmazonEMR上的hive引擎从presto导出数据时

x8diyxa7  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(343)

我尝试在amazon emr上使用带有hive引擎的presto(如etl)将数据从s3 bucket导出到其他s3 bucket,但在导出数据时发生filealreadyexistsexception。如何使用presto导出数据?

环境

电子病历-4.3.0
Hive1.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
5m1hhzi4

5m1hhzi41#

这是由于presto hive连接器不喜欢符号链接造成的 /tmp/ emr(4.2和4.3)用于 hive.s3.staging-directory ,可以使用配置api覆盖 hive.s3.staging-directory 设置为 /mnt/tmp/ ,如下所示:

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

ltqd579y2#

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

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

相关问题