当我使用 Amazon EMR 上的 Hive 引擎从 Presto 导出数据时发生 FileAlreadyExistsException
FileAlreadyExistsException occurred when I was exporting data from Presto with Hive engine on Amazon EMR
我尝试使用 Presto 和 Amazon EMR 上的 Hive 引擎将数据从 S3 存储桶导出到其他 S3 存储桶,如 ETL,但在我导出数据时发生 FileAlreadyExistsException。
如何使用 Presto 导出数据?
环境
- emr-4.3.0
- 蜂巢 1.0.0
- Presto-沙盒 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-cli --catalog hive --schema default --execute 'select log from logs' | aws s3 cp - s3://foo-bucket/export/data.txt
这是由于 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/]
我尝试使用 Presto 和 Amazon EMR 上的 Hive 引擎将数据从 S3 存储桶导出到其他 S3 存储桶,如 ETL,但在我导出数据时发生 FileAlreadyExistsException。 如何使用 Presto 导出数据?
环境
- emr-4.3.0
- 蜂巢 1.0.0
- Presto-沙盒 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-cli --catalog hive --schema default --execute 'select log from logs' | aws s3 cp - s3://foo-bucket/export/data.txt
这是由于 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/]