HBase集成Phoenix

一、软件下载

1、访问:http://phoenix.apache.org/

2、点击:

3、进入以下内容:点击

4、跳转到

5、跳转到

6、点击安装包,进入

点击进行下载:

二、安装

phonenix主要是与hbase进行集成,也可以称之为hbase sql的框架。

 进入到phonenix的解压文件夹中,将phoenix-core-4.13.1-HBase-1.2server.jar

复制到hbase中的lib目录下。重启hbase

三、使用客户端

下载http://squirrel-sql.sourceforge.net/

点击出现以下界面:

下载之后在

进入到当前目录。运行java –jar squirrel-sql-3.8.0-standard.jar

进入下一步:

进入到安装目录:

四、客户端集成Hbase

1、  将phoenix的client包复制到工具的lib目录

2、让工具可以加载我们的phoneix的连接,加入驱动

操作:

点击创建与hbase的连接:

创建一张表:

五、可能会遇到的问题

1、  无法看到之前已经创建的表

        创建一张与hbase同名的表,或者直接创建一张视图表

2、  phoenix创建的表,手动put之后,查询不到数据

        因为phoenix与java创建表之后,phoenix创建的表名不全大写,就算sql中写的小写也是一样会转成大写

3、  如果解决创建表时表名为大写

  如果之前已经有一个小写的表名,如何解决关联问题?

    注意:表名一定要加双引号,不然会将语句自动转为全大写的。

4、  单引号与双引号的区分

4.1:当值上面加上双引号会查询不到你想要的结果

        目前创建的表可以在hbase中查看

             1、当我们通过工具创建一张表之后,无法知道该表的列族。但是要使用put的时候,又需要指定列族名?

                 可以通过界面或者是desc命令的方式查看,默认创建的列族名为"0"

             2、当在hbase shell中put了相应的数据之后,但是在工具里面没有看到相应的数据?

                 可以发现hbase中的列名字是要区分大小写。?????

             3、当hbase中已经有表,但是在工具里面是看不到该表的? 

                 解决办法,创建一张同名的表

                 当然后工具创建表的时候,会将表名全部改为大写。

                 如果hbase中的表所有的字母全是大写的话,工具在创建的时候会自动关联。

                 如果hbase中是有非字母全大写的话,可以在工具中创建时为表名写上【双引号】

             4、数据关联

                   如果是先在hbaes中创建的表,在到工具中去创建的时候,需要为字段加上列族名

                                       create table "java_table3"(

                                         "pkid" varchar(512) primary key,

                                         "cf01"."name" varchar(512)

                                       )

                      如果是通过工具直接创建的话,也需要加上列族名,不然会用0来作为列族,但是数据关联不上。

      只能操作结构化的数据,在结构化之外的字段是查询不了的

六、java操作

<dependency>
    <groupId>org.apache.phoenix</groupId>
    <artifactId>phoenix-core</artifactId>
     <version>4.13.1-HBase-1.2</version>
 </dependency>
 
        Class.forName("org.apache.phoenix.jdbc.PhoenixDriver");
        String url = "jdbc:phoenix:master,slave01,slave02";
        Connection conn = DriverManager.getConnection(url);
        PreparedStatement preparedStatement = conn.prepareStatement("select * from \"java_table2\"");
        ResultSet resultSet = preparedStatement.executeQuery();
        while(resultSet.next()){
            System.out.println(resultSet.getString(1));
        }
        resultSet.close();
        preparedStatement.close();
        conn.close();

猜你喜欢

转载自www.cnblogs.com/yfb918/p/10643190.html