spark sql在编译时是不包含hive表,开启hive依赖后,可以访问hive中的表以及UDF函数
通常我们用spark整合hive,说的是spark接管外部已经使用很长时间的hive,里面大大小小的表非常多,为了提高hive的查询效率,会使用spark来代替原来的mapreduce计算引擎,提升计算效率
1、在hive的hive-site.xml修改一行配置,增加了这一行配置之后,以后在使用hive之前都需要先启动元数据服务 <property> <name>hive.metastore.uris</name> <value>thrift://doker:9083</value> </property>
2、将hive-site.xml ?复制到spark conf目录下
?3、启动hive元数据服务 ohup hive --service metastore >> metastore.log 2>&1 &
?4、 将mysql 驱动包复制到saprk jars目录下 ?整合好之后在spark-sql 里面就可以使用hive的表了
可以看到就是下面的效果
看看idea中操作hive
首先是依赖
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.49</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-hive_2.12</artifactId>
<version>2.4.5</version>
</dependency>
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-exec</artifactId>
<version>1.2.1</version>
</dependency>
?想在本地测试,结果idea上整半天没弄好,还是打包上传到集群运行的
import org.apache.spark.sql.SparkSession
object SparkSqlOnHive {
def main(args: Array[String]): Unit = {
val spark = SparkSession
.builder()
.appName("SparkSqlOnHive")
.config("spark.sql.shuffle.partitions", 1)
//开启hive的元数据支持
.enableHiveSupport()
.getOrCreate()
val df = spark.table("student")
df.show()
spark.close()
}
}
spark-submit --master yarn-client --class com.zh.SparkSqlOnHive Spark-1.0.jar
运行成功?
?
一个spark sql的执行流程大概是下图中的内容通过一系列转换成RDD
?
|