gpt4 book ai didi

hadoop - 在本地模式下运行 Pig 0.14.0 时使用 S3 链接?

转载 作者:行者123 更新时间:2023-12-02 20:59:07 24 4
gpt4 key购买 nike

我在本地模式下运行 Pig 0.14。我在 S3 中的数据上运行简单的脚本。我想直接在这些脚本中引用这些文件,例如:

x = LOAD 's3://bucket/path/to/file1.json' AS (...);
// Magic happens
STORE x INTO 's3://bucket/path/to/file2.json';

但是,当我使用以下命令行时:

$PIG_HOME/bin/pig -x local -P $HOME/credentials.properties -f $HOME/script.pig

我收到以下错误:

Failed Jobs:
JobId Alias Feature Message Outputs
N/A mainplinks MAP_ONLY Message: org.apache.pig.backend.executionengine.ExecException: ERROR 2118: Input path does not exist: s3://bucket/path/to/file.json
at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigInputFormat.getSplits(PigInputFormat.java:279)
at org.apache.hadoop.mapred.JobClient.writeNewSplits(JobClient.java:962)
at org.apache.hadoop.mapred.JobClient.writeSplits(JobClient.java:979)
at org.apache.hadoop.mapred.JobClient.access$600(JobClient.java:174)
at org.apache.hadoop.mapred.JobClient$2.run(JobClient.java:897)
at org.apache.hadoop.mapred.JobClient$2.run(JobClient.java:850)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:422)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1121)
at org.apache.hadoop.mapred.JobClient.submitJobInternal(JobClient.java:850)
at org.apache.hadoop.mapred.JobClient.submitJob(JobClient.java:824)
at org.apache.hadoop.mapred.jobcontrol.Job.submit(Job.java:378)
at org.apache.hadoop.mapred.jobcontrol.JobControl.startReadyJobs(JobControl.java:247)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.pig.backend.hadoop20.PigJobControl.mainLoopAction(PigJobControl.java:157)
at org.apache.pig.backend.hadoop20.PigJobControl.run(PigJobControl.java:134)
at java.lang.Thread.run(Thread.java:748)
at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MapReduceLauncher$1.run(MapReduceLauncher.java:276)
Caused by: org.apache.hadoop.mapreduce.lib.input.InvalidInputException: Input path does not exist: s3://com.w2ogroup.analytics.soma.prod/airy/fb25b5c6/data/mainplinks.json
at org.apache.hadoop.mapreduce.lib.input.FileInputFormat.listStatus(FileInputFormat.java:235)
at org.apache.hadoop.mapreduce.lib.input.FileInputFormat.getSplits(FileInputFormat.java:252)
at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigInputFormat.getSplits(PigInputFormat.java:265)
... 20 more
file:/tmp/temp-948194340/tmp-48450066,

我可以确认 LOAD失败;我怀疑 STORE也会失败。 REGISTER S3 链接也失败。我可以确认 LOAD 引用的链接和 REGISTER存在, STORE 所指的链接不要,正如 pig 所期望的那样。

我已经解决了一些问题。例如,我将 jets3t-0.7.1 放到 $PIG_HOME/lib 中,这完全修复了由于存在 S3 链接而导致的运行时错误。此外,我提供了相关的 AWS key ,并且我可以确认这些 key 有效,因为我使用它们 AWSCLI 来完成相同的工作。

如果我使用 awscli 将文件复制到本地磁盘并重写链接以使用本地文件系统,一切正常。因此,我确信这个问题与 S3 相关。

如何说服 Pig 正确处理这些 S3 链接?

最佳答案

AFAIK,Pig 从 S3 读取的方式是通过 HDFS。此外,为了让 Pig 能够访问 HDFS,Pig 不能在本地运行。为了轻松设置非本地 Pig,我建议您启动 EMR cluster (我已经试过了)。

因此,首先您需要正确设置 HDFS 以从 S3 访问数据。
在您的 hdfs-site.xml 上配置,请确保为 fs.s3a 设置值键:

<property>
<name>fs.s3a.access.key</name>
<value>{YOUR_ACCESS_KEY}</value>
<description>AWS access key ID. Omit for Role-based authentication.</description>
</property>
<property>
<name>fs.s3a.secret.key</name>
<value>{YOUR_SECRET_KEY}</value>
<description>AWS secret key. Omit for Role-based authentication.</description>
</property>

不需要重新启动 HDFS 服务,但这样做并没有什么坏处。要重新启动服务,请运行 initctl list然后 sudo stop <service name according to initctl output> .

通过运行(注意 s3a 协议(protocol))验证您是否可以从 HDFS 访问 S3:
$ hdfs dfs -ls s3a://bucket/path/to/file
如果您没有收到错误,那么您现在可以在 Pig 中使用 S3 路径。在 MapReduce 或 Tez 模式下运行 Pig:
pig -x tez -f script.pigpig -x mapreduce -f script.pig .

https://community.hortonworks.com/articles/25578/how-to-access-data-files-stored-in-aws-s3-buckets.html

关于hadoop - 在本地模式下运行 Pig 0.14.0 时使用 S3 链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43701479/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com