装载和卸载数据
GP装载概述
关于外部表
1) 外部表允许用户像访问标准数据库表一样访问外部表
2) 结合GP的并行文件分配程序(gpfdist),外部表支持在装载和卸载数据时全并行化利用所有segment实例的资源
3) GP还可以利用Hadoop分布式文件系统的并行架构来访问文件
4) GP提供了两种类型的外部表:
可读外部表:用于数据装载,不允许对数据进行修改
可写外部表:用于数据卸载,从数据库表中选择记录并输出到文件、命令管道或其他的可执行程序,包括并行MapReduce计算。只需允许INSERT 操作。
5) 按数据源不同,分为两种可读外部表:
常规的:访问静态的平面文件
WEB:访问动态数据源(比如wen服务或者OS的命令或脚本)
关于gpload
1) gpload是一个数据并行装载命令
2) 需要创建一个按照YAML格式定义的装载说明控制文件
关于copy
1) 标准PostgreSQL装载和卸载命令
2) 不具有并行装载/卸载的机制
定义外部表
概述
在创建外部表定义时,必须指定文件格式和文件位置;三种用来访问外部表数据源的协议:gpfdist, gpfdists和gphdfs。
gpfdist
1) 在外部表指定文件的所有主机上运行GP文件分发程序(gpfdist)
2) 该程序指向一个给定的目录,并行的为所有segment实例提供外部数据文件服务
3) 如果文件使用了gzip或者bzip2压缩,gpfdist会自动解压
4) 可以使用多个gpfdist来提升外部表的扫描性能
5) 可使用通配符或者C风格的模式匹配多个文件
gpfdists
1) gpfdists是gpfdist的安全版本,其开启的加密通信并确保文件与GP之间的安全认证
file
1) 如果使用file://协议,则外部文件必须存放在segment主机上面
2) 指定的符合segment实例数量的的URIs将并行工作来访问外部表
3) 每个segment主机外部文件的数量不能超过segment实例数量
4) pg_max_external_files用来确定每个外部表中允许多少个外部文件
gphdfs
1) 该协议指定了一个可以在HDFS上包含通配符的路径。
2) 在GP链接到HDFS文件时,所有数据将从HDFS数据节点被并行读取到GP的Segment实例以快速处理。
3) 每个GP Segment实例只读取一组Hadoop数据块。
4) 对于写来说,每个GP Segment实例值写该实例包含的数据
外部文件格式
1) TEXT类型对所有协议有效
2) 逗号分割的CSV对于gpfdist和file协议有效
3) 自定义格式适用于gphdfs
外部表中的错误数据
为了在装载正确格式的记录时隔离错误数据,需在定义外部表时使用单条记录出错处理
外部表备份恢复
在备份或者恢复操作中,仅仅外部表或者WEB外部表的定义会被备份或恢复。
使用GP并行文件服务(gpfdist)
为最大化系统带宽而运行gpfdist要考虑的因素:
1) 关于gpfdist的设置与性能
如果ETL主机配置了多个网口,应将所有网口对应的主机名在LOCATION子句中声明
2) 在ETL主机上运行多个gpfdist并将外部数据均匀的分拆到各gpfdist服务。
3) 控制节点并行度
gp_external_max_segs参数设置最大多少Segment实例访问同一个gpfdist文件分发程序
4) 启动和停止gpfdist
a) 要启动gpfdist,必须指定其提供文件服务的目录以及运行的端口(缺省为HTTP端口8080)
b) 在后台启动gpfdist(日志信息和出错信息输出到日志文件)
$ gpfdist –d /var/load_files –p 8081 –l /home/gpadmin/log &
c) 要在同一个ETL主机启动多个gpfdist服务,为每个服务指定不同的目录和端口。例如,
$ gpfdist –d /var/load_files1 –p 8081 –l /home/gpadmin/log1 &
$ gpfdist –d /var/load_files2 –p 8082 –l /home/gpadmin/log2 &
d) 停止后台的gpfdist服务:
第一步找到进程号,
$ ps –ef|grep gpfdist
第二步杀掉该进程
$ select pg_cancel_backend(1234);
5) gpfdist故障诊断
a) 确保GP Segment可以访问gpf