JQ、Hadoop:从文件获取命令
JQ, Hadoop: taking command from a file
我一直在享受 JQ
(Doc) 提供的强大过滤器。
Twitter 的 public API 提供格式良好的 json 文件。我可以访问其中的大量内容,并且可以访问 Hadoop 集群。在那里我决定,而不是使用 Elephantbird
在 Pig
中加载它们,而是在映射器流中尝试 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 \
&
我可以将我的命令放在一个文件中,将其发送到计算节点并使用一个选项调用它。
您好像错过了 -f FILE
选项!
我一直在享受 JQ
(Doc) 提供的强大过滤器。
Twitter 的 public API 提供格式良好的 json 文件。我可以访问其中的大量内容,并且可以访问 Hadoop 集群。在那里我决定,而不是使用 Elephantbird
在 Pig
中加载它们,而是在映射器流中尝试 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 \
&
我可以将我的命令放在一个文件中,将其发送到计算节点并使用一个选项调用它。
您好像错过了 -f FILE
选项!