Ошибка сопоставления файлов HDFS с внешним диском

Я хочу сделать папку в hadoop-2.7.3, которая физически находится на внешнем (USB-thumb) диске, идея заключается в том, что любой файл, который я-copyFromLocal, будет находиться на thumb-диске. Аналогично любые выходные файлы из 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 install, который почти полон. Есть ли способ сделать / сопоставить папку HDFS так, чтобы она считывала/записывала с диска, отличного от диска hadoop?

1 ответ

  1. То, что вы пытаетесь сделать, невозможно! Он бросает вызов всей идее распределенного хранения и обработки.

    При выполнении A copyFromLocalфайл переходит из локального в расположение HDFS (которым управляет hadoop). Вы можете добавить новый диск в качестве HDFS DataNode, но не можете поручить файл для перемещения на него.

    Если единственным ограничением является пространство, добавьте новый диск в качестве datanode и заново сбалансируйте кластер.


    После добавления нового узла и запуска на нем службы 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