2012-05-02 3 views
0

Я пытаюсь перенести opentsdb на использование hbase 0.92, так как по какой-либо причине hbase 0.90.x, которая использует ядро ​​базы данных hasoop с версией в ветви, не очень хорошо работает с любой версией hadoop. К сожалению, после того, как я настроил и подключил все, я постоянно получаю следующее сообщение об ошибке в Hbase в журналеhbase 0.92 и opentsdb совместимость

2012-05-02 21:48:25,725 WARN org.apache.hadoop.hbase.regionserver.HRegion: No such column family in batch put 
org.apache.hadoop.hbase.regionserver.NoSuchColumnFamilyException: Column family t does not exist in region tsdb,,1335994142141.79b560b1ba606c2f9eef533ddc31e86e. in table {NAME => 'tsdb', FAMILIES => [{NAME => 'id', BLOOMFILTER => 'NONE',REPLICATION_SCOPE => '0', COMPRESSION => 'NONE', VERSIONS => '3', TTL => '2147483647', MIN_VERSIONS => '0', BLOCKSIZE => '65536', IN_MEMORY => 'false', BLOCKCACHE => 'true'}, {NAME => 'name', BLOOMFILTER => 'NONE', REPLICATION_SCOPE => '', COMPRESSION => 'NONE', VERSIONS => '3', TTL => '2147483647', MIN_VERSIONS => '0', BLOCKSIZE => '65536', IN_MEMORY => 'false', BLOCKCACHE => 'true'}]} 
     at org.apache.hadoop.hbase.regionserver.HRegion.checkFamily(HRegion.java:3907) 
     at org.apache.hadoop.hbase.regionserver.HRegion.checkFamilies(HRegion.java:2184) 
     at org.apache.hadoop.hbase.regionserver.HRegion.doMiniBatchPut(HRegion.java:1790) 
     at org.apache.hadoop.hbase.regionserver.HRegion.put(HRegion.java:1723) 
     at org.apache.hadoop.hbase.regionserver.HRegionServer.multi(HRegionServer.java:3062) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
     at java.lang.reflect.Method.invoke(Method.java:597) 
     at org.apache.hadoop.hbase.ipc.WritableRpcEngine$Server.call(WritableRpcEngine.java:364) 
     at org.apache.hadoop.hbase.ipc.HBaseServer$Handler.run(HBaseServer.java:1326) 

, когда я искал через фронтэнда UI opentsdb, я получил эту ошибку

org.hbase.async.NoSuchColumnFamilyException: org.apache.hadoop.hbase.regionserver.NoSuchColumnFamilyException: Column family t does not exist in region tsdb,,1335994142141.79b560b1ba606c2f9eef533ddc31e86e. in table {NAME => 'tsdb', FAMILIES => [{NAME => 'id', BLOOMFILTER => 'NONE', REPLICATION_SCOPE => '0', COMPRESSION => 'NONE', VERSIONS => '3', TTL => '2147483647', MIN_VERSIONS => '0', BLOCKSIZE => '65536', IN_MEMORY => 'false', BLOCKCACHE => 'true'}, {NAME => 'name', BLOOMFILTER => 'NONE', REPLICATION_SCOPE => '0', COMPRESSION => 'NONE', VERSIONS => '3', TTL => '2147483647', MIN_VERSIONS => '0', BLOCKSIZE => '65536', IN_MEMORY => 'false', BLOCKCACHE => 'true'}]} 

    at org.apache.hadoop.hbase.regionserver.HRegion.checkFamily(HRegion.java:3907) 
    at org.apache.hadoop.hbase.regionserver.HRegion.getScanner(HRegion.java:1422) 
    at org.apache.hadoop.hbase.regionserver.HRegion.getScanner(HRegion.java:1401) 
    at org.apache.hadoop.hbase.regionserver.HRegionServer.openScanner(HRegionServer.java:2054) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.apache.hadoop.hbase.ipc.WritableRpcEngine$Server.call(WritableRpcEngine.java:364) 
    at org.apache.hadoop.hbase.ipc.HBaseServer$Handler.run(HBaseServer.java:1326) 

