spark和jdbc:遍历大表并写入hdfs

3okqufwl  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(653)

使用spark复制大型关系表的内容,然后以parquet格式(没有sqoop)写入分区的hive表,内存效率最高的方法是什么。我有一个基本的spark应用程序,我用spark的jdbc做了一些其他的调整,但是关系表中的数据仍然是0.5tb和20亿条记录,所以尽管我可以懒洋洋地加载整个表,但我正在尝试找出如何有效地按日期分区并保存到hdfs,而不会遇到内存问题。从jdbc开始 load() 从spark将所有内容加载到内存中我曾想过在数据库查询中遍历日期,但仍然不确定如何确保内存不会耗尽。

0g0grzrc

0g0grzrc1#

如果需要使用spark,可以添加到应用程序中 date 参数用于按日期筛选表,并为每个日期在循环中运行spark应用程序。对于这个循环,可以使用bash或其他脚本语言。
这看起来像:
日期中的每个日期 spark-submit 您的应用程序 date 参数
读取数据库表 spark.read.jdbc 筛选依据 date 使用 filter 方法
将结果写入hdfs df.write.parquet("hdfs://path") 另一种选择是使用不同的技术,例如使用jdbc和db cursor实现scala应用程序,以迭代行并将结果保存到hdfs。这更复杂,因为您需要解决与使用scala写入parquet格式和保存到hdfs相关的问题。如果你想我可以提供scala代码负责写Parquet格式。

相关问题