2017-01-13 10 views
0

Я хочу создать папку в hadoop-2.7.3, которая физически находится на внешнем диске (usb-thumb), предполагая, что любой файл, который I -copyFromLocal, будет находиться на привод большого пальца. Точно так же любые выходные файлы из Hadoop также идет на внешний диск:Ошибка Отображение файлов HDFS на внешний диск

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?

ответ

0

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

Когда вы делаете copyFromLocal файл идет из вашего локального файла в место HDFS (который управляет hasoop). Вы можете добавить свой новый диск как 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 Balancer

+0

Так это звучит, как это возможно, но я первый должен укажите путь usb как datanode в hdfs-site.xml. После форматирования (hdfs 'hdfs namenode -format), то любые команды «dfs -mkdir» и «-copyFromLocal» будут использовать внешний диск, нет? Или вы говорите, что это не сработает из-за различий в файловой системе (т. Е. Флэш-накопитель FAT32)? – ben

+0

@ben это не работает. Сначала установите hasoop на новый диск _ (на любой ОС) _, затем скопируйте в него конфиги, а затем запустите этот узел данных. Поместите это, вам нужно просто перебалансировать кластер. ** Примечание: ваша ОС не имеет значения, узлы должны быть настроены так же, как и в том же кластере, что и все. ** –