当前位置:  开发笔记 > 编程语言 > 正文

Spark 1.5.1无法使用hive jdbc 1.2.0

如何解决《Spark1.5.1无法使用hivejdbc1.2.0》经验,为你挑选了1个好方法。

我试图在独立模式和hive 1.2.0 jdbc版本中使用spark 1.5.1执行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 options = new HashMap();
    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 at org.apache.spark.sql.execution.datasources.jdbc.DefaultSource.createRelation(DefaultSource.scala:60)atg.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.xml中的java项目中添加的依赖项


    org.apache.spark
    spark-core_2.10
    1.5.1



    org.apache.spark
    spark-sql_2.10
    1.5.1



    org.apache.hive
    hive-jdbc
    1.2.0
    
    
        javax.servlet
        servlet-api
    
    



    org.apache.hadoop
    hadoop-core
    1.2.0

任何人都可以帮助我吗?如果有人使用了带有hive jdbc的spark 1.5.1,那么请告诉我兼容版本的hive for spark 1.5.1.

先感谢您..!



1> Dennis Huo..:

据我所知,在使用jdbc连接器直到上游固定之前,你不幸运气不好; 在这种情况下,"不支持的方法"不仅仅是版本不匹配,而是在hive jdbc库branch-1.2中明确没有实现,即使您查看了hive jdbc master分支或branch-2.0,它仍然没有实现:

public boolean isSigned(int column) throws SQLException {
  throw new SQLException("Method not supported");
}

查看Spark isSigned调用点,resolveTable在Spark 1.5和master中调用.

也就是说,很可能这个"问题"仍然存在的真正原因是,当与Hive交互时,您需要直接连接到Hive Metastore,而不是需要使用jdbc连接器.请参阅Spark文档中的Hive Tables以了解如何执行此操作.从本质上讲,你想要将Spark视为Hive 的平等 /替代,而不是Hive的消费者.

这样一来,几乎所有你要做的就是添加hive-site.xml到您的星火的conf/目录,并确保datanucleus罐子下,lib_managed/jars可用于所有的Spark执行人,然后星火直接会谈,蜂房metastore的模式信息,并在某种程度上适合直接从HDFS读取数据很好地并行化的RDD.

推荐阅读
360691894_8a5c48
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有