Spark读取hive表
hive相关安装问题,请参见别的资料
由于在hive里面操作表是通过mapreduce的方式,效率较低,本文主要描述如何通过spark读取hive表到内存进行计算。
第一步,先把$HIVE_HOME/conf/hive-site.xml
放入$SPARK_HOME/conf
内,使得spark能够获取hive配置
本次主要遇到两个坑
-
Hive在spark2.0.0启动时无法访问…/lib/spark-assembly-*.jar
参考资料: https://blog.csdn.net/sparkexpert/article/details/52516433
在安装完spark2.4,配置了$SPARK_HOME之后,启动hive时会出现
无法访问../lib/spark-assembly-*.jar
,这是由于spark2.0之后的jar包已经被拆散成一个一个小jar包,故没有这么一个spark-assembly-*.jar的jar包。解决方案:修改hive启动脚本
# add Spark assembly jar to the classpath if [[ -n "$SPARK_HOME" ]] then sparkAssemblyPath=`ls ${SPARK_HOME}/lib/spark-assembly-*.jar` CLASSPATH="${CLASSPATH}:${sparkAssemblyPath}"
将
lib/spark-assembly-*.jar
替换成jars/*.jar
,就不会出现这样的问题。 -
spark里读取hive表权限问题
通过spark-shell进入交互界面
import org.apache.spark.sql.hive.HiveContext import org.apache.spark.sql.functions._ val hiveContext = new HiveContext(sc) hiveContext.sql("show databases").show() hiveContext.sql("show tables").show()
此时报错java.io权限不足
原因: 由于hive的
hive.exec.scratchdir
和hive.exec.local.scratchdir
所配置的路径没有写权限. 修改$SPARK_HOME/conf/hive-site.xml
配置<property> <name>hive.exec.scratchdir</name> <value>/tmp/spark/hive</value> </property> <property> <name>hive.exec.local.scratchdir</name> <value>/tmp/spark/hive/local</value> </property> <property> <name>hive.downloaded.resources.dir</name> <value>/tmp/spark/hive/resources</value> </property>