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.py
和wordcount_full.py
。他们都挂在地图阶段。在stderr
的末尾,我根据我运行的脚本找到了这条消息:
模块“wordcount_minimal”没有属性“main”
或
模块“wordcount_full”没有属性“main”
我使用以下命令执行了作业:
pydoop 提交 --upload-file-to-cache wordcount_full.py wordcount_full hdfs_input_dir hdfs_output_dir
无法找到这背后的原因。知道可能是什么原因吗?
我能够使用map
和reduce
函数从pydoop script
执行示例,并且成功完成。但是使用pydoop submit
选项,我遇到了这个问题。不确定我是否遗漏了什么。
PS:我有一个包含 2 个节点的集群,运行 Hortonworks HDP 2.6.5
。 Pydoop
都安装在它们上面。
【问题讨论】:
【参考方案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集群中的实际数据(地图后减少)?
相当于 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’