Python & MapReduce:超越基础——如何在一个数据库上完成更多任务

Python & MapReduce: beyond basics -- how to do more tasks on one database

我有一个巨大的 txt 数据存储,我想在其中收集一些统计信息。

使用 Hadoop-streaming 和 Python 我知道如何实现 MapReduce 以在 单个 列上收集统计信息,例如计算 100 个类别中的每个类别有多少条记录。我创建了一个简单的 mapper.py 和 reducer.py,并将它们分别作为 -mapper 和 -reducer 插入到 hadoop-streaming 命令中。

现在,我对如何实际处理更复杂的任务有点不知所措:除了上述类别(例如地理位置、类型、日期等)之外,还收集其他各种列的各种统计数据。所有这些数据都在同一个 txt 文件中。

我是否将 mapper/reducer 任务链接在一起?在处理过程中,我是否将最初很长的键值对(包含所有数据)和 "strip" 有趣的值一一传递?或者这是一条错误的道路?我需要关于人们如何从 Python.

中针对单个数据源 "glue" 各种 MapReduce 任务的实用建议

这个问题对我来说似乎很笼统。 许多 map-reduce 作业链是生产就绪解决方案的最常见模式。但是作为程序员,我们应该始终尝试使用较少数量的 MR 作业来获得最佳性能(为了做到这一点,您必须聪明地为作业选择键值对)但是当然这取决于用例。有些人使用 Hadoop Streaming、Pig、Hive、JAVA MR 等 MR 作业的不同组合来解决一个业务问题。借助 Oozie 或 bash 脚本等任何工作流管理工具,您可以设置作业之间的依赖关系。而对于RDBMS和HDFS之间的exporting/importing数据,可以使用Sqoop。

这是您查询的最基本答案。如果您想对任何一点有进一步的解释,请告诉我。