2015-08-06 38 views
14

mogę dostać Phoenix pracuje nad autonomicznym Apache HBaseKorzystanie z Phoenix Cloudera HBase (repo) z zainstalowanym

(uwaga, to wszystko jest dla HBase 1.0.0 na RHEL6.5)

Dla smak Cloudera z Hbase jednak nigdy nie działa tak bez rzucania wyjątków. (nawet wypróbowany RHEL7 minimal as en OS)

To samo dzieje się z Phoenix 4.4 dla Hbase 1.0.

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

ślad stosu:

[[email protected] 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 ... 

Odpowiedz

16

Cloudera oficjalnie nie obsługuje Apache feniks, to jeszcze w Cloudera Labs, więc nie można znaleźć żadnych plików tar.gz Cloudera Pheonix w repozytorium Cloudera, Jedyne miejsce gdzie można znaleźć Phoenix w repozytorium Cloudera znajduje się w paczce repository, jednak paczkę można wykorzystać tylko wtedy, gdy instalujesz przez menedżera cloudera, najnowsza dostępna wersja cloudera Phoenix to 4.3.0.

Jeśli chcesz uruchomić wersję Phoenix 4.4 lub 4.5 w dystrybucji Cloudera Hadoop, musisz ponownie zbudować biblioteki feniksów przy użyciu słoików zależności CDH. Nie można po prostu użyć apache Phoenix tar.gz

Oto kroki.

Niedawno odkryłem, że Andrew Purtell wykonał ogromną pracę, aby uczynić Phoenix zgodnym z wersją CDH. To samo jest dostępne na poniższej stronie github łącza. Pobierz odpowiednią gałąź z poniższego linku github. To oszczędza twój czas.

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

  • Pobierz Apache Phoenix 4,5 źródło z Apache repository. (Pomiń ten krok, jeśli pobierasz z powyższej stronie github)

Odbuduj kod źródłowy używając CDH zależnościami słoików - Aktualizacja pom.xml i 2 pliki źródłowe w następujący sposób (CDH Moja wersja jest 5.4.2)

[[email protected] 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> 

[[email protected] 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); 

[[email protected] 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 
  • Powyższa kompilacja tworzy nowe słoiki w katalogu docelowym każdego podnośnego.
  • Pobierz Apache Phoenix 4,5 binarny z Apache repository
  • Extract phoenix-4.5.0-HBase-1,0-bin.tar.gz i zastąpić poniżej Phoenix Słoiki z nowymi Słoiki

    • phoenix-4,5. 0-HBase-1,0-client.jar
    • phoenix-4.5.0-HBase-1,0-server-bez-antlr.jar
    • phoenix-4.5.0-HBase-1,0-client-minimal.jar
    • phoenix-assembly-4.5.0-HBase-1.0-tests.jar
    • phoenix-4.5.0-HBase-1.0-client-without-hbase.jar
    • phoenix-core-4.5.0-HBase-1.0.słoik
    • Phoenix-4.5.0-HBase-1,0 server.jar
  • wymienić phoenix-4.5.0-HBase-1.0-server.jar i phoenix-core-4.5.0-HBase-1.0.jar w HBase lib położenia i ponownego uruchamiania HBase. (W wersji 4.7 tylko plik phoenix-4.7.0-cdh5.X.1-server.jar do skopiowania do biblioteki hbase)

  • Wykonaj komendę phoenix z nowego zaktualizowanego katalogu.

Z powodu pewnych problemów związanych z phoenix-pig nie jest obsługiwane, jest to tylko obejście tego problemu.

+0

Dzięki za rozwiązanie. W moim przypadku wystarczy rozpakować plik .parcel i umieścić wymagane biblioteki feniksów w hbase regionservers. To rozwiązało mój problem. – sayan

+0

Kroki te dotyczą wersji phoenix 4.5. Powodem, dla którego napisałem te kroki, jest to, że Cloudera jeszcze wydała paczkę Phoenix 4.5, najnowsza dostępna wersja paczki Cloudera w tym momencie to 4.3 (http://archive.cloudera.com/cloudera-labs/phoenix/parcels/latest/). Jeśli zainstalowałeś paczkę, to wersja phoenix będzie miała wartość 4.3. – sachin

+0

Otrzymuję ten sam wyjątek dla klienta squirrel z phoenix 4.6.0 i Hbase 1.0. Skopiowałem serwer i podstawowe słoiki do regionu hbase i serwerów głównych, ale nadal otrzymuję wyjątek od klienta. Co może być rozwiązaniem? Czy na kliencie jest coś, co powoduje ten wyjątek? Btw instrukcji instalacji na stronie phoenix wspomnieć tylko o kilka słoików. Co to są te dodatkowe słoiki dla (klient-minimalny, klient-bez-hbase etc? Dzięki! –