[HADOOP] 자바를 사용하여 원격 HBase 서비스에 연결하기
HADOOP자바를 사용하여 원격 HBase 서비스에 연결하기
원격 HBase 엔터티에 대한 연결을 설정하려고하는 작은 샘플 코드가 있습니다. 이 코드는 HBase가 설치되지 않은 Windows 컴퓨터에서 실행되며 설치되어 실행중인 원격 우분투 서버에 연결을 시도합니다. 아래 스 니펫의 IP는 물론 자리 표시 자일뿐입니다.
코드는 다음과 같습니다.
public static void main(String[] args) {
Configuration conf = HBaseConfiguration.create();
HBaseAdmin admin = null;
String ip = "10.10.10.10";
String port = "2181";
conf.set("hbase.zookeeper.quorum", ip);
conf.set("hbase.zookeeper.property.clientPort", port);
try {
admin = new HBaseAdmin(conf);
boolean bool = admin.tableExists("sensor_data");
System.out.println("Table exists? " + bool);
} catch (IOException e) {
e.printStackTrace();
}
}
그러나 어떤 이유로 나는이 오류가 발생합니다 :
org.apache.hadoop.hbase.DoNotRetryIOException: java.lang.IllegalAccessError: tried to access method com.google.common.base.Stopwatch.<init>()V from class org.apache.hadoop.hbase.zookeeper.MetaTableLocator
at org.apache.hadoop.hbase.client.RpcRetryingCaller.translateException(RpcRetryingCaller.java:229)
at org.apache.hadoop.hbase.client.RpcRetryingCaller.callWithoutRetries(RpcRetryingCaller.java:202)
at org.apache.hadoop.hbase.client.ClientScanner.call(ClientScanner.java:320)
at org.apache.hadoop.hbase.client.ClientScanner.nextScanner(ClientScanner.java:295)
at org.apache.hadoop.hbase.client.ClientScanner.initializeScannerInConstruction(ClientScanner.java:160)
at org.apache.hadoop.hbase.client.ClientScanner.<init>(ClientScanner.java:155)
at org.apache.hadoop.hbase.client.HTable.getScanner(HTable.java:811)
at org.apache.hadoop.hbase.MetaTableAccessor.fullScan(MetaTableAccessor.java:602)
at org.apache.hadoop.hbase.MetaTableAccessor.tableExists(MetaTableAccessor.java:366)
at org.apache.hadoop.hbase.client.HBaseAdmin.tableExists(HBaseAdmin.java:303)
at org.apache.hadoop.hbase.client.HBaseAdmin.tableExists(HBaseAdmin.java:313)
at com.twoBM.Tests.HBaseWriter.main(HBaseWriter.java:26)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
Caused by: java.lang.IllegalAccessError: tried to access method com.google.common.base.Stopwatch.<init>()V from class org.apache.hadoop.hbase.zookeeper.MetaTableLocator
at org.apache.hadoop.hbase.zookeeper.MetaTableLocator.blockUntilAvailable(MetaTableLocator.java:596)
at org.apache.hadoop.hbase.zookeeper.MetaTableLocator.blockUntilAvailable(MetaTableLocator.java:580)
at org.apache.hadoop.hbase.zookeeper.MetaTableLocator.blockUntilAvailable(MetaTableLocator.java:559)
at org.apache.hadoop.hbase.client.ZooKeeperRegistry.getMetaRegionLocation(ZooKeeperRegistry.java:61)
at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.locateMeta(ConnectionManager.java:1185)
at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.locateRegion(ConnectionManager.java:1152)
at org.apache.hadoop.hbase.client.RpcRetryingCallerWithReadReplicas.getRegionLocations(RpcRetryingCallerWithReadReplicas.java:300)
at org.apache.hadoop.hbase.client.ScannerCallableWithReplicas.call(ScannerCallableWithReplicas.java:153)
at org.apache.hadoop.hbase.client.ScannerCallableWithReplicas.call(ScannerCallableWithReplicas.java:61)
at org.apache.hadoop.hbase.client.RpcRetryingCaller.callWithoutRetries(RpcRetryingCaller.java:200)
... 15 more
Gradle을 사용하여 프로젝트를 빌드하고 현재 다음 두 가지 종속성 만 사용하고 있습니다.
compile 'org.apache.hive:hive-jdbc:2.1.0'
compile 'org.apache.hbase:hbase:1.1.6'
누구든지이 문제를 해결할 것을 알고 있습니까? 나는이 문제에 대한 인터넷 검색을 시도했지만 실제 링크를 제공하는 링크는 발견되지 않았다.
친애하는
해결법
-
==============================
1.확실히 Google 구아바의 의존성 충돌입니다. Stopwatch 클래스의 기본 생성자는 Guava v.17부터 비공개가되었으며 훨씬 더 일찍 더 이상 사용되지 않습니다.
확실히 Google 구아바의 의존성 충돌입니다. Stopwatch 클래스의 기본 생성자는 Guava v.17부터 비공개가되었으며 훨씬 더 일찍 더 이상 사용되지 않습니다.
HBase Java 클라이언트에 제대로 작동하려면 Guava v.16 이하가 필요합니다. 애플리케이션 빌드 방법 (Maven / Gradle / Classpath)을 확인하고 Guava v.17 +을 사용하는 종속성을 찾으십시오. 그 후에 충돌을 해결할 수 있습니다.
-
==============================
2.Maven 음영 플러그인을 사용하여이 문제를 해결할 수 있습니다. 이 블로그 게시물을 한 번보세요. 여기에 예제가있다. (실제로는 작업중인 pom의 스 니펫이다.)
Maven 음영 플러그인을 사용하여이 문제를 해결할 수 있습니다. 이 블로그 게시물을 한 번보세요. 여기에 예제가있다. (실제로는 작업중인 pom의 스 니펫이다.)
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.0.0</version> <executions> <execution> <id>assemble-all</id> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <!--<finalName>PROJECT_NAME-${project.version}-shaded</finalName>--> <relocations> <relocation> <pattern>com.google.common</pattern> <shadedPattern>shaded.com.google.common</shadedPattern> </relocation> <relocation> <pattern>com.google.protobuf</pattern> <shadedPattern>shaded.com.google.protobuf</shadedPattern> </relocation> </relocations> <artifactSet> <includes> <include>*:*</include> </includes> </artifactSet> </configuration> </execution> </executions> </plugin>
from https://stackoverflow.com/questions/39725234/connecting-to-remote-hbase-service-using-java by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] Hadoop 및 HDFS에 의존하지 않고 Java를 사용하여 마루판을 읽고 쓸 수 있습니까? (0) | 2019.07.28 |
---|---|
[HADOOP] 왜 사용자가 외부 하이브 테이블의 위치에 대한 쓰기 권한이 필요합니까? (0) | 2019.07.28 |
[HADOOP] Hortonworks HDP 샌드 박스의 HBase : ZooKeeper에서 마스터 주소를 가져올 수 없습니다. (0) | 2019.07.28 |
[HADOOP] hadoop을 사용하여 자체 조인 / 교차 제품을 구현하는 방법은 무엇입니까? (0) | 2019.07.28 |
[HADOOP] 행의 배열 값을 확장하는 방법 !! 하이브 SQL 사용 (0) | 2019.07.28 |