hbase 结合phoenix 二级索引的建立(由于习惯不好引起的惨案)

网上博客里面有许多文章关于怎么建立二级索引的原理及方法,我就不复述了,有需要的可以看看下面这些博客,挺好的

转至: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表,因为大写的看着别扭,这不自己把自己坑了几天,过程用同步索引都因为超时等各种原因,导致失败多次,让我哭会。。。。

大家又遇到这个问题么?

 


 
posted @ 2018-06-13 20:20  henyu  阅读(...)  评论(...编辑  收藏