【问题标题】:Copy files from local to HDFS in alphabetical order - Sort按字母顺序将文件从本地复制到 HDFS - 排序
【发布时间】:2018-02-03 02:55:22
【问题描述】:

我需要通过 shell 脚本将文件从本地文件系统复制到 HDFS。假设我的本地系统中有两个文件

fewInfo.tsv.gz
fewInfo.txt

在上述情况下,应先将fewInfo.tsv.gz(s在x之前)复制到HDFS,然后再复制fewInfo.txt。这可能吗?

有人知道当多个文件被复制到 HDFS 时“put”命令如何工作的内部结构吗?

我使用的 Hadoop 版本是 Hadoop 2.5.0-cdh5.3.1。

【问题讨论】:

    标签: shell hadoop copy hdfs


    【解决方案1】:

    您可以遍历目录以查找所有文件,对文件进行排序,然后执行 hdfs 复制。好处是您可以指定排序的约束(例如,按文件名、日期、顺序等)。有很多选项可以执行此操作。一种是使用 find 命令:

    find /some/directory -type f -maxdepth 1 -type f | sort | while IFS= read -r filename; do hdfs dfs -copyFromLocal "$filename" hdfs://target/dir/; done
    
    • -maxdepth 1 参数防止 find 递归下降到任何子目录。 (如果您希望处理此类嵌套目录,可以省略它。)
    • -type -f 指定只处理普通文件。
    • sort 定义找到的文件将被排序。在这里,您可以按逆序、修改日期排序等进行扩展。
    • while IFS= read -r filename 循环遍历找到的文件。 IFS 在该循环中是为了保留前导和尾随空格。 -r 选项可防止 read 将反斜杠视为特殊字符。
    • hdfs dfs -copyFromLocal "$filename" hdfs://target/dir/ 获取排序后的 filenames 并将它们从本地目录复制到 hdfs 目录。或者,您也可以使用hadoop -fs put "$filename" hdfs://target/dir/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多