Apache spark Spark和JDBC:遍历大表并写入hdfs

Apache spark Spark和JDBC:遍历大表并写入hdfs,apache-spark,hive,hdfs,apache-spark-sql,spark-dataframe,Apache Spark,Hive,Hdfs,Apache Spark Sql,Spark Dataframe,使用spark复制大型关系表的内容,然后以拼花格式(不使用sqoop)写入分区配置单元表,内存效率最高的方法是什么。我有一个基本的spark应用程序,我用spark的jdbc做了一些其他调整,但关系表中的数据仍然是0.5 TB和20亿条记录,所以我虽然可以延迟加载整个表,但我正在尝试找出如何按日期高效分区并保存到hdfs,而不会遇到内存问题。由于spark的jdbcload()会将所有内容加载到内存中,因此我考虑在数据库查询中循环日期,但仍然不确定如何确保内存不会耗尽 如果您需要使用Spark,

使用spark复制大型关系表的内容,然后以拼花格式(不使用sqoop)写入分区配置单元表,内存效率最高的方法是什么。我有一个基本的spark应用程序,我用spark的jdbc做了一些其他调整,但关系表中的数据仍然是0.5 TB和20亿条记录,所以我虽然可以延迟加载整个表,但我正在尝试找出如何按日期高效分区并保存到hdfs,而不会遇到内存问题。由于spark的jdbc
load()
会将所有内容加载到内存中,因此我考虑在数据库查询中循环日期,但仍然不确定如何确保内存不会耗尽

如果您需要使用Spark,您可以添加到应用程序中的
date
参数,用于按日期筛选表,并针对每个日期在循环中运行Spark应用程序。您可以使用bash或其他脚本语言进行此循环

这可能看起来像:

  • 以日期表示的每个日期
    • spark使用
      date
      参数提交申请
    • 使用
      spark.read.jdbc
    • 使用
      filter
      方法按
      date
      过滤
    • 使用
      df.write.parquet(“hdfs://path“”

另一种选择是使用不同的技术,例如使用JDBC和DB游标实现Scala应用程序,以迭代行并将结果保存到HDFS。这更复杂,因为您需要解决与使用Scala写入拼花格式和保存到HDFS相关的问题。如果您需要,我可以提供负责写入拼花地板格式的Scala代码。

如果您需要使用Spark,您可以向应用程序中添加日期过滤表的参数,并在每个日期的循环中运行Spark应用程序。您可以使用bash或其他脚本语言进行此循环

这可能看起来像:

  • 以日期表示的每个日期
    • spark使用
      date
      参数提交申请
    • 使用
      spark.read.jdbc
    • 使用
      filter
      方法按
      date
      过滤
    • 使用
      df.write.parquet(“hdfs://path“”

另一种选择是使用不同的技术,例如使用JDBC和DB游标实现Scala应用程序,以迭代行并将结果保存到HDFS。这更复杂,因为您需要解决与使用Scala写入拼花格式和保存到HDFS相关的问题。如果您愿意,我可以提供负责写入拼花地板格式的Scala代码。

但是如果我循环一个日期数组,例如循环
jdbc。在这些日期中读取
,我是否仍然会继续使用每个连续的
load()不断地填充内存
语句还是其他意思?我的意思是用一些脚本语言运行这个循环,例如bash和sumbitting您的Spark应用程序,所以我不是说在Scala中实现这个循环,因为确实你的内存仍然有问题。但是如果我循环一个日期数组,例如循环
jdbc.read
,通过这些日期,我会继续不断地用每个连续的
load()填充内存吗
语句还是其他意思?我的意思是用一些脚本语言运行这个循环,例如bash和sumbitting您的Spark应用程序,所以我不是说在Scala中实现这个循环,因为实际上您仍然会有内存问题。您得到这个问题的答案了吗?您得到这个问题的答案了吗?