通常在我们的工作中会将hive离线计算的结果通过spark任务导入es中以便业务功能快速查询,而有时这种计算结果却未在hive中做备份,由于相关业务需要,我们又要将es表数据重新转入hive。
引入pom依赖
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_2.11</artifactId>
<version>2.1.0.17</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch-spark-20_2.11</artifactId>
<version>5.4.2</version>
</dependency>
注意:以下代码是写在main方法中的(且为会抛出异常代码,处理方法及正确代码在后面)
val sparkConf = new SparkConf().setAppName("YourAppName")
sparkConf.set("hive.exec.dynamic.partition", "true")//支持动态分区
sparkConf.set("hive.exec.dynamic.partition.mode", "nonstrict")//支持动态分区
sparkConf.set("es.nodes", "xx.xx.xx.xx,yy.yy.y.yyy")
sparkConf.set("es.port", "PPPP")
sparkConf.set("es.scroll.size","100")//通常最大为200
sparkConf.set("spark.broadcast.compress", "true")//广播压缩
sparkConf.set("spark.rdd.compress", "true")//RDD压缩
sparkConf.set