0

我有一些要从 hdfs 中提取的字段。

目前我正在做hadoop fs -text /path/to/20120903/*-* 2>/dev/null | awk -F '\t' '{ print $16 }' | sort | uniq > users-0903.

我怎样才能加快速度(需要为 0904、0905 做这件事……这需要一些时间)?

我有一些 Hadoop 流式尝试,但它似乎不喜欢我给它的大多数脚本,所以我放弃了。您将如何使用流式传输来尝试此任务?

4

1 回答 1

2

使用 Hadoop Streaming 的一种快速方法是:

hadoop jar hadoop-streaming.jar -input /path/to/2012093 -output /path/to/output-0903 -mapper "awk -F '\t' '{print \$16}'" -reducer 'uniq'

或者写得更好:

hadoop jar hadoop-streaming.jar \
  -input /path/to/2012093 \
  -output /path/to/output-0903 \
  -mapper "awk -F '\t' '{print \$16}'"\
  -reducer 'uniq'

映射器将在选项卡之间发出第 16 个单词作为没有值的键。然后它将在 shuffle/sort 期间进行排序,并且调用uniq将获取每个键/值对,这些键/值对只是键的重复。这些将减少到一份uniq

于 2012-12-11T20:03:38.297 回答