我一直在使用cloudera的hadoop(0.20.2)。在这个版本中,如果我将一个文件放入文件系统,但目录结构不存在,它会自动创建父目录:
例如,如果我在hdfs中没有目录并且键入:
hadoop fs-put myfile.txt/some/non/existing/path/myfile.txt
它将创建所有目录:some、non、existing和path,并将文件放在其中。
现在,随着hadoop(2.2.0)的更新,这种目录的自动创建不会发生。上面的相同命令产生:
put:`/some/non/existing/path/':没有这样的文件或目录
我有一个解决方法,只需为每个put首先执行hadoopfs-mkdir,但这不会有很好的性能。
这是可配置的吗?有什么建议吗?
3条答案
按热度按时间r8uurelv1#
将文件放入hdfs中不存在的目录需要两个步骤。如@rt vybor所述,使用mkdir的'-p'选项创建多个缺少的路径元素。但是由于op询问了如何将文件放入hdfs,下面还将执行hdfs put,注意您还可以(可选)检查put是否成功,并有条件地删除本地副本。
首先在hdfs中创建相关的目录路径,然后将文件放入hdfs中。在放入hdfs之前,您需要检查文件是否存在。您可能希望记录/显示文件已成功放入hdfs。以下是所有步骤的组合。
您可以将其转换为shell脚本,采用hadoop路径和文件列表(也只能创建一次路径),
wb1gzix02#
现在你应该用
hadoop fs -mkdir -p <path>
7hiiyaii3#
编辑注:警告此答案表示不正确
hadoop fs ...
已弃用,请改用:hdfs dfs -mkdir ....