greenplum使用gplink连接外部数据源

作为一个基于postgresql开发的数据仓库,随着近几年大数据概念的兴起也备受关注。

由于GP是近近几年才开源的数据库,网上基本上找不到什么资料,很多时候只能看官方文档,而文档全为英文,对于英文很烂的本人表示真的很无力。。。

原理:

greenplum 支持gpfdist协议外部表,gpfdist协议支持自定义transform。

gplink 使用jdbc连接外部数据源,定义transform,将jdbc数据源的数据转换为text格式导入GP或HAWQ。

官方提供的有greenplum、sqlserver、hive、oracle数据库的模版,现在需要连接的是mysql数据库,麻烦了,只能自己摸索了,踩了几个坑,在文章最后面会提到。

所需软件下载地址

gplink下载地址

https://github.com/pivotalguru/gplink

mysql JDBC下载地址

https://dev.mysql.com/downloads/connector/j/

这是官方文档的安装步骤

1.  Download latest version from PivotalGuru.com

2.  Unzip <version>.zip

3.  source gplink_path.sh and add this to your .bashrc file

4.  Edit gplink.properties with correct Greenplum or Hawq connection information

5.  Download 3rd party JDBC drivers and place it in $GPLINK_HOME/jar

6.  Define source configurations in $GPLINK_HOME/connections/

7.  Define external table names and columns in $GPLINK_HOME/tables/

8.  Define SQL statements to execute in the source in $GPLINK_HOME/sql/

9.  Create the External Table with gpltable

个人翻译的中文

1、从pivotalguru.com下载最新版本

2、解压压缩包

3、source gplink_path.sh并添加到 .bashrc文件

4、在gplink.properties中编辑Greenplum或Hawq的连接信息

5、下载第三方JDBC驱动程序并将其放入$GPLINK_HOME/jar

6、在$GPLINK_HOME/connections/修改源数据库配置信息

7、在$GPLINK_HOME/tables/定义外部表名和列

8、在$GPLINK_HOME/sql/定义要在源数据库执行的sql语句

9、用gpltable创建外部表

下面开始安装

安装之前要先在mysql端(172.16.104.71:3306)给GP开放访问权限,要关闭iptables,或iptables开放mysql端口。

这里为了方便测试mysql给了最大权限,在实际环境中不能这么做

[[email protected] ~]# mysql -uroot -p123
mysql> grant all on *.* to "root"@"%" identified by ‘123‘;
mysql> flush privileges;

1、从pivotalguru.com下载最新版本

[[email protected] ~]# su - gpadmin
[[email protected] ~]$wget https://codeload.github.com/pivotalguru/gplink/zip/master

2、解压压缩包

[[email protected] ~]$unzip master

3、source gplink_path.sh并添加到 .bashrc文件

[[email protected] ~]$source gplink-master/gplink_path.sh
[[email protected] ~]$vi .bashrc 
source /home/gpadmin/gplink-master/gplink_path.sh

4、在gplink.properties中编辑Greenplum或Hawq的连接信息

这里默认不修改

5、下载第三方JDBC驱动程序并将其放入$GPLINK_HOME/jar

[[email protected] ~]$ wget https://dev.mysql.com/downloads/file/?id=470332
[[email protected] ~]$ tar xvf mysql-connector-java-5.1.42.tar.gz 
[[email protected] ~]$ cp mysql-connector-java-5.1.42/mysql-connector-java-5.1.42-bin.jar gplink-master/jar/

6、在$GPLINK_HOME/connections/修改配置

[[email protected] ~]$ cp $GPLINK_HOME/connections/oracle.properties $GPLINK_HOME/connections/mysql.properties
[[email protected] ~]$ vi $GPLINK_HOME/connections/mysql.properties 
connectionUrl=jdbc:mysql://172.16.104.71:3306/test       #test为mysql的数据库
classForName=com.mysql.jdbc.Driver
readCommitted=true
userName=root                                            #mysql用户名
password=123                                             #mysql密码
extraProps=defaultRowPrefetch=2000                       #每次读取的数据量

