복붙노트

[HADOOP] Cloudera Hbase와 함께 Phoenix 사용 (Repo에서 설치)

HADOOP

Cloudera Hbase와 함께 Phoenix 사용 (Repo에서 설치)

나는 독립 실행 형 Apache Hbase에서 Phoenix를 사용할 수 있습니다.

(이 모든 것은 RHEL6.5의 Hbase 1.0.0 용입니다)

그러나 Hbase의 Cloudera 풍미를 위해 예외를 던지면 작동하지 않습니다. (심지어 en OS로 RHEL7 최소 시도)

Hbase 1.0의 경우 Phoenix 4.4에서도 마찬가지입니다.

hbase(main):001:0> version
1.0.0-cdh5.4.4, rUnknown, Mon Jul  6 16:59:55 PDT 2015

스택 트레이스 :

    [ec2-user@ip-172-31-60-109 phoenix-4.5.0-HBase-1.0-bin]$ bin/sqlline.py localhost:2181:/hbase
Setting property: [isolation, TRANSACTION_READ_COMMITTED]
issuing: !connect jdbc:phoenix:localhost:2181:/hbase none none org.apache.phoenix.jdbc.PhoenixDriver
Connecting to jdbc:phoenix:localhost:2181:/hbase
15/08/06 03:10:25 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
15/08/06 03:10:26 WARN impl.MetricsConfig: Cannot locate configuration: tried hadoop-metrics2-phoenix.properties,hadoop-metrics2.properties
15/08/06 03:10:27 WARN ipc.CoprocessorRpcChannel: Call failed on IOException
org.apache.hadoop.hbase.DoNotRetryIOException: org.apache.hadoop.hbase.DoNotRetryIOException: SYSTEM.CATALOG: org.apache.hadoop.hbase.client.Scan.setRaw(Z)Lorg/apache/hadoop/hbase/client/Scan;
    at org.apache.phoenix.util.ServerUtil.createIOException(ServerUtil.java:84)
    at org.apache.phoenix.coprocessor.MetaDataEndpointImpl.createTable(MetaDataEndpointImpl.java:1269)
    at org.apache.phoenix.coprocessor.generated.MetaDataProtos$MetaDataService.callMethod(MetaDataProtos.java:11619)
    at org.apache.hadoop.hbase.regionserver.HRegion.execService(HRegion.java:7054)
    at org.apache.hadoop.hbase.regionserver.RSRpcServices.execServiceOnRegion(RSRpcServices.java:1746)
    at org.apache.hadoop.hbase.regionserver.RSRpcServices.execService(RSRpcServices.java:1728)
    at org.apache.hadoop.hbase.protobuf.generated.ClientProtos$ClientService$2.callBlockingMethod(ClientProtos.java:31447)
    at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:2035)
    at org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:107)
    at org.apache.hadoop.hbase.ipc.RpcExecutor.consumerLoop(RpcExecutor.java:130)
    at org.apache.hadoop.hbase.ipc.RpcExecutor$1.run(RpcExecutor.java:107)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NoSuchMethodError: org.apache.hadoop.hbase.client.Scan.setRaw(Z)Lorg/apache/hadoop/hbase/client/Scan;
    at org.apache.phoenix.coprocessor.MetaDataEndpointImpl.buildDeletedTable(MetaDataEndpointImpl.java:966)
    at org.apache.phoenix.coprocessor.MetaDataEndpointImpl.loadTable(MetaDataEndpointImpl.java:1042)
    at org.apache.phoenix.coprocessor.MetaDataEndpointImpl.createTable(MetaDataEndpointImpl.java:1216)
    ... 10 more

    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
    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:313)
    at org.apache.hadoop.hbase.protobuf.ProtobufUtil.execService(ProtobufUtil.java:1609)
    at org.apache.hadoop.hbase.ipc.RegionCoprocessorRpcChannel$1.call(RegionCoprocessorRpcChannel.java:92)
    at org.apache.hadoop.hbase.ipc.RegionCoprocessorRpcChannel$1.call(RegionCoprocessorRpcChannel.java:89)
    at org.apache.hadoop.hbase.client.RpcRetryingCaller.callWithRetries(RpcRetryingCaller.java:126)
    at org.apache.hadoop.hbase.ipc.RegionCoprocessorRpcChannel.callExecService(RegionCoprocessorRpcChannel.java:95)
    at org.apache.hadoop.hbase.ipc.CoprocessorRpcChannel.callMethod(CoprocessorRpcChannel.java:56)
    at org.apache.phoenix.coprocessor.generated.MetaDataProtos$MetaDataService$Stub.createTable(MetaDataProtos.java:11799)
    at org.apache.phoenix.query.ConnectionQueryServicesImpl$6.call(ConnectionQueryServicesImpl.java:1273)
    at org.apache.phoenix.query.ConnectionQueryServicesImpl$6.call(ConnectionQueryServicesImpl.java:1261)
    at org.apache.hadoop.hbase.client.HTable$16.call(HTable.java:1737)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)
Caused by: org.apache.hadoop.hbase.ipc.RemoteWithExtrasException(org.apache.hadoop.hbase.DoNotRetryIOException): org.apache.hadoop.hbase.DoNotRetryIOException: SYSTEM.CATALOG: org.apache.hadoop.hbase.client.Scan.setRaw(Z)Lorg/apache/hadoop/hbase/client/Scan;
    at ... 

