溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Phoenix常見問題有哪些

發(fā)布時間:2021-12-20 09:21:47 來源:億速云 閱讀:275 作者:柒染 欄目:大數(shù)據(jù)

Phoenix常見問題有哪些,相信很多沒有經(jīng)驗(yàn)的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。

1. 配置環(huán)境

使用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服務(wù)。

Hbase-site文件phoenix 相關(guān)修改項(xiàng)如下,僅供參考:

<configuration>

    <property>
         <name>hbase.regionserver.wal.codec</name>
         <value>org.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec</value>
    </property>
    <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>
    <property>
        <name>hbase.rpc.timeout</name>
        <value>3600000</value>
    </property>
    <property>
        <name>hbase.client.operation.timeout</name>
        <value>600000</value>
    </property>
    <property>
        <name>hbase.client.scanner.timeout.period</name>
        <value>600000</value>
    </property>
    <property>
        <name>hbase.regionserver.lease.period</name>
        <value>600000</value>
    </property>
    <property>
        <name>phoenix.query.timeoutMs</name>
        <value>3600000</value>
    </property>
    <property>
        <name>phoenix.query.keepAliveMs</name>
        <value>600000</value>
    </property>
    <property>
        <name>hbase.client.ipc.pool.type</name>
        <value>RoundRobinPool</value>
    </property>
    <property>
        <name>hbase.client.ipc.pool.size</name>
        <value>10</value>
    </property>
</configuration>
2. 如何添加二級索引
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")
3. 判斷某表是否存在
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);
}
4. 判斷索引是否存在
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);
}
5. 如何加自增主鍵

a. 創(chuàng)建一張test的表

create table test ("id" BIGINT not null primary key,"tower_id" integer(11));

b. 接著創(chuàng)建自增序列 test_sequence

CREATE SEQUENCE test_sequence  START WITH 10000 INCREMENT BY 1 CACHE 1000;# 創(chuàng)建自增序列說明如下:

CREATE SEQUENCE [IF NOT EXISTS] SCHEMA.SEQUENCE_NAME [START WITH number] [INCREMENT BY number] [MINVALUE number] [MAXVALUE number] [CYCLE] [CACHE number]

參數(shù)說明:
sqe_name:序列名 increment:可選子句,表示序列的增量,正數(shù)表示生成一個遞增的序列,負(fù)數(shù)表示生成一個遞減的序列,其默認(rèn)值是1. minvalue:可選子句,決定序列生成的最小值 maxvalue:可選子句,決定序列生成的最大值 start:可選子句,指定序列的開始位置,默認(rèn)遞增序列的起始值為minvalue,遞減序列的起始值為maxvalue. cache:可選子句,決定是否產(chǎn)生序列號預(yù)分配并存儲在內(nèi)存中。 cycle:可選關(guān)鍵字,當(dāng)序列達(dá)到最大值或者最小值時,可以繼續(xù)復(fù)位下去;如果是遞增系列達(dá)到maxvalue,它將又從minvalue繼續(xù)遞增,如果是遞減系列達(dá)到minvalue,它將從maxvalue繼續(xù)遞減。如果忽略該關(guān)鍵,當(dāng)其他達(dá)到最大值或者最小時仍繼續(xù)遞增/減時將會返回一個錯誤。

c. 通過自增序列,寫入數(shù)據(jù)信息

upsert into test ("id", "tower_id") values (NEXT VALUE FOR test_sequence,100)

注意事項(xiàng):
刪除test表時,最好連帶刪除 test_sequence。

# 常用刪除
drop TABLE if EXISTS TOWER_INFO(表名) drop index  TOWER_IDX(索引名) ON TOWER_INFO(表名); DROP SEQUENCE IF EXISTS test_sequence
6. 無緣無故表被 disable, Phoenix 無法查詢也無法刪除

Phoenix常見問題有哪些

先用HBase命令行啟用表,然后再進(jìn)行刪除,或者查詢。

enable  ‘tablename’
7. Date類型日期,條件判斷
select * from test where "create_time" >= TO_DATE(TO_CHAR(?,'yyyy-MM-dd HH:mm:ss'))
8. 其他問題匯總

a. phoenix 使用rowkey模糊查詢效率特別低

b. Phoenix中建立hbase的映射表不只是加載元數(shù)據(jù),還會為HBase 中每一條數(shù)據(jù)增加一空列標(biāo)識,如果數(shù)據(jù)量太大,可能導(dǎo)致超時中斷。建議先建立好Phoenix映射表,然后加載數(shù)據(jù)或增加服務(wù)端配置,延長服務(wù)端超時時間。

c. 異步方式構(gòu)建索引過程中,出現(xiàn)問題:不識別Phoenix中小寫字母表,不知是不是版本低的問題。

d. 創(chuàng)建Phoenix二級索引后,只能通過Phoenix接口加載數(shù)據(jù),直接操作hbase無效的,也就是說只能通過jdbc和加載CSV文件方式加載數(shù)據(jù)。

e. 為已有數(shù)據(jù)phoenix表補(bǔ)建索引,亦可能導(dǎo)致超時中斷。建議建立phoenix-HBase表時即建好索引,再接數(shù)據(jù)。

看完上述內(nèi)容,你們掌握Phoenix常見問題有哪些的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI