使用kettle从postgresql导出表,并向greenplum写入的时候,速度很慢,只有1000行/秒左右,而且导入到570万行就报错了。所以上网查了一下有说可以用datax导数的,就下了个datax的免安装直接解压就可用的版本,结果不带向greenplum导入的功能,只有向postgresql导入的功能,估计是编译的比较早的版本。从git下下载了新的版本,编译时报错,说有jar包找不到,编译不出来,看到有人说要得改pom。
修改编译目录下odpswriter下的pom.xml 和odpswriter下的pom.xml
<dependency>
<groupId>com.aliyun.odps</groupId>
<artifactId>odps-sdk-core</artifactId>
<version>0.19.3-public</version>
</dependency>
要将版本修改成
<version>0.20.7-public</version>
编译成功后在target/datax-v1.0.3-hashdata下有个datax,在这个datax的bin目录下执行以下脚本。注意使用python 2代。
python2 datax.py -r postgresqlreader -w gpdbwriter
执行后会打印出一段json文件,将这个文件写到一个文本中,修改其中的参数后另存为 需要使用的名字.json, 然后用 python2 datax.py 需要使用的名字.json 来执行。
!!默认生成的json文件中,postgresql读取中没有column选项,但没有这一项就会报错,需要手动加上"column": ["*"], 这个github上的说明也不对,说是如果需要所有字段就写成"column": [""], 写成什么也没有也会报错。 最后的"channel": "1"这里需要一个数字型的值。
然后开始测试,速度比kettle快了不少,不过还是有点慢,看磁盘的写入已经占满了,cpu使用不高,写入速度60M/秒,测试hive的parquet列存储时写hdfs能达到300M/秒,greenplum是列式存储,感觉不应该写这么多小文件啊。