Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/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
Apache spark 如何根据数据大小重新划分rdd_Apache Spark_Hadoop_Apache Kafka_Spark Streaming_Rdd - Fatal编程技术网

Apache spark 如何根据数据大小重新划分rdd

Apache spark 如何根据数据大小重新划分rdd,apache-spark,hadoop,apache-kafka,spark-streaming,rdd,Apache Spark,Hadoop,Apache Kafka,Spark Streaming,Rdd,我正在从事spark streaming项目,该项目从Kafka获取数据,并应用一些规则将数据保存在Hive中。我的问题是数据的摄取率不是固定的。60秒可能是100万条消息,也可能是1。我想在数据流上添加重新分区。由于数据流只有3个分区,无法在一分钟内处理数百万条记录。重新分区在少于20条记录时出现问题。它在配置单元中创建多个小文件 dataStream.map(_._2).repartition(20) 我的问题是如何根据rdd大小重新划分rdd。这样它就可以处理一条消息或一百万条消息。你不

我正在从事spark streaming项目,该项目从Kafka获取数据,并应用一些规则将数据保存在Hive中。我的问题是数据的摄取率不是固定的。60秒可能是100万条消息,也可能是1。我想在数据流上添加重新分区。由于数据流只有3个分区,无法在一分钟内处理数百万条记录。重新分区在少于20条记录时出现问题。它在配置单元中创建多个小文件

dataStream.map(_._2).repartition(20)

我的问题是如何根据rdd大小重新划分rdd。这样它就可以处理一条消息或一百万条消息。

你不能用任何有用的方法来处理它。即使您决定使用transform

这超出了操作的整体目的,因为在重新分区之前必须扫描所有数据,初始分发仍然是瓶颈


相反,我建议根据spark.streaming.kafka.maxRatePerPartition旧API或配置backpressure spark.streaming.backpressure.enabled、spark.streaming.backpressure.initialRate、更新的API进行适当的配置。我使用了spark.streaming.kafka.maxRatePerPartition=1属性,但spark有时无法处理900个文件。批量大小为300秒,kafka有3个分区。因此,我想重新分区rddMaybe您应该重新考虑您的全局管道-例如,让Spark将其文件转储到作为登录区域的配置单元分区中,然后定期合并并将数据移动到另一个分区将登录分区重命名为TEMP,重新创建登录,插入…从TEMP选择目标,drop TEMP-并确保在运行reorg时没有选择该表。
 stream.transform { rdd => {
   val n = rdd.count
   rdd.repartition(getNumParttitions(n))
 }}