注意:以下翻译的准确性尚未经过验证。这是使用 AIP ↗ 从原始英文文本进行的机器翻译。
本页描述了一些与同步相关的常见问题及调试步骤:
当代理没有正确的证书时,会发生 PKIX 异常和其他 SSLHandshakeException
,因此无法与源进行身份验证。为了确保您安装了正确的证书,请按照我们数据连接和证书文档中的指南进行操作。
如果您的同步因错误 Response 421 received. Server closed connection
而失败,这表明您可能正在使用不受支持的 SSL 协议/端口组合进行连接。例如,端口 991 上的隐式 FTPS 是一种过时且不受支持的标准。在这种情况下,首选方法是通过端口 21 的显式 SSL。
如果您的同步是 FTP/S 同步,请确保您没有使用出口代理负载均衡器。FTP 是一种有状态协议,因此如果连续请求不是来自同一 IP,使用负载均衡器可能会导致同步失败。
请注意,由于负载均衡的性质,故障将是不确定的;即使在负载均衡代理存在的情况下,同步和预览有时也可能成功。
如果您的同步或探索因错误 com.amazonaws.services.s3.model.AmazonS3Exception:Forbidden (Service: Amazon S3; Status Code: 403; Error Code: 403 Forbidden; Request ID: null; S3 Extended Request ID: null)
而失败,这意味着命令在通过出口代理时出错。如果您收到此错误,您应检查以下场景是否适用:
在 S3 源 proxyConfiguration 块中添加:
Copied!1 2 3 4
host: <address of deployment gateway or egress NLB> port: 8888 protocol: http nonProxyHosts: <bucket>.s3.<region>.amazonaws.com,s3.<region>.amazonaws.com,s3-<region>.amazonaws.com
例如:将所有 VPC 存储桶列入白名单将涉及配置添加:
Copied!1 2 3 4 5 6
clientConfiguration: proxyConfiguration: host: <color>-egress-proxy.palantirfoundry.com port: 8888 protocol: http nonProxyHosts: *.s3.<region>.amazonaws.com, s3.<region>.amazonaws.com, s3-<region>.amazonaws.com
要查看在您的源系统上运行的确切查询,请参阅 _data-ingestion.log
。
如果您的同步是增量同步,请确保您提供了一个单调递增的列(例如时间戳或 id)以及该列的初始值。
选择增量列后,您需要确保在同步配置页面的 SQL
查询中添加了 ?
运算符(?
将替换为“增量”值,并且只能使用一个 ?
)。例如,SELECT * FROM table WHERE id > ?
。
如果您认为同步的数据集中缺少某些行或先前同步的行未被正确更新,请检查以下内容:
ID
作为单调递增的列,并且上次同步中同步的最后一个 ID
值是 10,然后添加了一个 ID
为 5 的行,则该 ID
为 5 的行将不会被同步。如果您认为现有行正在被重新同步,请检查以下内容:
LONG
或 STRING
(ISO-8601 格式)。如果在增量同步时抛出 NullPointerException,这可能表明 SQL 查询正在从数据库中检索行,这将导致增量列包含空值。
SELECT * FROM table WHERE col > ? OR timestamp > 1
,其中 col
是用于同步的增量列。使用 OR
表示查询不保证 col
仅包含非空值。如果同步的任何行的 col
值为空,则在数据连接尝试更新同步的增量状态时,当前状态将与同步的空值进行比较并抛出错误。SELECT * FROM table WHERE (col > ? OR timestamp > 1) AND col IS NOT NULL
来避免错误。如果您希望更改用于同步的增量列,我们建议您创建一个新的同步。
在代理主机上的 <bootvisor-directory>/var/data/processes
目录中,运行 ls -lrt
以找到最近创建的 bootstrapper~<uuid>
目录。
cd
进入该目录并导航到 /var/log/
。magritte-agent-output.log
的内容。如果您看到错误 OutOfMemory Exception
,这意味着代理无法处理指派给它的工作负载。
以下是一些常见的同步挂起原因及其相关解决方法:
所有同步:在获取阶段挂起
如果您的同步在获取阶段挂起,请检查源是否可用并正常运行:
JDBC 同步:在获取阶段挂起
如果您的同步完成获取阶段的时间比预期长,这可能是因为代理正在进行大量网络和数据库调用。为了调整同步期间进行的网络和数据库调用次数,您可以更改 Fetch Size
参数:
Fetch Size
参数位于源配置的“高级选项”部分内,定义了每次数据库往返期间获取的行数。因此:
Fetch Size
参数将导致每次对数据库的调用返回较少的行,并且需要更多的调用。但是,这意味着代理将使用更少的内存,因为在代理的堆中同时存储的行更少。Fetch Size
参数将导致每次对数据库的调用返回更多的行,并且需要更少的调用。但是,这意味着代理将使用更多的内存,因为在代理的堆中同时存储的行更多。Fetch Size
: 500 开始,并根据需要进行调整。JDBC 同步:在上传阶段挂起
如果您的同步在上传文件时花费的时间过长或在上传阶段失败,则可能是由于网络链接过载。在这种情况下,我们建议调整 Max file size
参数:
Max file size
参数位于源配置的“高级选项”部分内,定义了上传到 Foundry 的输出文件的最大大小(以字节或行为单位)。因此:
Max file size
参数可能会增加网络压力,因为较小的文件会更频繁地上传;如果文件上传失败,重新上传的成本较低。Max file size
参数将需要更少的总带宽,但这种上传更容易失败。Max file size
: 120mb。FTP / SFTP / 目录 / 同步:在获取阶段挂起
文件同步在获取阶段挂起的最常见原因是代理正在爬行一个大型文件系统。
爬行文件系统的同步将对文件系统进行两次完整爬行(除非另有配置)。这是为了确保同步不会上传正在被写入或以任何方式被修改的文件。
REQUEST_ENTITY_TOO_LARGE
错误而失败下载、处理和上传大文件容易出错且缓慢。如果单个文件超过为代理的上传目标配置的最大大小,则会发生 REQUEST_ENTITY_TOO_LARGE
服务异常。对于 data-proxy
上传策略,默认设置为 100GB。
不建议覆盖此限制;如果可能,请找到一种以较小文件集合的方式访问此数据的方法。但是,如果您希望将此限制作为临时解决方案覆盖,请按照以下步骤操作:
在数据连接中,导航到您的代理并选择 高级 配置选项卡。
选择“代理”选项卡。
在 destinations 块下,包含以下内容以将限制增加到 150Gb:
Copied!1 2 3
uploadStrategy: type: data-proxy maximumUploadedFileSizeBytes: 161061273600
BadPaddingException
错误而失败BadPaddingException
异常是由于存储在代理中的源凭证加密密钥与预期不符。这通常发生在代理管理器手动升级时,但旧的 /var/data
目录未复制到新安装位置。
解决此问题的最简单方法是重新输入受影响代理所用源的凭证。
当从 JDBC 源同步行时,如果它们包含时间戳列,这些时间戳列将在 Foundry 中转换为 long 列。此行为是出于向后兼容性原因。
要修正这些列的数据类型,我们建议使用 Python 变换 环境来执行此清理。以下是一个将列 "mytimestamp"
转换回时间戳形式的示例代码片段:
Copied!1 2
df = df.withColumn("mytimestamp", (F.col("mytimestamp") / 1000).cast("timestamp")) # 将 "mytimestamp" 列的值除以1000,以转换毫秒为秒,然后将结果转换为时间戳格式