0

我已经使用 EMR 步骤生成了一个 EMR 集群,用于将文件从 S3 复制到 HDFS,反之亦然,使用 s3-dist-cp。这个集群是一个按需集群,所以我们不跟踪 ip。

第一个 EMR 步骤是: hadoop fs -mkdir /input - 此步骤已成功完成。

第二个 EMR 步骤是:以下是我正在使用的命令:

s3-dist-cp --s3Endpoint=s3.amazonaws.com --src=s3://<bucket-name>/<folder-name>/sample.txt --dest=hdfs:///input- 这一步失败了

我收到以下异常错误:

错误:java.lang.IllegalArgumentException: java.net.UnknownHostException: sample.txt at org.apache.hadoop.security.SecurityUtil.buildTokenService(SecurityUtil.java:378) at org.apache.hadoop.hdfs.NameNodeProxies.createNonHAProxy(NameNodeProxies .java:310) 在 org.apache.hadoop.hdfs.NameNodeProxies.createProxy(NameNodeProxies.java:176) 在 org.apache.hadoop.hdfs.DFSClient.(DFSClient.java:678) 在 org.apache.hadoop.hdfs .DFSClient.(DFSClient.java:619) at org.apache.hadoop.hdfs.DistributedFileSystem.initialize(DistributedFileSystem.java:149) at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2717) at org .apache.hadoop.fs.FileSystem.access$200(FileSystem.java:93) at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:2751) at org.apache.hadoop.fs.FileSystem$缓存。get(FileSystem.java:2733) at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:377) at org.apache.hadoop.fs.Path.getFileSystem(Path.java:295) at com.amazon .elasticmapreduce.s3distcp.CopyFilesReducer.reduce(CopyFilesReducer.java:213) 在 com.amazon.elasticmapreduce.s3distcp.CopyFilesReducer.reduce(CopyFilesReducer.java:28) 在 org.apache.hadoop.mapreduce.Reducer.run(Reducer.java :171) 在 org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:390) 在 org.apache.hadoop.mapred 的 org.apache.hadoop.mapred.ReduceTask.runNewReducer(ReduceTask.java:635)。 YarnChild$2.run(YarnChild.java:164) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAs(Subject.java:422) at org.apache.hadoop.security.UserGroupInformation .doAs(用户组信息.java:1698) 在 org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158) 引起:java.net.UnknownHostException:sample.txt

但是这个文件确实存在于 S3 上,我可以通过 EMR 上的 spark 应用程序读取它。

4

1 回答 1

1

解决方案是在使用 s3-dist-cp 时,不应在源和目标中提及文件名。

如果要过滤 src 目录中的文件,可以使用 --srcPattern 选项

例如:s3-dist-cp --s3Endpoint=s3.amazonaws.com --src=s3://// --dest=hdfs:///input/ --srcPattern=sample.txt.*

于 2017-04-26T18:14:25.897 回答