JQ,Hadoop:从文件中获取命令

时间:2016-02-18 14:31:53

标签: bash hadoop command-line-interface jq

我一直很享受JQDoc)提供的强大过滤器。

Twitter的公共API提供格式良好的json文件。我可以访问大量的内容,并且可以访问Hadoop集群。在那里,我决定不使用PigElephantbird中加载它们,而是在mapper流中尝试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流运行我的命令。

查询足够长,以至于我在bashJQ中引用并格式化了问题。

我希望我能写出这样的东西:

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 \
        &

我可以将命令放在一个文件中,将其发送到计算节点并使用选项调用它。

1 个答案:

答案 0 :(得分:1)

看起来你错过了-f FILE选项!