我正在开发Nifi处理器以连接配置单元并使用控制器服务执行查询。我能够在Nifi中部署它并尝试运行它,但它失败并出现以下异常
RegisterSchema[id=6b1152ca-015f-1000-d7b9-e44e251aba70] failed to process due to java.lang.NoSuchFieldError: HIVE_CLI_SERVICE_PROTOCOL_V7; rolling back session: {}
java.lang.NoSuchFieldError: HIVE_CLI_SERVICE_PROTOCOL_V7
at org.apache.hive.jdbc.HiveConnection.<init>(HiveConnection.java:175)
at org.apache.hive.jdbc.HiveDriver.connect(HiveDriver.java:105)
at org.apache.commons.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38)
at org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:582)
at org.apache.commons.dbcp.BasicDataSource.validateConnectionFactory(BasicDataSource.java:1556)
at org.apache.commons.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1545)
at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1388)
at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)
以下是我的版本依赖
Hive版本:1.1.0 Hadoop:2.7.3
<!-- https://mvnrepository.com/artifact/org.apache.hive/hive-jdbc -->
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-jdbc</artifactId>
<version>1.1.0-cdh5.10.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.hive/hive-jdbc -->
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-service</artifactId>
<version>1.1.0-cdh5.10.0</version>
</dependency>
这里有指针吗?
答案 0 :(得分:2)
This SO question似乎相关,并暗示Apache Hive 1.1.0对于您在Hadoop 2.6.0上运行的Hive来说“太旧了”。如果您计划仅部署特定于供应商的Hadoop版本(例如HDP或CDH,而不是Apache Hadoop),那么您可能希望将其存储库添加到POM(有关示例,请参阅顶级NiFi POM)和将版本设置为与其发布的Hadoop对应的特定于供应商的版本。
例如,Apache NiFi中现有的Hive NAR与较新版本的HDP不兼容,因为HDP Hive比相应的Apache Hive基线更新。因此,可以设置特定于供应商的配置文件(在此示例中为-Phortonworks
)并覆盖hive.version
和hive.hadoop.version
等属性,并设置为特定于供应商的值。