Apache Phoenix 入门,apachephoenix入门
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
评论暂时关闭