2015-11-20 5 views
0

У меня возникла проблема с выполнением операций, таких как cut, tail, sort и т. Д., Как я мог делать файлы в среде Unix Shell.Как выполнить сценарий оболочки, например, в Hadoop

У меня возникла ситуация, когда я хочу, чтобы в моем файле была самая высокая отметка времени, которая не сортируется по метке времени и сохраняет ее в «X», а затем передает «X» в качестве аргумента для моего класса драйвера MapReducer при выполнении Работа MR.

В локальном режиме легко сделать это:

cut -d, -f <<fieldIndexNo>> <<FileName>> | sort -n | tail -1 

Это дает мне наибольшую метку времени.

Сейчас в распределенном режиме, как идти о выполнении таких операций., Или другими словами, какие приемы можно использовать, чтобы помочь решить такие проблемы,

Я выигрыш хочу, чтобы вызвать MapReduce работу, чтобы найти Greatest Time Stamp, а затем передать его на другую работу по сокращению карты.

Просьба предложить. Дайте мне знать, если вам нужна дополнительная информация.

Благодаря

ответ

1

Я буду считать файлы сохраняются в HDFS, а не в локальной файловой системе на каждом узле. В этом случае у вас есть только 2 варианта:

  • Прочтите все файлы в локальной оболочке и выполните фильтрацию, как и раньше. Имейте в виду, что это очень медленно, очень неэффективно и полностью противоречит идее хауопа. Но вы могли бы сделать что-то вроде:

    hadoop fs -cat <foldername>/* | cut -d, -f <<fieldIndexNo>> <<FileName>> | sort -n | tail -1

  • Написать работу Pig (или искровой работу или ...), что делает это эффективно. Это должен быть простой скрипт max 3 lines, который сортирует файл по метке времени и занимает верхнюю часть 1. Затем вы сохраняете этот номер на HDFS. Это будет выполняться параллельно на каждом узле и будет намного быстрее, чем первое решение.

Смежные вопросы