Postgres by BigSQL and Hadoop_fdw
测试Postgresql和远程Hive的Join操作。
测试环境
Centos6.8
HDP2.4集群,其中Hive Server2位于主机名为hdp的主机上
Postgres by BigSQL(pg96)
Installation Steps
由于Postgres by BigSQL上有编译好的hadoop_fdw,只需用其pgc命令直接安装,否则要去编译hadoop_fdw源代码,这个编译过程中缺少各种依赖就放弃了,编译参考bulid。
下载包:
$ wget http://oscg-downloads.s3.amazonaws.com/packages/postgresql-9.5.7-1-x64-bigsql.rpm
以sudo权限安装rpm包:
$ sudo yum localinstall postgresql-9.6.2-2-x64-bigsql.rpm
Postgresql被安装到/opt/postgresql/pg96,Postgresql使用的所有库都位于/opt/postgresql/pg96/lib目录中,以减少冲突和其他不兼容的可能性。你可以添加--prefix以将包安装到你所指定的位置。
你也可以将前面2步合在一起:
$ sudo yum install http://oscg-downloads.s3.amazonaws.com/packages/postgresql-9.6.2-2-x64-bigsql.rpm
Configure and initializing PostgreSQL Server
以sudo权限执行下面命令:
$ sudo /opt/postgresql/pgc start pg96
Using the Database
加载postgres环境变量:
$ . /opt/postgresql/pg96/pg96.env
查看pg96的状态:
$ sudo /opt/postgresql/pgc status
进入数据库:
$ /opt/postgresql/pg96/bin/psql -U postgres -d postgres
安装HadoopFDW前需要准备环境
- Hadoop集群,并且其他机器可以访问hive的默认端口10000(这里使用的是HDP)
- 将Hadoop集群中如下2个jar文件放到postgresql server机器上,我这里放到/opt/hadoop/hive-client-lib(若没有此目录,自行创建)
/usr/hdp/2.4.0.0-169/
|
`--- hadoop/
|
`--- hadoop-common-2.7.1.2.4.0.0-169.jar
|
`--- hive/
|
`--- lib
|
`--- hive-jdbc-1.2.1000.2.4.0.0-169-standalone.jar
postgresql server查看jar文件:
$ ls /opt/hadoop/hive-client-lib/
hadoop-common-2.7.1.2.4.0.0-169.jar hive-jdbc-1.2.1000.2.4.0.0-169-standalone.jar
- 测试Jdbc连接Hive
在postgreSQL host上,用下面的内容创建一个小的Jdbc程序HiveJdbcClient.java:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class HiveJdbcClient {
private static final String url = "jdbc:hive2://hdp:10000";
private static final String user = "hive";
private static final String password = "123456";
private static final String query = "SHOW DATABASES";
private static final String driverName = "org.apache.hive.jdbc.HiveDriver";
public static void main(String[] args) throws SQLException {
try {
Class.forName(driverName);
} catch (ClassNotFoundException e) {
e.printStackTrace();
System.exit(1);
}
Connection con = DriverManager.getConnection(url, user, password);
Statement stmt = con.createStatement();
System.out.println("Running: " + query);
ResultSet res = stmt.executeQuery(query);
while (res.next()) {
System.out.println(res.getString(1));
}
}
}
注意:hdp主机名和对应ip需要映射到/etc/hosts中。
编译:
javac HiveJdbcClient.java
运行下面的命令执行程序:
java -cp .:$(echo /opt/hadoop/hive-client-lib/*.jar | tr ' ' :) HiveJdbcClient
最后2行输出:
Running: SHOW DATABASES
default
- 假设jdk安装在
/opt/jdk1.8.0_111,执行如下命令:
ln -s /opt/jdk1.8.0_111/jre/lib/amd64/server/libjvm.so /opt/postgresql/pg96/lib/libjvm.so
- 在
/etc/profile中添加如下2句,并且source
export LD_LIBRARY_PATH=/opt/jdk1.8.0_111/jre/lib/amd64/server:$LD_LIBRARY_PATH
export HADOOP_FDW_CLASSPATH=/opt/postgresql/pg96/lib/postgresql/Hadoop_FDW.jar:$(echo /opt/hadoop/hive-client-lib/*.jar | tr ' ' :)
其中LD_LIBRARY_PATH设置libjvm.so的父目录的环境变量,Hadoop_FDW.jar为后面安装完hadoop_fdw后生成在此目录中。
以上所有配置完成后,重启pg96服务,使用下面命令:
cd /opt/postgresql
./pgc restart pg96
Install and Enable Hadoop-FDW
./pgc install hadoop_fdw2-pg96
在hive所在机器上创建测试所需的表
hive> show databases;
OK
default
hive> create table test_fdw(id int, height float);
hive> insert into test_fdw values(1, 1.68);
hive> select * from test_fdw;
OK
1 1.68
进入pg96使用
/opt/postgresql/pg96/bin/psql -U postgres
CREATE EXTENSION hadoop_fdw;
CREATE SERVER hadoop_server FOREIGN DATA WRAPPER hadoop_fdw
OPTIONS (HOST 'hdp', PORT '10000');
CREATE USER MAPPING FOR PUBLIC SERVER hadoop_server;
create foreign table foreign_hive(
id int,
height float)
server hadoop_server OPTIONS (TABLE 'test_fdw');
select * from foreign_hive;
id | height
----+------------------
1 | 1.67999994754791
(1 row)
测试Hive与本地Postgresql的join
在postgresql上建表:
create table local_postgresql (id int, name text);
insert into local_postgresql values(1, 'li'),(2, 'wang');
测试join查询:
select * from foreign_hive join local_postgresql on foreign_hive.id= local_postgresql.id;
id | height | id | name
----+------------------+----+------
1 | 1.67999994754791 | 1 | li
(1 row)
参考网址:
Postgres by BigSQL and Hadoop_fdw的更多相关文章
- postgres创建表的过程以及部分源码分析
背景:修改pg内核,在创建表时,表名不能和当前的用户名同名. 首先我们知道DefineRelation此函数是最终创建表结构的函数,最主要的参数是CreateStmt这个结构,该结构如下 typede ...
- postgres索引创建、 存储过程的创建以及在c#中的调用
postgres创建索引参考 http://www.cnblogs.com/stephen-liu74/archive/2012/05/09/2298182.html CREATE TABLE tes ...
- postgres扩展开发
扩展开发的基本组成 demo--1.0.sql demo.c demo.control Makefile demo.c当中包含了自定义函数的实现,纯C语言,目录下可包含多个.c文件.demo-1.0. ...
- oracle迁移postgres之-Ora2Pg
描述 Ora2Pg:甲骨文PostgreSQL数据库模式转换器是一个免费的工具用于Oracle数据库迁移到PostgreSQL兼容模式.它连接Oracle数据库,扫描它自动提取其结构或数据,然后生成S ...
- oracle迁移postgres之-oracle_fdw
1. 安装oracle_fdw 在编译安装前,需要设置postgres的环境变量,如在.bash_profile中增加: export ORACLE_HOME=/u01/app/oracle expo ...
- windows安装postgres源代码
http://blog.csdn.net/adrastos/article/details/9093739 1. 下载PostgreSQL的源代码.解压. 2. 在Windows平台下编译需要跳过一个 ...
- postgres 类型转换 cast 转
转自: http://blog.csdn.net/yufenghyc/article/details/45869509 --1 例子postgres=# select 1/4; ?column? -- ...
- POSTGRES与JDBC对照
POSTGRES与JDBC对照 未经验证,仅供参考.
- 常用到的git,mvn,postgres,vim命令总结
mvn: 打包: mvn package 如果想在打包的时候跳过测试: mvn package -Dmaven.test.skip=true 使用的junit测试框架, 测试: mvn test 如果 ...
随机推荐
- C++11 单例类实现
单例类: (1) 单例类保证全局只有一个唯一的实例对象. (2) 单例类保证只有唯一的接口获取这唯一实例. 非线程安全的单例类举例: class CSingleton { public: ~CSing ...
- 10分钟轻松学会python turtle绘图
 1. 画布(canvas) 1.1 相关函数: 2. 画笔 2.1 画笔的状态 2.2 画笔的属性 2.3 绘图命令 3. 命令详解 4. 绘图举例 4.1 太阳花 4.2 绘制小蟒蛇 4.3 绘 ...
- nginx是什么nginx安装与配置之windows版
1.nginx是什么 为了快速了解nginx我们先引用网上的nginx介绍: Nginx ("engine x") 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP ...
- java.toString() ,(String),String.valueOf的区别
在Java项目的实际开发和应用中,常常需要用到将对象转为String这一基本功能.本文将对常用的转换方法进行一个总结. 常用的方法有Object#toString(),(String)要转换的对象,S ...
- 2017最新技术java高级架构、千万高并发、分布式集群、架构师入门到精通视频教程
* { font-family: "Microsoft YaHei" !important } h1 { color: #FF0 } 15套java架构师.集群.高可用.高可扩展. ...
- Kafka 源代码分析之FileMessageSet
这里主要分析FileMessageSet类 这个类主要是管理log消息的内存对象和文件对象的类.源代码文件在log目录下.这个类被LogSegment类代理调用用来管理分片. 下面是完整代码.代码比较 ...
- 异常:java.lang.NoSuchMethodError: org.apache.poi.ss.usermodel.Workbook.getCellStyleAt
背景 最近公司所有新项目要使用最新高效快速开发框架nature-framework,框架本身结合NatureMap已经集成excel的高效导入功能,我们要实现高性能的导出功能,因为最新的jxls-2. ...
- [高并发]EntityFramework之高性能扩展
目录 简介 读写分离 指定字段更新 事务 Entity 简介 本EF扩展插件将持续更新:开源,敏捷,高性能.(由于EF Core暂未提供方便的钩子位置,暂无EF Core版本) EntityFrame ...
- SpringJdbc持久层封装,Spring jdbcTemplate封装,springJdbc泛型Dao,Spring baseDao封装
SpringJdbc持久层封装,Spring jdbcTemplate封装,springJdbc泛型Dao,Spring baseDao封装 >>>>>>>& ...
- h5 新增的invalid事件,貌似有很大bug
<!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8" ...