gpt4 book ai didi

python - 在 Apache Hadoop 上扩展 python mrjob 程序

转载 作者:可可西里 更新时间:2023-11-01 16:30:38 33 4
gpt4 key购买 nike

我正在尝试通过 Azure 在 HDInight 上运行一个简单的 MapReduce 程序。我的程序是用 python 编写的,只是计算有多少行数字(时间序列)满足特定条件。最终结果只是每个类别的计数。我的代码如下所示。

from mrjob.job import MRJob
import numpy as np
import time

class MRTimeSeriesFrequencyCount(MRJob):

def mapper(self, _, line):

series = [float(i) for i in line.split(',')]
diff = list(np.diff(series))
avg = sum(diff) / len(diff)
std = np.std(diff)
fit = np.polyfit(list(range(len(series))), series, deg=1)
yield "Down", 1 if (series[len(series)-1]-series[0]) < 0 else 0
yield "Up", 1 if (series[len(series)-1]-series[0]) > 0 else 0
yield "Reverse", 1 if (fit[0]*(series[len(series)-1]-series[0])) < 0 else 0
yield "Volatile", 1 if std/avg > 0.33 else 0

def reducer(self, key, values):
yield key, sum(values)


if __name__ == '__main__':
start_time = time.time()
MRTimeSeriesFrequencyCount.run()
print("--- %s seconds ---" % (time.time() - start_time))

我是 mapreduce 和 hadoop 的新手。当我增加存储在 csv 中的行数时,我的 HP Elitebook 8570w 笔记本电脑的执行速度仍然比在 Hadoop 中运行代码更快(100 万行为 456 秒 vs 628.29 秒)。该集群有 4 个工作节点(每个节点有 4 个核心)和 2 个头节点(每个节点有 4 个核心)。不是应该执行得更快吗?是否还有其他瓶颈,例如读取数据? mrjob 是否仅在一个节点上运行?预先感谢您的帮助。

最佳答案

据我所知,Hadoop 需要一些时间来准备启动 M/R 作业和 HDFS 上的数据。因此,对于小数据集,在 Hadoop 集群上无法获得比在本地单机上更快的性能。

您有 100 万行数据。我假设一行的数据大小为1KB,那么100万行的数据大小约为1GB。对于 Hadoop 来说数据集很小,因此节省的时间不足以弥补真正在 Hadoop 上运行之前启动的延迟时间。

作为引用,有一个 SO 线程 ( Why submitting job to mapreduce takes so much time in General? ),其标记的答案解释了您的问题的延迟。

关于python - 在 Apache Hadoop 上扩展 python mrjob 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34189512/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com