背景
因为业务的需要,需要将Oracle的数据抽取到hive当中,这边项目组使用的事sqoop进行数据抽取,但在执行的过程中发生中断,查看日志得知是oracle链接被重置。
原因分析
开始以为是oracle的问题,但实际并不是oralcle的问题而是sqoop内部错误,经过查询之后,在官网发现了此错误的解释。
https://sqoop.apache.org/docs/1.4.6/SqoopUserGuide.html#_oracle_connection_reset_errors
核心问题为:
Solution: This problem occurs primarily due to the lack of a fast random number generation device on the host where the map tasks execute. On typical Linux systems this can be addressed by setting the following property in the java.security file:
翻译一下就是随机数生成效率不足,导致任务执行出现问题。
这个错误是因为Java bug 6202721
导致的。
解决问题
官方给出了解决方法,由两种。
- 通过修改
java.security
文件整体解决。
securerandom.source=file:/dev/../dev/urandom"
- 通过在sqoop启动时添加参数解决.
-D mapred.child.java.opts="-Djava.security.egd=file:/dev/../dev/urandom"
实际在执行的时候,发现方式二似乎效果不好。推荐方式1.
其文件目录为:{jdk_home}/jre/lib/security/java.security
修改java.security文件中的securerandom.source
部分。