精华内容
下载资源
问答
  • Phoenix

    2019-10-25 13:48:55
    Phoenix
  • phoenix

    2020-04-08 09:09:11
    第1章phoenix的安装 对于HBase而言,如果想精确地定位到某行记录,唯一的办法是通过rowkey来查询。如果不通过rowkey来查找数据,就必须逐行地比较每一列的值,即全表扫瞄。对于较大的表,全表扫瞄的代价是不可接受...

     

    第1章phoenix的安装

    对于HBase而言,如果想精确地定位到某行记录,唯一的办法是通过rowkey来查询。如果不通过rowkey来查找数据,就必须逐行地比较每一列的值,即全表扫瞄。对于较大的表,全表扫瞄的代价是不可接受的。

     

    但是,很多情况下,需要从多个角度查询数据。例如,在定位某个人的时候,可以通过姓名、身份证号、学籍号等不同的角度来查询,要想把这么多角度的数据都放到rowkey中几乎不可能(业务的灵活性不允许,对rowkey长度的要求也不允许)。

     

    所以,需要secondary index来完成这件事。secondary index的原理很简单,但是如果自己维护的话则会麻烦一些。现在,Phoenix已经提供了对HBase secondary index的支持,下面将说明这样用Phoenix来在HBase中创建二级索引。

     

    1.1、下载地址http://www.apache.org/dyn/closer.lua/phoenix/apache-phoenix-4.14.1-HBase-1.3/bin/apache-phoenix-4.14.1-HBase-1.3-bin.tar.gz

    1.2上传到/opt/software/ 解压tar -zxvf apache-phoenix-4.14.1-HBase-1.3-bin.tar.gz -C /opt/module 并改名为phoenix

    1.3 在/opt/module/phoenix/下将core和client这俩个包拷贝到各个节点的hbase的lib下面

        scp ./phoenix-core-4.14.1-HBase-1.3.jar  slave02:/opt/module/hbase-1.3.1/lib/

        scp ./phoenix-core-4.14.1-HBase-1.3.jar  slave03:/opt/module/hbase-1.3.1/lib/

        scp ./phoenix-4.14.1-HBase-1.3-client.jar  slave03:/opt/module/hbase-1.3.1/lib/

        scp ./phoenix-4.14.1-HBase-1.3-client.jar  slave02:/opt/module/hbase-1.3.1/lib/

    1.4将hbase的conf下的hbase-site.xml,和hadoop下面的core-site.xml和hdfs-site.xml拷贝到phoenix的bin/下面

    1.5在root权限下配置phoenix的环境变量 在/etc/profile 下添加如下内容

    #phoenix

    export PHOENIX_HOME=/opt/module/phoenix

    export PHOENIX_CLASSPATH=$PHOENIX_HOME

    export PATH=$PATH:$PHOENIX_HOME/bin

     

    1.6启动zookeeper,hadoop,hbase

    1.7启动phoenix,bin/sqlline.py master01,slave02,slave03:2181

     第二章phoenix表操作

    2.1     创建表

    CREATE TABLE IF NOT EXISTS us_population (

    stateCHAR(2) NOT NULL,

    cityVARCHAR NOT NULL,

    populationBIGINT

    CONSTRAINTmy_pk PRIMARY KEY (state, city));

          在phoenix中,默认情况下,表名等会自动转换为大写,若要小写,使用双引号,如"us_population"

    2.2     显示所有表

           !table或

           !tables

    2.3     插入记录

          upsert into us_population values('NY','NewYork',8143197);

    2.4     查询记录

          select * from us_population ;

           select * from us_population wherestate='NY';

    2.5     删除记录

           delete from us_population wherestate='NY';

    2.6     删除表

           drop table us_population;

    2.7     退出命令行

          !quit

          具体语法参照官网

    https://phoenix.apache.org/language/index.html#upsert_select

    2.8    phoenix表映射

          默认情况下,直接在hbase中创建的表,通过phoenix是查看不到的,如图1和图2,US_POPULATION是在phoenix中直接创建的,而test是在hbase中直接创建的,默认情况下,在phoenix中是查看不到test的。

     

    图1 phoenix命令行中查看所有表

     

    图2 hbase命令行中查看所有表

          如果需要在phoenix中操作直接在hbase中创建的表,则需要在phoenix中进行表的映射。映射方式有两种:视图映射和表映射。

          hbase 中test的表结构如下,两个列簇name、company.

    Rowkey

    name

    company

    empid

    firstname

    lastname

    name

    address

     

    2.8.1   hbase命令行中创建表

           $ cd /home/hadoop/hbase/bin

           $ ./hbase shell 进入hbase命令行

           create 'test','name','company' 创建表,如下图

         

          下面的视图映射和表映射均基于该表。

    2.8.2    视图映射

        Phoenix创建的视图是只读的,所以只能用来做查询,无法通过视图对源数据进行修改等操作。而且相比于直接创建映射表,视图的查询效率会低,原因是:创建映射表的时候,Phoenix会在表中创建一些空的键值对,这些空键值对的存在可以用来提高查询效率。

           1)创建视图

    create view"test"(empid varchar primarykey,"name"."firstname" varchar,"name"."lastname"varchar,"company"."name"     varchar,"company"."address"varchar);

           2)删除视图

           drop view "test";

    2.8.3   表映射

      使用Apache Phoenix创建对HBase的表映射,有两种方法:

        1) 当HBase中已经存在表时,可以以类似创建视图的方式创建关联表,只需要将create view改为create table即可。

        2)当HBase中不存在表时,可以直接使用create table指令创建需要的表,并且在创建指令中可以根据需要对HBase表结构进行显示的说明。

        第1)种情况下,如在之前的基础上已经存在了test表,则表映射的语句如下:

    create table "test"(empid varchar primarykey,"name"."firstname"varchar,"name"."lastname"varchar,"company"."name" varchar,"company"."address"varchar);

         第2)种情况下,直接使用与第1)种情况一样的create table语句进行创建即可,这样系统将会自动在Phoenix和HBase中创建person_infomation的表,并会根据指令内的参数对表结构进行初始化。

    使用create table创建的关联表,如果对表进行了修改,源数据也会改变,同时如果关联表被删除,源表也会被删除。但是视图就不会,如果删除视图,源数据不会发生改变。

    2.8.4 使用spark对phoenix的读写

    请参考http://phoenix.apache.org/phoenix_spark.html

     

    select * from STOCK_SYMBOL

     

    scan "STOCK_SYMBOL"

     

    第三章 利用Phoenix为Hbase表创建二级索引

     

    3.1配置Hbase支持Phoenix创建二级索引

    https://blog.csdn.net/u011491148/article/details/45749807

    对于Hbase,如果想精确定位到某行记录,唯一的办法就是通过rowkey查询。如果不通过rowkey查找数据,就必须逐行比较每一行的值,对于较大的表,全表扫描的代价是不可接受的。

    3.1.1、修改Hbase的regionserver节点的hbase-site.xml配置文件

    <property>

    <name>hbase.regionserver.wal.codec</name>

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

    </property>

    <property>

     <name>hbase.region.server.rpc.scheduler.factory.class</name>

    <value>org.apache.hadoop.hbase.ipc.PhoenixRpcSchedulerFactory</value>

    <description>Factory to create the Phoenix RPC Scheduler that uses separate queues for index and metadata updates</description>

    </property>

    <property>

    <name>hbase.rpc.controllerfactory.class</name>

    <value>org.apache.hadoop.hbase.ipc.controller.ServerRpcControllerFactory</value>

    <description>Factory to create the Phoenix RPC Scheduler that uses separate queues for index and metadata updates</description>

    </property>

     

    注意:网上配置文档里有这一条,但在实际测试中(测试环境hbase-1.3.1,网上0.98.6),加入该条的regionserver会在hbase启动时失败,对应节点上没有HregionServer进程,去掉该配置后正常启动,且能正常创建local index。

    <property>

    <name>hbase.coprocessor.regionserver.classes</name>

    <value>org.apache.hadoop.hbase.regionserver.LocalIndexMerger</value>

    </property>

     

    还有一点,hbase-site.xml的zookeeeper的配置信息不能加2181,否则在创建local index的时候会报以下异常:

     

    正常配置

     

    3.1.2、修改Hbase的master节点的hbase-site.xml配置文件

    注意,如果master节点上也有regionserver,那么master节点配置如下,否则不需要regionserver的配置参数。

    <!-- phoenix master 配置参数 -->

            <property>

                    <name>hbase.master.loadbalancer.class</name>

                    <value>org.apache.phoenix.hbase.index.balancer.IndexLoadBalancer</value>

            </property>

            <property>

                    <name>hbase.coprocessor.master.classes</name>

                    <value>org.apache.phoenix.hbase.index.master.IndexMasterObserver</value>

            </property>

            <!-- phoenix regionserver 配置参数 -->

            <property>

                    <name>hbase.regionserver.wal.codec</name>

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

            </property>

    3.2创建索引

    配置好以上配置信息之后,重启Hbase,以下测试环境通过Phoenix映射Hbase中已有的表,数据量743569行,202M,当然也可以通过Bulkload直接在Phoenix创建表并插入数据影响Hbase。

    3.2.1、未创建索引信息时,用时6.08s

    select "uploader" from "hive_hbase_youtube" where "uploader"='karianahhk';

     

    3.2.2、创建索引,用时0.014s

    create index "youtube_index2" on "hive_hbase_youtube" ("info"."uploader")

     

     

    3.3关于Phoenix创建的HBase二级索引的更新问题

    3.3.1、在使用Phoenix创建Hbase的二级索引表之后,在Phoenix中看不到新建的索引表,但是

    在Hbase表中可以看到索引表。

     

    现在,有一个问题,可以看到同一个表中查询的数据却不同,原因是Jarry是直接向Hbase表插入的数据,而Phoenix已经为name字段创建索引,这时就查询不到Jarry,但是通过Phoenix的映射表向Hbase插入的数据数据查询索引字段可以查询到。

     

     

     

     

    3.3.2、问题是,如果绕开Phoenix向Hbase表插入数据,那么索引表就不会动态更新。

    解决方案:

    现有的解决方案是,在通过Hbase向表中插入数据时,我们要向索引表中也插入一条索引数据。那么查看以下索引表数据:

     

    其实索引的rowkey就是索引字段+rowkey,那么我们插入一条:

    put 'name',"Jarry\x001003",'0:_0','x'

     

    3.3.3、再次查询Phoenix中的索引字段,可以显示索引字段了。

     

    有关索引的扩展请访问

    https://blog.csdn.net/qq_41665356/article/details/80278125

    展开全文
  • Dbvisualizer 连接 Phoenix

    万次阅读 2020-08-09 15:38:03
    准备HBASE+Phoenix的环境、Dbvisualizer、和Phoenix驱动包(phoenix-xxx-client.jar) 1、创建Phoenix驱动 在Dbvisualizer中,依次选择Tools -> Driver Manager ->+(create a new driver) ,填写Name,URL ...

    准备HBASE+Phoenix的环境、Dbvisualizer、和Phoenix驱动包(phoenix-xxx-client.jar)

    1、创建Phoenix驱动

    在Dbvisualizer中,依次选择Tools -> Driver Manager -> (create a new driver) ,填写Name,URL Format可以省略,然后选择右侧的文件夹按钮,选择Phoenix驱动jar包,选择后会自动加载驱动并显示Driver Class。参考如下图

    2、连接Phoenix

    依次选择Tools -> Connection Wizard -> 填写连接名称 ->选择Phoenix驱动 -> 添加Database URL ,也就是Phoenix所在集群的zk连接,例如 jdbc:phoenix:zk1,zk2,zk3:2181:/hbase ,并不需要用户名和密码,连接信息如下

    如果hbase-site.xml配置了命名空间,需要在Driver Properties加入如下配置

    需要注意的是,Dbvisualizer连接的Phoenix没有显示默认Schema,如下红框表未显示

    可以使用SQuirreL SQL Client第三方工具连接Phoenix,思路同样是先创建驱动再进行连接,但是SQuirreL我用着非常不好用,稍微配置不合意就会连接不上,各随心意吧。

    下面给个链接,可以参考一下:https://blog.csdn.net/qq_40082253/article/details/107823525

    展开全文
  • Phoenix(凤凰)安装部署及介绍

    万次阅读 2020-01-07 08:46:37
    Phoenix介绍 phoenix,中文译为“凤凰”,很美的名字。Phoenix是由saleforce.com开源的一个项目,后又捐给了Apache基金会。它相当于一个Java中间件,提供jdbc连接,操作hbase数据表。Phoenix是一个HBase的开源SQL...

    Phoenix介绍

    phoenix,中文译为“凤凰”,很美的名字。Phoenix是由saleforce.com开源的一个项目,后又捐给了Apache基金会。它相当于一个Java中间件,提供jdbc连接,操作hbase数据表。Phoenix是一个HBase的开源SQL引擎。你可以使用标准的JDBC API代替HBase客户端API来创建表,插入数据,查询HBase数据。
    支持SQL的还有Hive和Impala。但是Hive和Impala还可以查询文本文件,Phoenix只能查Hbase。
    Phoenix是构建在HBase之上的SQL引擎。其查询效率相同或高于Hbase原生查询性能,同时提高了开发效率,降低学习成本。除此之外,Phoenix还做了一些增强功能来更多地优化性能,例如二级索引、跳过扫描过滤器优化IN,LIKE,OR查询、优化主键。

    Phoenix的安装部署

    1 、提前安装好ZK集群、hadoop集群、Hbase集群
    2、从对应的地址下载:http://mirrors.cnnic.cn/apache/phoenix/
    这里我们使用的是:apache-phoenix-4.14.0-		cdh5.14.2-bin.tar.gz
    3、上传、解压 
    将对应的安装包上传到对应的Hbase集群其中一个服务器的/export/softwares目录下
    解压:tar zxvf apache-phoenix-4.14.0-cdh5.14.2-	bin.tar.gz -C /export/servers/
    重命名:mv apache-phoenix-4.14.0-cdh5.14.2-bin/ 	phoenix
    4、配置
    (1) 将phoenix目录下的phoenix-4.14.0-cdh5.14.2-server.jar拷贝到各个 hbase的lib目录下。
    在hbase 配置值文件hbase-site.xml文件中添加配置
    <property>
    <name>hbase.regionserver.wal.codec</name>
    <value>org.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec</value>
    </property>
    <property>
    <name>zookeeper.znode.parent</name>
    <value>/hbase</value>
    </property>
    同步至所有hbase节点后,将hbase-site.xml拷贝到phoenix/bin目录下
    (2)重启hbase集群,使Phoenix的jar包生效。
    5、验证是否成功
    在phoenix/bin下输入命令:
    端口可以省略
    [root@node01 bin]# ./sqlline.py node01:2181
    
    
    输入!tables 查看都有哪些表。SYSTEM为Phoenix系统表,系统表中维护了用户表的元数据信息。
    
    退出Phoenix。输入!quit  或!q
    

    Phoenix使用

    Phoenix可以有4种方式调用:

    批处理方式
    命令行方式
    GUI方式
    JDBC调用方式

    (1)批处理方式

    A: 创建user_phoenix.sql文件
    内容如下
    CREATE TABLE IF NOT EXISTS user_phoenix ( 
    state CHAR(2) NOT NULL,  
    city VARCHAR NOT NULL, 
    population BIGINT  
    CONSTRAINT my_pk PRIMARY KEY (state, city)
    );
    B: 创建user_phoenix.csv数据文件
    NY,New York,8143197
    CA,Los Angeles,3844829
    IL,Chicago,2842518
    TX,Houston,2016582
    PA,Philadelphia,1463281
    AZ,Phoenix,1461575
    TX,San Antonio,1256509
    CA,San Diego,1255540
    TX,Dallas,1213825
    CA,San Jose,912332
    C: 创建user_phoenix_query.sql文件
    内容为:
    SELECT state as "State",count(city) as "City 	Count",sum(population) as "Population Sum" FROM user_phoenix GROUP BY state ORDER BY sum(population) DESC; 
    D: 执行
    python /export/servers/phoenix-4.14.0-cdh5.14.2/bin/psql.py node01:2181 user_phoenix.sql user_phoenix.csv  user_phoenix_query.sql
    这条命令同时做了三件事:创建表、插入数据、查询结果
    
    用Hbase shell 看下会发现多出来一个 USER_PHOENIX 表,用scan 命令查看一下这个表的数据
    
    结论:
    之前定义的Primary key 为state,city, 于是Phoenix就把输入的state,city的值拼起来成为rowkey
    其他的字段还是按照列名去保存,默认的列族为0
    还有一个0:_0这个列是没有值的,这个是Phoenix处于性	能方面考虑增加的一个列,不用管这个列
    

    (2) 命令行方式

    A: 执行命令
    ./sqlline.py  node01:2181 可以进入命令行模式
    B: 相关命令 
    开头需要一个感叹号
    使用help可以打印出所有命令
    !all          	对所有当前连接执行指定的SQL
    !autocommit   	打开或关闭自动提交模式
    !batch        	启动或执行一批语句
    !brief        	关闭详细模式
    !call         	执行可调用语句
    !close        	关闭与数据库的当前连接
    !closeall     	关闭所有当前打开的连接
    !columns      	列出指定表的所有列
    !commit       	提交当前事务(如果自动提交已关闭)
    !connect      	打开与数据库的新连接。
    !dbinfo       	提供有关数据库的元数据信息
    !describe     	描述一个表
    !dropall      	删除当前数据库中的所有表
    !exportedkeys 	列出指定表的所有导出键
    !go           	选择当前连接
    !help         	打印命令使用情况摘要
    !history      	显示命令历史记录
    !importedkeys 	列出指定表的所有导入键
    !indexes      	列出指定表的所有索引
    !isolation    	为此连接设置事务隔离
    !list         	列出当前连接
    !manual       	显示sqlline手册
    !metadata     	获取元数据信息
    !nativesql    	显示指定语句的本机SQL
    !outputformat 	设置显示结果的输出格式(表格、垂直、csv、tsv、xmlattrs、xmleelements)
    !primarykeys  	列出指定表的所有主键
    !procedures   	列出所有程序
    !properties   	连接到属性文件中指定的数据库
    !quit         	退出程序
    !reconnect    	重新连接到数据库
    !record       	将所有输出记录到指定文件
    !rehash       	获取用于完成命令的表和列名称
    !rollback     	回滚当前事务(如果关闭自动提交)
    !run          	从指定的文件运行脚本
    !save         	保存当前变量和别名
    !scan         	扫描已安装的JDBC驱动程序
    !script       	开始将脚本保存到文件
    !set          	设置sqlline变量
    
    C: 建立employee的映射表---数据准备
    数据准备然后我们来建立一个映射表,映射我之前建立	过的一个hbase表 employee.有2个列族 company、family
    create 'employee1','company','family'
    put 'employee1','row1','company:name','ted'
    put 'employee1','row1','company:position','worker'
    put 'employee1','row1','family:tel','136009123xx'
    put 'employee1','row2','company:name','michael'
    put 'employee1','row2','company:position','manager'
    put 'employee1','row2','family:tel','189422xxxx'
    scan 'employee1'
    在建立映射表之前要说明的是,Phoenix是大小写敏感	的,并且所有命令都是大写,如果你建的表名没有用双引号括起来,那么无论你输入的是大写还是小写,建立出来的表名都是大写的,如果你需要建立出同时包含大写和小写的表名和字段名,请把表名或者字段名用双引号括起来。
    你可以建立读写的表或者只读的表,他们的区别如下
    读写表:如果你定义的列簇不存在,会被自动建立出	来,并且赋以空值
    只读表:你定义的列簇必须事先存在
    
    D: 建立映射表
    0: jdbc:phoenix:node01>
    CREATE TABLE IF NOT EXISTS "employee1" (
    "no" VARCHAR(10) NOT NULL PRIMARY KEY, 
    "company"."name" VARCHAR(30),
    "company"."position" VARCHAR(20), 
    "family"."tel" VARCHAR(20), 
    "family"."age" INTEGER
    );
    这个语句有几个注意点
    IF NOT EXISTS可以保证如果已经有建立过这个表,配置不会被覆盖
    作为rowkey的字段用 PRIMARY KEY标定
    列簇用 columnFamily.columnName 来表示
    family.age 是新增的字段,之前建立测试数据的时候没	有建立这个字段的原因是在hbase shell下无法直接写入数字型,使用UPSERT 命令插入数据的时候就可以看到真正	的数字型在hbase 下是如何显示的
    建立好后,查询一下数据
    
    E: 查询映射表数据
    0: jdbc:phoenix:node01> SELECT * FROM "employee";
    +-------+----------+-----------+--------------+-------+
    |  no   |   name   | position  |     tel      |  age  |
    +-------+----------+-----------+--------------+-------+
    | row1  | ted      | worker    | 136009123xx  | null  |
    | row2  | michael  | manager   | 189422xxxx  | null  |
    +-------+----------+-----------+--------------+-------+
    
    F: 插入数据、更改数据
    

    插入或者更改数据在phoenix中使用upsert关键字,
    如果表中不存在该数据则插入,否则更新
    插入:
    0:jdbc:phoenix:node01>
    upsert into “employee” values(‘row3’,‘billy’,‘worker’,‘1697468xxxx’,33);

    修改数据:
    0: jdbc:phoenix:node01:2181>
    upsert into “employee” (“no”,“tel”) VALUES (‘row2’,‘1358888xxxx’);

    查询:
    0: jdbc:phoenix:node01:2181> select * from “employee”;
    ±------±---------±----------±-------------±------+
    | no | name | position | tel | age |
    ±------±---------±----------±-------------±------+
    | row1 | ted | worker | 136009123xx | null |
    | row2 | michael | manager | 13588888888 | null |
    | row3 | billy | worker | 1697468xxxx | 33 |
    ±------±---------±----------±-------------±------+
    3 rows selected (0.06 seconds)

    G: 查询Hbase数据
    hbase(main):056:0> scan 'employee'
    ROW                   COLUMN+CELL                                                                 
     row1            column=company:_0, 	timestamp=1484730892661, value=                          
     row1            column=company:name, 	timestamp=1484730892527, value=ted                     
     row1            column=company:position, timestamp=1484730892565, value=worker              
     row1            column=family:tel, timestamp=1484730892661, value=13600912345               
     row2            column=company:_0, timestamp=1484730892762, value=                          
     row2            column=company:name, timestamp=1484730892702, value=michael                 
     row2            column=company:position, timestamp=1484730892730, value=manager             
     row2            column=family:tel, timestamp=1484730892762, value=13588888888  
     row3            column=company:_0, timestamp=1484809036587, value=x                         
     row3            column=company:name, timestamp=1484809036587, value=billy                   
     row3            column=company:position, timestamp=1484809036587, value=worker              
     row3            column=family:age, timestamp=1484809036587, value=\x80\x00\x00!             
     row3            column=family:tel, timestamp=1484809036587, value=16974681345     
    company:_0这个列是没有值的,这个是Phoenix处于性能方面考虑增加的一个列,不用管这个列。
    

    (3): GUI方式

    A: squirrel下载
    从网址http://www.squirrelsql.org/下载相应版本的squirrel的安装jar包,比如下载squirrel-sql-3.7-standard.jar window版本。
    
    B:  squirrel安装
    Window下:通过cmd进入window控制台,
    输入 java -jar squirrel-sql-3.7-standard.jar 
    显示安装界面。
    
    C: squirrel配置连接Phoenix
    配置squirrel
    解压的phoenix-4.7.0-HBase-1.1-bin.tar.gz包的主目录下	将如下几个jar包拷贝到squirrel安装目录的lib下
    
     在安装目录下双击squirrel-sql.bat、点击左侧的Drivers,添加图标
    
    配置说明:
    在出现的窗口中填写如下项
     Name:就是个名字任意取就可以,这里使用phoenix
     Example URL :jdbc:phoenix:node01:2181(这里是你的phonenix的jdbc地址,注意端口也可以不写,多个用逗号隔开)
     Class Name:org.apache.phoenix.jdbc.PhoenixDriver
    
    D: 连接Phoenix
    点击Aiiasses,点击右边的添加图标
    配置说明:
    这里还是名字随意写(这里使用phoenix),driver要选择刚才配置的可用的driver,我们刚才配置的是phoenix
    url这里就是连接phonex的url选择了phoenix的driver以后自动出现也可以改,user name就是phoenix连接的主机的用户名,密码就是该机器的密码,点击自动登录
    然后点击test,显示连接成功即可(在这里最好不要直接点OK,先点Test,连接成功了再OK)
    点击OK按钮
    查看对应的表
    通过sql语句查询数据
    

    (4) JDBC调用方式

    打开Eclipse建立一个简单的Maven项目 phoenix
    <?xml version="1.0" encoding="UTF-8"?>
    

    <project xmlns=“http://maven.apache.org/POM/4.0.0”
    xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”
    xsi:schemaLocation=“http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd”

    <packaging>jar</packaging>
    <name>phoenix</name>
    <url>http://maven.apache.org</url>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.phoenix</groupId>
            <artifactId>phoenix-core</artifactId>
            <version> 4.14.1-HBase-1.2</version>
        </dependency>
    </dependencies>
    

    建立一个类 PhoenixManager

    package cn.itcast.phoenix;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    
    
    public class PhoenixManager {
    	public static void main(String[] args) throws SQLException {
    		Connection conn=null;
    		Statement state=null;
    		ResultSet rs=null;
    		try {
    			Class.forName("org.apache.phoenix.jdbc.PhoenixDriver");
    		    conn = DriverManager.getConnection("jdbc:phoenix:node01:2181");
    		    state=conn.createStatement();
    		    rs=  state.executeQuery("select * from \"employee\"");
    		    
    		    while(rs.next()){
    		    	System.out.println("no:"+rs.getString("no"));
    		    	System.out.println("name:"+rs.getString("name"));
    		    	System.out.println("position:"+rs.getString("position"));
    		    	System.out.println("age:"+rs.getInt("age"));
      System.out.println("-------------------------");
    		    }
    		    
    		} catch (Exception e) {
    			e.printStackTrace();
    			
    		}finally{
    			
    			if(rs!=null)rs.close();
    			
    			if(state!=null) state.close();
    			
    			if(conn!=null) conn.close();
    			
    		}
    		
    	}
    }
    
    运行结果展现:
    no:row1
    name:ted
    position:worker
    age:0
    -------------------------
    no:row2
    name:michael
    position:manager
    age:0
    -------------------------
    no:row3
    name:billy
    position:worker
    age:33
    -------------------------
    

    Phoenix常用命令

    创建phoenix表
    create table if not exists testtable(
    A  bigint not null,
    B  double, 
    C  varchar(200),
    D  varchar(200) 
    CONSTRAINT testtable PRIMARY KEY(A));
    
    查看表结构
    !desc  testtable;
    
    删除表
    drop  table  testable;
    
    向表添加数据
    python /export/servers/phoenix-4.14.0-cdh5.14.2/bin/psql.py -t testable  node01 /opt/xxx.csv
    
    数据查询
    Select  *  from  testable  where  A> 100;
    

    Phoenix索引

    在海量数据背景下,查询数据快速返回是典型的应用场景。在phoenix数据表基础之上创建索引,能够大幅提高数据的查询效率。Phoenix支持的索引有三个类型,分别是覆盖索引、全局索引、本地索引。
    
    A: 覆盖索引Covered Index
    覆盖索引要求查询语句中的条件字段、查询字段都必须	创建过索引,否则就会触发“全局扫描”(full table scan)
    创建语法:create  index  coverindex  user_index  on  user (name)  include  (age);
    因此它的特点是:只需要通过索引就能返回所要查询的数据 。
    
    B: 全局索引Global indexes
    global是默认的索引格式。
    
    全局索引适用于多读少写的场景,在写操作上会给性能带来极大的开销,因为所有的更新和写操作(DELETE,UPSERT VALUES和UPSERT SELECT)都会引起索引的更新,在读数据时,Phoenix将通过索引表来达到快速查询的目的。	如;
    create  index  userid_index  on  user  (userid);
    它有一个缺陷,如果查询语句中的条件字段或查询字段不是索引字段,就会触发全表扫描。例如:select userid,name  from  user  where  userid='8960321’
    
    解决办法有两个:
    一是和覆盖索引一样,创建索引时把查询的相关字放入段include来。
    create  index  userid_index  on  user  (userid)  include  (name );
    
    二是强制使用索引:
    select /*+ index(user,userid_index) */ name  FROM  user  userid='8960321’;
    
    制使用索引的查询语句会导致二次检索数据表,第一次检索是去索引表中查找符合userid='8960321’的数据,此时候发现 name 字段并不在索引字段中,会去user 表中第二次扫描name。因此只有当用户明确知道name符合检索条件的数据较少的时候才适合使用,否则会造成全表扫描,对性能影响较大。
    
    C: 本地索引Local Indexing
    与Global Indexing不同,本地索引适用于写多读少的场景,当使用Local Indexing的时候即使查询的所有字段都不在索引字段中时也会用到索引进行查询,Phoneix在查询时会自动选择是否使用本地索引(这是由Local Indexing自动完成的)。
    
    create  local  index  user_Index  on  user  (userid,name);
    
    D: 索引常用操作
    查看表索引
     !index "harve_user";
    
    删除索引
    drop index user_Index  on  user;
    
    E: 索引有序性
    创建的索引字段的顺序,与查询语句条件字段的顺序,两者之间的对应关系对索引是否生效有较大影响。
    查询语句条件字段的顺序尽量与索引的顺序相同。索引的首字段在查询条件中尽量第一个出现。
    
    测试
    创建测试表
    create table if not exists testdata(
    A bigint not null,
    B bigint,
    C bigint,
    D bigint,
    E bigint,
    F bigint,
    G bigint,
    H bigint,
    I bigint
    CONSTRAINT testdata PRIMARY KEY(A));
    
    加载一千万数据
    python /export/servers/phoenix-4.14.0-cdh5.14.2/bin/psql.py -t TESTDATA  node01 TestDatas.csv
    
    创建索引
    CREATE INDEX testdataindex  ON testdata 	(B,C,D,E,F) 
    
    查询效率对比
    

    在这里插入图片描述

    展开全文
  • 通过Phoenix渠道测试互动的插件 该插件可以轻松测试通过通道与Phoenix应用程序的通信。 它旨在供创建Phoenix应用程序的开发人员使用,主要是概念验证版本,而无需进行大量的单元测试。 Phoenix频道通过WebSocket协议...
  • phoenix-rtos-项目 Phoenix-RTOS是用于IoT的可扩展实时操作系统。 它基于自己的微内核,既可以在基于微控制器的小型设备上使用,也可以在基于多个处理器并配备了千兆字节RAM的高级计算机系统上使用。 可以模拟POSIX...
  • 用于跟踪库的Phoenix和Plug集成。 用法 将spandex_phoenix添加到mix.exs中的mix.exs : def deps do [ { :spandex_phoenix , " ~> 1.0.5 " } ] end 配置它以使用config.exs所需的Spandex.Tracer模块: config...
  • win10下虚拟机VMware安装PhoenixOS(凤凰OS)

    万次阅读 多人点赞 2018-05-01 18:30:07
    虚拟机VMware安装PhoenixOS(凤凰OS) 虚拟机VMware安装PhoenixOS(凤凰OS) 0.什么是PhoenixOS 1.下载PhoenixOS镜像 2.下载VMware 3.开始安装系统 第一步新建虚拟机 第二步安装PhoenixOS 第三步为PhoenixOS引导添加...

    虚拟机VMware安装PhoenixOS(凤凰OS)


    0.什么是PhoenixOS

    1. 曾经开发了著名浏览器世界之窗(The World)的凤凰工作室在变身为北京超卓科技有限公司之后,吸引了奇虎360、阿里巴巴的一些研发成员,打造出了一套“凤凰系统”(Phoenix OS),简单说就是x86桌面版的安卓。1.凤凰系统—百度百科

    PhoenixOS就是x86版安卓,能在PC等x86或x64构架处理器的计算机上运行。

    安装前须知:
    安装需要的环境: 在电脑中打开VT或者VT-d(硬件虚拟化技术)。(由于各个电脑打开方式虽说大相径庭但是仍有区别,所以最好自己百度“电脑型号+打开vt(或者硬件虚拟化技术)”
    安装需要的工具: PhoenixOS镜像、Vmware

    1.下载PhoenixOS镜像

    首先在官网(http://www.phoenixos.com/)中下载最新的PhoenixOS镜像文件(在我写这篇博客时,PhoenixOS已经更新到v2.6.3,基于Android7.1)
    1.打开官网]

    2.点击“凤凰系统”
    这里写图片描述
    3.点击“PC版”
    这里写图片描述
    4.在打开的界面往下移,移到其他安装方式,选择PhoenixOSInstaller-v2.6.3 (基于 Android7.1)ISO镜像,点击官方下载。等待下载完成,这样你的PhoenixOS镜像就下载完成了。
    这里写图片描述

    2.下载VMware

    这项自行百度,百度上一大堆破解资源,VM12及以上就行了

    3.开始安装系统

    第一步新建虚拟机

    1.点击创建新的虚拟机
    这里写图片描述
    2.弹出欢迎使用新建虚拟机向导,选择“典型(推荐)”,下一步
    这里写图片描述
    3.选择“安装程序光盘映像文件”,选择你刚刚下好的PhoenixOS ISO镜像文件,它会自动显示已检测到FreeBSD,点击下一步
    这里写图片描述
    4.命名虚拟机
    这里写图片描述
    5.把虚拟机名称自己命名,推荐就PhoenixOS,然后选择虚拟机放在磁盘中的位置。然后下一步
    这里写图片描述
    6.分配虚拟机大小。随便你分配,只要大小恰当(系统大小+预计会安装软件的大小+3G以上的缓存及其他文件存放空间),反正我就直接整的32G(傲娇脸),然后下一步
    这里写图片描述
    7.弹出“已准备好创建虚拟机”,选择自定义硬件
    这里写图片描述
    8.在弹出的窗口中选择内存,根据自己电脑的内存来修改给虚拟机的内存
    这里写图片描述
    9.再选择“处理器”项根据自己电脑配置选择处理器核心,看自己的处理器是几核几线程的再来修改
    这里写图片描述
    10.之后就选择关闭,完成。这样虚拟机就创建好了,虚拟机会自动重启,但是这个时候相当于你创建了一个虚拟的电脑,也就是说你现在组装了一台电脑,但是电脑硬盘里面是空的,没系统。下面,咋们开始安装PhoenixOS。

    第二步安装PhoenixOS

    1.完成创建虚拟机后,虚拟机会自动重启,并打开你ISO文件里面的文件/系统
    这里写图片描述
    2.选择第二项“Installation - Install Phoenix OS to harddisk”(安装PhoenixOS到硬盘中)
    这里写图片描述
    3.弹出一个窗口
    这里写图片描述
    4.选择第二项Create/Modify partitons
    这里写图片描述
    5.显示是否要使用GPT,但是我们准备用legacy引导系统,所以不需要GPT,选择No,回车
    这里写图片描述
    6.接着进入磁盘管理器,可以看到现在之佛与一个大小为21467.99MB的磁盘(因为我之前给虚拟机分配空间时选的是默认的20G),按方向右键,选择New,回车
    这里写图片描述
    7.选择Primary主要的磁盘,回车
    这里写图片描述
    8.之后选择大小,默认选择最大大小,所以我们不需要修改,直接回车下一步
    这里写图片描述
    9.在选择Bootable引导,回车
    这里写图片描述
    10.方向右键,移到write保存
    这里写图片描述
    11.输入yes,回车
    这里写图片描述
    12.再按方向右键移到Quit回车,退出磁盘管理系统
    这里写图片描述
    13.这样咋们磁盘创建就创建成功了,然后选中刚才创建的磁盘,回车
    这里写图片描述
    14.选择磁盘是否格式化,并选择格式化的磁盘类型,选择ext4,回车
    这里写图片描述
    15.弹出说确定时候要格式化,选择yes,回车
    这里写图片描述
    16.弹出说是否要安装EFI GRUB2引导系统,因为我们用的是legacy传统化引导方式,所以选择skip跳过
    这里写图片描述
    17.接着又弹出说是否安装grub引导,选择yes
    这里写图片描述
    18.等待安装完成,完成后弹出说安装成功,选择Run Phoenix OS,选择OK ,回车,重启
    这里写图片描述
    19.目前,我们的PhoenixOS就成功安装在虚拟机内了,接着会自动重启,会卡在这个界面下。然后手动从键盘输入reboot,接着虚拟机重启
    这里写图片描述
    这里写图片描述
    接下来我们需要打开虚拟机,对虚拟机中的PhoenixOS引导进行配置

    第三步为PhoenixOS引导添加nomodeset参数

    1. 如果你不加nomodeset,系统将无法启动,但是为什么,抱歉,我不知道,如果有安慰大神知道,欢迎留言分享下!!!感谢。
    2. 虚拟机每次重新启动或者关机后启动都得重新再来加一次nomodeset,所以当你不用虚拟机时最好选择挂起虚拟机而不是选择关闭虚拟机

    1.完成上面后,虚拟机会重启,进入引导界面
    这里写图片描述
    2.接着按e,进入如图所示界面
    这里写图片描述
    3.接着再按e,进入如图所示界面
    这里写图片描述
    4.然后输入“ nomodeset”,注意nomodeset与PhoenixOS中间有个空格,然后回车
    这里写图片描述
    5.之后回到上一级界面,按b启动系统。
    这里写图片描述
    6.闪过系统自检,等待系统启动
    这里写图片描述

    第四步首次进入系统

    1.完成上面所述步骤后,会出现如下界面
    这里写图片描述
    2.等待会,时长根据你电脑配置以及给虚拟机配置的硬件配置而定,然后出现语言选择界面,默认中文,选择下一步
    这里写图片描述
    3.弹出用户许可,点击接受
    这里写图片描述
    4.选择网络,因为之前配置是虚拟机于物理机共用网络,所以他会显示你已经连接有线网络
    这里写图片描述
    5.之后弹出创建账号,输入你想要的用户名
    这里写图片描述
    6.点击开始体验
    这里写图片描述
    恭喜你,你已经成功在虚拟机中安装PhoenixOS系统,接下来请尽情享用PhoenixOS x86平台的安卓系统吧!!!

    4.体验系统

    我还在体验凤凰系统中,以后有啥发现或分享会更新此篇博客。
    如果博客中有啥错误或者您有啥分享欢迎在下面留言!!!
    感谢大家观看。

    展开全文
  • <div><p>This adds a new module which can be used to load and save Phoenix tables through the Spark 1.3.0+ DataFrame and RDD APIs. <p>It's based originally on ...
  • 这是我在Phoenix框架中做任何事情的第一次尝试。 绝对是一个有趣的框架,带有一些新颖的设计。 您也应该至少考虑尝试使用Phoenix和Elixir语言。 应用程序本身是最基本的,简单的CRUD允许您创建,查看,编辑和删除...
  • Phoenix 简单命令

    万次阅读 2019-12-27 21:12:06
    创建phoenix表 create table if not exists testtable( A bigint not null, B double, C varchar(200), D varchar(200) CONSTRAINT testtable PRIMARY KEY(A)); 查看表结构 !desc testtable; 删除表 drop ...
  • Phoenix 安装部署

    万次阅读 2019-12-27 21:00:20
    什么是Phoenixphoenix,中文译为“凤凰”,很美的名字。Phoenix是由saleforce.com开源的一个项目,后又捐给了Apache基金会。它相当于一个Java中间件,提供jdbc连接,操作hbase数据表。Phoenix是一个HBase的开源...
  • phoenix_starter-源码

    2021-02-16 22:32:21
    要启动您的Phoenix应用程序: 使用bin/setup安装依赖项和设置数据库 使用bin/server启动Phoenix和webpack 要测试和整理应用程序,您还可以执行以下操作: bin/test运行Phoenix测试套件 bin/lint为CSS,...
  • <div><p>With the resolution of <a href="https://issues.apache.org/jira/browse/HBASE-1936">HBASE-1936</a> we can now create an install script/ui for Phoenix that will: - copy the phoenix-..jar into ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,013
精华内容 4,405
热门标签
关键字:

phoenix