为了尝试SparkSQL操纵Hive,首先要进行一些环境上的部署。
基本配置
相关版本如下所示:
系统:Ubuntu 16.04.5
jdk: 1.8
scala: 2.11.8
spark: spark-2.2.0-bin-hadoop2.7
hadoop: hadoop-2.7.3
hive: apache-hive-2.2.0-bin
spark和hadoop按普通的安装方式即可。
安装hive可以参考《Hive 2.2.0安装配置》。
Hive配置
- 修改hive的conf目录下的hive-site.xml配置。
1)hive.metastore.uris
<property>
<name>hive.metastore.uris</name>
<value>thrift:// master:9083</value>
</property>
2)hive.metastore.schema.verification
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
<description>
如果此处不设置为false,在后面启动spark-sql时,将会报如下错误。此处解决方法参考了《Spark-SQL连接Hive》。
WARN metadata.Hive: Failed to access metastore. This class should not accessed in runtime.
…
Exception in thread “main” java.lang.RuntimeException: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient
…
Caused by: MetaException(message:Version information not found in metastore. )
- 后台启动Hive metastore。此语句会输出相应的进程号。
hive --service metastore 1>/dev/null 2>&1 &
Spark配置
- 将hive-site.xml和hdfs-site.xml放在spark的conf目录下。
- 将hive的lib目录下mysql connector的jar,比如mysql-connector-java-5.1.22-bin.jar复制到spark的jars目录下。
- 修改spark_env.sh文件,添加hive相关的配置。参考配置如下:
export SPARK_HOME=/home/lw/opt/spark/spark-2.2.0
export JAVA_HOME=/home/lw/opt/java/jdk1.8.0_111
export SCALA_HOME=/home/lw/opt/scala/scala-2.11.8
export HADOOP_HOME=/home/lw/opt/hadoop/hadoop-2.7.3
export HADOOP_CONF_DIR=/home/lw/opt/hadoop/hadoop-2.7.3/etc/hadoop
export HIVE_CONF_DIR=/home/lw/opt/hive/hive-2.2.0
export CLASSPATH=$CLASSPATH:/home/lw/opt/hive/hive-2.2.0/lib
export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=7788 -Dspark.history.fs.logDirectory=hdfs://localhost:9000/historyForSpark2.2.0"
export SPARK_MASTER_IP=master
export SPARK_MASTER_PORT=7077
SparkSQL连接Hive测试
运行spark-sql,执行一些hive sql语句。
如果输出情况与hive一样,则说明连接成功。可以直接通过SparkSQL操作hive。