Python& MapReduce:超越基础 - 如何在一个数据库上执行更多任务

时间:2015-02-23 07:18:43

标签: python hadoop mapreduce hadoop-streaming

我有一个庞大的txt数据存储,我想收集一些统计数据。

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

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

我是否将mapper / reducer任务链接在一起?我是否最初传递键值对(包括所有数据)和" strip"处理时一个接一个的有趣值?或者这是一条错误的道路?我需要一个关于人们如何粘合" Python内单个数据源的各种MapReduce任务。

1 个答案:

答案 0 :(得分:1)

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

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