Apache Phoenix 入门,apachephoenix入门


Apache Phoenix 入门

概述

Hbase适合存储大量的对关系运算要求低的NOSQL数据,受Hbase 设计上的限制不能直接使用原生的PAI执行在关系数据库中普遍使用的条件判断和聚合等操作。Hbase很优秀,一些团队寻求在Hbase之上提供一种更面向普通开发人员的操作方式,Apache Phoenix即是。

Phoenix 基于Hbase给面向业务的开发人员提供了以标准SQL的方式对Hbase进行查询操作,并支持标准SQL中大部分特性:条件运算,分组,分页,等高级查询语法。

注:不对Phoenix 架构做整体介绍,仅用示例来演示如何操作,如何在不同场景下使用。

集群环境

ZK:host101,host102,host103                                      

Hadoop:host102[主],host103[备],host104,host105,host106

Hbase:host102[备],host103[主],host104,host105,host106 

Phoenix:host104[主]

注意事项: Hbase和Hadoop的版本号需要兼容

Phoneix安装

1.        下载: http://phoenix.apache.org/           得到apache-phoenix-4.10.0-HBase-1.2-bin.tar.gz

2.        解压到主机host104  /app/ 路径下

3.        分发安装目录下phoenix-4.10.0-HBase-1.2-server.jar 文件到 Hbase 所有节点的安装目录下lib目录中.

4.        重启Hbase 集群

在 Linux shell中操作

在Phoenix安装目录下bin子目录下执行  ./sqlline.py  host101 进入Phoenix shell环境。

1.        创建表

create table itinfo(id varchar primary key,name varchar,ageinteger);

2.        列出表

!tables;

3.        插入一条数据

upsert into itinfo values('1001','itxiaofen',26);

修改数据多插入几条.

4.        查询全部数据,条件运算,排序,分组

select * from itinfo;

select * from itinfo where age>=27;

select * from itinfo order by age desc;

select age,count(1) from itinfo group by age ;

5.        登录Hbase shell查看有什么变化

Hbase安装目录下下执行bin/hbase shell

列出所有Hbase表执行list,经确认Phoenix帮我们在Hbase中做了很多事情,Hbase表的创建,数据插入等操作。以SYSTEM.开始的表为Phoenix的元数据表。

6.        总结一下,上次通过Phoenix提供的API以SQL的方式来操作Hbase表,Phoenix在集群中并行高校的拆分SQL调用Hbase API执行扫描和聚合操作,性能请参考Phoenix官网介绍

借助Squirrel户端操作

SQuirreL Java程序编写的DB客户端程序,允许通过SQL查看数据库内容、执行SQL等。

1.        下载

https://jaist.dl.sourceforge.net/project/squirrel-sql/3-snapshots/snapshot-20170703_2250/squirrel-sql-snapshot-20170703_2250-standard.jar 执行安装

2.        拷贝Phoenix 安装路径下phoenix-4.10.0-HBase-1.2-client.jar 到SQuirreL 安装目录下lib目录中。

3.        打开SQuirreL 安装路径下squirrel-sql.jar 启动应用

4.        关联驱动程序,单机Dirvers ->添加->扩展类路径  将phoenix-4.10.0-HBase-1.2-client.jar加入,执行List Drivers扫描驱动类, OK,如下

5.        单机Aliasses,添加选择上一步配置的驱动名称[蓝色为驱动可用]

jdbc:phoenix:host101等价于JDBC中的URL host101为ZK地址,单机Test 测试成功,确认后连接。

6.        查看表

7.        执行SQL

8.        总结,通过客户端可以方便的使用类似操作Oracle,MySQL的数据库的方式对待Hbase

 

Java 编程,借力JdbcTemplate

         这里以SpringBoot项目结合JdbcTemplate展示如何来使用。

1.        创建SpringBoot项目,依赖如下

<dependencies>

 

         <!-- 纠正版本 -->

         <dependency>

                   <groupId>com.google.guava</groupId>

                   <artifactId>guava</artifactId>

                   <version>13.0.1</version>

         </dependency>

         <!-- 必须,且版本要对应 -->

         <dependency>

                   <groupId>org.apache.phoenix</groupId>

                   <artifactId>phoenix-core</artifactId>

                   <version>4.10.0-HBase-1.1</version>

                   <scope>runtime</scope>

                   <exclusions>

                            <exclusion>

                                     <groupId>jdk.tools</groupId>

                                     <artifactId>jdk.tools</artifactId>

                            </exclusion>

                            <exclusion>

                                     <groupId>org.slf4j</groupId>

                                     <artifactId>slf4j-log4j12</artifactId>

                            </exclusion>

                   </exclusions>

         </dependency>

         <!-- JDBC -->

         <dependency>

                   <groupId>org.springframework.boot</groupId>

                   <artifactId>spring-boot-starter-jdbc</artifactId>

         </dependency>

         <dependency>

                   <groupId>org.springframework.boot</groupId>

                   <artifactId>spring-boot-starter</artifactId>

         </dependency>

         <dependency>

                   <groupId>org.springframework.boot</groupId>

                   <artifactId>spring-boot-configuration-processor</artifactId>

                   <optional>true</optional>

         </dependency>

</dependencies>

2.        定义实体Bean

publicclass ItInfo {

         private String id;

         private String name;

         private String age;

 

         public String getId() {

                   return id;

         }

 

         public void setId(String id) {

                   this.id = id;

         }

 

         public String getName() {

                   return name;

         }

 

         public void setName(String name) {

                   this.name = name;

         }

 

         public String getAge() {

                   return age;

         }

 

         public void setAge(String age) {

                   this.age = age;

         }

 

         @Override

         public String toString() {

                   return "ItInfo[id=" + id + ", name=" + name + ", age=" + age +"]";

         }

}


3.        application.yml ,配置Phoenix数据源信息

spring:

  datasource:

    url:jdbc:phoenix:host101,host102,host103:2181/hbase

    driver-class-name:org.apache.phoenix.jdbc.PhoenixDriver

    username:

    password:


4.        主程序,查询全部的IiInfo表的对象并封装为List<ItInfo> 结构

@SpringBootApplication

publicclass PhoneixApplication {

         public static void main(String[] args)throws Exception {

                   ConfigurableApplicationContextcontext = SpringApplication.run(PhoneixApplication.class, args);

                   JdbcTemplate jdbc =context.getBean(JdbcTemplate.class);

                   List<ItInfo> itInfos =jdbc.query("select * from itinfo", newBeanPropertyRowMapper<ItInfo>(ItInfo.class));

                   System.out.println(itInfos);

         }

 

         // 数据源

         @Bean

         @ConfigurationProperties(prefix ="spring.datasource")

         public DataSource dataSource() {

                   returnDataSourceBuilder.create().type(DriverManagerDataSource.class).build();

         }

 

         // JdbcTemplate

         @Bean

         public JdbcTemplatejdbcTemplate(DataSource dataSource) {

                   return newJdbcTemplate(dataSource);

         }

}

运行结果如下:

5.        总结一下,通过Phoenix 操作Hbase可以使用传统的JDBC的方式来处理Hbase中的数据,很多支持标准JDBC的优秀框架仍然适合于Phoenix

相关内容

    暂无相关文章