7、在$GPLINK_HOME/tables/定义外部表名和列

[[email protected] ~]$ cp $GPLINK_HOME/tables/public.oracle_example.sql $GPLINK_HOME/tables/public.mysql.sql 
[[email protected] ~]$ vi $GPLINK_HOME/tables/public.mysql.sql 
tableName=public.mysql
columns=first_name text, last_name text

8、在$GPLINK_HOME/sql/定义要在源数据库执行的sql语句

[[email protected] ~]$ cp $GPLINK_HOME/sql/oracle_example.sql $GPLINK_HOME/sql/mysql_example.sql

9、用gpltable创建外部表

[[email protected] ~]$gpltable -s $GPLINK_HOME/connections/mysql.properties -t $GPLINK_HOME/gplink.properties -f sql/mysql_example.sql -a $GPLINK_HOME/tables/public.mysql.sql

此时登录GP数据库,发现多了一个mysql表

[[email protected] ~]$ psql -d gpdatabase
psql (8.2.15)
Type "help" for help.

gpdatabase=# \dx
                 List of relations
 Schema |     Name     | Type  |  Owner  | Storage  
--------+--------------+-------+---------+----------
 public | mysql        | table | gpadmin | external
(1 rows)

测试

[[email protected] ~]$ gplstart -t $GPLINK_HOME/gplink.properties 
Started all ports needed.
[[email protected] ~]$ gpldata -s $GPLINK_HOME/connections/mysql.properties -f $GPLINK_HOME/sql/mysql_example.sql
jon|roberts
JON|ROBERTS

OK,该状态说明连接成功。

至于怎么从mysql把数据导入greenplum,本人也不是很清楚,自己慢慢摸索吧。

删除表命令

[[email protected] ~]$ gpldrop -t $GPLINK_HOME/connections/gplink.properties -n public.mysql

安装过程中踩到的几个坑

1、mysql.properties 中的ClassForName不对,因为没有mysql的模版,是拷贝oracle的模版来用

[[email protected] ~]$ gpldata -s $GPLINK_HOME/connections/mysql.properties -f $GPLINK_HOME/sql/mysql_example.sql
Exception in thread "main" java.sql.SQLException: mysql.jdbc.driver.MysqlDriver
	at ExternalData.main(ExternalData.java:25)

2、jdbc版本不对,下载了最新版,谁知道用不了

[[email protected] ~]$ gpldata -s $GPLINK_HOME/connections/mysql.properties -f $GPLINK_HOME/sql/mysql_example.sql
Exception in thread "main" java.lang.UnsupportedClassVersionError: com/mysql/jdbc/Driver : Unsupported major.minor version 52.0

3、连接失败,mysql主机的防火墙没关

[[email protected] ~]$ gpldata -s $GPLINK_HOME/connections/mysql.properties -f $GPLINK_HOME/sql/mysql_example.sql
Exception in thread "main" java.sql.SQLException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any 
	at ExternalData.main(ExternalData.java:25)
时间: 2024-12-22 21:52:08

greenplum使用gplink连接外部数据源的相关文章

Kubernetes连接外部数据源

Kubernetes架构下比较核心的问题是数据如何persistance,虽然提供了Persistent volumn的方式,但是对于像数据库之类的产品在kubernetes集群环境中运行和管理还是很有难度的,Kubernetes提供了endpoints这种模式让外部的服务映射成内部的服务,这样比较好的解决了集群对外的连接问题, 如果我们去连接外部的一个oracle数据库,具体的步骤如下: 建立endpoints和service. [[email protected] jdbcservice]#

Spark SQL之External DataSource外部数据源(二)源代码分析

