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

环境: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索引数据的时间。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<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输入以下命令:

1
2
3
${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去查看,分明就是它的索引啊 ,可以通过命令查看

1
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

------------- 本文结束  感谢您的阅读 -------------
评论