Spark 1.6升级2.x测试

最近准备升级将生产环境chd5.7.1升级到cdh5.12.0并同时升级spark1.6到spark2.2.

在cdh5.12.0中可以部署两个spark parcels.输入spark2-shell可以运行spark2.2的程序,输入spark-shell可以运行spark1.6的程序.非常方便测试升级中可能存在的问题.

读完Spark 1.6升级2.x防踩坑指南发现有挺多问题.同时手动测试了cdh版本spark2.2和spark1.6似乎与博文差别较大.可能是cdh已经对某些问题做了升级.大致记录如下.

1.SELECT ‘0.1’ = 0

spark2.2 true

spark1.6 false

hive false

2.查询不存在日期:SELECT year(‘2015-03-40’)

spark 2.2 null

spark1.6 null

hive 2015

3.SELECT 1 FROM tb GROUP BY 1

spark2.2 1

spark1.6 1

hive 1

3.select SIZE(null)

spark 2.2 -1

spark1.6 null

hive -1

4.ROW_NUMBER()必须要在OVER内添加ORDER BY

测试sql: select ROW_NUMBER() OVER(partition by dw_audit_cre_date) from test.p_ip_1

spark 2.2 报错.Window function row_number() requires window to be ordered, please add ORDER BY clause.

spark1.6 正常

hive 正常

5.博文中提到.spark2.0创建出来的分区表spark1.6再次更新数据导致数据丢失.这个问题并没有重现

Spark 2.0开始,SQL创建的分区表兼容Hive了,Spark会将分区信息保存到HiveMetastore中,也就是我们可以通过SHOW PARTITIONS查询分区,Hive也能正常查询这些分区表了。如果将Spark切换到低版本,在更新分区表,HiveMetastore中的分区信息并不会更新,需要执行MSCK REPAIR TABLE进行修复,否则再次升级会出现缺数据的现象。

6.复杂的子查询view不能使用的问题,也没有重现

Spark 2.0 ~ 2.1创建的VIEW并不会把创建VIEW的原始SQL更新到HiveMetastore,而是解析后的SQL,如果这个SQL包含复杂的子查询,那么切换到1.6后,就有可能无法使用这个VIEW表了

7.spark2.2支持in操作的子查询.spark1.6和hive都不支持.

测试sql:

create or replace view test.v_ip_2 as select * from main.p_ip 
where create_d in (
    select create_d from main.p_ip where create_d > '2014-07-16 14:42:17'
) 

spark 2.2 正常

spark1.6 报错

hive 报错

8.thrift server稳定性.目前还没有办法测试

2.x中对于ThriftServer或JobServer这样的长时间运行的服务,稳定性不如1.6,如果您的计算业务复杂、SQL计算任务繁多、频繁的更新数据、处理数据量较大,稳定性的问题更加凸显。稳定性问题主要集中在内存方面,Executor经常出现堆外内存严重超出、OOM导致进程异常退出等问题。Executor进程OOM异常退出后相关的block-mgr目录(也就是SPARK_LOCAL_DIRS)并不会被清理,这就导致Spark Application长时间运行很容易出现磁盘被写满的情况。

9.add columns spark和hive全部都支持

测试sql:alter table test.liz_1 add columns(c5 varchar(20))

总结: cloudera 对spark做了一些可用性的改进.如果spark thrift 2.2稳定性不够,将会导致升级spark2.2滞后

    原文作者:李小坏
    原文地址: https://zhuanlan.zhihu.com/p/29232600
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