欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Sqoop环境变量异常

程序员文章站 2022-06-22 21:05:26
...

在通过Oozie调用sqoop action从DB导入数据到hive表的时候,发现了异常。

28167 [Thread-30] INFO  org.apache.sqoop.hive.HiveImport  - FAILED: SemanticException [Error 10028]: Line 2:17 Path is not legal ''hdfs://cnsz141195.app.paic.com.cn:9000/user/hduser0401/table_name'': Move from: hdfs://cnsz141195.app.paic.com.cn:9000/user/hduser0401/table_name to: hdfs://CNSZ141195.app.paic.com.cn:9000/user/hive/warehouse/eshop.db/t_ahhs_product_info is not valid. Please check that values for params "default.fs.name" and "hive.metastore.warehouse.dir" do not conflict.
28202 [main] ERROR org.apache.sqoop.tool.ImportTool  - Encountered IOException running import job: java.io.IOException: Hive exited with status 44

 

使用sqoop命令行执行却没有报错。

 

我翻查了源代码,发现Hive会做一个强制校验,校验urischeme值,特别是在sqoop的时候,会生成一个Hive脚本,在做load data local inpath 的时候进行scheme的校验。

我也翻查了所有读取配置,都是配置成一样的DNS,大写的。

(Scheme也就是一个hdfs地址的NameNode地址部分。)

 

如果发现Scheme不一样,如,大小写不一致,就会出现Path is not legal Exception

 

机器名规范要求大写,那DNS也隐射的值也要一致大写吗?这样有可能会导致load data local失败的。

 

这里作为一个隐患提出来。

 

Hive的校验代码:

// only in 'local' mode do we copy stuff from one place to another.

    // reject different scheme/authority in other cases.

    if (!isLocal

        && (!StringUtils.equals(fromURI.getScheme(), toURI.getScheme()) || !StringUtils

        .equals(fromURI.getAuthority(), toURI.getAuthority()))) {

      String reason = "Move from: " + fromURI.toString() + " to: "

          + toURI.toString() + " is not valid. "

          + "Please check that values for params \"default.fs.name\" and "

          + "\"hive.metastore.warehouse.dir\" do not conflict.";

      throw new SemanticException(ErrorMsg.ILLEGAL_PATH.getMsg(ast, reason));

}

 

如果有知道的朋友请告诉我,怎么解决这个问题,谢谢~

 

相关标签: Hive sqoop oozie