Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hadoop 在Spark中将SequenceFile读入RDD会导致任务不平衡_Hadoop_Apache Spark_Pyspark - Fatal编程技术网

Hadoop 在Spark中将SequenceFile读入RDD会导致任务不平衡

Hadoop 在Spark中将SequenceFile读入RDD会导致任务不平衡,hadoop,apache-spark,pyspark,Hadoop,Apache Spark,Pyspark,我已经生成了一个约900MB的序列文件,其中包含15条记录,其中13条记录的大小约为64MB(我们HDF的块大小) 在Pyspark中,我阅读了如下内容(键和值都是自定义java类): rdd=sc.sequenceFile(“hdfs:///Test.seq,keyClass=“ChunkID”,valueClass=“ChunkData”,keyConverter=“KeyToChunkConverter”,valueConverter=“DataToChunkConverter”) rdd

我已经生成了一个约900MB的序列文件,其中包含15条记录,其中13条记录的大小约为64MB(我们HDF的块大小)

在Pyspark中,我阅读了如下内容(键和值都是自定义java类):

rdd=sc.sequenceFile(“hdfs:///Test.seq,keyClass=“ChunkID”,valueClass=“ChunkData”,keyConverter=“KeyToChunkConverter”,valueConverter=“DataToChunkConverter”)

rdd.getNumPartitions()
显示有14个分区。我尝试用它执行一些算法,如下所示:

def open_map():
    def open_map_nested(key_value):
        try:
            # ChunkID, ChunkData 
            key, data = key_value

            ####Algorithm Ommited#####                   

            if key[0] == 0:               
                return [['if', 'if', 'if']] 
            else:
                return [["else","else","else"]]
        except Exception, e:
            logging.exception(e)
            return [["None","None","None"],["None","None","None"]] #["None"]
    return open_map_nested
result = rdd.flatMap(open_map()).count()
但是,当我打开Spark UI时,前两条记录总是分配给一个任务,如下图所示(输入大小也很奇怪): 这导致其他任务只包含一条等待任务完成的记录,并成为瓶颈。 我还尝试使用java实现相同的功能,但是问题仍然存在

我的作业的设置是
--主线程--部署模式客户端--驱动程序内存8G--num executors 20--executor cores 1--executor内存1500M


我的问题是:

  • 在spark中有没有标准的方法将sequencefile读入RDD
  • 是否有任何参数可以避免spark将两条记录分配给第一个任务
如有任何建议,我们将不胜感激