【问题标题】:Deduce the HDFS path at runtime on EMR在 EMR 上推导运行时的 HDFS 路径
【发布时间】:2017-04-21 17:34:38
【问题描述】:

我已经使用 s3-dist-cp 将文件从 S3 复制到 HDFS 和反之亦然的 EMR 步骤生成了一个 EMR 集群。 该集群是按需集群,因此我们不会跟踪 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 在 org.apache.hadoop.security.SecurityUtil.buildTokenService(SecurityUtil.java:378) 在 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) 在 org.apache.hadoop.hdfs.DistributedFileSystem.initialize(DistributedFileSystem.java:149) 在 org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2717) 在 org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:93) 在 org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:2751) 在 org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:2733) 在 org.apache.hadoop.fs.FileSystem.get(FileSystem.java:377) 在 org.apache.hadoop.fs.Path.getFileSystem(Path.java:295) 在 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.runNewReducer(ReduceTask.java:635) 在 org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:390) 在 org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:164) 在 java.security.AccessController.doPrivileged(本机方法) 在 javax.security.auth.Subject.doAs(Subject.java:422) 在 org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1698) 在 org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158) 引起:java.net.UnknownHostException: sample.txt

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

【问题讨论】:

  • 为什么不直接使用 EMRFS 并查看 HDFS S3 直接挂载点?通常这样的错误可能是由地区引起的。
  • 您可以尝试不带 s3EndPoint 参数运行命令吗,如果帐户中指定了端点,则传输总是通过端点进行。如果这也不起作用,请尝试使用 hadoop distcp 一次。
  • @Chirag :我们试过了,但没用。

标签: amazon-web-services amazon-emr s3distcp


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2018-02-18
    • 2020-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-08
    • 1970-01-01
    • 1970-01-01
    • 2012-07-27
    相关资源
    最近更新 更多