Spark 1.5.1 不适用于配置单元 jdbc 1.2.0
Spark 1.5.1 not working with hive jdbc 1.2.0
我正在尝试在独立模式下使用 spark 1.5.1 和 hive 1.2.0 jdbc 版本执行 hive 查询。
这是我的一段代码:
private static final String HIVE_DRIVER = "org.apache.hive.jdbc.HiveDriver";
private static final String HIVE_CONNECTION_URL = "jdbc:hive2://localhost:10000/idw";
private static final SparkConf sparkconf = new SparkConf().set("spark.master", "spark://impetus-i0248u:7077").set("spark.app.name", "sparkhivesqltest")
.set("spark.cores.max", "1").set("spark.executor.memory", "512m");
private static final JavaSparkContext sc = new JavaSparkContext(sparkconf);
private static final SQLContext sqlContext = new SQLContext(sc);
public static void main(String[] args) {
//Data source options
Map<String, String> options = new HashMap<String, String>();
options.put("driver", HIVE_DRIVER);
options.put("url", HIVE_CONNECTION_URL);
options.put("dbtable", "(select * from idw.emp) as employees_name");
DataFrame jdbcDF = sqlContext.read().format("jdbc").options(options).load();
}
我在 sqlContext.read().format("jdbc").options(options).load();
遇到错误
线程异常 "main" java.sql.SQLException: 方法不受支持
在 org.apache.hive.jdbc.HiveResultSetMetaData.isSigned(HiveResultSetMetaData.java:143)
在
org.apache.spark.sql.execution.datasources.jdbc.JDBCRDD$.resolveTable(JDBCRDD.scala:135)
at org.apache.spark.sql.execution.datasources.jdbc.JDBCRelation.(JDBCRelation.scala:91)
at org.apache.spark.sql.execution.datasources.jdbc.DefaultSource.createRelation(DefaultSource.scala:60)
at org.apache.spark.sql.execution.datasources.ResolvedDataSource$.apply(ResolvedDataSource.scala:125)
at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:114)
我是 运行 独立模式下的 spark 1.5.1
Hadoop版本是2.6
Hive 版本为 1.2.0
下面是我在pom.xmljava项目中添加的依赖
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.10</artifactId>
<version>1.5.1</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_2.10</artifactId>
<version>1.5.1</version>
</dependency>
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-jdbc</artifactId>
<version>1.2.0</version>
<exclusions>
<exclusion>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-core</artifactId>
<version>1.2.0</version>
</dependency>
谁能帮我解决这个问题?
如果有人用过 spark 1.5.1 和 hive jdbc,那么你能告诉我 spark 1.5.1 的 hive 兼容版本吗?
提前谢谢你..!
据我所知,不幸的是,在上游修复 jdbc 连接器之前,您的运气不太好; "Method not supported" 在这种情况下不仅仅是版本不匹配,而且在 hive jdbc library branch-1.2 and even if you look at the hive jdbc master branch or branch-2.0 中明确没有实现它仍然没有实现:
public boolean isSigned(int column) throws SQLException {
throw new SQLException("Method not supported");
}
查看 Spark 调用站点,isSigned
在 resolveTable
期间在 Spark 1.5 as well as at master 期间被调用。
也就是说,这个 "issue" 仍然存在的真正原因很可能是当与 Hive 交互时,您应该直接连接到 Hive 元存储而不是需要弄乱 jdbc连接器;有关如何执行此操作的信息,请参阅 Hive Tables in Spark 文档。从本质上讲,您想将 Spark 视为 Hive 的 等同 / 替代品,而不是 Hive 的消费者。
这样,您所做的几乎就是将 hive-site.xml
添加到 Spark 的 conf/
目录,并确保 lib_managed/jars
下的 datanucleus
jar 对所有 Spark 可用执行器,然后 Spark 直接与 Hive 元存储对话以获取模式信息,并以适合并行化 RDD 的方式直接从 HDFS 获取数据。
我正在尝试在独立模式下使用 spark 1.5.1 和 hive 1.2.0 jdbc 版本执行 hive 查询。
这是我的一段代码:
private static final String HIVE_DRIVER = "org.apache.hive.jdbc.HiveDriver";
private static final String HIVE_CONNECTION_URL = "jdbc:hive2://localhost:10000/idw";
private static final SparkConf sparkconf = new SparkConf().set("spark.master", "spark://impetus-i0248u:7077").set("spark.app.name", "sparkhivesqltest")
.set("spark.cores.max", "1").set("spark.executor.memory", "512m");
private static final JavaSparkContext sc = new JavaSparkContext(sparkconf);
private static final SQLContext sqlContext = new SQLContext(sc);
public static void main(String[] args) {
//Data source options
Map<String, String> options = new HashMap<String, String>();
options.put("driver", HIVE_DRIVER);
options.put("url", HIVE_CONNECTION_URL);
options.put("dbtable", "(select * from idw.emp) as employees_name");
DataFrame jdbcDF = sqlContext.read().format("jdbc").options(options).load();
}
我在 sqlContext.read().format("jdbc").options(options).load();
线程异常 "main" java.sql.SQLException: 方法不受支持 在 org.apache.hive.jdbc.HiveResultSetMetaData.isSigned(HiveResultSetMetaData.java:143) 在
org.apache.spark.sql.execution.datasources.jdbc.JDBCRDD$.resolveTable(JDBCRDD.scala:135) at org.apache.spark.sql.execution.datasources.jdbc.JDBCRelation.(JDBCRelation.scala:91) at org.apache.spark.sql.execution.datasources.jdbc.DefaultSource.createRelation(DefaultSource.scala:60) at org.apache.spark.sql.execution.datasources.ResolvedDataSource$.apply(ResolvedDataSource.scala:125) at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:114)
我是 运行 独立模式下的 spark 1.5.1 Hadoop版本是2.6 Hive 版本为 1.2.0
下面是我在pom.xmljava项目中添加的依赖
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.10</artifactId>
<version>1.5.1</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_2.10</artifactId>
<version>1.5.1</version>
</dependency>
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-jdbc</artifactId>
<version>1.2.0</version>
<exclusions>
<exclusion>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-core</artifactId>
<version>1.2.0</version>
</dependency>
谁能帮我解决这个问题? 如果有人用过 spark 1.5.1 和 hive jdbc,那么你能告诉我 spark 1.5.1 的 hive 兼容版本吗?
提前谢谢你..!
据我所知,不幸的是,在上游修复 jdbc 连接器之前,您的运气不太好; "Method not supported" 在这种情况下不仅仅是版本不匹配,而且在 hive jdbc library branch-1.2 and even if you look at the hive jdbc master branch or branch-2.0 中明确没有实现它仍然没有实现:
public boolean isSigned(int column) throws SQLException {
throw new SQLException("Method not supported");
}
查看 Spark 调用站点,isSigned
在 resolveTable
期间在 Spark 1.5 as well as at master 期间被调用。
也就是说,这个 "issue" 仍然存在的真正原因很可能是当与 Hive 交互时,您应该直接连接到 Hive 元存储而不是需要弄乱 jdbc连接器;有关如何执行此操作的信息,请参阅 Hive Tables in Spark 文档。从本质上讲,您想将 Spark 视为 Hive 的 等同 / 替代品,而不是 Hive 的消费者。
这样,您所做的几乎就是将 hive-site.xml
添加到 Spark 的 conf/
目录,并确保 lib_managed/jars
下的 datanucleus
jar 对所有 Spark 可用执行器,然后 Spark 直接与 Hive 元存储对话以获取模式信息,并以适合并行化 RDD 的方式直接从 HDFS 获取数据。