Caused by RPC: OpenScannerRequest(table="tsdb", key=[0, 0, 1, 79, -95, 75, -16], family="t", qualifier=null, start_key=[0, 0, 1, 79, -95, 75, -16], stop_key=[0, 0, 1, 79, -95, -68, -9], max_num_kvs=4096, populate_blockcache=true, attempt=1, region=RegionInfo(table="tsdb", region_name="tsdb,,1335994142141.79b560b1ba606c2f9eef533ddc31e86e.", stop_key="")) 
    at org.hbase.async.NoSuchColumnFamilyException.make(NoSuchColumnFamilyException.java:56) ~[asynchbase-1.2.0.jar:bead2c4] 
    at org.hbase.async.NoSuchColumnFamilyException.make(NoSuchColumnFamilyException.java:32) ~[asynchbase-1.2.0.jar:bead2c4] 
    at org.hbase.async.RegionClient.deserializeException(RegionClient.java:1182) ~[asynchbase-1.2.0.jar:bead2c4] 
    at org.hbase.async.RegionClient.deserialize(RegionClient.java:1159) ~[asynchbase-1.2.0.jar:bead2c4] 
    at org.hbase.async.RegionClient.decode(RegionClient.java:1080) ~[asynchbase-1.2.0.jar:bead2c4] 
    at org.hbase.async.RegionClient.decode(RegionClient.java:82) ~[asynchbase-1.2.0.jar:bead2c4] 
    at org.jboss.netty.handler.codec.replay.ReplayingDecoder.callDecode(ReplayingDecoder.java:470) ~[netty-3.2.7.jar:na] 
    at org.jboss.netty.handler.codec.replay.ReplayingDecoder.messageReceived(ReplayingDecoder.java:443) ~[netty-3.2.7.jar:na] 
    at org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:80) ~[netty-3.2.7.jar:na] 
    at org.hbase.async.RegionClient.handleUpstream(RegionClient.java:936) ~[asynchbase-1.2.0.jar:bead2c4] 
    at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564) ~[netty-3.2.7.jar:na] 
    at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:559) ~[netty-3.2.7.jar:na] 
    at org.hbase.async.HBaseClient$RegionClientPipeline.sendUpstream(HBaseClient.java:1974) ~[asynchbase-1.2.0.jar:bead2c4] 
    at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:274) [netty-3.2.7.jar:na] 
    at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:261) [netty-3.2.7.jar:na] 
    at org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:351) [netty-3.2.7.jar:na] 
    at org.jboss.netty.channel.socket.nio.NioWorker.processSelectedKeys(NioWorker.java:282) [netty-3.2.7.jar:na] 
    at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:202) [netty-3.2.7.jar:na] 
    at org.jboss.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108) [netty-3.2.7.jar:na] 
    at org.jboss.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:44) [netty-3.2.7.jar:na] 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) [na:1.6.0_24] 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) [na:1.6.0_24] 
    at java.lang.Thread.run(Thread.java:662) [na:1.6.0_24] 

это потому, что asynchbase-1,2 плохо работает с hbase 0.92. Кто-то может помочь?

ответ

2

Я не уверен, как вы это сделали, но это ясно показывает, что вы неправильно создали таблицы. OpenTSDB нужны две таблицы: tsdb и tsdb-uid (имена настраиваются). Таблица tsdb имеет одно столбцовое семейство, t и tsdb-uid имеет два: name и id.

Из приведенного выше отрывка, то ясно, что ваша tsdb таблицы имеет семью столбцов tsdb-uid: src/create_table.sh сценария

{NAME => 'tsdb', FAMILIES => [{NAME => 'id', ...}, {NAME => 'name', ...}]}

Используйте OpenTSDB для создания таблицы. С этим вы не можете ошибиться.

+0

чувак, вы сделали мой день! Причина, по которой я не использовал сценарий, заключалась в том, что оболочка hbase 0.92 не принимала «COMPRESSION => none». Поэтому теперь я просто удалил «COMPRESSION => none» в скрипте и создал таблицу с ним. Теперь HBase и OpenTSDB могут разговаривать друг с другом. Однако, это правильный способ создать таблицу? У вас есть предложения по этому поводу? – Sheng

+0

Если вы хотите установить 'COMPRESSION => NONE', просто установите его как переменную среды перед запуском скрипта:' HBASE_HOME = путь/to/hbase COMPRESSION = NONE./Src/create_table.sh' – tsuna

+0

Я говорил COMPRESSION = > NONE не является признанным синтаксисом для оболочки HBase 0.92, поэтому первоначальный скрипт create table не сможет создать таблицы tsdb и tsdb-uid с этой переменной env. Я работал над этой проблемой, исключив COMPRESSION => NONE, но мне интересно, есть ли лучший способ. – Sheng