Skip to content

Sqoop Oracle: Connection Reset Errors

背景

因为业务的需要,需要将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导致的。

解决问题

官方给出了解决方法,由两种。

  1. 通过修改java.security文件整体解决。
    securerandom.source=file:/dev/../dev/urandom"
  2. 通过在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部分。
发表评论

电子邮件地址不会被公开。 必填项已用*标注