【小笔记】2020-11月月度总结

1、oracle间歇性的丢失数据

场景

oracle sql执行完成,程序未见异常,但是数据库中没有数据,即间歇性的丢失数据。mysql不存在这个问题。

原因

由于程序中直接使用了jdbc,并且禁止自动提交,而在多处创建了连接,在ccommit时,实际上提交的并不是预期的connection,最后导致事务超时。由于,mysql与oracle对事务超时后的处理方式不同,mysql超时后自动提交,而oracle事务超时后自动撤销,所以丢失数据只会在oracle数据库时出现。

解决

使用局部单例模式创建连接,即在一个处理过程中只创建一次连接并复用,避免多次建立连接。

总结

尽量减少在程序中的jdbc直连数据库,如果要使用,则需要注意连接和事务的管理。

2、Spark读取hive分区表报错

场景

spark读取hive某个hive表的分区错误

Input path does not exist: hdfs://hdp6.tydic.com:8020/apps/hive/warehouse/hi_tydic_lable.db/contact_result/contact_date=20200527
原因:

删除hdfs上的hive分区目录时,未删除hive元数据里的分区信息,导致读取时仍然会读取不存在的分区。

解决:

删除hive分区:

alter table CONTACT_RESULT drop partition (contact_date='20200527');
总结:

删除分区命令:

alter table CONTACT_RESULT drop partition (分区字段='xxx');

3、对象属性名第二个字母大写问题

场景:

前端向后端传一个验证码参数时,参数名定义为vCode,导致该参数值一直为空,其他参数正常。

分析:
  • 检查前端参数值,的确有值

  • 传到后端接收时丢失

  • 猜测是参数名导致的

  • 修改参数名为verifyCode后,传值正常

解决办法:
  • 更换参数名

  • 手动生成getter/setter

  • 使用@JsonProperty注解@JsonProperty(value = “vCode”)

总结:

javabean规范中声明:

如果属性名的第二个字母大写,那么该属性名直接用作 getter/setter 方法中 get/set 的后部分,就是说大小写不变。例如属性名为uName,方法是getuName/setuName。

然而当使用lombok生成getter/setter时,生成的为getVCode/setVCode,导致Spring解析失败,正确的应该为getvCode和setvCode。

4、spark提交任务后,切换hive库,提示库不存在

场景:

spark提交任务到集群运行,需要从hive读取数据,在切换hive库时,提示database不存在,而事实上该数据库是存在的。

分析:
  • 检查各个配置,均正常
  • 检查组件版本,不一致,差异较大,可能是组件版本不同导致的
解决:

更换hive、spark客户端版本

总结:

在不同环境时,需要注意组件版本是否兼容。

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 程序猿惹谁了 设计师:上身试试 返回首页
实付 19.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值