文章目录

  • ​​1.理论​​
  • ​​2.配置和启动​​
  • ​​3.连接​​
  • ​​4.执行​​

1.理论

Hive通过Metastore存储元数据

  • 元数据包含用Hive创建的database、tabel等的元信息。
  • 客户端连接Metastore服务,Metastore再去连接MySQL数据库来存取元数据。有了metastore服务,就可以有多个客户端同时连接,而且这些客户端不需要知道MySQL数据库的用户名和密码,只需要连接metastore 服务即可。

元数据存储在关系型数据库中。如Derby、MySQL等。metastore有三种配置方式:

  • Embedded Metastore Database (Derby) 内嵌模式
  • Local Metastore Server 本地元存储
  • Remote Metastore Server 远程元存储

Derby是默认的,配置简单,但是一次只能一个客户端连接,适用于用来实验,不适用于生产环境。本地元存储和远程元存储都采用外部数据库来存储元数据,目前支持的数据库有:MySQL、Postgres、Oracle、MS SQL Server.在这里我们使用MySQL。
区别

  • 本地元存储和远程元存储的区别是:本地元存储不需要单独起metastore服务,用的是跟hive在同一个进程里的metastore服务。 (本地还是要起一下?可以不起尝试一下)
  • 远程元存储需要单独起metastore服务,然后每个客户端都在配置文件里配置连接到该metastore服务。远程元存储的metastore服务和hive运行在不同的进程里。
  • metastore所在的服务器配置文件应该加上连接mysql元数据库的配置。

2.配置和启动

1.拷贝​​mysql-connector-java-5.1.38-bin.jar​​​包(Java调用mysql支持)到你spark的jars路径下
2.因为使用ThriftJDBC/ODBC Server访问spark SQL,所以要修改hive-site.xml文件

<property>
<name>hive.metastore.uris</name>
<value>thrift://master:9083</value>
<description>Thrift URI for the remote metastore. Used by metastore client to connect to remote metastore.</description>
</property>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/usr/hive/warehouse</value>
</property>
<property>
<name>hive.server2.webui.host</name>
<!--主机名或ip-->
<value>hadoop02</value>
</property>
<property>
<name>hive.server2.webui.port</name>
<value>10002</value>
</property>

3.将Hive的配置文件​​hive-site.xml​​​拷贝到​​${spark_home}/conf​​​目录下
4.启动hivede metastroe后台进程。​​​hive --service metastore​​​启动hive的service metastore后台进程。
5.启动hive server web查看hive情况​​​hive --service hiveserver2​​​,端口为10002
6.启动spark-shell访问hive上数据。执行./spark-shell --master spark://master:7077 (可添加其他参数rg:–jars等参数)

3.连接

Spark连接Hive可以通过两种方式​​spark.sql("")​​​和​​HiveContext(sc).sql("")​​​,关于这两种方式 ​​这里​​ 有比较详细的介绍。
1.启动交互式spark ​​​spark-shell --master yarn​​​,可以选择多种集群模式,这里我在yarn集群管理器上运行。
2.导入HiveContext

import org.apache.spark.sql.hive.HiveContext
val hiveContext = new HiveContext(sc)

4.执行

执行语句​​hiveContext.sql("select * from database_name.table_name").show​

参考
​​Hive安装配置指北(含Hive Metastore详解)​​Spark访问Hive表
Spark 连接hive 元数据库(mysql)
spark连接hive(spark-shell和eclipse两种方式)