数据移动故障诊断
如果您使用数据移动功能部件时遇到问题,请参阅下一节。
日志文件
数据导出或导入失败时,您可以参阅映射器的以下日志文件:
- 在 Hadoop 上:/fastDataMovement/var/log/mapper
错误:Exception: hive-site.xml cannot be found in classpath 和java.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 中查看这些表,必须调用同步对象过程。请运行以下命令:- CALL SYSHADOOP.HCAT_SYNC_OBJECTS('schema_name', '.*', 'a', 'REPLACE',
'CONTINUE');
对于 schema_name 值,请使用 Hive 上的数据库名称。
- 如果要针对特定的表运行此过程,请运行:
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 或更高版本避免此问题。
为 Hive 和 HDFS 定义单独的用户
如果由于任何原因而需要使用单独的用户执行 HDFS 和 Hive 操作,您可以在配置 XML 文件中定义 fq.hadoop.remote.user 参数。
在 Hive 上导入失败错误消息:Cannot create table in Hive. Data has been imported properly. Try creating it manually.
解决办法:
- 请确保执行导入操作的 Hadoop 用户有权在 Hive 中创建表。
- 如果解决办法 1 不起作用,请在 Hive 服务配置中确认 hive.server2.enable.doAs 参数设置为
true。如果设置为false,请将它更改为true。 - 如果无法实现解决办法 2,那么必须在 fq.sql.metadata 设置为
false的情况下执行导入操作,导入完成后,在 Hive 中手动创建该表。
BigInsights 中的十进制值限制
- 表包含 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> - 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 位的十进制值的表。