hadoop和spark并发问题

uidvcgyl  于 2021-05-30  发布在  Hadoop
关注(0)|答案(0)|浏览(262)

我有一个类似于input1input2到input6的数据集,还有一个函数将每个输入处理为processfunc(input)。
我的问题是,当我运行单个hadoopMap任务或single spark executor时,每个输入的处理时间是相同的,比如说第一个输入的处理时间=第二个输入的处理时间=…=第6个输入的处理时间=t,但是当我将hadoopMap任务或spark执行器的数量增加一倍时,让我们假设每个输入的处理时间增加一倍到2t,这很奇怪。
如果将map任务或spark executor的数量再增加一倍,则处理时间将加倍为nt。
笔记:
我配置了hadoop和spark,为每个map任务或执行器分配一个虚拟内核。
根据我的配置,map任务或spark执行器应该并行运行,因为有足够的资源。我可以看到同时打印每个进程的输出,但是处理时间增加了一倍,如前所述。
这是hadoop和spark的正常行为吗?并行执行不应该为每个输入保留相同的处理时间,而应该对多个输入同时执行吗?我所期望的是,两个map任务将在处理6个输入的一半时间内处理6个输入,而一个map任务处理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()

谢谢大家,

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题