[英]getting error while running mrjob python scripting in hadoop cluster
[英]Scaling a python mrjob program on Apache Hadoop
我正在嘗試通過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中運行代碼更快(456秒對100萬行的628.29秒)。 該集群有4個工作節點,每個工作節點有4個核心,還有2個頭節點,每個有4個核心。 它不應該執行得更快嗎? 還有其他瓶頸,例如讀取數據嗎? mrjob是否僅在一個節點上運行它? 先謝謝您的幫助。
眾所周知,Hadoop需要一些時間來准備啟動HDFS上的M / R作業和數據。 因此,對於Hadoop集群上的小型數據集,您無法獲得比本地單機更快的性能。
您有100萬行數據。 我假設一行的數據大小為1 KB,所以一百萬行的數據大小約為1 GB。 它是Hadoop的一個很小的數據集,因此節省的時間不足以彌補在Hadoop上真正運行之前的啟動延遲時間。
作為參考,有一個SO線程( 為什么將作業提交到mapreduce通常需要花費大量時間? ),其標記的答案說明了問題的延遲。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.