负责的一个任务平台项目的spark版本是1.6.1的,主要变成语言是python;
现阶段要把spark从1.6.1 直接 升级到2.4.6版本,这期间遇到很多问题,特此记录:
1、语法兼容问题
数据平台任务会分成天任务、小时任务,我们会把处理后的数据写入到hive的表里面(分区里面)
比如:
1.6版本使用的最终落地语法是:
source.write.format("orc").partitionBy(%s).insertInto("%s.%s", True)
当升级到2.4以后,报错:
insertInto() can't be used together with partitionBy()
因为在spark2.0以后,认为insertInto本身要插入的表是有分区的(分区是在创建表的时候指明的),所以不需要使用partitionBy
但是我们的表是需要进行分区插入的,比如:
CREATE EXTERNAL TABLE `ad.adwise_ad_order`( `sdate` int COMMENT '日期', `order_id` string COMMENT '广告订单ID', `req_num` bigint COMMENT '广告请求量', `imp_filter_pv` bigint COMMENT '广告展现过滤PV', `click_filter_pv` bigint COMMENT '广告点击过滤PV', `imp_num` bigint COMMENT '广告曝光量', `vis_req_num` bigint COMMENT '广告可见请求量', `vis_imp_num` bigint COMMENT '广告可见曝光量', `vis_display_num` bigint COMMENT '广告可见展现量', `click_num` bigint COMMENT '广告点击量', `lands_num` bigint COMMENT '广告线索量', `req_uv` bigint COMMENT '广告请求UV', `imp_uv` bigint COMMENT '广告曝光UV', `imp_login_uv` bigint COMMENT '广告曝光会员数', `vis_req_uv` bigint COMMENT '广告可见请求UV', `vis_imp_uv` bigint COMMENT '广告可见曝光UV', `vis_imp_login_uv` bigint COMMENT '广告可见曝光会员数', `lands_uv` bigint COMMENT '广告线索UV', `click_uv` bigint COMMENT '广告点击UV', `lands_login_uv` bigint COMMENT '广告线索会员数') PARTITIONED BY ( `dt` string) ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.orc.OrcSerde' WITH SERDEPROPERTIES ( 'colelction.delim'=',', 'field.delim'='\t', 'line.delim'='\n', 'mapkey.delim'=':', 'serialization.format'='\t') STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat' LOCATION 'viewfs://AutoLfCluster/team/ad/pre/adwise_ad_order' TBLPROPERTIES ( 'transient_lastDdlTime'='1512551282')