我是一个新手。我创建了一个集群并ssh到主节点。当我尝试将文件从s3:// my-bucket-name /复制到pig中的本地文件:// home / hadoop文件夹时使用:
cp s3://my-bucket-name/path/to/file file://home/hadoop
我收到错误:
2013-06-08 18:59:00,267 [main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 29 99:意外的内部错误。必须将AWS Access Key ID和Secret Access Key指定为用户名或密码 (分别)s3 URL,或者设置fs.s3.awsAccessKeyId或 fs.s3.awsSecretAccessKey属性(分别)。
我甚至不能进入我的s3桶。我没有成功设置AWS_ACCESS_KEY和AWS_SECRET_KEY。另外,我无法找到pig的配置文件来设置相应的字段。
请帮忙吗?
编辑: 我尝试使用完整的s3n:// uri
在pig中加载文件grunt> raw_logs = LOAD 's3://XXXXX/input/access_log_1' USING TextLoader a
s (line:chararray);
grunt> illustrate raw_logs;
我收到以下错误:
2013-06-08 19:28:33,342 [主要] INFO org.apache.pig.backend.hadoop.executionengi ne.HExecutionEngine - 连接到hadoop文件系统:file:/// 2013-06-08 19:28:33,404 [主要] INFO org.apache.pig.backend.hadoop.executionengi ne.mapReduceLayer.MRCompiler - 文件级联阈值:100 乐观? fal se 2013-06-08 19:28:33,404 [main] INFO org.apache.pig.backend.hadoop.executionengi ne.mapReduceLayer.MultiQueryOptimizer - 之前的MR计划大小 优化:1 2013-06-08 19:28:33,405 [主要]信息 org.apache.pig.backend.hadoop.executionengi ne.mapReduceLayer.MultiQueryOptimizer - 之后的MR计划大小 优化:1 2013-06-08 19:28:33,405 [主要]信息 org.apache.pig.tools.pigstats.ScriptState - Pig脚本设置 加入工作2013-06-08 19:28:33,429 [主要] INFO org.apache.pig.backend.hadoop.executionengi ne.mapReduceLayer.JobControlCompiler - mapred.job.reduce.markreset.buffer.percen t未设置,设置为默认值 0.3 2013-06-08 19:28:33,430 [main] ERROR org.apache.pig.pen.ExampleGenerator - 读取数据时出错。内部 创建作业配置时出错。 java.lang.RuntimeException:内部 创建作业配置时出错。 at org.apache.pig.pen.ExampleGenerator.getExamples(ExampleGenerator.java :160) 在org.apache.pig.PigServer.getExamples(PigServer.java:1244) 在org.apache.pig.tools.grunt.GruntParser.processIllustrate(GruntParser。 Java的:722) 在org.apache.pig.tools.pigscript.parser.PigScriptParser.Illustrate(PigS criptParser.java:591) at org.apache.pig.tools.pigscript.parser.PigScriptParser.parse(PigScript Parser.java:306) 在org.apache.pig.tools.grunt.GruntParser.parseStopOnError(GruntParser.j) AVA:189) 在org.apache.pig.tools.grunt.GruntParser.parseStopOnError(GruntParser.j) AVA:165) 在org.apache.pig.tools.grunt.Grunt.run(Grunt.java:69) 在org.apache.pig.Main.run(Main.java:500) 在org.apache.pig.Main.main(Main.java:114) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl。 Java的:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces sorImpl.java:25) 在java.lang.reflect.Method.invoke(Method.java:597) 在org.apache.hadoop.util.RunJar.main(RunJar.java:187)2013-06-08 19:28:33,432 [main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 29 97:遇到IOException。例外:创建作业配置的内部错误。日志文件的详细信息: /home/hadoop/pig_1370719069857.log
答案 0 :(得分:7)
首先,您应该使用s3n协议(除非您使用s3协议将文件存储在s3上) - s3用于块存储(即类似于hdfs,仅用于s3),s3n用于本机s3文件系统(即你得到你在那里看到的东西)。
您可以使用scp中的distcp或简单的猪负载。您可以提供访问权限和在您获得的异常中指定的hadoop-site.xml中的秘密(有关详细信息,请参阅此处:http://wiki.apache.org/hadoop/AmazonS3),或者您可以将它们添加到uri:
raw_logs = LOAD 's3n://access:secret@XXXXX/input/access_log_1' USING TextLoader AS (line:chararray);
确保你的秘密不包含反斜杠 - 否则它将无效。
答案 1 :(得分:3)
cp
cp s3://my-bucket-name/path/to/file file://home/hadoop
不知道S3。
您可能想要使用:
s3cmd get s3://some-s3-bucket/some-s3-folder/local_file.ext ~/local_dir/
不确定为什么s3cmd cp ...
没有做它需要做的事情,但s3cmd get ...
有效。
而且man s3cmd
有:
s3cmd get s3://BUCKET/OBJECT LOCAL_FILE
Get file from bucket
答案 2 :(得分:1)
我遇到了这个完全相同的错误,最后点击了解决方案。但是,我一次改变了两件事,所以我不确定两者是否都是必需的(当然其中之一是)。
首先,我确保我的S3数据和我的EMR系统位于同一区域。当我遇到这个问题时,我的数据在美国东部,EMR在美国西部。我标准化了美国东部(弗吉尼亚州),a.k.a。us-east-1,a.k.a美国标准,a.k.a。DEFAULT,a.k.a。N. Virginia。这可能不是必需的,但并没有受到伤害。
其次,当我收到错误时,我按照其中一个视频中的步骤启动了猪,并给它一个“-x local”选项。事实证明,“-x local”似乎可以防止访问s3(见下文)。
解决方案是没有参数的启动猪。
我希望这会有所帮助。
吉尔
hadoop@domU-12-31-39-09-24-66:~$ pig -x local
2013-07-03 00:27:15,321 [main] INFO org.apache.pig.Main - Apache Pig version 0.11.1-amzn (rexported) compiled Jun 24 2013, 18:37:44
2013-07-03 00:27:15,321 [main] INFO org.apache.pig.Main - Logging error messages to: /home/hadoop/pig_1372811235317.log
2013-07-03 00:27:15,379 [main] INFO org.apache.pig.impl.util.Utils - Default bootup file /home/hadoop/.pigbootup not found
2013-07-03 00:27:15,793 [main] INFO org.apache.pig.backend.hadoop.executionengine.HExecutionEngine -
Connecting to hadoop file system at: file:///
grunt> ls s3://xxxxxx.xx.rawdata
2013-07-03 00:27:23,463 [main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 2999: Unexpected internal error. AWS Access Key ID and
Secret Access Key must be specified as the username or password (respectively) of a s3 URL, or by setting the fs.s3.awsAccessKeyId
or fs.s3.awsSecretAccessKey properties (respectively).
Details at logfile: /home/hadoop/pig_1372811235317.log
grunt> quit
hadoop@domU-12-31-39-09-24-66:~$ pig
2013-07-03 00:28:04,769 [main] INFO org.apache.pig.Main - Apache Pig version 0.11.1-amzn (rexported) compiled Jun 24 2013, 18:37:44
2013-07-03 00:28:04,771 [main] INFO org.apache.pig.Main - Logging error messages to: /home/hadoop/pig_1372811284764.log
2013-07-03 00:28:04,873 [main] INFO org.apache.pig.impl.util.Utils - Default bootup file /home/hadoop/.pigbootup not found
2013-07-03 00:28:05,639 [main] INFO org.apache.pig.backend.hadoop.executionengine.HExecutionEngine -
Connecting to hadoop file system at: hdfs://10.210.43.148:9000
2013-07-03 00:28:08,765 [main] INFO org.apache.pig.backend.hadoop.executionengine.HExecutionEngine - Connecting to map-reduce job tracker at: 10.210.43.148:9001
grunt> ls s3://xxxxxx.xx.rawdata
s3://xxxxxx.xx.rawdata/rawdata<r 1> 19813
s3://xxxxxx.xx.rawdata/rawdata.csv<r 1> 19813
grunt>