从 Spark 执行 Hive 查询

executing Hive queries from Spark

我正在尝试在 spark-shell 中执行这段代码:

val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc)
sqlContext.sql("show tables")

执行第二行后,出现异常:

java.lang.NoSuchMethodError: org.apache.hadoop.hive.ql.Driver.getResults(Ljava/util/ArrayList;)Z at org.apache.spark.sql.hive.HiveContext.runHive(HiveContext.scala:305) at org.apache.spark.sql.hive.HiveContext.runSqlHive(HiveContext.scala:272) at org.apache.spark.sql.hive.execution.NativeCommand.sideEffectResult$lzycompute(NativeCommand.scala:35) at org.apache.spark.sql.hive.execution.NativeCommand.sideEffectResult(NativeCommand.scala:35) at org.apache.spark.sql.hive.execution.NativeCommand.execute(NativeCommand.scala:38) at org.apache.spark.sql.hive.HiveContext$QueryExecution.toRdd$lzycompute(HiveContext.scala:360) at org.apache.spark.sql.hive.HiveContext$QueryExecution.toRdd(HiveContext.scala:360) at org.apache.spark.sql.SchemaRDDLike$class.$init$(SchemaRDDLike.scala:58) at org.apache.spark.sql.SchemaRDD.(SchemaRDD.scala:103) at org.apache.spark.sql.hive.HiveContext.sql(HiveContext.scala:98) at $iwC$$iwC$$iwC$$iwC.(:14) ...

请帮我解决这个问题。

您的 Hive 库版本可能与您的 Spark 库不兼容。 Spark 期望函数 org.apache.hadoop.hive.ql.Driver.getResults(Ljava/util/ArrayList;) 存在,但在您的 Hive 库中,它不存在。

你可以使用spark-sql.

到 运行 个配置单元查询:

spark-sql --master yarn --num-executors 6 --executor-memory 2G --executor-cores 1 --driver-memory 5G -e "select * from database.tablename;"

至 运行 配置单元脚本:

spark-sql --master yarn --num-executors 6 --executor-memory 2G --executor-cores 1 --driver-memory 5G -f hivescript.hql

注意:确保hive配置了spark安装。