Pydoop mapreduce“AttributeError:模块'wordcount_minimal'没有属性'__main__'”

Posted

技术标签:

【中文标题】Pydoop mapreduce“AttributeError:模块\'wordcount_minimal\'没有属性\'__main__\'”【英文标题】:Pydoop mapreduce "AttributeError: module 'wordcount_minimal' has no attribute '__main__'"Pydoop mapreduce“AttributeError:模块'wordcount_minimal'没有属性'__main__'” 【发布时间】:2018-09-07 21:11:41 【问题描述】:

我安装了Pydoop 并尝试运行MapReduce 作业。为了进行试运行,我尝试执行字数统计示例wordcount_minimal.pywordcount_full.py。他们都挂在地图阶段。在stderr 的末尾,我根据我运行的脚本找到了这条消息:

模块“wordcount_minimal”没有属性“ma​​in

模块“wordcount_full”没有属性“ma​​in

我使用以下命令执行了作业:

pydoop 提交 --upload-file-to-cache wordcount_full.py wordcount_full hdfs_input_dir hdfs_output_dir

无法找到这背后的原因。知道可能是什么原因吗?

我能够使用mapreduce 函数从pydoop script 执行示例,并且成功完成。但是使用pydoop submit 选项,我遇到了这个问题。不确定我是否遗漏了什么。

PS:我有一个包含 2 个节点的集群,运行 Hortonworks HDP 2.6.5Pydoop 都安装在它们上面。

【问题讨论】:

【参考方案1】:

默认情况下,pydoop submit 需要一个名为__main__ 的入口点,但您可以通过--entry-point 修改它。例如,如果您的代码是:

class Mapper ...
class Reducer ...
def run():
    pipes.run_task(pipes.Factory(Mapper, Reducer))

你可以通过pydoop submit --entry-point run ...运行它

【讨论】:

谢谢。我使用了这种方法并指定了 main 的入口点并且它有效。但是,我仍然对在脚本中使用 if __name__ == "__main__": main() 感到困惑。我以为它应该默认选择这个。

以上是关于Pydoop mapreduce“AttributeError:模块'wordcount_minimal'没有属性'__main__'”的主要内容,如果未能解决你的问题,请参考以下文章

我如何使用Python API Pydoop得到Hadoop集群中的实际数据(地图后减少)?

CentOS 6 上的 Pydoop 安装

sql Attribut选项Sql Select

相当于 django 上的 entry.objects.filter(foreignkey__attribut='x') 和 .get()

如何添加 element with a href attribut in multipleelement? [duplicate]

Java–cvc-complex-type.4:Attribut ‘version’ must appear on element ‘web-app’