Hadoop 无法使用Spark从HiveContext获取现有配置单元表

Hadoop 无法使用Spark从HiveContext获取现有配置单元表,hadoop,apache-spark,hive,spark-dataframe,hivecontext,Hadoop,Apache Spark,Hive,Spark Dataframe,Hivecontext,我正在尝试使用HiveContext从spark获取Hive的数据库或表详细信息。但我无法指向现有的配置单元数据库,如下所示: Spark版本:2.2.0 配置单元版本:2.3.0 在Spark Shell中使用以下脚本连接到现有配置单元服务器(下面使用的127.0.0.1是我的机器ip地址): 如上所示,我无法获得可用的现有配置单元数据库和表。HiveContext指向新数据库(默认),但没有可用的表。 下面列出了我的配置单元数据库: hive> show databases; OK d

我正在尝试使用HiveContext从spark获取Hive的数据库或表详细信息。但我无法指向现有的配置单元数据库,如下所示: Spark版本:2.2.0 配置单元版本:2.3.0

在Spark Shell中使用以下脚本连接到现有配置单元服务器(下面使用的127.0.0.1是我的机器ip地址):

如上所示,我无法获得可用的现有配置单元数据库和表。HiveContext指向新数据库(默认),但没有可用的表。 下面列出了我的配置单元数据库:

hive> show databases;
OK
default
mydbbackup
Time taken: 7.593 seconds, Fetched: 2 row(s)
hive> use mydbbackup;
OK
Time taken: 0.021 seconds
hive> show tables;
OK
customers
customerspart
customerspart1
Time taken: 0.194 seconds, Fetched: 3 row(s)
hive> 
以下是my hive-site.xml:


javax.jdo.option.ConnectionURL
jdbc:derby:;databaseName=/home/hduser/apache-hive-2.3.0-bin/metastore_db;create=true
JDBC元存储的JDBC连接字符串。
要使用SSL加密/验证连接,请在连接URL中提供特定于数据库的SSL标志。
例如,jdbc:postgresql://myhost/db?ssl=true 用于postgres数据库。
hive.metastore.warehouse.dir
/用户/配置单元/仓库
仓库的默认数据库的位置
hive.metastore.uris
远程元存储的旧URI。元存储客户端用于连接到远程元存储。
javax.jdo.option.ConnectionDriverName
org.apache.derby.jdbc.EmbeddedDriver
JDBC元存储的驱动程序类名
javax.jdo.PersistenceManagerFactoryClass
org.datanucleus.api.jdo.JDOPersistenceManagerFactory
类实现jdo持久性
下面是我的spark conf目录:

total 40
drwxr-xr-x  2 root root 4096 Nov 12 20:22 ./
drwxr-xr-x 12 root root 4096 Nov  9 22:57 ../
-rw-r--r--  1 root root  996 Nov  9 22:57 docker.properties.template
-rw-r--r--  1 root root 1105 Nov  9 22:57 fairscheduler.xml.template
-rw-r--r--  1 root root 2025 Nov  9 22:57 log4j.properties.template
-rw-r--r--  1 root root 7313 Nov  9 22:57 metrics.properties.template
-rw-r--r--  1 root root  865 Nov  9 22:57 slaves.template
-rw-r--r--  1 root root 1292 Nov  9 22:57 spark-defaults.conf.template
-rwxr-xr-x  1 root root 3699 Nov  9 22:57 spark-env.sh.template*

我是否需要修改任何东西以指向现有的配置单元服务器,而不是创建新的配置单元服务器。请在同一方面帮助我。

在hive-site.xml中使用属性:

<property>
  <name>javax.jdo.option.ConnectionURL</name>
  <value>jdbc:mysql://<<hostname>>:<<port>>/hive?createDatabaseIfNotExist=true</value>
</property>

<property>
  <name>javax.jdo.option.ConnectionDriverName</name>
  <value>com.mysql.jdbc.Driver</value>
</property>

<property>
  <name>javax.jdo.option.ConnectionUserName</name>
  <value>username</value>
</property>

<property>
  <name>javax.jdo.option.ConnectionPassword</name>
  <value>password</value>
</property>

javax.jdo.option.ConnectionURL
jdbc:mysql://:/hive?createDatabaseIfNotExist=true
javax.jdo.option.ConnectionDriverName
com.mysql.jdbc.Driver
javax.jdo.option.ConnectionUserName
用户名
javax.jdo.option.ConnectionPassword
暗语

然后,将hive-site.xml放入spark安装的conf文件夹中,然后重试启动spark shell,如下所示:

./spark-shell --driver-java-options 
"-Dhive.metastore.uris=thrift://localhost:9083"

这将为您提供所需的结果:

导入org.apache.spark.sql.hive.HiveContext

val hc=新的HiveContext(sc)

导入hc.ITS_

val df=hc.sql(“显示数据库”)


df.show

为此,您需要在配置单元和Sparky之间设置公共元存储,而无需显式创建配置单元上下文。您可以直接使用spark2创建的spark会话来运行与配置单元相关的查询。使用scala>spark.sql(“show databases”)res0:org.apache.spark.sql.DataFrame=[databaseName:string]@AmitKumar我尝试使用与建议相同的方法,但只显示默认数据库。您能帮我配置hive和spark之间的公共元存储吗?我看不到在hive-site.xml中更新的元存储值。hive.metastore.uris是远程元存储的旧URI。元存储客户端用于连接到远程元存储。您可以尝试启动spark2shell作为:spark2shell--conf-hive.metastore.uris吗=thrift://127.0.0.1:9083
./spark-shell --driver-java-options 
"-Dhive.metastore.uris=thrift://localhost:9083"