我无法从交互式 pig 作业流(hadoop、elastic map Reduce)读取 S3 上的简单测试文件,但我不知道原因。
我有两个 S3 存储桶。我们将它们称为unmounted_bucket
、 和mounted_bucket
。这两个存储桶最初都是通过 AWS Web 界面创建的(如果重要的话)。
我有一个正在运行的 EC2 Linux 实例,其下安装了 mounted_bucket /mnt/s3drive
。
我有一个名为的测试文件threecolumntest.txt
,其中包含以下测试数据(实际上是制表符分隔的):
col1 col2 col3
one two three
four five six
seven eight nine
unmounted_bucket
我在和中都有这个文件mounted_bucket
。我通过AWS S3 Web界面(管理控制台)将其上传到每个存储桶。
从交互式工作流程(我正在使用PuTTY),我可以毫无问题地运行以下命令:
A = load 's3://unmounted_bucket/threecolumntest.txt' using PigStorage() as (c1: chararray, c2: chararray, c3: chararray);
illustrate A
输出符合预期。
但是,如果我运行相同的命令,但指向另一个存储桶,则会出现错误。
A = load 's3://mounted_bucket/threecolumntest.txt' using PigStorage() as (c1: chararray, c2: chararray, c3: chararray);
illustrate A
[main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 2997: Encountered IOException. Exception : Internal error creating job configuration.
我通过 Web 界面检查,每个存储桶都具有相同的权限(据我所知)。这绝对超出了我的能力范围,所以我不确定是什么原因造成的,或者我接下来应该检查什么。我想知道这是否与安装一个存储桶有关(如果是,为什么?),因为这使用的是同一个文件,我使用 AWS Web UI 将文件上传到两个存储桶。此时安装部分似乎是区别所在。也许我遗漏了其他东西?
答案1
尝试使用 s3n:// 而不是 s3:// 。s3n 是 s3 本机文件系统,s3 是块文件系统(类似于 hdfs,但不允许您简单地读取除 Hadoop 的 s3 协议之外的任何人简单地存储在 S3 中的文件)。