更新时间:2024-03-06 GMT+08:00
分享

GDS管道文件常见问题

注意事项

  • GDS支持并发导入导出,gds -t参数用于设置gds的工作线程池大小,控制并发场景下同时工作的工作线程数且不会加速单个sql任务。gds -t缺省值为8,上限值为200。在使用管道功能进行导入导出时,-t参数应不低于业务并发数。如果是双集群互联互通场景,-t参数应不低于业务并发数的两倍。
  • 由于管道“读取即删除”的特点,需确保导入或导出过程中除GDS程序外无其他程序读取管道文件,避免导入过程中数据丢失或者任务报错及导出的文件内容混乱。
  • 不支持对具有相同location的外表并发导入导出,即GDS的多个线程同时读取管道文件或者同时写入管道文件。
  • GDS的单个导入导出任务只识别一个管道文件,因此不要对GDS外表设置带有通配符({}[]?)的location地址。如:
    1
    CREATE FOREIGN TABLE foreign_test_pipe_tr( like test_pipe ) SERVER gsmpp_server OPTIONS (LOCATION 'gsfs://192.168.0.1:7789/foreign_test_*', FORMAT 'text', DELIMITER ',',  NULL '', EOL '0x0a' ,file_type 'pipe',auto_create_pipe 'false');
    
  • GDS启用‐r递归参数时只识别一个管道文件,即GDS只会识别当前数据目录下的一个管道文件而不会递归寻找,因此-r参数在管道文件导入导出场景下不生效。
  • 管道文件的导入导出不支持CN Retry,因为GDS无法控制对端用户和程序操作管道的行为。
  • GDS导入时默认对端程序超过1小时未向管道中写入数据导入任务将会超时报错。
  • GDS导出时默认对端程序超过1小时未从管道中读数据导出任务将会超时报错。
  • 需确保GDS版本和数据库内核版本都已经支持管道文件导入导出功能。
  • 当外表参数auto_create_pipe设置为true时,GDS自动创建管道文件可能存在延迟,因此操作管道文件时建议先判断自动创建的管道文件是否存在,且是否为管道文件类型。
  • GDS管道文件的导入导出任务结束后会自动删除管道文件,但是手动终止任务时,管道文件的删除会有延迟,直到到达超时时间后才会被删除。

常见问题和定位方法:

  • 问题1:"/***/postgres_public_foreign_test_pipe_tr.pipe" must be named pipe.

    定位方法:GDS的外表file_type类型为pipe但是操作的文件却是一个普通文件类型。应该排查postgres_public_foreign_test_pipe_tr.pipe是否是为管道文件。

  • 问题2:could not open pipe "/***/postgres_public_foreign_test_pipe_tw.pipe" cause by Permission denied.

    定位方法:GDS没有权限打开管道文件。

  • 问题3:could not open source file /*****/postgres_public_foreign_test_pipe_tw.pipe because timeout 300s for WRITING.

    定位方法:GDS导出时打开管道文件超时,一般由于auto_create_pipe为false时候,管道文件在300秒内未被创建,或者创建了但是300秒内没有程序读取该管道文件。

  • 问题4:could not open source file /*****/postgres_public_foreign_test_pipe_tw.pipe because timeout 300s for READING.

    定位方法:GDS导出时打开管道文件超时,一般由于auto_create_pipe为false时候,管道文件在300秒内未被创建或者创建了但是300秒之内没有程序写入该管道文件。

  • 问题5:could not poll writing source pipe file "/****/postgres_public_foreign_test_pipe_tw.pipe" timeout 300s.

    定位方法:GDS导出时超过300秒未等到管道上的写事件,一般由于该管道文件超过300秒没有被读取。

  • 问题6:could not poll reading source pipe file "/****/postgres_public_foreign_test_pipe_tw.pipe" timeout 300s.

    定位方法:GDS导入时超过300秒未等到管道上的读事件,一般由于该管道文件超过300秒没有被写入。

  • 问题7:could not open pipe file "/***/postgres_public_foreign_test_pipe_tw.pipe" for "WRITING" with error No such device or address.

    定位方法:表示当前"/***/postgres_public_foreign_test_pipe_tw.pipe"管道文件没有程序正在读取导致GDS无法以写的方式打开管道文件。

分享:

    相关文档

    相关产品