大数据-phoenix

                                        大数据-phoenix

由于Hbase当中的数据查询方式比较单一,查询形式比较固定,所以一般都会对Hbase实现二级索引的开发,通过二级索引去更加方便快速的查询Hbase当中的数据,我们也可以通过phoenix与Hbase整合的方式实现通过jdbc的方式去查询Hbase当中的数据。

下载phoenix的安装包并解压

下载地址:http://archive.apache.org/dist/phoenix/

这里我使用的是 apache-phoenix-4.14.0-cdh5.14.2-bin.tar.gz

将安装包上传到node02服务器的/kkb/soft路径下,然后进行解压

cd /kkb/soft/
tar -zxf apache-phoenix-4.14.0-cdh5.14.2-bin.tar.gz  -C /kkb/install/

修改phoenix的配置

拷贝jar包

将phoenix目录下的phoenix-4.8.2-HBase-1.2-server.jar、phoenix-core-4.8.2-HBase-1.2.jar拷贝到各个 hbase的lib目录下。

node02执行以下命令,将两个jar包拷贝到hbase的lib目录下

cd /kkb/install/apache-phoenix-4.14.0-cdh5.14.2-bin
scp phoenix-4.14.0-cdh5.14.2-server.jar phoenix-core-4.14.0-cdh5.14.2.jar node01:/kkb/install/hbase-1.2.0-cdh5.14.2/lib/ 
scp phoenix-4.14.0-cdh5.14.2-server.jar phoenix-core-4.14.0-cdh5.14.2.jar node02:/kkb/install/hbase-1.2.0-cdh5.14.2/lib/ 
scp phoenix-4.14.0-cdh5.14.2-server.jar phoenix-core-4.14.0-cdh5.14.2.jar node03:/kkb/install/hbase-1.2.0-cdh5.14.2/lib/

修改配置文件

将hbase的配置文件hbase-site.xml、 hadoop下的配置文件core-site.xml 、hdfs-site.xml放到phoenix/bin/下,替换phoenix原来的配置文件。

node02执行以下命令,进行拷贝配置文件

cp /kkb/install/hadoop-2.6.0-cdh5.14.2/etc/hadoop/core-site.xml  /kkb/install/apache-phoenix-4.14.0-cdh5.14.2-bin/bin/

cp /kkb/install/hadoop-2.6.0-cdh5.14.2/etc/hadoop/hdfs-site.xml  /kkb/install/apache-phoenix-4.14.0-cdh5.14.2-bin/bin/

cp /kkb/install/hbase-1.2.0-cdh5.14.2/conf/hbase-site.xml  /kkb/install/apache-phoenix-4.14.0-cdh5.14.2-bin/bin/

重启hbase集群,使Phoenix的jar包生效

node01执行以下命令来重启hbase的集群

cd /kkb/install/hbase-1.2.0-cdh5.14.2/
bin/stop-hbase.sh 
bin/start-hbase.sh

验证是否成功

在phoenix/bin下输入命令, 进入到命令行,接下来就可以操作了

node02执行以下命令,进入phoenix客户端

cd /kkb/install/apache-phoenix-4.14.0-cdh5.14.2-bin/
bin/sqlline.py node01:2181

phoenix的使用

  • 批处理方式的使用

node02执行以下命令创建user_phoenix.sql文件,内容如下:

mkdir -p /kkb/install/phoenixsql
cd /kkb/install/phoenixsql/
vim user_phoenix.sql

create table if not exists user_phoenix (state varchar(10) NOT NULL,  city varchar(20) NOT NULL,  population BIGINT  CONSTRAINT my_pk PRIMARY KEY (state, city));

node02执行以下命令,创建user_phoenix.csv数据文件

cd /kkb/install/phoenixsql/
vim user_phoenix.csv

NY,New York,8143197
CA,Los Angeles,3844829
IL,Chicago,2842518
TX,Houston,2016582
PA,Philadelphia,1463281
AZ,Phoenix,1461575
TX,San Antonio,1256509
CA,San Diego,1255540
TX,Dallas,1213825
CA,San Jose,912332

创建user_phoenix_query.sql文件

cd /kkb/install/phoenixsql
vim user_phoenix_query.sql

select state as "userState",count(city) as "City Count",sum(population) as "Population Sum" FROM user_phoenix GROUP BY state; 

执行sql语句

cd /kkb/install/phoenixsql
    
/kkb/install/apache-phoenix-4.14.0-cdh5.14.2-bin/bin/psql.py  node01:2181 user_phoenix.sql user_phoenix.csv  user_phoenix_query.sql
  • 命令行方式

执行命令

cd /kkb/install/apache-phoenix-4.14.0-cdh5.14.2-bin/
bin/sqlline.py node01:2181

退出命令行方式

phoenix的命令都需要一个感叹号

!quit

建立employee的映射表

进入hbase客户端,创建一个普通表employee,并且有两个列族 company 和family

node01执行以下以下命令进入hbase 的shell客户端

cd /kkb/install/hbase-1.2.0-cdh5.14.2/
bin/hbase shell
hbase(main):001:0> create 'employee','company','family'

数据准备

put 'employee','row1','company:name','ted'
put 'employee','row1','company:position','worker'
put 'employee','row1','family:tel','13600912345'
put 'employee','row2','company:name','michael'
put 'employee','row2','company:position','manager'
put 'employee','row2','family:tel','1894225698'

