JQ, Hadoop: получение команды из файла

Мне нравятся мощные фильтры, предоставляемые JQ (Doc).

Публичный API Twitter предоставляет хорошо отформатированные файлы json. У меня есть доступ к большому их количеству, и у меня есть доступ к кластеру Hadoop. Там я решил вместо того, чтобы загружать их в Pig с помощью Elephantbird, попробовать JQ в стриминге маппера, чтобы посмотреть, будет ли он быстрее.

Вот мой последний запрос:

nohup hadoop jar $HADOOP_HOME/share/hadoop/tools/lib/hadoop-streaming-2.5.1.jar\
    -files $HOME/bin/jq \
    -D mapreduce.map.memory.mb=2048\
    -D mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec \
    -mapper "./jq --raw-output 'select((.lang == \"en\") and (.entities.hashtags | length > 0)) | .entities.hashtags[] as \$tags | [.id_str, .user.id_str, .created_at, \$tags.text] | @csv'" \
    -reducer NONE \
    -input /path/to/input/*.json.gz \
    -output /path/to/output \
    &

Я распространяю свой локальный исполняемый файл jq на каждый вычислительный узел и говорю им, чтобы они запускали с ним мою команду для их потока stdin.

Запрос достаточно длинный, поэтому я столкнулся с проблемами цитирования и форматирования в bash и JQ.

Я хотел бы написать что-то вроде этого:

nohup hadoop jar $HADOOP_HOME/share/hadoop/tools/lib/hadoop-streaming-2.5.1.jar\
        -files $HOME/bin/jq,$PROJECT_DIR/cmd.jq \
        -D mapreduce.map.memory.mb=2048\
        -D mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec \
        -mapper "./jq --raw-output --run-cmd-file=cmd.jq" \
        -reducer NONE \
        -input /path/to/input/*.json.gz \
        -output /path/to/output \
        &

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


person Mai    schedule 18.02.2016    source источник


Ответы (1)


Похоже, вы как-то пропустили вариант -f FILE!

person peak    schedule 18.02.2016