故障诊断
访问错误信息
流量基础知识
使用以下提示来帮助您掌握基本流程 :
- 为什么没有启用 " 运行 " 图标?
- 当流程有效时,您可以启动它。 使用问题图标查看流程中的问题列表。 问题解决后," 运行 " 图标就会启用。
一般验证错误
使用以下提示帮助您解决一般流程验证错误:
- 流程的阶段验证错误集如下:
CONTAINER_0901 - Could not find stage definition for <stage library name>:<stage name>. CREATION_006 - Stage definition not found. Library <stage library name>. Stage <stage name>. Version <version> VALIDATION_0006 - Stage definition does not exist, library <stage library name>, name <stage name>, version <version>
资料来源
请使用以下提示来帮助处理源阶段和系统。
目录
- 为什么目录源没有读取我的所有文件?
- 目录源根据配置的文件名模式、读取顺序和要处理的第一个文件读取一组文件。 如果新文件在目录源的读取顺序中超过其位置后到达,除非重置目录源 ,否则目录源不会读取这些文件。
Elasticsearch
- 具有 Elasticsearch 源的流启动失败,并出现 SSL / TLS 错误,例如:
ELASTICSEARCH_43 - Could not connect to the server(s) <SSL/TLS error details>
JDBC 资源
- 我的 MySQL JDBC 驱动程序 5.0 无法验证 JBDC 查询消费者源中的查询。
- 在查询中使用 LIMIT 子句时可能会出现这种情况。
- 我正在使用 JDBC 源读取 MySQL 数据。 为什么设置为零的日期时间值会被当作错误记录处理?
- MySQL 将无效日期视为例外情况,因此 查询消费者和 多可选消费者都会为无效日期创建错误记录。 JDBC JDBC
- 使用 JDBC Query Consumer 源的 流程不断停止,并出现以下错误:
JDBC_77 <db error message> attempting to execute query '<query>'. Giving up after <error count> errors as per stage configuration. First error: <first db error>.- 我的流程使用 JDBC 源 ,在读取大表时会产生内存不足错误。
- 在 JDBC 源中启用自动提交属性后,某些驱动程序会忽略由源中最大批量大小属性配置的获取大小限制。 在读取内存中无法完全容纳的大型表格时,这可能会导致内存不足错误。
Oracle CDC 客户
- Oracle CDC 客户端流程的数据预览不断超时。
- 使用 Oracle CDC 客户端的流程启动数据预览所需的时间可能比预期的要长。 如果预览超时,请尝试逐步增加预览超时属性。
有关对该数据源使用预览的更多信息,请参阅 Oracle CDC Client 的数据预览。
- 我的 Oracle CDC 客户端流程在夏令时变化期间暂停了处理。
- 如果源被配置为使用夏令时的数据库时区,则流程会在时间变化窗口期间暂停处理,以确保正确处理所有数据。 时间更改完成后, 流程将以上次保存的偏移量恢复处理。
PostgreSQL CDC 客户端
- PostgreSQL CDC 客户端流程会产生以下错误:
com.streamsets.pipeline.api.StageException: JDBC_606 - Wal Sender is not active
Salesforce
- 流量产生缓冲容量错误
- 当 Salesforce 源的流量因缓冲容量错误(如
Buffering capacity 1048576 exceeded)而失败时,可通过编辑订阅选项卡上的 "流缓冲区大小 "属性来增加缓冲区大小。
脚本源
- 手动停止时, 流量无法停止
- 脚本必须包含在用户停止流程时停止脚本的代码。 在脚本中,使用
sdc.isStopped方法检查流量是否已停止。 - Jython 脚本不会在导入锁定后继续运行
- 如果 Jython 脚本在失败或出错时没有释放导入锁,则流程会冻结。 如果脚本不释放导入锁,则必须重启 Data Collector 才能释放锁。 为避免这一问题,请在 Jython 脚本中使用
try语句和finally代码块。 更多信息,请参阅 Jython 脚本中的线程安全。
SQL Server CDC 客户端
- 预览数据时未显示任何数值
- 设置 "最大事务长度 "属性后, 源会在多个时间窗口中获取数据。 该属性决定了每个时间窗口的大小。 预览数据仅显示第一个时间窗口的数据,但数据源可能需要处理多个时间窗口才能找到变化值并在预览中显示。
要在预览数据时查看数值,请增加最大事务长度或设置为 -1 ,以便在单个时间窗口内获取数据。
- 在读取所有更改之前,会生成 "无更多数据 "事件
- 设置 "最大事务长度 "属性后, 源会在多个时间窗口中获取数据。 该属性决定了每个时间窗口的大小。 在处理完每个时间窗口中的所有可用行后, 源会生成一个 "无更多数据 "事件,即使后续时间窗口仍可处理。
处理器数
使用以下提示来帮助处理程序。
加密与解密字段
- 启动流程后,日志中显示以下错误信息:
CONTAINER_0701 - Stage 'EncryptandDecryptFields_01' initialization error: java.lang.IllegalArgumentException: Input byte array has incorrect ending byte at 44
目标
使用以下提示来帮助您确定目标阶段和系统。
Azure Data Lake Storage
- Azure Data Lake Storage 目标似乎导致内存不足错误,以下对象使用了所有可用内存:
com.streamsets.pipeline.stage.destination.hdfs.writer.ActiveRecordWriters
Cassandra
- 为什么只有几条记录有问题,而整个批次的流程都出现故障?
- 由于 Cassandra 的要求,当您向 Cassandra 集群写入数据时,批次是原子的。 这意味着一条或多条记录中的错误会导致整个批处理失败。
- 为什么我的所有数据都被错误发送? 每一批都失败了。
- 当每个批次都失败时,可能是数据类型不匹配。 Cassandra 要求数据类型与 列的数据类型完全匹配。 Cassandra
Elasticsearch 目标
- 具有 Elasticsearch 目标的流程启动失败,并出现 SSL / TLS 错误,例如:
ELASTICSEARCH_43 - Could not connect to the server(s) <SSL/TLS error details>
Kafka 生产者
- Kafka 制作人可以创建主题吗?
- Kafka 制片人可以在以下所有条件都为真时创建主题:
- 您将 Kafka Producer 配置为写入不存在的主题名称。
- 为 Kafka 生产者定义的 Kafka 代理中至少有一个已启用 auto.create.topics.enable 属性。
- 当 Kafka Producer 查找主题时,具有启用属性的代理已启动并可用。
- 写入 Kafka 的流程不断失败并重新启动,循环往复。
- 当流量尝试向 Kafka 0.8 写入的报文长度超过 Kafka 的最大报文大小时,就会出现这种情况。
JDBC 连接
使用 JDBC 连接来连接数据库的阶段时,请使用以下提示。 对于某些阶段, 数据采集器包含连接数据库所需的 JDBC 驱动程序。 对于其他阶段,必须安装 JDBC 驱动程序。
以下阶段需要安装 JDBC 驱动程序:
- JDBC 多种消费者来源
- JDBC 查询消费者来源
- MySQL 二进制日志源
- Oracle 散装货源
- Oracle 疾病预防控制中心资料来源
- Oracle CDC 客户端源
- Oracle 多种消费者来源
- Oracle 目标
- SAP HANA 查询消费者来源
- JDBC 查询处理器
- JDBC 三通处理器
- 使用数据库解析模式时的 SQL 解析器处理器
- JDBC 生产商目标
- JDBC 查询执行器
没有合适的驱动程序
当数据收集器无法找到某个阶段的 JDBC 驱动程序时, 数据收集器可能会生成以下错误消息之一:
JDBC_00 - Cannot connect to specified database: com.streamsets.pipeline.api.StageException:
JDBC_06 - Failed to initialize connection pool: java.sql.SQLException: No suitable driver确认是否已按照安装外部库中的说明安装了其他驱动程序。
您还可以使用这些额外的提示来帮助解决问题:
- JDBC 连接字符串不正确。
- 该阶段的 JDBC 连接字符串属性必须包括
jdbc:前缀。 例如, PostgreSQL 连接字符串可能是jdbc:postgresql://<database host>/<database name>。 - 包含 JDBC 驱动程序的外部资源存档文件未正确设置。
- 在外部资源存档文件中包含 JDBC 驱动程序时,存档文件必须使用所需的文件夹名称和目录结构。 有关所需归档文件结构的详细信息,请参阅归档结构。
- JDBC 驱动程序无法正确加载或注册。
- 有时, 流程所需的 JDBC 驱动程序无法正确加载或注册。 例如某个 JDBC 驱动程序可能无法正确支持 4.0JDBC 自动加载功能,从而导致错误信息
No suitable driver出现。有两种方法可以解决这个问题:- 在舞台的 " 传统驱动程序 "选项卡上的 JDBC Class Driver Name 属性中添加驱动程序的类名。
- 配置数据收集器以自动加载特定驱动程序。 在数据收集器 配置属性中,取消注释
stage.conf_com.streamsets.pipeline.stage.jdbc.drivers.load属性,并将其设置为以逗号分隔的 JDBC 驱动程序列表,这些驱动程序是流程中各阶段所需的。
无法连接数据库
当数据收集器无法连接到数据库时,会显示类似以下的错误消息 - 具体消息可能因驱动程序而异:
JDBC_00 - Cannot connect to specified database: com.zaxxer.hikari.pool.PoolInitializationException:
Exception during pool initialization: The TCP/IP connection to the host 1.2.3.4, port 1234 has failed
在这种情况下,请确认数据收集器机器可以通过相关端口访问数据库机器。 为此,您可以使用 ping 和 netcat (nc) 等工具。 例如,验证主机 1.2.3.4 是否可访问:
$ ping 1.2.3.4
PING 1.2.3.4 (1.2.3.4): 56 data bytes
64 bytes from 1.2.3.4: icmp_seq=0 ttl=57 time=12.063 ms
64 bytes from 1.2.3.4: icmp_seq=1 ttl=57 time=11.356 ms
64 bytes from 1.2.3.4: icmp_seq=2 ttl=57 time=11.626 ms
^C
--- 1.2.3.4 ping statistics ---
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 11.356/11.682/12.063/0.291 ms然后验证 1234 端口是否可以访问:
$ nc -v -z -w2 1.2.3.4 1234
nc: connectx to 1.2.3.4 port 1234 (tcp) failed: Connection refused如果无法访问主机或端口,请检查路由和防火墙配置。
MySQL JDBC 驱动程序和时间值
由于 MySQL JDBC 驱动程序问题,该驱动程序无法返回毫秒级的时间值。 相反,驱动程序会将这些值返回给第二个程序。
例如,如果某列的值为 20:12:50.581 ,驱动程序会将其读作 20:12:50.000。
性能
使用以下提示帮助提高性能:
- 如何减少从源系统读取数据之间的延迟?
- 当数据流读取记录的速度快于处理记录或将记录写入目标系统的速度时, 从源系统读取记录之间就会出现较长的延迟。 由于流量一次只处理一个批次,因此流量必须等到一个批次提交到目标系统后才能读取下一个批次,从而导致流量无法以稳定的速度读取。 以稳定的速度读取数据比零散读取数据性能更好。
- 当我尝试启动一个或多个流程时,会收到线程数量不足的错误信息
- 默认情况下, 数据收集器可同时运行约 22 个独立数据流。 如果同时运行大量独立数据流 ,可能会出现以下错误:
CONTAINER_0166 - Cannot start flow '<flow name>' as there are not enough threads available - 如何提高总体流量性能?
- 您可以通过调整流量使用的批次大小来提高性能。 批量大小决定了一次通过流量的数据量。 默认情况下,批量大小为 1000 条记录。