桥山之巅,姬水之畔

【转载】Phoenix 异步建立二级索引失败,Hbase表名需大写

2019.01.25

环境:phoenix-5.0.0-Hbase-2.0.0

关于怎么建立二级索引的原理及方法,我就不复述了,有需要的可以看看下面这些博客,挺好的 转至: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>phoenix.query.timeoutMs</name>
<value>1200000</value>
</property>
<property>
​<name>phoenix.query.keepAliveMs</name>
<value>1200000</value>
</property>
<property>
​<name>hbase.rpc.timeout</name>
<value>1200000</value>
</property>
<property>
​<name>hbase.regionserver.lease.period</name>
<value>1200000</value>
</property>
<property>
​<name>hbase.client.operation.timeout</name>
<value>1200000</value>
</property>
<property>
​<name>hbase.client.scanner.caching</name>
<value>1000</value>
</property>
<property>
​<name>hbase.client.scanner.timeout.period</name>
<value>1200000</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表,因为大写的看着别扭,这不自己把自己坑了几天,过程用同步索引都因为超时等各种原因,导致失败多次,让我哭会。。。。

大家又遇到这个问题么?

原文链接:https://www.cnblogs.com/henyu/p/9179653.html