失效链接处理 |
Phoenix文档 PDF 下载
本站整理下载:
提取码:kova
相关截图:
主要内容:
安装步骤
1、配置Phoenix的parcel下载地址https://archive.cloudera.com/phoenix/6.2.0/parcels/
2、分配并激活Phoenix的parcel包
3、将Phoenix的CSD jar包放在Cloudera-scm-server机器上的/opt/cloudera/csd/目录下;并重启cloduera-scm-server
4、Cloudera-manager页面添加Phoenix服务并勾选开启kerberos即可。
5、修改hbase配置:
hbase-site.xml 的 HBase 服务高级配置代码段(安全阀)和hbase-site.xml 的 HBase 客户端高级配置代码段(安全阀)都需要添加如下三个配置:
6、重启Phoenix、hbase并重新部署客户端配置
7、至此,Phoenix安装结束。
Phoenix简介
Phoenix作为应用层和HBASE之间的中间件,以下特性使它在大数据量的简单查询场景有着独有的优势
二级索引支持(global index + local index)
编译SQL成为原生HBASE的可并行执行的scan
在数据层完成计算,server端的coprocessor执行聚合
下推where过滤条件到server端的scan filter上
利用统计信息优化、选择查询计划(5.x版本将支持CBO)
skip scan功能提高扫描速度
对于CDH集群集成的Phoenix一般可以使用以下两种方式访问Phoenix
1.phoenix-sqlline
2.JDBC-API
连接方式
Phoenix-sqlline
1、由于开启了kerberos,登录服务器后应先kinit成具有相应权限的用户。
kinit –kt phoenix.keytab phoenix/qdedhtest3@XXX.COM
2、控制台输入phoenix-sqlline
3、展示所有表:
4、退出: !table
5、其他详细命令见:!help
JDBC-API
有两种连接方式,一是jdbc:phoenix:zookeeper,这种方式是直连zookeeper,比较重。
我们推荐使用jdbc:phoenix:thin:url这种是连接phoenix query server,比较轻量化。
Maven依赖:
<dependency>
<groupId>com.aliyun.phoenix</groupId>
<artifactId>ali-phoenix-shaded-thin-client</artifactId>
<version>5.2.1-HBase-2.x</version>
</dependency>
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
<version>3.12.0</version>
</dependency>
Java API 示例:
package util;
import org.apache.hadoop.security.UserGroupInformation;
import org.apache.log4j.Logger;
import java.io.IOException;
import java.sql.*;
public class phoenixUtil {
private static Logger log = Logger.getLogger(phoenixUtil.class);
/*
* 获取连接
*/
public Connection getConn() {
/*
*jar包部署在linux系统中,会默认使用/etc/krb5.conf文件
* 若部署在windows系统中,则需自己指定krb5.conf路径
*/
if (System.getProperty("os.name").toLowerCase().startsWith("win")) {
System.setProperty("java.security.krb5.conf", "F:\\keytab\\krb5.conf");
}
Connection conn = null;
try {
Class.forName("org.apache.phoenix.queryserver.client.Driver");
String url="jdbc:phoenix:thin:url=http://qdedhtest3:8765;serialization=PROTOBUF;authentication=SPNEGO;" +
"principal=phoenix/qdedhtest3@XXX.COM;keytab=F:\\keytab\\phoenix.keytab";
conn = DriverManager.getConnection(url);
} catch (ClassNotFoundException e) {
log.error(e.getMessage());
e.printStackTrace();
} catch (SQLException e1) {
log.error(e1.getMessage());
e1.printStackTrace();
}
return conn;
}
/**
* 关闭资源
* @param conn
* @param statement
* @param rs
*/
public void closeRes(Connection conn, Statement statement, ResultSet rs) {
try {
if (conn != null) {
conn.close();
}
if (statement != null)
statement.close();
if (rs != null)
rs.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 通过phoenix 创建表、插入数据、索引、查询数据
* 写入数据conn.setAutoCommit(false);
* 删除数据conn.setAutoCommit(true);
* phoenix demo
*/
public void phoenixDemo() {
Connection conn = getConn();
ResultSet rs = null;
Statement stmt = null;
try {
stmt = conn.createStatement();
stmt.execute("drop table if exists dl_yh.test_java");
stmt.execute("create table dl_yh.test_java (mykey integer not null primary key, mycolumn varchar)");
stmt.execute("create index test_idx on dl_yh.test_java(mycolumn)");
for (int i = 0; i < 100; i++) {
stmt.executeUpdate("upsert into dl_yh.test_java values ("+ i +",'The num is "+ i +"')");
}
conn.commit();
PreparedStatement statement = conn.prepareStatement("select mykey from dl_yh.test_java where mycolumn='The num is 88'");
rs = statement.executeQuery();
while (rs.next()) {
System.out.println("-------------The num is ---------------" + rs.getInt(1));
}
} catch (SQLException e) {
log.error(e.getMessage());
e.printStackTrace();
} finally {
closeRes(conn,stmt,rs);
}
}
public static void main(String[] args) {
phoenixUtil phoenixUtil = new phoenixUtil();
phoenixUtil.phoenixDemo();
}
}
|