Spark SQL 经常需要访问 Hive metastore,Spark SQL 可以通过 Hive metastore 获取 Hive 表的元数据。从 Spark 1.4.0 开始,Spark SQL 只需简单的配置,就支持各版本 Hive metastore 的访问。注意,涉及到 metastore 时 Spark SQL 忽略了 Hive 的版本。Spark SQL 内部将 Hive 反编译至 Hive 1.2.1 版本,Spark SQL 的内部操作 (serdes, UDFs, UDAFs, etc) 都调用 Hive 1.2.1 版本的 class。
Spark SQL 和 Hive 共用一套元数据库
Spark SQL 自己也可创建元数据库,并不一定要依赖 Hive 创建元数据库,所以不需要一定启动 Hive,只要有元数据库,Spark SQL 就可以使用。但是如果要像 Hive 一样持久化文件与表的关系就要使用 Hive,当然可以不启动 Hive 程序使用 Spark 提供的 HiveContext 类即可。
- 将 Hive 的 hive-site.xml 拷贝到 $SPARK-HOME/conf 目录下, 里面配置的是 Hive metastore 元数据存放在数据库的位置,当然如果数据库不存在,我们可以定义一个数据库,然后程序在 Spark 集群运行的时候就会自动创建对应的元数据库。
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://192.168.19.131:3306/hivedb?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>root</value>
</property>
<property>
javax.jdo.option.ConnectionPassword
hadoop


