前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Postgres by BigSQL and Hadoop_fdw

Postgres by BigSQL and Hadoop_fdw

作者头像
伊泽瑞尔
发布2022-06-01 08:31:06
7860
发布2022-06-01 08:31:06
举报
文章被收录于专栏:大数据与知识图谱

测试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。

下载包:

代码语言:javascript
复制
$ wget http://oscg-downloads.s3.amazonaws.com/packages/postgresql-9.5.7-1-x64-bigsql.rpm

以sudo权限安装rpm包:

代码语言:javascript
复制
$ sudo yum localinstall postgresql-9.6.2-2-x64-bigsql.rpm

Postgresql被安装到/opt/postgresql/pg96,Postgresql使用的所有库都位于/opt/postgresql/pg96/lib目录中,以减少冲突和其他不兼容的可能性。你可以添加--prefix以将包安装到你所指定的位置。

你也可以将前面2步合在一起:

代码语言:javascript
复制
$ sudo yum install http://oscg-downloads.s3.amazonaws.com/packages/postgresql-9.6.2-2-x64-bigsql.rpm

Configure and initializing PostgreSQL Server

以sudo权限执行下面命令:

代码语言:javascript
复制
$ sudo /opt/postgresql/pgc start pg96

Using the Database

加载postgres环境变量:

代码语言:javascript
复制
$ . /opt/postgresql/pg96/pg96.env

查看pg96的状态:

代码语言:javascript
复制
$ sudo /opt/postgresql/pgc status

进入数据库:

代码语言:javascript
复制
$ /opt/postgresql/pg96/bin/psql -U postgres -d postgres

安装HadoopFDW前需要准备环境

1. Hadoop集群,并且其他机器可以访问hive的默认端口10000(这里使用的是HDP)

2. 将Hadoop集群中如下2个jar文件放到postgresql server机器上,我这里放到/opt/hadoop/hive-client-lib(若没有此目录,自行创建)

代码语言:javascript
复制
/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文件:

代码语言:javascript
复制
$ 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:

代码语言:javascript
复制
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中。

编译:

代码语言:javascript
复制
javac HiveJdbcClient.java

运行下面的命令执行程序:

代码语言:javascript
复制
java -cp .:$(echo /opt/hadoop/hive-client-lib/*.jar | tr ' ' :) HiveJdbcClient

最后2行输出:

代码语言:javascript
复制
Running: SHOW DATABASES
default
  • 假设jdk安装在/opt/jdk1.8.0_111,执行如下命令:
代码语言:javascript
复制
ln -s /opt/jdk1.8.0_111/jre/lib/amd64/server/libjvm.so /opt/postgresql/pg96/lib/libjvm.so
  • /etc/profile中添加如下2句,并且source
代码语言:javascript
复制
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服务,使用下面命令:

代码语言:javascript
复制
cd /opt/postgresql

./pgc restart pg96

Install and Enable Hadoop-FDW

代码语言:javascript
复制
./pgc install hadoop_fdw2-pg96

在hive所在机器上创建测试所需的表

代码语言:javascript
复制
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使用

代码语言:javascript
复制
/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上建表:

代码语言:javascript
复制
create table local_postgresql (id int, name text);

insert into local_postgresql values(1, 'li'),(2, 'wang');

测试join查询:

代码语言:javascript
复制
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)
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-06-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大数据与知识图谱 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 测试环境
  • Installation Steps
  • Configure and initializing PostgreSQL Server
  • Using the Database
  • 安装HadoopFDW前需要准备环境
  • Install and Enable Hadoop-FDW
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档