数据移动故障诊断

如果您使用数据移动功能部件时遇到问题,请参阅下一节。

日志文件

数据导出或导入失败时,您可以参阅映射器的以下日志文件:
  • 在 Hadoop 上:/fastDataMovement/var/log/mapper

错误:Exception: hive-site.xml cannot be found in classpathjava.lang.NoClassDefFoundError: org/apache/hadoop/hive/ql/...

解决办法:hive-site.xml 和 Hive Jar 文件所在的目录添加到 HADOOP_CLASSPATH。例如:
export HADOOP_CLASSPATH="/etc/hive/conf/:/usr/share/cmf/cloudera-navigator-server/libs/cdh4/*"

错误:com.ibm.nz.fq.common.exception.QArchException: Fetching DB DDL failed: Routine "*RATE_DDL" (specific name "") has returned an error SQLSTATE with diagnostic text "SQL0443 Reason code or token: *AN_TABLE,,SQL0551 Reason cod".. SQLCODE=-443, SQLSTATE=38553, DRIVER=4.24.81.

此错误是由于 Db2® Warehouse 用户缺少所需的特权所致。有关这些特权以及如何授予这些特权的更多信息,请参阅此主题

导入到 BigInsights 的表对 BigSQLv3 不可见

设置配置 XML 属性 fq.sql.type=hive2 后,在 Hive 中创建的表在 BigSQLv3 中不可见。要在 BigSQLv3 中查看这些表,必须调用同步对象过程。请运行以下命令:
  1. CALL SYSHADOOP.HCAT_SYNC_OBJECTS('schema_name', '.*', 'a', 'REPLACE', 'CONTINUE');

    对于 schema_name 值,请使用 Hive 上的数据库名称。

  2. 如果要针对特定的表运行此过程,请运行:
    CALL SYSHADOOP.HCAT_CACHE_SYNC('schema_name','table_name');
    或者,如果要对模式中所有的表运行此过程,请运行以下命令:

    CALL SYSHADOOP.HCAT_CACHE_SYNC('schema_name');

您也可以按如下所示设置配置 XML 属性:(fq.sql.type=bigsql),并在导入中使用 BigSQL,这将永久解决问题。

Hadoop 上的特殊字符支持

列名中的特殊字符
在 Hive 中:Hive V0.13.0 和更高版本支持列名中包含特殊字符。在旧版 Hive 中,导入列名中包含特殊字符的表时,请将 fq.sql.metadata 属性设置为 false。这样就不会在 Hadoop 中创建该表,但是会导入表数据。打开保存此数据的 metadata.xml 文件,并查找 metadata.sql.create 属性。此属性的值包含表定义。请勿在 metadata.xml 文件中编辑此定义。请复制此定义,将列重命名,然后在 Hive 中运行以正确创建该表。您可以通过将 Hive 升级到 V0.13.0 或更高版本避免此问题。
在 BigSQL 上:对于 BigSQL,列名中的特殊字符也可能会引起问题。以下是在列名中使用 ! 时的样本错误:
Caused by: com.ibm.fq.common.exception.hive.HiveException: Unable to execute Hive sql. 
DB2 SQL Error: SQLCODE=-7, SQLSTATE=42601, SQLERRMC=!;all_dt_boundval ( DI, DRIVER=3.70.4
at com.ibm.fq.hive.RemoteHiveQueryRunner.executeUpdate(RemoteHiveQueryRunner.java:104)
at com.ibm.fq.hive.DbEngine.executeUpdate(DbEngine.java:87)
at com.ibm.fq.hive.DbManager.createTableInHive(DbManager.java:99)
at com.ibm.fq.ArchiveManager.importDataToHadoop(ArchiveManager.java:86)
您可能还会收到以下消息:
Caused by: com.ibm.db2.jcc.am.SqlSyntaxErrorException: 
DB2 SQL Error: SQLCODE=-104, SQLSTATE=42601, SQLERRMC=INT;st;, DRIVER=3.70.4

为 Hive 和 HDFS 定义单独的用户

如果由于任何原因而需要使用单独的用户执行 HDFS 和 Hive 操作,您可以在配置 XML 文件中定义 fq.hadoop.remote.user 参数。

在 Hive 上导入失败错误消息:Cannot create table in Hive. Data has been imported properly. Try creating it manually.

解决办法:
  1. 请确保执行导入操作的 Hadoop 用户有权在 Hive 中创建表。
  2. 如果解决办法 1 不起作用,请在 Hive 服务配置中确认 hive.server2.enable.doAs 参数设置为 true。如果设置为 false,请将它更改为 true
  3. 如果无法实现解决办法 2,那么必须在 fq.sql.metadata 设置为 false 的情况下执行导入操作,导入完成后,在 Hive 中手动创建该表。

BigInsights 中的十进制值限制

  1. 表包含 NUMERIC 字段时,在 BigInsights 3 上执行导入将会失败。该字段会映射到 DECIMAL,而 DECIMAL 在 BigInsights 3 中不受支持。将会显示以下消息:
    Decimal type not supported. If you are using BigInsights 3 and you want to map
    DECIMAL to STRING, add "fq.sql.bigsql.v3compatibility" property to the xml configuration
    file and set it to true.
    要解决此问题,请在 XML 配置文件中添加以下属性:
    <property>
    <name>fq.sql.bigsql.v3compatibility</name>
    <value>true</value>
    </property>
  2. BigInsights V3 和 V4 不支持所导入 Db2 表中包含高精度十进制值。在 BigSQL 中创建表将会失败,错误类似于:
    Exception in thread "main" com.ibm.fq.common.exception.QArchException:
    Cannot create table in Hive. Data has been imported properly. Try creating it manually
    ....
    Caused by: com.ibm.fq.common.exception.hive.HiveException: Unable to execute Hive sql.
    DB2 SQL Error: SQLCODE=-604, SQLSTATE=42611, SQLERRMC=DECIMAL(38, 0), DRIVER=3.70.4
    或者
    Failed to instantiate extended type class com.ibm.biginsights.catalog.type.DecimalType,
    for type "decimal(38,0)

    在 BigInsights V3 或 V4 中,十进制值的最大精度为 31 位。Db2 和 Hive 应用程序都最多支持 38 位的精度。有关 BigInsights 数据类型支持的更多信息,请参阅 IBM Knowledge Center

    可能的变通方法是,导入使用精度不超过 31 位的十进制值的表。