Hadoop和Spark并发问题

时间:2014-12-18 14:50:38

标签: hadoop analytics bigdata apache-spark

我的数据集看起来像 input1 input2 input6 ,以及一个处理每个输入的函数 ProcessFunc(输入)的。

我的问题是,当我运行单个hadoop map任务或单个spark执行器时,每个输入的处理时间是相同的,假设第一个输入的处理时间=第二个输入的处理时间= ... =第6个输入的处理时间= t ,但是当我将hadoop map任务或spark执行器的数量翻倍时,可以说 2 每个输入的处理时间加倍到 2t 很奇怪。

如果我通过 n 进一步加倍地图任务或火花执行器的数量,则处理时间加倍为 nt

注意:

  • 我配置了每个hadoop和spark,为每个地图任务或执行者分配一个虚拟核心。

  • 根据我的配置,map资源或spark执行程序应该并行运行,因为有足够的资源。我可以看到每个进程的输出同时打印,但处理时间加倍,如前所述。

这是hadoop和spark的正常行为吗?不应该并行执行为每个输入保留相同的处理时间,而是在多个输入上同时执行? 我所期望的是,2个地图任务将在处理6个输入的半个时间内处理6个输入并使用一个地图任务,所以我在这里缺少什么?

编辑:

添加了处理功能的代码:

P.S:我知道这不是字数的理想方式,但这不是我的主要问题,我在这里测试的是处理部分的并发性。

Python代码:

    from pyspark import SparkContext, SparkConf, StorageLevel


    confobj = SparkConf().setAppName("MainApp")
    sc = SparkContext(master="local[2]", sparkHome="/home/spark-1.1.0", conf=confobj)

    input_path = "./input.seq"
    inputobject = sc.sequenceFile(input_path,
                               keyClass="org.apache.hadoop.io.Text",  
    valueClass="org.apache.hadoop.io.BytesWritable").repartition(2)    




    def mapfunc(input):


        # The input sequence file is arranged as Key, Value
        # where Key is text file name and value is text file content
        start = datetime.now()

        # Get File Name
        filename = str(input[0])

        # Get File content
        filecontent = input[1]

        # Split at whitespaces to count words
        counts = len(filecontent.split(" "))


        end = datetime.now()

        print (end-start).seconds


        # Return file name and word counts
        return (filename, counts)


    output = inputobject.Map(mapfunc).collect()

全部谢谢,

0 个答案:

没有答案