Phoenix常见问题有哪些,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
在赫章等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供网站制作、成都网站设计 网站设计制作按需求定制设计,公司网站建设,企业网站建设,成都品牌网站建设,全网整合营销推广,外贸网站建设,赫章网站建设费用合理。
使用phoenix,需要修改hbase-site.xml文件,再把phoenix-4.14.1-HBase-1.3-client.jar、phoenix-4.14.1-HBase-1.3-server.jar 放在HBase安装目录的 lib下面(注意版本),重启HBase服务。
Hbase-site文件phoenix 相关修改项如下,仅供参考:
hbase.regionserver.wal.codec org.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec hbase.master.loadbalancer.class org.apache.phoenix.hbase.index.balancer.IndexLoadBalancer hbase.coprocessor.master.classes org.apache.phoenix.hbase.index.master.IndexMasterObserver hbase.rpc.timeout 3600000 hbase.client.operation.timeout 600000 hbase.client.scanner.timeout.period 600000 hbase.regionserver.lease.period 600000 phoenix.query.timeoutMs 3600000 phoenix.query.keepAliveMs 600000 hbase.client.ipc.pool.type RoundRobinPool hbase.client.ipc.pool.size 10
1) 不加排序:Create INDEX 索引名 ON 表名(列名A,列表B***) 2) 加排序:Create INDEX 索引名 ON 表名(列名A DESC,列表B***) 举例如下:create INDEX id_idx on tower_info("tower_id" ASC ,"create_time" DESC ,"system","sub_system")
DatabaseMetaData connMetaData = conn.getMetaData(); String[] type = {"TABLE"}; ResultSet rs = connMetaData.getTables(null, null, null, type); boolean testFlag = false; while (rs.next()){ String tt=rs.getString("TABLE_NAME"); if(tt.equals("TEST")){ testFlag = true; } String tp=rs.getString("TABLE_TYPE"); System.out.println(" 表的名称 "+tt+" 表的类型 "+tp); }
DatabaseMetaData connMetaData = conn.getMetaData(); ResultSet index = connMetaData.getIndexInfo(null, null, “表名”, false, true); boolean toweridIdxFlag = false; while (index.next()){ String name=index.getString("INDEX_NAME"); if(name.equals("TOWERID_IDX")){ toweridIdxFlag =true; } System.out.println(" 索引的名称 "+name); }
a. 创建一张test的表
create table test ("id" BIGINT not null primary key,"tower_id" integer(11));
b. 接着创建自增序列 test_sequence
CREATE SEQUENCE test_sequence START WITH 10000 INCREMENT BY 1 CACHE 1000;# 创建自增序列说明如下:
CREATE SEQUENCE [IF NOT EXISTS] SCHEMA.SEQUENCE_NAME
[START WITH number]
[INCREMENT BY number]
[MINVALUE number]
[MAXVALUE number]
[CYCLE]
[CACHE number]
参数说明:
sqe_name:序列名
increment:可选子句,表示序列的增量,正数表示生成一个递增的序列,负数表示生成一个递减的序列,其默认值是1.
minvalue:可选子句,决定序列生成的最小值
maxvalue:可选子句,决定序列生成的最大值
start:可选子句,指定序列的开始位置,默认递增序列的起始值为minvalue,递减序列的起始值为maxvalue.
cache:可选子句,决定是否产生序列号预分配并存储在内存中。
cycle:可选关键字,当序列达到最大值或者最小值时,可以继续复位下去;如果是递增系列达到maxvalue,它将又从minvalue继续递增,如果是递减系列达到minvalue,它将从maxvalue继续递减。如果忽略该关键,当其他达到最大值或者最小时仍继续递增/减时将会返回一个错误。
c. 通过自增序列,写入数据信息
upsert into test ("id", "tower_id") values (NEXT VALUE FOR test_sequence,100)
注意事项:
删除test表时,最好连带删除 test_sequence。
# 常用删除
drop TABLE if EXISTS TOWER_INFO(表名)
drop index TOWER_IDX(索引名) ON TOWER_INFO(表名);
DROP SEQUENCE IF EXISTS test_sequence
先用HBase命令行启用表,然后再进行删除,或者查询。
enable ‘tablename’
select * from test where "create_time" >= TO_DATE(TO_CHAR(?,'yyyy-MM-dd HH:mm:ss'))
a. phoenix 使用rowkey模糊查询效率特别低
b. Phoenix中建立hbase的映射表不只是加载元数据,还会为HBase 中每一条数据增加一空列标识,如果数据量太大,可能导致超时中断。建议先建立好Phoenix映射表,然后加载数据或增加服务端配置,延长服务端超时时间。
c. 异步方式构建索引过程中,出现问题:不识别Phoenix中小写字母表,不知是不是版本低的问题。
d. 创建Phoenix二级索引后,只能通过Phoenix接口加载数据,直接操作hbase无效的,也就是说只能通过jdbc和加载CSV文件方式加载数据。
e. 为已有数据phoenix表补建索引,亦可能导致超时中断。建议建立phoenix-HBase表时即建好索引,再接数据。
看完上述内容,你们掌握Phoenix常见问题有哪些的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注创新互联行业资讯频道,感谢各位的阅读!