【问题标题】:Hadoop streaming KeyFieldBasedPartitionerHadoop 流式 KeyFieldBasedPartitioner
【发布时间】:2014-12-02 15:05:59
【问题描述】:

我正在从 freebase 转储(标题、别名、类型名称)中提取数据到 avro(尚未从事此工作)。我正在使用带有 python 的 mapreduce 流。

这个 job reducer 需要类型标题(通常是任何对象标题)和对对象的类型 id 引用。备案形式为: id%relation\tvalue

例如:

common.topic%title  Topic
common.topic%used_by    m.01dyhm
common.topic%used_by    m.03x5qm
common.topic%used_by    m.04pm6

Reducer 发射:

m.01dyhm%type   Topic
m.03x5qm%type   Topic
m.04pm6%type    Topic

标题在引用之前(因此reducer 会记住它并发出取消引用的记录),并且与一种类型相关的所有记录都必须分区到一个reducer。这可以通过密钥排序来保证。当我使用复合键时,我需要正确分区记录。我正在使用配置为“-k1,1”的 KeyFieldBasedPartitioner,并将关键字段分隔符设置为“%”。它应该对对象标识符的数据进行分区,例如“common.topic”或“m.01dyhm”。但我认为我的配置是错误的。它适用于单个减速器(Hortonworks VM),但在 32 节点集群上发出空白文件(我没有直接访问权限,所以我无法有效地进行实验)。我猜分区是错误的,在单个 reducer 上没有要加入的数据。

这是我的 hadoop 命令:

hadoop \
jar $streaming \
-D mapred.job.name='Freebase extract - phase 3' \
-D mapreduce.map.output.key.field.separator='%' \
-D mapreduce.partition.keypartitioner.options=-k1,1 \
-partitioner org.apache.hadoop.mapred.lib.KeyFieldBasedPartitioner \
-input freebase/job1output \
-input freebase/job2output \
-output freebase/job3output \
-mapper "python job3mapper.py" \
-reducer "python job3reducer.py" \
-file job3mapper.py \
-file job3reducer.py 

我的分区器配置正确吗?感谢您的帮助。

【问题讨论】:

    标签: hadoop hadoop-streaming hadoop-partitioning


    【解决方案1】:

    这对我来说看起来不错。您正在将键拆分为两个子键并使用第一部分进行分区。

    您可能希望添加以下选项来告诉分区程序您要按复合键排序,以便对减速器输入进行排序。

    -D stream.num.map.output.key.fields=2
    

    如果您的输出中出现空行,则表明您正在编写额外的换行符。这些行通过 sys.stdin 输入,尾随 \n。您可以尝试在映射器和减速器中使用 print line 或 print line.strip() 来查看是否是这种情况。

    如果你没有得到任何输出,问题可能出在 python 代码中。

    【讨论】:

    • 谢谢,我会试试这个选项。我根本没有输出。 Python代码是对的,当数据正确排序时,它可以与单个reducer一起使用。
    • 如果您发布您的映射器/减速器代码,我可以尝试在我的集群上根据提供的示例数据运行它,看看我得到了什么。
    • 我的老师没有回复,所以我不知道这个选项是否有帮助。你能在你的集群上试试吗?不幸的是,我没有包含足够相关数据的数据集子集。在 32 节点集群上,它应该运行不到一个小时。 Freebase Triples datasetCode。如果您需要澄清任何事情,请告诉我。非常感谢。
    猜你喜欢
    • 2012-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多