網上博客里面有許多文章關於怎么建立二級索引的原理及方法,我就不復述了,有需要的可以看看下面這些博客,挺好的
轉至:https://www.cnblogs.com/haoxinyue/p/6724365.html
https://www.cnblogs.com/mario-nb/p/6350266.html?utm_source=itdadao&utm_medium=referral
在這里我想強調的是,當我們的hbase表數據非常大時,測試大概5000萬以上的數據建二級索引就會遇到連接超時的問題
當然我們也可以調整連接時間如下:
在客戶端配置文件hbase-site.xml中,把超時參數設置大一些,足夠build索引數據的時間。
<property> <name>hbase.rpc.timeout</name> <value>60000000</value> </property> <property> <name>hbase.client.scanner.timeout.period</name> <value>60000000</value> </property> <property> <name>phoenix.query.timeoutMs</name> <value>60000000</value> </property>
這種方式顯然看起來就不太友好
所以,我們就想到了用異步索引的方式去建立

照着網上的方式:興高采烈的去開干了,在linux輸入以下命令:
${HBASE_HOME}/bin/hbase org.apache.phoenix.mapreduce.index.IndexTool --schema MY_SCHEMA --data-table MY_TABLE --index-table ASYNC_IDX --output-path ASYNC_IDX_HFILES
結果直接就報錯了:
它竟然說我的索引不是數表的索引,我當時就蒙了,這是咋回事呢?馬上跑到phoenix client去查看,分明就是它的索引啊 ,可以通過命令查看
select TABLE_NAME,DATA_TABLE_NAME,INDEX_TYPE,INDEX_STATE,INDEX_DISABLE_TIMESTAMP from system.catalog where INDEX_TYPE is not null;
那又是咋回事啊,想想是不是建索引出問題了,遂不信邪的再一次實驗,繼續出錯,錯誤如出一轍,正當我准備放棄的時候。突然發現這好像有些不對,
我的表分明是小寫的t33,咋它說我的索引表卻不是T33的index呢,是不是這個IndexTool有某種方式,將所有的表都轉化為大寫的呢,還是它只認識大寫的表
接下來我就創建了一個大寫的表去建索引,果然這次並沒報錯誤,至於具體是哪種原因,沒找到方法去研究。
結論:平時總喜歡建小寫的hbase表,因為大寫的看着別扭,這不自己把自己坑了幾天,過程用同步索引都因為超時等各種原因,導致失敗多次,讓我哭會。。。。
大家又遇到這個問題么?