java - Phoenix/HBase 在 Windows 上抛出 NoSuchMethodError: sun.misc.Unsafe.putLong
问题描述
我们的产品使用 Phoenix JDBC 驱动连接 HBase,在 Linux 上运行良好。我想在 Windows 上运行它,但连接失败。
我尝试从 IntelliJ Idea 的数据库连接,但由于同样的错误而失败。我曾经在 Idea 中连接到另一个 HBase 安装,该安装在 7 月份在那里运行良好。但它也因同样的错误而失败。
2020-11-18 11:36:54,835 [ 119005] INFO - .DatabaseConnectionEstablisher - Connecting to: jdbc:phoenix:dev.internal:2181:/hbase-unsecure
2020-11-18 11:36:57,362 [ 121532] WARN - .DatabaseConnectionEstablisher - Connecting to: jdbc:phoenix:dev.internal:2181:/hbase-unsecure
2020-11-18 11:36:57,364 [ 121534] WARN - .DatabaseConnectionEstablisher - [08004][103] ERROR 103 (08004): Unable to establish connection.
2020-11-18 11:36:57,368 [ 121538] WARN - ic.GenericDatabaseErrorHandler - ERROR 103 (08004): Unable to establish connection.
java.sql.SQLException: ERROR 103 (08004): Unable to establish connection.
at org.apache.phoenix.exception.SQLExceptionCode$Factory$1.newException(SQLExceptionCode.java:542)
at org.apache.phoenix.exception.SQLExceptionInfo.buildException(SQLExceptionInfo.java:150)
at org.apache.phoenix.query.ConnectionQueryServicesImpl.openConnection(ConnectionQueryServicesImpl.java:460)
at org.apache.phoenix.query.ConnectionQueryServicesImpl.access$400(ConnectionQueryServicesImpl.java:292)
at at org.apache.phoenix.util.PhoenixContextExecutor.call(PhoenixContextExecutor.java:76)
at org.apache.phoenix.query.ConnectionQueryServicesImpl.init(ConnectionQueryServicesImpl.java:3077)
at org.apache.phoenix.jdbc.PhoenixDriver.getConnectionQueryServices(PhoenixDriver.java:255)
at org.apache.phoenix.jdbc.PhoenixEmbeddedDriver.createConnection(PhoenixEmbeddedDriver.java:142)
at org.apache.phoenix.jdbc.PhoenixDriver.connect(PhoenixDriver.java:221)
Caused by: java.lang.NoSuchMethodError: 'void sun.misc.Unsafe.putLong(java.lang.Object, int, long)'
at org.apache.hadoop.hbase.util.UnsafeAccess.putLong(UnsafeAccess.java:248)
at org.apache.hadoop.hbase.util.Bytes$ConverterHolder$UnsafeConverter.putLong(Bytes.java:1489)
at org.apache.hadoop.hbase.util.Bytes.putLong(Bytes.java:788)
at org.apache.hadoop.hbase.client.ClientIdGenerator.generateClientId(ClientIdGenerator.java:51)
at org.apache.hadoop.hbase.client.PerClientRandomNonceGenerator.<init>(PerClientRandomNonceGenerator.java:37)
at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.<init>(ConnectionManager.java:698)
at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.<init>(ConnectionManager.java:649)
反编译的ideasun.misc.Unsafe
有:
@Deprecated
public void putLong(Object o, int offset, long x) {
putLong(o, (long)offset, x);
}
环境:
OpenJDK Runtime Environment (build 1.8.0_252-b09)
OpenJDK 64-Bit Server VM (build 25.252-b09, mixed mode)
Idea中的类路径:
echo %HADOOP_HOME%
C:\dev\core\jdbc\winutils
echo %PATH%
C:\WINDOWS\system32;C:\dev\core\jdbc\winutils\bin;
JDBC 文件夹:
16.11.2020 17:05 <DIR> winutils
08.07.2020 12:43 20 764 hbase-annotations-1.1.0.jar
08.07.2020 12:43 1 239 829 hbase-client-1.1.0.jar
08.07.2020 12:43 523 263 hbase-common-1.1.0.jar
08.07.2020 12:23 489 884 log4j-1.2.17.jar
17.12.2019 07:12 109 750 805 phoenix-4.15.0-HBase-1.5-client.jar
08.07.2020 12:16 3 074 133 phoenix-core-4.4.0-HBase-1.1.jar
08.07.2020 12:35 55 186 484 phoenix-shaded-4.4.0-HBase-1.1-1.jar
08.07.2020 12:48 533 455 protobuf-java-2.5.0.jar
08.07.2020 12:21 25 962 slf4j-api-1.6.4.jar
08.07.2020 12:21 8 869 slf4j-log4j12-1.7.5.jar
08.07.2020 12:50 792 964 zookeeper-3.4.6.jar
如何解决?
解决方案
我需要thin:url=http://
在主机名(或 IP)之前添加来解决这个问题。
我在 DBeaver Windows 客户端中遇到了类似的错误,问题是 jdbc URL 构造错误。我正在使用从 Phoenix 安装目录获取的瘦客户端 jar。
如果没有添加 jdbc URL,则缺少此部分。
推荐阅读
- javascript - 如何编写一个Javascript函数来按顺序从字符串中获取所有回文子序列?
- node.js - AgoraIO Web + Heroku
- matlab - 从符号微分的结果创建函数句柄的问题
- c++ - 嵌入式 C++ - 虚拟析构函数和堆内存
- autodesk-forge - 如何从模型衍生 API 元数据创建模型浏览器,如对象
- chart.js - 如何仅在最后一个栏显示 chartjs 数据标签?
- kotlin - 从 Gradle Fat Jar 加载 Kotlin 主类失败
- javascript - 时间函数在nodejs中无法正常工作
- javascript - 如何为数据传输生成 HMAC-SHA-256 登录 javascript?
- javascript - Axios POST 的发送状态和数据未显示在 req.body 中