上周Spark1.2刚公布,周末在家没事,把这个特性给了解一下,顺便分析下源代码,看一看这个特性是怎样设计及实现的. /** Spark SQL源代码分析系列文章*/ (Ps: External DataSource使用篇地址:Spark SQL之External DataSource外部数据源(一)演示样例 http://blog.csdn.net/oopsoom/article/details/42061077) 一.Sources包核心 Spark SQL在Spark1.2中提供了Exte

jQuery Mobile 连接外部连接或切换动画

jQuery Mobile不同网页之间的跳转问题 jQuery Mobile,一个新的手机终端脚本开发库,从名字可以看出,它是基于jQuery:目前支持很多种手机设备,包括IOS/Android/BlackBerry/Windows Phone等,当然,支持程度不一,具体可以看:http://jquerymobile.com/gbs/ 由于这项目比较新,在我写这文章的时候,目前还是1.0 ALPHA4.1 RELEASED版,官网提供下载的只有jQuery Mobile的JS和CSS,相关文档目

Spark SQL之External DataSource外部数据源(一)示例

一.Spark SQL External DataSource简介 随着Spark1.2的发布,Spark SQL开始正式支持外部数据源.Spark SQL开放了一系列接入外部数据源的接口,来让开发者可以实现. 这使得Spark SQL支持了更多的类型数据源,如json, parquet, avro, csv格式.只要我们愿意,我们可以开发出任意的外部数据源来连接到Spark SQL.之前大家说的支持HBASE,Cassandra都可以用外部数据源的方式来实现无缝集成. (Ps: 关于Exter

Spark SQL之External DataSource外部数据源(二)源码分析

上周Spark1.2刚发布,周末在家没事,把这个特性给了解一下,顺便分析下源码,看一看这个特性是如何设计及实现的. /** Spark SQL源码分析系列文章*/ (Ps: External DataSource使用篇地址:Spark SQL之External DataSource外部数据源(一)示例 http://blog.csdn.net/oopsoom/article/details/42061077) 一.Sources包核心 Spark SQL在Spark1.2中提供了External

Hyper-V 虚拟机连接外部网络

Hyper-V创建好虚拟机之后,在默认配置下是没有网络连接的,这个时候就需要进行简单的配置,即可让虚拟机连接外部网络: 在Hyper-V管理器中,右键点击后出现菜单,选择"虚拟交换机管理器" 在右边的列表中选择"外部",然后点击"创建虚拟交换机"按钮 在出现的界面的下拉菜单中,选择自己能够连接外部网络的网卡,然后点击"确定"按钮即可 出现这个选项时,点"确定"继续,会断网几秒钟,然后自动恢复 另外360安全

第十一篇:Spark SQL 源码分析之 External DataSource外部数据源

上周Spark1.2刚发布,周末在家没事,把这个特性给了解一下,顺便分析下源码,看一看这个特性是如何设计及实现的. /** Spark SQL源码分析系列文章*/ (Ps: External DataSource使用篇地址:Spark SQL之External DataSource外部数据源(一)示例 http://blog.csdn.net/oopsoom/article/details/42061077) 一.Sources包核心 Spark SQL在Spark1.2中提供了External

Spark操作外部数据源--MySQL

操作MySQL的数据:spark.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/sparksql").option("dbtable", "sparksql.TBLS").option("user", "root").option("password", "r

万事俱备只缺数据?看看如何在策略中引用外部数据源

?虽然真格量化提供了大量的行情数据,但金融市场如此广大,总会有一些标的的行情或经济数据我们尚未提供.与其坐等数据"从天而降"或自己手工上传,用户可以灵活运用各种数据API来快速获取这些外部数据. 比如我们想做原油的内外盘套利,需要监控原油的内外盘价差,比如上海国际能源交易中心INE原油和CME WTI原油的价差.我们知道有一些可以通过网页调用的免费的外盘行情源,可以提供WTI原油价格和人民币美元汇率. 我们在OnStart部分可以先定义外部行情源网址: 比如,我们的外部行情格式是这样的