해결법

  1. ==============================

    1.Cloudera는 공식적으로 Apache phoenix를 지원하지 않습니다. 아직 cloudera Labs에 있으므로 cloudera 저장소에 cloudera Pheonix tar.gz 파일을 찾을 수 없습니다. Cloudera 저장소의 Phoenix를 찾을 수있는 유일한 곳은 소포 저장소입니다. 그러나 소포 수 있습니다 cloudera 관리자를 통해 설치하는 경우에만 사용하십시오. cloudera Phoenix의 최신 버전은 4.3.0입니다.

    Cloudera는 공식적으로 Apache phoenix를 지원하지 않습니다. 아직 cloudera Labs에 있으므로 cloudera 저장소에 cloudera Pheonix tar.gz 파일을 찾을 수 없습니다. Cloudera 저장소의 Phoenix를 찾을 수있는 유일한 곳은 소포 저장소입니다. 그러나 소포 수 있습니다 cloudera 관리자를 통해 설치하는 경우에만 사용하십시오. cloudera Phoenix의 최신 버전은 4.3.0입니다.

    Cloudera Hadoop 배포판에서 Phoenix 4.4 또는 4.5 버전을 실행하려면 CDH 종속성 병을 사용하여 Phoenix 라이브러리를 다시 빌드해야합니다. 당신은 단순히 아파치 피닉스를 사용할 수 없습니다 tar.gz

    여기 단계가 있습니다.

    최근 앤드류 퍼 텔 (Andrew Purtell)이 피닉스 (Phoenix)를 CDH 버전과 호환되게 만드는 엄청난 노력을 기울인 것으로 나타났습니다. 아래 링크 github 페이지에서도 같은 내용을 볼 수 있습니다. 아래의 github 링크에서 해당 지점을 다운로드하십시오. 이렇게하면 시간을 절약 할 수 있습니다.

    https://github.com/chiastic-security/phoenix-for-cloudera/branches

    CDH 종속성 jar를 사용하여 소스 코드 재 작성 - 다음과 같이 pom.xml 및 2 개의 소스 파일을 업데이트하십시오 (My CDH 버전은 5.4.2 임).

    [h4ck3r@host1 phoenix]$ diff phoenix-4.5_Updated/phoenix-4.5.0-HBase-1.0-src/pom.xml  phoenix-4.5_Orig/phoenix-4.5.0-HBase-1.0-src/pom.xml
    28c28
    < <!--    <module>phoenix-pig</module> -->
    ---
    >     <module>phoenix-pig</module>
    37a38,41
    >       <id>apache release</id>
    >       <url>https://repository.apache.org/content/repositories/releases/</url>
    >     </repository>
    >     <repository>
    42,43c46,50
    <       <id>cloudera</id>
    <       <url>https://repository.cloudera.com/artifactory/cloudera-repos</url>
    ---
    >       <id>apache snapshot</id>
    >       <url>https://repository.apache.org/content/repositories/snapshots/</url>
    >       <snapshots>
    >         <enabled>true</enabled>
    >       </snapshots>
    45d51
    <
    54d59
    <
    77,81c82,83
    <     <hbase.version>1.0.0-cdh5.4.2</hbase.version>
    <     <hadoop-two.version>2.6.0-cdh5.4.2</hadoop-two.version>
    /<     <hadoop.version>2.6.0-cdh5.4.2</hadoop.version>
    <     <pig.version>0.12.0</pig.version>
    <     <flume.version>1.5.0-cdh5.4.2</flume.version>
    ---
    >     <hbase.version>1.0.1</hbase.version>
    >     <hadoop-two.version>2.5.1</hadoop-two.version>
    84a87,88
    >     <hadoop.version>2.5.1</hadoop.version>
    >     <pig.version>0.13.0</pig.version>
    97a102
    >     <flume.version>1.4.0</flume.version>
    449,450c454
    <
    <   <dependency>
    ---
    >       <dependency>
    454c458
    <       </dependency>
    ---
    >       </dependency>
    
    [h4ck3r@host1 phoenix]$ diff phoenix-4.5_Updated/phoenix-4.5.0-HBase-1.0-src/phoenix-core/src/main/java/org/apache/hadoop/hbase/regionserver/LocalIndexMerger.java  phoenix-4.5_Orig/phoenix-4.5.0-HBase-1.0-src/phoenix-core/src/main/java/org/apache/hadoop/hbase/regionserver/LocalIndexMerger.java
    84c84
    <                     rss.getServerName(), metaEntries,1);
    ---
    >                     rss.getServerName(), metaEntries);
    
    [h4ck3r@host1 phoenix]$ diff phoenix-4.5_Updated/phoenix-4.5.0-HBase-1.0-src/phoenix-core/src/main/java/org/apache/hadoop/hbase/regionserver/IndexSplitTransaction.java phoenix-4.5_Orig/phoenix-4.5.0-HBase-1.0-src/phoenix-core/src/main/java/org/apache/hadoop/hbase/regionserver/IndexSplitTransaction.java
    291c291
    <                 daughterRegions.getSecond().getRegionInfo(), server.getServerName(),1);
    ---
    >                 daughterRegions.getSecond().getRegionInfo(), server.getServerName());
    978c978
    < }
    ---
    > }
    \ No newline at end of file
    

    종속성 문제로 인해 phoenix-pig는 처리되지 않습니다. 이는 단지 일시적인 해결책 일뿐입니다.

  2. ==============================

    2.Cloudera Labs의 새로운 Apache Phoenix 4.5.2 패키지

    Cloudera Labs의 새로운 Apache Phoenix 4.5.2 패키지

  3. from https://stackoverflow.com/questions/31849454/using-phoenix-with-cloudera-hbase-installed-from-repo by cc-by-sa and MIT license