测试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的更多相关文章

  1. postgres创建表的过程以及部分源码分析

    背景:修改pg内核,在创建表时,表名不能和当前的用户名同名. 首先我们知道DefineRelation此函数是最终创建表结构的函数,最主要的参数是CreateStmt这个结构,该结构如下 typede ...

  2. postgres索引创建、 存储过程的创建以及在c#中的调用

    postgres创建索引参考 http://www.cnblogs.com/stephen-liu74/archive/2012/05/09/2298182.html CREATE TABLE tes ...

  3. postgres扩展开发

    扩展开发的基本组成 demo--1.0.sql demo.c demo.control Makefile demo.c当中包含了自定义函数的实现,纯C语言,目录下可包含多个.c文件.demo-1.0. ...

  4. oracle迁移postgres之-Ora2Pg

    描述 Ora2Pg:甲骨文PostgreSQL数据库模式转换器是一个免费的工具用于Oracle数据库迁移到PostgreSQL兼容模式.它连接Oracle数据库,扫描它自动提取其结构或数据,然后生成S ...

  5. oracle迁移postgres之-oracle_fdw

    1. 安装oracle_fdw 在编译安装前,需要设置postgres的环境变量,如在.bash_profile中增加: export ORACLE_HOME=/u01/app/oracle expo ...

  6. windows安装postgres源代码

    http://blog.csdn.net/adrastos/article/details/9093739 1. 下载PostgreSQL的源代码.解压. 2. 在Windows平台下编译需要跳过一个 ...

  7. postgres 类型转换 cast 转

    转自: http://blog.csdn.net/yufenghyc/article/details/45869509 --1 例子postgres=# select 1/4; ?column? -- ...

  8. POSTGRES与JDBC对照

    POSTGRES与JDBC对照 未经验证,仅供参考.

  9. 常用到的git,mvn,postgres,vim命令总结

    mvn: 打包: mvn package 如果想在打包的时候跳过测试: mvn package -Dmaven.test.skip=true 使用的junit测试框架, 测试: mvn test 如果 ...

随机推荐

  1. Oracle查询数据出来乱码问题?

    为什么Oracle 查询出来的数据会产生乱码?   安装的数据库和客户端编码编码不一致就会产生乱码,要想解决此问题改一下客户端的编码即可 1. select * from table; 如果是这种问题 ...

  2. Dom 简介

    HTML DOM 简介 DOM 教程 DOM 节点 HTML DOM 定义了访问和操作 HTML 文档的标准. 您应该具备的基础知识 在您继续学习之前,您需要对以下内容拥有基本的了解: HTML CS ...

  3. 非滤波单目视觉slam笔记1

    非滤波单目视觉slam 主要分为以下8部分 数据类型 数据关联 初始化 位姿估计 地图维护 地图生成 失效恢复 回环检测 数据类型 直接法(稠密,半稠密) 基本原理是亮度一致性约束,\(J(x,y) ...

  4. 友盟分享到微信 监听不执行 监听只执行onStart,(onResult,onError,onCancel 不执行)

    最近在做一个项目 有一个需求是要分享项目中的一个商品 这对于我来说简直是 so easy (项目是三个人一起写的) 正好看到之前有同事写完了  我就拿过来用吧  一顿复制粘贴  大功告成   这个是监 ...

  5. python网络爬虫之LXML与HTMLParser

    Python lxml包用于解析html和XML文件,个人觉得比beautifulsoup要更灵活些 Lxml中的路径表达式如下: 在下面的表格中,我们已列出了一些路径表达式以及表达式的结果: 路径表 ...

  6. Linux 中最常用的目录及文件管理命令

    一.查看文件的命令 对于一个文本文件,在linux中有多种查看方式来获知文件内容,如直接显示整个文本内容.分页查看内容.或者只查看文件开头或末尾的部分内容.在linux可以用不同的命令来实现. 1. ...

  7. java web数据库(SQL 2008+IDEA 14)环境配置

    废话少说,在之前已经配置过IDEA+Tomcat的环境之后,现在需要进行数据库配置: 1.首先,SQL SERVER2008数据库的安装 (1)将下载的sqlserver 2008数据库进行解压,点击 ...

  8. HTML行内元素、块状元素、行内块状元素的区别

    HTML可以将元素分类方式分为行内元素.块状元素和行内块状元素三种.首先需要说明的是,这三者是可以互相转换的,使用display属性能够将三者任意转换: (1)display:inline;转换为行内 ...

  9. OpenCV学习2-----使用inpaint函数进行图像修复

    安装opencv时,在opencv的安装路径下, sources\samples\cpp\  路径里面提供了好多经典的例子,很值得学习. 这次的例子是利用inpaint函数进行图像修复. CV_EXP ...

  10. JavaScript面向对象轻松入门之多态(demo by ES5、ES6、TypeScript)

    多态(Polymorphism)按字面的意思就是"多种状态",同样的行为(方法)在不同对象上有不同的状态. 在OOP中很多地方都要用到多态的特性,比如同样是点击鼠标右键,点击快捷方 ...