Hive 转 SparkSQL
1. SparkSQL vs Hive
- 性能差距:SparkSQL 比 Hive 快很多
- 稳定性差距: 负载高时 hiveserver2 稳定性一般
2.如何改造
2.1 hive cli 场景
典型场景:使用 shell 脚本通过 hive 命令执行 sql 代码的
Hive 写法:
hive -v -e "select * from table limti 10"
hive -f xxx.sql
or
echo "select * from table limti 10" | hive
SparkSQL 写法:
spark-sql -v -e "select * from table limti 10"
spark-sql -f xxx.sql
变量写法
spark-sql -d date='20181010' -f xxx.sql
select * from xxx where id = ${date};
配置 spark 参数
spark-sql --conf spark.executor.memory=12g -e "select * from table limti 10"
2.2 hiveserver2 场景(beeline 等)
典型场景:通过 hivesever2 提交的任务,例如 beeline 或者 jdbc 提交的。
Hive写法:
典型的连接字符串如下:
jdbc:hive2://x1:2181,x2:2181,x3:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2
SparkSQL 写法:
只需要更换连接串:
2.3 Hive 常见写法转换
hive: 创建 temporay table
hive -e "create temporary table tmpdb.table1 as select xxx"
SparkSQL:
在 tmp 库中创建物理表:
spark-sql -e "create table tmpdb.table1 if not exists as select xxx"
好处:开发调试阶段或者线上重跑,这些中间表不用重复计算,避免频繁浪费计算资源
2.4 迁移验证
抽样分区数据,使用 Hive SparkSQL 都跑一次,比对输出结果是否一致。
3. 即时查询场景
「即时查询」(Zeppelin) : %spark.sql
网友评论