【问题标题】:Error Mapping HDFS files to an external drive将 HDFS 文件映射到外部驱动器时出错
【发布时间】:2017-01-14 14:33:37
【问题描述】:

我想在 hadoop-2.7.3 中创建一个物理上驻留在外部 (usb-thumb) 驱动器上的文件夹,我的想法是我 -copyFromLocal 的任何文件都将驻留在拇指驱动器上。同样,来自 hadoop 的任何输出文件也会转到外部驱动器:

mkdir /media/usb
mount /dev/sdb1 /media/usb
hdfs dfs -mkdir /media/usb/test  
hdfs dfs -copyFromLocal /media/source/input.data /media/usb/test
hadoop jar share/hadoop/tools/lib/hadoop-streaming-*.jar \
     -input  /media/usb/test/input.data \
     -output /media/usb/test/output.data

但是当我尝试创建上面的文件夹时,我没有收到这样的文件/文件夹错误。它只有在我将文件夹设置为 hadoop 本地时才有效:

hdfs dfs -mkdir /test  
hdfs dfs -copyFromLocal /media/source/input.data /test

不幸的是,这会将输入数据文件放置在与 hadoop 安装相同的驱动器上,该驱动器几乎已满。有没有办法制作/映射 HDFS 文件夹,以便从 hadoop 驱动器以外的驱动器读取/写入?

【问题讨论】:

    标签: hadoop hadoop2


    【解决方案1】:

    您尝试做的事情是不可能的!它违背了分布式存储和处理的整个想法。

    当您执行 copyFromLocal 时,文件会从您的本地转移到 HDFS 位置(由 hadoop 管理)。您可以将新驱动器添加为 HDFS 数据节点,但可能不需要将文件移动到该驱动器。

    如果空间是您唯一的限制,则将新驱动器添加为数据节点并重新平衡集群。


    添加新节点并在其上启动 datanode 服务后,使用以下方法平衡集群:

    hdfs balancer
          [-threshold <threshold>]
          [-policy <policy>]
          [-exclude [-f <hosts-file> | <comma-separated list of hosts>]]
          [-include [-f <hosts-file> | <comma-separated list of hosts>]]
          [-idleiterations <idleiterations>]
    

    参考:HDFS Balancer

    【讨论】:

    • 所以听起来有可能,但我首先必须在 hdfs-site.xml 中指定 USB 路径作为数据节点。格式化后(hdfs 'hdfs namenode -format),然后任何 'dfs -mkdir' 和 '-copyFromLocal' 命令都将使用外部驱动器,不是吗?或者您是说由于文件系统(即 FAT32 拇指驱动器)的差异,这将不起作用?
    • @ben 它不是那样工作的。首先在新驱动器(在任何操作系统上) 上安装 hadoop,然后将配置复制到它,然后启动该数据节点。发布这个你必须重新平衡集群。 注意:你的操作系统无关紧要,节点必须配置在同一个 hadoop 集群上,这才是最重要的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多