前提:Hive的元数据保存在MySQL中
Hive配置文件hive-site.xml内容如下:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://hadoop000:3306/hadoop_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>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>root</value>
</property>
<property>
<name>hive.mapred.supports.subdirectories</name>
<value>true</value>
</property>
<property>
<name>mapreduce.input.fileinputformat.input.dir.recursive</name>
<value>true</value>
</property>
<property>
<name>hive.metastore.uris</name>
<value>thrift://hadoop000:9083</value>
</property>
</configuration>
具体步骤:
(1)将hive-site.xml文件拷贝到${SPARK_HOME}/conf目录下
(2)后台启动metastore服务进程:
nohup ${HIVE_HOME}/bin/hive --service metastore >metastore.log 2>&1 &
(3)启动Spark SQL:
${SPARK_HOME}/bin/spark-sql
注意:如果在Windows上使用IDEA,通过Spark程序远程访问服务器上的Hive表,需要在hive-site.xml中添加以下内容指定数据存储位置在HDFS上,而不是本地,否则会在当前项目下创建spark-warehouse目录,读取的是本地Spark内嵌的Hive中 的数据。然后把hive-site.xml拷贝到当前项目的resources目录下(core-site.xml、hdfs-site.xml实测不需要拷贝也能正常运行),另外需要在SparkConf对象上调用enableHiveSupport()方法,它的作用是让Spark程序读取类路径下的hive-site.xml配置文件
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>