Apache spark 尝试使用spark从远程hive2服务器获取表时出错

Apache spark 尝试使用spark从远程hive2服务器获取表时出错,apache-spark,hive,apache-spark-sql,Apache Spark,Hive,Apache Spark Sql,我正在尝试使用以下代码从spark的远程hive2服务器访问表: import org.apache.spark.SparkContext, org.apache.spark.SparkConf, org.apache.spark.sql._ import com.typesafe.config._ import java.io._ import org.apache.hadoop.fs._ import org.apache.spark.sql.hive.HiveContext import

我正在尝试使用以下代码从spark的远程hive2服务器访问表:

import org.apache.spark.SparkContext, org.apache.spark.SparkConf, org.apache.spark.sql._
import com.typesafe.config._
import java.io._
import org.apache.hadoop.fs._
import org.apache.spark.sql.hive.HiveContext
import org.apache.spark.sql.Row
import org.apache.spark.sql.SparkSession

object stack {
  def main(args: Array[String]) {
 val warehouseLocation = "/usr/hive/warehouse"
System.setProperty("javax.jdo.option.ConnectionURL","jdbc:mysql://sparkserver:3306/metastore?createDatabaseIfNotExist=true")
System.setProperty("javax.jdo.option.ConnectionUserName","hiveroot")
System.setProperty("javax.jdo.option.ConnectionPassword","hivepassword")
System.setProperty("hive.exec.scratchdir","/tmp/hive/${user.name}")
System.setProperty("spark.sql.warehouse.dir", warehouseLocation)
   // System.setProperty("hive.metastore.uris", "thrift://sparkserver:9083")
System.setProperty("javax.jdo.option.ConnectionDriverName","com.mysql.jdbc.Driver")
System.setProperty("hive.metastore.warehouse.dir","/user/hive/warehouse")


val spark = SparkSession.builder().master("local")
.appName("spark remote")
   // .config("javax.jdo.option.ConnectionURL","jdbc:mysql://sparkserver:3306/metastore?createDatabaseIfNotExist=true")
 .config("javax.jdo.option.ConnectionURL","jdbc:mysql://sparkserver:3306/metastore?createDatabaseIfNotExist=true")
  .config("javax.jdo.option.ConnectionUserName","hiveroot")
  .config("javax.jdo.option.ConnectionPassword","hivepassword")
  .config("hive.exec.scratchdir","/tmp/hive/${user.name}")
  .config("spark.sql.warehouse.dir", warehouseLocation)
//  .config("hive.metastore.uris", "thrift://sparkserver:9083")  
  .config("javax.jdo.option.ConnectionDriverName","com.mysql.jdbc.Driver")
  .config("hive.querylog.location","/tmp/hivequerylogs/${user.name}")
  .config("hive.support.concurrency","false")
  .config("hive.server2.enable.doAs","true")
  .config("hive.server2.authentication","PAM")
  .config("hive.server2.custom.authentication.class","org.apache.hive.service.auth.PamAuthenticationProvider")
  .config("hive.server2.authentication.pam.services","sshd,sudo")
  .config("hive.stats.dbclass","jdbc:mysql")
  .config("hive.stats.jdbcdriver","com.mysql.jdbc.Driver")
  .config("hive.session.history.enabled","true")
  .config("hive.metastore.schema.verification","false")
  .config("hive.optimize.sort.dynamic.partition","false")
  .config("hive.optimize.insert.dest.volume","false")
  .config("datanucleus.fixedDatastore","true")
  .config("hive.metastore.warehouse.dir","/user/hive/warehouse")
  .config("datanucleus.autoCreateSchema","false")
  .config("datanucleus.schema.autoCreateAll","true")
  .config("datanucleus.schema.validateConstraints","true")
  .config("datanucleus.schema.validateColumns","true")
  .config("datanucleus.schema.validateTables","true")       
  .config("fs.default.name","hdfs://sparkserver:54310")
  .config("dfs.namenode.name.dir","/usr/local/hadoop_tmp/hdfs/namenode")
  .config("dfs.datanode.name.dir","/usr/local/hadoop_tmp/hdfs/datanode")
  .enableHiveSupport()
  .getOrCreate()

import spark.implicits._
import spark.sql

sql("select * from sample.source").collect.foreach(println)
sql("select * from sample.destination").collect.foreach(println)
  }
}
远程配置单元服务器拒绝了到元存储的连接请求

错误:无法启动配置单元-metastore.service:找不到单元配置单元-metastore.service


谢谢大家!