建立hbase到phoenix的映射表

node02进入到phoenix的客户端,然后创建映射表

cd /kkb/install/apache-phoenix-4.14.0-cdh5.14.2-bin
bin/sqlline.py node01:2181

CREATE TABLE IF NOT EXISTS "employee" ("no" VARCHAR(10) NOT NULL PRIMARY KEY, "company"."name" VARCHAR(30),"company"."position" VARCHAR(20), "family"."tel" VARCHAR(20), "family"."age" INTEGER) column_encoded_bytes=0;

说明:

       在建立映射表之前要说明的是,Phoenix是大小写敏感的,并且所有命令都是大写,如果你建的表名没有用双引号括起来,那么无论你输入的是大写还是小写,建立出来的表名都是大写的,如果你需要建立出同时包含大写和小写的表名和字段名,请把表名或者字段名用双引号括起来。

查询映射表数据

0: jdbc:phoenix:node1:2181> select * from "employee";
    +-------+----------+-----------+--------------+-------+
    |  no   |   name   | position  |     tel      |  age  |
    +-------+----------+-----------+--------------+-------+
    | row1  | ted      | worker    | 13600912345  | null  |
    | row2  | michael  | manager   | 1894225698   | null  |
    +-------+----------+-----------+--------------+-------+
    
0: jdbc:phoenix:node01:2181> select * from "employee" where "tel" = '13600912345';
    +-------+-------+-----------+--------------+-------+
    |  no   | name  | position  |     tel      |  age  |
    +-------+-------+-----------+--------------+-------+
    | row1  | ted   | worker    | 13600912345  | null  |
    +-------+-------+-----------+--------------+-------+
  • GUI方式

通过dbeaver来连接phoenix

第一步:准备两个文件

我们通过dbeaver来连接phoenix需要两个文件,第一个文件是phoenix-4.14.0-cdh5.14.2-client.jar,第二个文件是hbase-site.xml

进入到phoenix的安装目录,获取第一个文件

node02执行以下命令,进入到以下路径,获取第一个文件

cd /kkb/install/apache-phoenix-4.14.0-cdh5.14.2-bin

找到 phoenix-4.14.0-cdh5.14.2-client.jar  这个jar包,并将其下载下来备用

然后进入到node02服务器的hbase的安装配置文件路径,获取hbase-site.xml这个文件

cd /kkb/install/hbase-1.2.0-cdh5.14.2/conf/

找到hbase-site.xml,将其下载下来备用

第二步:将hbase-site.xml放到phoenix-4.14.0-cdh5.14.2-client.jar这个jar包里面去

我们在第一步找到了hbase-site.xml和phoenix-4.14.0-cdh5.14.2-client.jar 这两个文件之后,我们需要使用解压缩工具,将phoenix-4.14.0-cdh5.14.2-client.jar 这个jar包解压开,然后将hbase-site.xml放入到phoenix-4.14.0-cdh5.14.2-client.jar 这个jar包里面去。

第三步:通过dbeaver去连接phoenix

 

 

 

注意:如果连接不上,可能不是操作配置的问题,有可能是因为dbeaver软件的问题,将dbeaver软件重启几次试试看

第四步:创建数据库表,并实现sql进行操作

直接在phoenix当中通过sql语句的方式来创建表并进行查询

CREATE TABLE IF NOT EXISTS US_POPULATION (
      state CHAR(2) NOT NULL,
      city VARCHAR NOT NULL,
      population BIGINT
      CONSTRAINT my_pk PRIMARY KEY (state, city));

UPSERT INTO US_POPULATION (state, city, population) values ('NY','New York',8143197);
UPSERT INTO US_POPULATION (state, city, population) values ('CA','Los Angeles',3844829);

SELECT * FROM US_POPULATION WHERE population > 8000000;
  • JDBC调用方式

创建maven工程并导入jar包

<dependencies>
    <dependency>
        <groupId>org.apache.phoenix</groupId>
        <artifactId>phoenix-core</artifactId>
        <version>4.14.0-cdh5.14.2</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>
    <dependency>
        <groupId>org.testng</groupId>
        <artifactId>testng</artifactId>
        <version>6.14.3</version>
    </dependency>
    </dependencies>
    <build>
        <plugins>
            <!-- 限制jdk版本插件 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.0</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
        </plugins>
    </build>

代码开发

import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
import java.sql.*;
public class PhoenixSearch {
    private Connection connection;
    private Statement statement;
    private ResultSet rs;
    @BeforeTest
    public void init() throws SQLException {
        //定义phoenix的连接url地址
        String url="jdbc:phoenix:node01:2181";
        connection = DriverManager.getConnection(url);
        //构建Statement对象
        statement = connection.createStatement();
    }
    @Test
    public void queryTable() throws SQLException {
        //定义查询的sql语句,注意大小写
        String sql="select * from US_POPULATION";
        //执行sql语句
        try {
            rs=statement.executeQuery(sql);
            while(rs.next()){
                System.out.println("state:"+rs.getString("state"));
                System.out.println("city:"+rs.getString("city"));
                System.out.println("population:"+rs.getInt("population"));
                System.out.println("-------------------------");
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            if(connection!=null){
                connection.close();
            }
        }
    }
}

此博文仅供学习参考,如有错误欢迎指正。

上一篇《大数据-MaxWell

下一篇《大数据-Spark(七)

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值