Hadoop之SQL on HBase

1.  HBase的特性

    1.  HBase没有数据类型

    2.  HBase不支持创建索引 

2.  Phoenix的作用

    1.  为了解决HBase上面的问题

    2.  他支持DDL,DML,支持事务,支持二级索引,遵循ANSI SQL标准

3.  Phoenix的安装

    1.  下载Phoenix

        https://dlcdn.apache.org/phoenix/phoenix-5.1.2/phoenix-hbase-2.1-5.1.2-bin.tar.gz

    2.  解压并设置软链接

        tar -zxvf phoenix-hbase-2.1-5.1.2-bin.tar.gz

        ln -s phoenix-hbase-2.1-5.1.2-bin phoenix

    3.  复制phoenix的jar包到/usr/local/hbase/lib目录下

        cp phoenix-server-hbase-2.1-5.1.2.jar /usr/local/hbase/lib/

    4.  修改属主

        chown -R hadoop.hadoop phoenix-server-hbase-2.1-5.1.2.jar

    5.  修改环境变量       

#phoenix
export PHOENIX_HOME=/usr/local/phoenix
export PHOENIX_CLASSPATH=$PHOENIX_HOME
export PATH=$PATH:$PHOENIX_HOME/bin

        source /etc/profile

    6.  重启hbase

    7.  使用phoenix连接hbase

        sqlline.py 172.16.1.228,172.16.1.229,172.16.1.230:2181

    8.  phoenix退出hbase连接会话

        !exit                    

4.  phoenix的使用

    1.  常用操作

        1.  库操作

            1.  开启hbase支持phoenix创建数据库,在hbase的hbase-site.xml文件添加属性

<property>
        <name>phoenix.schema.isNamespaceMappingEnabled</name>
        <value>true</value>
</property>
<property>
        <name>phoenix.schema.mapSystemTablesToNamespace</name>
        <value>true</value>
</property>                         

                还需要在phoenix的hbase-site.xml文件添加上面的属性

            2.  创建库

                create schema "ceshi";

            3.  删除库

                drop schema if exists "tank_schema";

            4.  切换数据库

                use "ceshi";              

        2.  表操作

            1.  创建表

CREATE TABLE IF NOT EXISTS student(
id VARCHAR primary key, 
name VARCHAR,
addr VARCHAR);     

            2.  删除表

                drop table "ceshi"."STUDENT1"; 

            3.  查看所有表

                !tables或者!table

            4.  添加字段

                alter table "ceshi"."STUDENT" add "sex" varchar(18);                

            5.  删除字段

                alter table "ceshi"."STUDENT" drop column"sex" ;                               

        3.  表的增删改查

            1.  插入数据

                upsert into student values('1001','KOBE','LA');

            2.  查看数据

                select * from student1 where id='1001';

            3.  删除数据

                delete from student1 where id ='1001';

            4.  修改数据

                upsert into student values('1001','ONEAL','LA');

    2.  表的映射

        默认情况下,Phoenix无法查看HBase中已存在的表,需要创建HBase表到Phoenix的映射

        Phoenix中创建的新表可以在HBase中查看到,HBase会自动将表名转成大写

        1.  映射配置

            1.  在HBase中创建表

                create 'yangjianbo','info','grade'

                put 'yangjianbo','s001','info:name','Tom'

                put 'yangjianbo','s001','info:name','houzhen'                

            2.  在Phoenix创建视图并映射HBase中的表

                CREATE VIEW "yangjianbo" (pk varchar PRIMARY KEY,"info"."name" VARCHAR,"grade"."money" VARCHAR);

            3.  在Phoenix删除视图

                drop view "yangjianbo";  

                HBase的原表不会被删除

    3.  二级索引

        HBase只支持rowkey上的索引,不支持其它字段的索引

        Phoenix支持在其它字段上添加索引

        1.  启用二级索引

            修改所有hbase的hbase-site.xml文件,添加以下内容

      <property>
        <name>hbase.regionserver.wal.codec</name>
        <value>org.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec</value>
      </property>

        2.  索引分类

  

            

                                 

posted @ 2022-07-13 15:14  奋斗史  阅读(62)  评论(0)    收藏  举报