通過phoenix導入數據到hbase出錯記錄


 解決方法1

錯誤如下

2019-08-26 10:03:56,819 [hconnection-0x7b9e01aa-shared--pool11069-t114734] WARN  org.apache.hadoop.hbase.ipc.CoprocessorRpcChannel - Call failed on IOException
 org.apache.hadoop.hbase.exceptions.UnknownProtocolException: org.apache.hadoop.hbase.exceptions.UnknownProtocolException: No registered coprocessor service found for name ServerCachingService in region TABLE_RESULT,\x012019-05-12\x00037104581382,1566564239929.dcd3d414bc567586049d3c71aa74512d.
        at org.apache.hadoop.hbase.regionserver.HRegion.execService(HRegion.java:8062)
        at org.apache.hadoop.hbase.regionserver.RSRpcServices.execServiceOnRegion(RSRpcServices.java:2068)
        at org.apache.hadoop.hbase.regionserver.RSRpcServices.execService(RSRpcServices.java:2050)
        at org.apache.hadoop.hbase.protobuf.generated.ClientProtos$ClientService$2.callBlockingMethod(ClientProtos.java:34954)
        at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:2339)
        at org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:123)
        at org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:188)
        at org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:168)

        at sun.reflect.GeneratedConstructorAccessor81.newInstance(Unknown Source)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
        at org.apache.hadoop.ipc.RemoteException.instantiateException(RemoteException.java:106)
        at org.apache.hadoop.ipc.RemoteException.unwrapRemoteException(RemoteException.java:95)
        at org.apache.hadoop.hbase.protobuf.ProtobufUtil.getRemoteException(ProtobufUtil.java:332)
        at org.apache.hadoop.hbase.protobuf.ProtobufUtil.execService(ProtobufUtil.java:1694)
        at org.apache.hadoop.hbase.ipc.RegionCoprocessorRpcChannel$1.call(RegionCoprocessorRpcChannel.java:100)
        at org.apache.hadoop.hbase.ipc.RegionCoprocessorRpcChannel$1.call(RegionCoprocessorRpcChannel.java:90)
        at org.apache.hadoop.hbase.client.RpcRetryingCaller.callWithRetries(RpcRetryingCaller.java:137)
        at org.apache.hadoop.hbase.ipc.RegionCoprocessorRpcChannel.callExecService(RegionCoprocessorRpcChannel.java:103)
        at org.apache.hadoop.hbase.ipc.CoprocessorRpcChannel.callMethod(CoprocessorRpcChannel.java:56)
        at org.apache.phoenix.coprocessor.generated.ServerCachingProtos$ServerCachingService$Stub.addServerCache(ServerCachingProtos.java:8394)
        at org.apache.phoenix.cache.ServerCacheClient$1$1.call(ServerCacheClient.java:224)
        at org.apache.phoenix.cache.ServerCacheClient$1$1.call(ServerCacheClient.java:193)
        at org.apache.hadoop.hbase.client.HTable$15.call(HTable.java:1763)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:748)
Caused by: org.apache.hadoop.hbase.ipc.RemoteWithExtrasException(org.apache.hadoop.hbase.exceptions.UnknownProtocolException): org.apache.hadoop.hbase.exceptions.UnknownProtocolException: No registered coprocessor service found for name ServerCachingService in region
TABLE_RESULT,\x012019-05-12\x00037104581382,1566564239929.dcd3d414bc567586049d3c71aa74512d. at org.apache.hadoop.hbase.regionserver.HRegion.execService(HRegion.java:8062) at org.apache.hadoop.hbase.regionserver.RSRpcServices.execServiceOnRegion(RSRpcServices.java:2068) at org.apache.hadoop.hbase.regionserver.RSRpcServices.execService(RSRpcServices.java:2050) at org.apache.hadoop.hbase.protobuf.generated.ClientProtos$ClientService$2.callBlockingMethod(ClientProtos.java:34954) at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:2339) at org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:123) at org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:188) 

錯誤分析:從錯誤的信息來看,是關於協處理器的錯誤,可能是region或者表沒有使用協處理器。

web界面查看表信息如下

 

 從web信息來看,確實這張表沒有相關協處理器的信息,正常通過phoenix創建表以后,都會自帶phoenix相關的協處理器信息,如上面紅框圈起來的地方,上圖有張表(紅框下面的這個)卻沒有,導致phoenix插入數據的時候,由於協處理器問題,導致插入失敗,這種情況估計跟二級索引有一定的關系。

解決

修改表屬性

# hbase shell
#####添加相關的協處理器信息
hbase(main):005:0> alter 'TABLE_RESULT', { METHOD => 'table_att','coprocessor$1' => '|org.apache.phoenix.coprocessor.ScanRegionObserver|805306366|', 'coprocessor$2' => '|org.apache.phoenix.coprocessor.UngroupedAggregateRegionObserver|805306366|', 'coprocessor$3' => '|org.apache.phoenix.coprocessor.GroupedAggregateRegionObserver|805306366|', 'coprocessor$4' => '|org.apache.phoenix.coprocessor.ServerCachingEndpointImpl|805306366|', 'coprocessor$5' => '|org.apache.phoenix.hbase.index.Indexer|805306366|org.apache.hadoop.hbase.index.codec.class=org.apache.phoenix.index.PhoenixIndexCodec,index.builder=org.apache.phoenix.index.PhoenixIndexBuilder'}

然后通過phoenix導入數據正常。

 

解決方法2(可能有問題)

從官網或者其他博客搜索到一些解決協處理器的問題,只是借鑒,對我這種情況不起作用

可以全局配置哪些協處理器在 HBase 啟動時加載。這可以通過向 hbase-site.xml 配置文件中添加如下配置屬性實現:

  如下是借鑒其他人的博客:

注意:下面配置屬性的值有的是他們自己Java代碼實現的,所以,按如下配置加入到hbase的配置文件,在啟動的時候會提示找不到相關的協處理器,導致hbase啟動失敗。

  <property>
        <name>hbase.coprocessor.master.classes</name>
        <value>coprocessor.MasterObserverExample</value>
    </property>
    <property>
        <name>hbase.coprocessor.regionserver.classes</name>
        <value>coprocessor.RegionServerObserverExample</value>
    </property>
    <property>
        <name>hbase.coprocessor.region.classes</name>
        <value>coprocessor.system.RegionObserverExample, coprocessor.AnotherCoprocessor</value>
    </property>
    <property>
        <name>hbase.coprocessor.user.region.classes</name>
        <value>coprocessor.user.RegionObserverExample</value>
    </property>
    <property>
        <name>hbase.coprocessor.wal.classes</name>
        <value>coprocessor.WALObserverExample, bar.foo.MyWALObserver</value>
    </property>

 解決方法3

通過在hbase-site.xml文件中設置參數:
   

 <property>
    <name>hbase.coprocessor.abortonerror</name>
    <value>false</value>
    </property>


並啟動region server可以解決,這樣就忽略了協處理器出現的錯誤,保證集群高可用

 

借鑒:

https://blog.csdn.net/u013709332/article/details/52414999


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM