在实际工作中,Spark SQL 经常需要直接查询 Hive 中已有的表,这时就要打通二者的元数据。从 Spark 1.4.0 开始,配置变得很简单,不过有几点需要留意。
注意,Spark SQL 内部会强制反编译 Hive 的某些依赖到 1.2.1 版本,所以不管你安装的 Hive 是哪个版本,当 Spark 调用 serdes、UDFs 等内部操作时,用的都是 Hive 1.2.1 的 class。这点在你以后遇到奇怪的版本兼容问题时可能会想起来。
共用一套元数据库
Spark SQL 可以自己管理元数据,不一定需要启动 Hive 服务,只要有元数据库就行。但如果你希望表结构和 HDFS 文件路径的关系持久化下来,那还是得借助 Hive metastore。通常的做法是把 Hive 的配置拷到 Spark 里,然后 Spark 程序就能自动读取元数据了。
把 hive-site.xml 放到 $SPARK_HOME/conf 下,内容类似这样:
<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>
<name>javax.jdo.option.ConnectionPassword</name>
hadoop


