使用spark复制大型关系表的内容然后以镶木地板格式(没有sqoop)写入分区的Hive表,最有效的内存方式是什么?我有一个基本的火花应用程序,我已经用spark的jdbc进行了一些其他的调整,但是关系表中的数据仍然是0.5 TB和20亿条记录所以我虽然我可以懒得加载整个表,但我试过找出如何有效地按日期分区并保存到hdfs而不会遇到内存问题。因为来自spark的jdbc load()
会将所有内容加载到内存中,我想在数据库查询中循环查看日期,但仍然不确定如何确保我不会耗尽内存。
答案 0 :(得分:0)
如果您需要使用Spark,您可以添加到应用程序date
参数以按日期过滤表,并在每个日期循环运行Spark应用程序。您可以在此循环中使用bash或其他脚本语言。
这看起来像:
spark-submit
参数date
您的申请
spark.read.jdbc
date
方法filter
过滤
df.write.parquet("hdfs://path")
另一个选择是使用不同的技术,例如使用JDBC和DB游标实现Scala应用程序来遍历行并将结果保存到HDFS。这更复杂,因为您需要解决与写入Parquet格式相关的问题并使用Scala保存到HDFS。如果您愿意,我可以提供负责写入Parquet格式的Scala代码。