У меня есть функция оболочки, которая вызывается из моей функции карты. Функция оболочки принимает 2 параметра -> входной файл и выходной файл. Как то так
$> unix-binary /pathin/input.txt /pathout/output.txt
Проблема в том, что эти файлы input.txt находятся в HDFS, а файлы output.txt необходимо записать обратно в HDFS. В настоящее время я сначала копирую нужный файл с fs.copyToLocalFile
на локальный жесткий диск, вызываю двоичный файл unix, а затем записываю output.txt обратно в HDFS с fs.copyFromLocalFile
.
Проблема этого подхода заключается в том, что он не оптимален, поскольку включает в себя значительное количество избыточного чтения и записи на жесткий диск, что снижает производительность. Итак, мой вопрос, как я могу читать файл HDFS непосредственно в качестве ввода и выводить результаты непосредственно в HDFS?
очевидно,
$>unix-binary hdfs://master:53410/pathin/input.txt' hdfs://master:54310/pathout/output.txt
не будет работать. Есть ли другой путь? Можно ли как-то обработать файл HDFS как файл loacl?
У меня есть доступ к unix-двоичному исходному коду, написанному на C. Может быть, изменение исходного кода поможет?
спасибо