Sqoop环境变量异常

在通过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,oozie,sqoop)