将hadoop fs路径转换为emr上的hdfs://路径

mnowg1ta  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(672)

我想知道如何将数据从emr集群的hdfs文件系统移动到s3存储桶。我知道我可以在spark中直接编写s3,但原则上,以后也应该直接编写,到目前为止,我还没有发现这在实践中是正确的。
aws文件建议 s3-dist-cp 用于在hdfs和s3之间移动数据。的文档 s3-dist-cp 声明hdfs源应以url格式指定,即。, hdfs://path/to/file . 到目前为止,我已经使用 hadoop fs -get ,其语法为 path/to/file 而不是 hdfs://path/to/file . 目前尚不清楚如何在两者之间绘制Map。
我正在从ssh工作到主节点。我尝试了以下方法,每种方法都有两个和三个斜杠: hdfs:///[public IP]/path/to/file hdfs:///[public IP]:8020/path/to/file hdfs:///localhost/path/to/file hdfs:///path/to/file /path/to/file (和许多变体)
在每种情况下,我的命令的格式都符合以下文档:
s3距离cp—srchdfs://... --目的地:我的桶/目的地
我试过使用单个文件和整个目录。在每种情况下,我都会得到一个错误,即源文件不存在。我做错什么了?

iszxjhcz

iszxjhcz1#

相对和/或非完全限定路径将根据默认文件系统(在core-site.xml中配置为fs.defaultfs,在emr中默认为hdfs)和当前工作目录(默认为/user/)自动解析为完全限定路径。
在emr上,像/path/to/file这样的绝对路径等价于hdfs:///path/to/file。类似path/to/file的相对路径解析为hdfs:///user/hadoop/path/to/file(假设您作为hadoop用户运行命令)。
在hdfs://paths中遇到“file not found”错误的原因是(对于大多数示例)主机名放错了位置,因为主机名前面有太多的斜杠。如果包含主机名,则在它前面应该只有两个斜杠。但实际上不需要包含主机名,因此还可以将hdfs:///path/写入/file(一行中有三个斜杠表示将使用默认主机名。)在大多数示例中,由于有三个斜杠并包含了主机名,所以主机名是路径的一部分,而不是主机名。
在第四个示例(hdfs:///path/to/file)中,该路径实际上是一个有效路径,但它与path/to/file(相对路径)引用的内容不同。与上面提到的类似,/path/to/file相当于hdfs:///path/to/file,而path/to/file相当于hdfs:///user/hadoop/path/to/file。
顺便说一下,如果您使用主机名,我很确定您需要使用私有主机名,而不是公共ip(不过,您也可以完全不使用主机名,只需在一行中使用三个斜杠来表示不包括主机名。)我建议不要使用主机名,因为这样一来,在其他集群上运行命令时,您就需要更改路径。
最后,“hadoopfs-get”只采用非uri样式的路径,而s3distcp只采用uri样式的路径,这并不完全正确。这两种方法中的任何一种都可以采用任何一种方式。”hadoop fs-get/path/to/file”和“hadoop fs-get hdfs:///path/to/file”都是有效的和等效的。

相关问题