设为首页 加入收藏

TOP

HBase建表函数createTable的几点说明
2018-12-21 13:44:22 】 浏览:29
Tags:HBase 函数 createTable 说明

HBase建表函数提供了四个重载函数,分别是

  1. voidcreateTable(HTableDescriptordesc)
  2. voidcreateTable(HTableDescriptordesc,byte[]startKey,byte[]endKey,intnumRegions)
  3. voidcreateTable(HTableDescriptordesc,byte[][]splitKeys)
  4. voidcreateTableAsync(HTableDescriptordesc,byte[][]splitKeys)
这四个函数的相同点是都是根据表描述符来创建表。其中一个不同是钱三个函数式同步创建(也就是表没创建完,函数不返回)。而带Async的这个函数式异步的(后台自动创建表)。

第一个函数相对简单,就是创建一个表,这个表没有任何region。后三个函数是创建表的时候帮你分配好指定数量的region(提前分配region的好处,了解HBase的人都清楚,为了减少Split,这样能节省不少时间)

第二个函数是使用者指定表的“起始行键”、“末尾行键”和region的数量,这样系统自动给你划分region。根据的region数,来均分所有的行键。这个方法的问题是如果你的表的行键不是连续的,那样的话就导致有些region的行键不会用到,有些region是全满的

所以HBase很人性的给了第三种和第四种方法。这两个函数是用户需要自己region的划分。这个函数的参数splitKeys是一个二维字节数据,行的最大数表示region划分数+1,列就表示region和region之间的行键。比如:

  1. byte[][]regions=newbyte[][]{
  2. Bytes.toBytes("A"),
  3. Bytes.toBytes("D"),
  4. Bytes.toBytes("G"),
  5. Bytes.toBytes("K"),
  6. Bytes.toBytes("O"),
  7. Bytes.toBytes("T")
  8. };
就表示有7个region(6+1),具体region表示的行键为:

  1. [1]startkey:,endkey:A
  2. [2]startkey:A,endkey:D
  3. [3]startkey:D,endkey:G
  4. [4]startkey:G,endkey:K
  5. [5]startkey:K,endkey:O
  6. [6]startkey:O,endkey:T
  7. [7]startkey:T,endkey:
这个例子来源于HBase权威指南。

但是后三个函数,再建表时,如果region数过多,会报这个异常:

  1. 13/06/2411:33:49WARNclient.HBaseAdmin:Creatingxtooktoolong
  1. java.net.SocketTimeoutException:Calltocloudgis4/192.168.3.7:60000failedonsockettimeoutexception:java.net.SocketTimeoutException:60000millistimeoutwhilewaitingforchanneltobereadyforread.ch:java.nio.channels.SocketChannel[connectedlocal=/192.168.2.198:37133remote=cloudgis4/192.168.3.7:60000]
  2. atorg.apache.hadoop.hbase.ipc.HBaseClient.wrapException(HBaseClient.java:802)
  3. atorg.apache.hadoop.hbase.ipc.HBaseClient.call(HBaseClient.java:775)
  4. atorg.apache.hadoop.hbase.ipc.HBaseRPC$Invoker.invoke(HBaseRPC.java:257)
  5. at$Proxy4.createTable(UnknownSource)
  6. atorg.apache.hadoop.hbase.client.HBaseAdmin.createTableAsync(HBaseAdmin.java:405)
  7. atorg.apache.hadoop.hbase.client.HBaseAdmin.createTable(HBaseAdmin.java:317)
  8. atGIS.Update.TestUpdate.testHBase(TestUpdate.java:181)
  9. atGIS.Update.TestUpdate.main(TestUpdate.java:267)
  10. Causedby:java.net.SocketTimeoutException:60000millistimeoutwhilewaitingforchanneltobereadyforread.ch:java.nio.channels.SocketChannel[connectedlocal=/192.168.2.198:37133remote=cloudgis4/192.168.3.7:60000]
  11. atorg.apache.hadoop.net.SocketIOWithTimeout.doIO(SocketIOWithTimeout.java:164)
  12. atorg.apache.hadoop.net.SocketInputStream.read(SocketInputStream.java:155)
  13. atorg.apache.hadoop.net.SocketInputStream.read(SocketInputStream.java:128)
  14. atjava.io.FilterInputStream.read(UnknownSource)
  15. atorg.apache.hadoop.hbase.ipc.HBaseClient$Connection$PingInputStream.read(HBaseClient.java:299)
  16. atjava.io.BufferedInputStream.fill(UnknownSource)
  17. atjava.io.BufferedInputStream.read(UnknownSource)
  18. atjava.io.DataInputStream.readInt(UnknownSource)
  19. atorg.apache.hadoop.hbase.ipc.HBaseClient$Connection.receiveResponse(HBaseClient.java:539)
  20. atorg.apache.hadoop.hbase.ipc.HBaseClient$Connection.run(HBaseClient.java:477)
  21. Exceptioninthread"main"org.apache.hadoop.hbase.client.RegionOfflineException:Only0of1000regionsareonline;retriesexhausted.
  22. atorg.apache.hadoop.hbase.client.HBaseAdmin.createTable(HBaseAdmin.java:355)
  23. atGIS.Update.TestUpdate.testHBase(TestUpdate.java:181)
  24. atGIS.Update.TestUpdate.main(TestUpdate.java:267)

具体就是说建表超时了,google了好久也没找到解决办法。

  1. createTableAsync
但是用第四个函数,尽管报异常,但是还是在后台把表建完,region数也正好
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Spring boot和Hbase实现分布式文.. 下一篇spring-hadoop之操作hbase

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目