本文主要是介绍phoenix操作注意点,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一.与hbase 的映射
1.空表格映射
在phoenix中创建表格,会自动映射到hbase中,我们可以通过hbase shell 来查看。举个例子,我们创建了一个表,
create table hbase_col_test(pk varchar not null primary key, //primary key 映射到hbase 中的rowkey"cf1"."col1" varchar , //对应hbase的列族cf1,列名为col1"cf1"."col2" varchar , //对应cf1:col2"cf2"."col3" varchar //对应cf2:col3);
创建的时候注意格式的书写。
2.对于已经存在的hbase表做映射
通过创建视图来查询hbase表,我们举个例子,对于一个列族的查询:
create view "test" (k varchar not null primary key, //主键对应hbase 中的rowkey"val" varchar)default_column_family='cf1';//列名与hbase 中对应即可
对于多个列族的查询,可以这样写:
create view "hbase_to_phoe"(pk varchar not null primary key, -----主键对应"addr"."province" varchar, -----addr列族,province列(hbase中定义的列)"school"."name" varchar); -----school列族,name列(hbase中定义列)
二 .导入数据的方式
这里我只介绍中小数据级导入,我们先进入{Phoenix_dir}/bin路径下,然后通过./psql.py 导入数据:
./psql.py -t HBASE_COL_TEST -d $'\t' $zk_addr:2181 ../data/hbase_col_data.csv (HBASE_COL_TEST是表名,'\t'是数据分割符,导入数据时表明必须是大写,不然可能无法导入)
三 . java API 操作hbase
准备工作:
- 从集群中拷贝以下文件:core-site.xml,hbase-site.xml,hdfs-site.xml放在工程src下。
- 把phoenix的phoenix-{version}-client.jar 和phoenix-core-{version}.jar添加到classpath中
- 配置寄存中各个节点的hosts文件,把客户端的hostname:IP添加进去(不添加好像也没有影响)
- 在客户端host文件中加入集群的hostname 和IP
工程截图如下所示:
具体Phoenix_Test.java代码如下:
package com.lanyizheng.phoenix;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class Phoenix_Test {public static void main(String[] args) throws SQLException {//我这里是访问远程服务器上的hbase服务,所以在程序中设置hbase.tmp.dir 的路径System.setProperty("hbase.tmp.dir", "/tmp");try{//驱动加载 Class.forName("org.apache.phoenix.jdbc.PhoenixDriver");}catch(Exception e){e.printStackTrace();}//配置zookeepr地址,后面的就是常见的jdbc操作String url="jdbc:phoenix:bj-g2hdp1,bj-g2hdp2,bj-g2hdp3:2181";Connection conn=DriverManager.getConnection(url);Statement statement=conn.createStatement();String sql="select count(1) as num from web_stat";long time=System.currentTimeMillis();ResultSet rs=statement.executeQuery(sql);while(rs.next()){int count=rs.getInt("num");System.out.println("row count is"+count);}long timeUsed=System.currentTimeMillis()-time;System.out.println("time"+timeUsed+"mm");rs.close();statement.close();conn.close();}
}
这篇关于phoenix操作注意点的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!