将文件从s3://复制到本地文件系统

lokaqttq  于 2021-06-04  发布在  Hadoop
关注(0)|答案(3)|浏览(603)

我是aws新手。我创建了一个集群并用ssh连接到主节点。当我试图将文件从s3://my bucket name/复制到本地时file://home/hadoop pig中的文件夹使用:

cp s3://my-bucket-name/path/to/file file://home/hadoop

我得到一个错误:
2013-06-08 18:59:00267[main]error org.apache.pig.tools.grunt.grunt-错误29 99:意外的内部错误。aws access key id和secret access key必须分别指定为s3 url的用户名或密码,或者通过设置fs.s3.awsaccesskeyid或fs.s3.awssecretaccesskey属性来指定。
我甚至不能把它放进我的s3桶里。我设置了aws\u access\u密钥和aws\u secret\u密钥,但没有成功。我也找不到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:33342[main]info org.apache.pig.backend.hadoop.executionengi ne.hexecutionengine-连接到hadoop文件系统的位置:file:///2013-06-08 19:28:33404[main]info org.apache.pig.backend.hadoop.executionengi ne.mapreducelayer.mrcompiler-文件连接阈值:100?fal se 2013-06-08 19:28:33404[main]info org.apache.pig.backend.hadoop.executionengi ne.mapreducelayer.multiqueryoptimizer-优化前mr计划大小:1 2013-06-08 19:28:33405[main]info org.apache.pig.backend.hadoop.executionengi ne.mapreducelayer.multiqueryoptimizer-优化后mr计划大小:1 2013-06-08 19:28:33,405[main]info org.apache.pig.tools.pigstats.scriptstate-pig脚本设置已添加到作业2013-06-08 19:28:33429[main]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:创建作业配置时发生内部错误。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)上。java:591)位于org.apache.pig.tools.pigscript.parser.pigscriptparser.parse(pigscript解析器)。java:306)位于org.apache.pig.tools.grunt.gruntparser.parsestoponerror(gruntparser.java:189)位于org.apache.pig.tools.grunt.gruntparser.parsestoponerror(gruntparser.java: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)在sun.reflect.nativemethodaccessorimpl.invoke0(本机方法)在sun.reflect.nativemethodaccessorimpl.invoke(nativemethodaccessorimpl)。java:39)在sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl。java:25)在java.lang.reflect.method.invoke(方法。java:597)在org.apache.hadoop.util.runjar.main(runjar。java:187)2013-06-08 19:28:33432[main]错误org.apache.pig.tools.grunt.grunt-错误29 97:遇到ioexception。异常:在上创建作业配置时发生内部错误。日志文件中的详细信息:/home/hadoop/pig_.log

5tmbdcev

5tmbdcev1#

我经历了完全相同的错误,最终找到了解决方法。但是,我同时改变了两件事,所以我不确定这两件事是否都是必需的(当然其中一件是必需的)。
首先,我确定我的s3数据和emr系统在同一个区域。当我遇到这个问题时,我的数据在美国东部,电子病历在美国西部。我把美国东部(弗吉尼亚州)标准化了,又称美国东部-1,又称美国标准,又称美国违约,又称美国国家标准。弗吉尼亚。这可能不是必需的,但并不有害。
其次,当我得到错误时,我按照其中一个视频中的步骤启动pig,并给它一个“-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>
dba5bblo

dba5bblo2#

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
g6ll5ycj

g6ll5ycj3#

首先,您应该使用s3n协议(除非您使用s3协议将文件存储在s3上)-s3用于块存储(即,类似于hdfs,仅在s3上),s3n用于本机s3文件系统(即,您在那里看到的内容)。
您可以使用distcp或来自s3n的简单清管器负载。您可以在hadoop-site.xml中提供异常中指定的access&secret(有关更多信息,请参阅此处):http://wiki.apache.org/hadoop/amazons3),也可以将它们添加到uri:

raw_logs = LOAD 's3n://access:secret@XXXXX/input/access_log_1' USING TextLoader AS (line:chararray);

确保你的秘密不包含反斜杠-否则它不会工作。

相关问题