hive sql和spark sql,所有的sql语句是通用的,主要是一些属性设置不一样,有些hive里没有,有些spark里面没有,或者有些spark底层实现了相同的功能,只是属性名称不一样了。下面列出一些hive sql转spark sql中一些要注意的问题。
1.启动命令
hive --hiveconf mapred.reduce.tasks=1 -f /home/cdh/cloudera/shells/hive_data_union.sql
spark-sql --conf spark.sql.shuffle.partitions=1 -f /home/cdh/cloudera/shells/hive_data_union.sql
属性设置,hive是--hiveconf,而spark-sql是--conf。注意spark-sql –conf只能设置spark的相关属性,如果想要通过设置自定义属性,还是要用到—hiveconf(spark-sql也有--hiveconf这个选项),例如如下命令:spark-sql --hiveconf year=${year} --hiveconf month=${month} --hiveconf day=${day} --hiveconf hour=${hour} -f ./hour.sql,设置了year,month,day,hour4个属性,在sql文件中和hive一样,使用${hiveconf:year}获得对应的自定义属性值。
2.hive:mapred.reduce.tasks=-1和spark:spark.sql.shuffle.partitions=200
在spark sql命令行中,设置mapred.reduce.tasks其实就是设置spark.sql.shuffle.partitions,他们两个属性是相同的意思,但是如果使用spark-sql --conf mapred.reduce.tasks=1,这样设置就会失败,提示说没有属性mapred.reduce.tasks,所以在spark中,尽量用spark.sql.shuffle.partitions
3.属性在hive中存在,虽然在spark中没有,但是可以使用别的思路实现hive中的功能,在spark中没有的属性如下:
mapred.max.split.size,mapred.min.split.size.per.node,mapred.min.split.size.per.rack