记一次spark读取多个kudu表的优化经历
时间: 2023-05-03 12:02:45 浏览: 111
Spark读取Kudu表的优化经历:
最初,Spark读取Kudu表的性能表现比较差,主要原因是Kudu表的数据格式不同于Hive表,Kudu表查询需要考虑数据分布和数据类型。为了优化Spark读取Kudu表的性能,我们采取了以下措施:
1.对列进行分析和排序。由于 Kudu 表存储了更多的元数据,为了提高性能,可以对列进行分析和排序,将高选择度(High selectivity)的列放在最前面,提高过滤效率。
2. 利用SparkUI查看运行日志。通过对SparkUI的监控,我们可以发现KuduScanRDD的运行时间非常长,于是就可以通过调整参数,减少访问Kudu表的数据量来提高性能。另外,我们发现,在处理大表时,需要采用分区缓存等技术来加快速度。
3. 采用预分区技术。直接使用Kudu表将会影响Spark的性能,而使用分区技术则可以让Spark更好地利用并行计算资源。我们采用了预分区技术,将数据预分成多个分区,每个分区可使用100%的CPU进行计算。
通过以上优化措施,我们成功地提高了Spark读取Kudu表的性能。
相关问题
spark集成kudu
Spark可以与Kudu集成,以便在Spark应用程序中读取和写入Kudu表。引用指出,Spark 2.2需要Java 8来运行,而Kudu Spark 2.x与Java 7兼容。Spark 2.2是Kudu 1.5.0的默认依赖版本。引用提到,如果您使用Spark 2与Scala 2.11,请使用kudu-spark2_2.11的工件。从官方网站的示例中可以看到,官方使用的是kudu-spark版本1.9.0。关于Spark集成Kudu的最佳实践,引用中提到,避免在每个群集中使用多个Kudu客户端,因为在Kudu-Spark编码中实例化额外的KuduClient对象是常见的错误。相反,使用KuduContext访问KuduClient,通过KuduContext#syncClient方法来创建、删除或写入Kudu表。为了诊断KuduClientSpark作业中的多个实例,可以查看主服务器日志中的符号,这些符号会显示来自不同客户端的GetTableLocations或GetTabletLocations请求的负载情况。特别是对于Spark Streaming代码,每个任务创建KuduClient会导致主请求周期性波动。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* *3* [Kudu与Spark 集成](https://blog.csdn.net/yu0_zhang0/article/details/89358580)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]
阅读全文