使用此选项时:
.config(“hive.metastore.uris”、“hive2://hiveserver:9083”)
hiveserver
应该是正确的远程hive服务器的ip

conf
hive.metastore.uri
指向hive元存储服务;如果您在本地运行(在localhost中),并且想要远程元存储;您需要单独启动配置单元元存储服务

`$HIVE_HOME/bin/hive --service metastore` -p 9083
或者-默认情况下,配置单元使用本地配置单元元存储;因此,在这种情况下,不需要为
hive.metastore.uri设置任何值

而且-忘了提及,您正在设置的属性-始终使用
节俭协议
无论是hiveserver1还是hiveserver2

因此,请始终使用以下方法:

.config("hive.metastore.uris", "thrift://hiveserver:9083")

使用此选项时:
.config(“hive.metastore.uris”、“hive2://hiveserver:9083”)
hiveserver
应该是正确的远程配置单元服务器的ip

conf
hive.metastore.uri
指向hive元存储服务;如果您在本地运行(在localhost中),并且想要远程元存储;您需要单独启动配置单元元存储服务

`$HIVE_HOME/bin/hive --service metastore` -p 9083
或者-默认情况下,配置单元使用本地配置单元元存储;因此,在这种情况下,不需要为
hive.metastore.uri设置任何值

而且-忘了提及,您正在设置的属性-始终使用
节俭协议
无论是hiveserver1还是hiveserver2

因此,请始终使用以下方法:

.config("hive.metastore.uris", "thrift://hiveserver:9083")

通常我们不需要单独指向远程元存储

`$HIVE_HOME/bin/hive --service metastore` -p 9083
Hive-site.xml将在内部通过jdbc指向metastore

在初始化配置单元上下文之前,可以在程序中设置相同的配置,如下所示:

试试看

System.setProperty("javax.jdo.option.ConnectionURL", "jdbc:mysql://<ip>/metastore?createDatabaseIfNotExist=true")
...("javax.jdo.option.ConnectionDriverName", "com.mysql.jdbc.Driver")
...("javax.jdo.option.ConnectionUserName", "mysql-user")
...("javax.jdo.option.ConnectionPassword", "mysql-passwd")
System.setProperty(“javax.jdo.option.ConnectionURL”,“jdbc:mysql:///metastore?createDatabaseIfNotExist=true")
…(“javax.jdo.option.ConnectionDriverName”,“com.mysql.jdbc.Driver”)
…(“javax.jdo.option.ConnectionUserName”,“mysql用户”)
…(“javax.jdo.option.ConnectionPassword”、“mysql passwd”)

通常我们不需要单独指向远程元存储

`$HIVE_HOME/bin/hive --service metastore` -p 9083
Hive-site.xml将在内部通过jdbc指向metastore

在初始化配置单元上下文之前,可以在程序中设置相同的配置,如下所示:

试试看

System.setProperty("javax.jdo.option.ConnectionURL", "jdbc:mysql://<ip>/metastore?createDatabaseIfNotExist=true")
...("javax.jdo.option.ConnectionDriverName", "com.mysql.jdbc.Driver")
...("javax.jdo.option.ConnectionUserName", "mysql-user")
...("javax.jdo.option.ConnectionPassword", "mysql-passwd")
System.setProperty(“javax.jdo.option.ConnectionURL”,“jdbc:mysql:///metastore?createDatabaseIfNotExist=true")
…(“javax.jdo.option.ConnectionDriverName”,“com.mysql.jdbc.Driver”)
…(“javax.jdo.option.ConnectionUserName”,“mysql用户”)
…(“javax.jdo.option.ConnectionPassword”、“mysql passwd”)


我在配置单元界面的远程计算机中使用了(-service metastore`-p 9083)此命令,但在启动metastore服务时没有出现相同的错误;控制台中出现了哪些日志<代码>配置单元--服务元存储-p9083
远程计算机主机名是sparkserver,那么我应该给sparkserver或username@sparkserver我在日志文件SessionStart SESSION_ID=“137c7345-22bf-4d5f-8af7-62761e143b04”TIME=“1497525993240”中得到了这个在运行metastore服务的远程计算机中尝试
ifconfig
,并在
hive.metastore.uris
中将该ip设为
thrift://:9083
我在hive接口中的远程计算机中使用了(-service metastore`-p 9083)此命令,但启动metastore服务时没有出现相同的错误;控制台中出现了哪些日志<代码>配置单元--服务元存储-p9083
远程计算机主机名是sparkserver,那么我应该给sparkserver或username@sparkserver我在日志文件SessionStart SESSION_ID=“137c7345-22bf-4d5f-8af7-62761e143b04”TIME=“1497525993240”中得到了这个在运行metastore服务的远程计算机中尝试
ifconfig
,并在
hive.metastore.uris
中将该ip设为
thrift://:9083
raktopal,我有两个不同的配置单元安装,一个在localhost中,当我尝试从配置单元访问表时,它的工作状态良好,配置单元位于localhost中,my spark也在localhost计算机中运行,但是现在我正试图连接安装了hive的远程机器,它的metstore正在运行thrift://sparkserver:9083Yeahh,我理解,使用hive-site.xml,然后使用我的答案中提到的所有属性。-------------程序将能够连接到该配置单元服务器。配置单元元存储服务根本没有在该远程配置单元服务器中运行;因此,不需要单独连接到metastore服务器yy。但是我不想使用Hive-site.xml文件,而是想调用配置中的所有属性。我会尝试让你知道检查我的答案,将那些道具设置为
System.setProperties(…)
;在实例化SqlContext和HiveContext之前。但我没有使用SqlContext或HiveContext,我直接使用SparkSession从配置单元获取数据,它在localhost中工作正常。我已经粘贴了问题中的全部代码。Raktopal,我有两个不同的配置单元安装,一个在localhost中,当我试图从配置单元访问表时,它的工作状态良好,配置单元在localhost中,我的spark也在localhost机上运行,但是现在我正试图连接安装了hive的远程机器,它的metstore正在运行thrift://sparkserver:9083Yeahh,我理解,使用hive-site.xml,然后使用我的答案中提到的所有属性。-------------程序将能够连接到该配置单元服务器。配置单元元存储服务根本没有在该远程配置单元服务器中运行;因此,不需要单独连接到metastore服务器yy。但是我不想使用Hive-site.xml文件,而是想调用配置中的所有属性。我会让你知道的检查我的答案,设置那些道具为
System.s