python map reduce 并行_Python中的不同并行模块

首先,有几个问题:700GB压缩,那么有多少未压缩?在

有多少个文件?在

你想怎么处理这些日志?我们如何划分和

征服?在

我想你应该研究一下MapReduce中的数据量。在

为了完成一个示例任务,我假设您有800GB的压缩adserver事件日志数据,并且您想做一些简单的事情,比如统计数据集中唯一用户的数量。对于如此数量的数据和这种处理方式,多处理会有所帮助,但是使用MapReduce会更快得多:我将研究EMR和{a2}或{a3}。做一些简单的处理工作,比如用户计数,将有助于验证过程,并帮助您开始考虑映射器和reducer的问题。花更多的时间来思考更复杂的任务,但我认为,如果你真的要花大量的时间来处理这些数据,那么这项投资是值得的。在

例如,计算唯一用户将从一个映射器开始,该映射器简单地获取每一行adserver数据并发出userID(cookieID、IP地址,我们可以用来区分用户的任何东西)。您还将有一个reducer,它将这些用户id作为输入,并删除或统计重复项。在

当然,一旦你决定尝试一下,还有很多工作要做。准备数据(将大文件拆分或将小文件分组为blob,以便有效地分配工作,将未压缩的数据存储在EMR的Hadoop flavor理解的压缩格式中)、调整Hadoop变量以使用可用的资源和算法、将数据上载到s3等等

好的一面是,你应该能够在几个小时内处理800GB的数据。在

python中的一个简单mapreduce示例:

以下是日志文件格式:AuctionID\tUserID\tSiteID\tURL\tUserAgent\tTimestamp

它只是一个简单的制表符分隔值(tsv)文件。在

因此,我们将编写一个简单的映射器,从stdin读取这样的行,并将userid写入stdout。在

^{pr2}$

以及一个简单的reducer实现来计算唯一用户ID:import sys

user_ids = {}

def usercount_reducer(input):

for line in input:

line = line.strip()

user_id, count = line.split("\t")

try:

count = int(count)

except ValueError:

continue

current_count = user_ids.get(user_id, 0)

user_ids[user_id] = current_count + count

for user_id, count in user_ids.iteritems():

print "%s\t%s"%(user_id, count)

if __name__=="__main__":

usercount_reducer(sys.stdin)

只需执行以下操作,您就可以在单个数据块上运行此程序以在本地测试它:$ cat mydata.tsv | map.py | sort | reduce.py > result.tsv

mapreduce框架(如果使用EMR,则为hadoop)将负责运行多个map和reduce任务,并在将数据交给reducer之前对来自mapper的数据进行排序。为了让reducer真正完成它们的工作,MR框架还将散列键值(选项卡中的第一个值将输出与映射器(在本例中为UserID))分开,并将具有相同哈希的mapper分配给同一个reducer。这样,id为4的用户将始终转到减速器1,id 5将转到减速器2,依此类推

如果您想自己构建一些东西,您可以直接查看Disco(Disco是Python和Erlang,因此如果您对java过敏,这可能是一个不错的选择:-)或Hadoop来构建自己的mapreduce基础设施,而不是使用EMR。在Hadoop/EMR世界中,还有一些很酷的数据处理平台,比如Hive(用于描述数据和mapreduce算法的类SQL环境)或Pig(比如grep和awk中的steroids),它们可能比上面的脚本更适合您。在

假设您已经为您的用户在前面定义的配置单元中编写了一个唯一的查询(假设您已经在配置单元中为用户定义了一个唯一的查询):SELECT DISTINCT users.user_id FROM users;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值