Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在EMR上将hadoop fs路径转换为hdfs://路径_Hadoop_Amazon S3_Emr_Amazon Emr - Fatal编程技术网

在EMR上将hadoop fs路径转换为hdfs://路径

在EMR上将hadoop fs路径转换为hdfs://路径,hadoop,amazon-s3,emr,amazon-emr,Hadoop,Amazon S3,Emr,Amazon Emr,我想知道如何将数据从EMR集群的HDFS文件系统移动到S3存储桶。我承认我可以在Spark中直接编写S3,但原则上,事后也应该很简单,到目前为止,我还没有发现这在实践中是正确的 AWS文件建议在HDFS和s3之间移动数据。fors3 dist cp声明HDFS源应以URL格式指定,即hdfs://path/to/file。到目前为止,我已经通过使用hadoop fs-get在HDFS和本地文件系统之间移动了数据,它的语法是path/to/file,而不是hdfs://path/to/file。目

我想知道如何将数据从EMR集群的HDFS文件系统移动到S3存储桶。我承认我可以在Spark中直接编写S3,但原则上,事后也应该很简单,到目前为止,我还没有发现这在实践中是正确的

AWS文件建议在HDFS和s3之间移动数据。for
s3 dist cp
声明HDFS源应以URL格式指定,即
hdfs://path/to/file
。到目前为止,我已经通过使用
hadoop fs-get
在HDFS和本地文件系统之间移动了数据,它的语法是
path/to/file
,而不是
hdfs://path/to/file
。目前尚不清楚如何在两者之间绘制地图

我正在从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://... --目的地s3://我的桶/目的地


我试过使用单个文件和整个目录。在每种情况下,我都会得到一个错误,即源文件不存在。我做错了什么?

根据默认文件系统(在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://路径中遇到“未找到文件”错误的原因是(在大多数示例中)主机名放错了位置,因为主机名前面的斜杠太多。如果包含主机名,则在其前面应该只有两个斜杠。不过,实际上不需要包含主机名,因此也可以编写hdfs:///path/to/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。(不过,您也可以完全不使用主机名,只需在一行中使用三个斜杠来表示未包含主机名。)我建议不要使用主机名,因为这样一来,您就需要在其他集群上运行该命令时随时更改路径


最后,“hadoop fs-get”只接受非uri样式的路径,而s3 dist cp只接受uri样式的路径,这一点并不完全正确。这两种方法中的任何一种都采用任何一种方式。“hadoop fs-get/path/to/file”和“hadoop fs-get”hdfs:///path/to/file“都是有效且等效的。

相对路径和/或非完全限定路径根据默认文件系统(在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://路径中遇到“未找到文件”错误的原因是(在大多数示例中)主机名放错了位置,因为主机名前面的斜杠太多。如果包含主机名,则在其前面应该只有两个斜杠。不过,实际上不需要包含主机名,因此也可以编写hdfs:///path/to/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。(不过,您也可以完全不使用主机名,只需在一行中使用三个斜杠来表示未包含主机名。)我建议不要使用主机名,因为这样一来,您就需要在其他集群上运行该命令时随时更改路径

最后,“hadoop fs-get”只接受非uri样式的路径,而s3 dist cp只接受uri样式的路径,这一点并不完全正确。这两种方法中的任何一种都采用任何一种方式。“hadoop fs-get/path/to/file”和“hadoop fs-get”hdfs:///path/to/file“都是有效的和等价的