spark sql在编译时是不包含hive表,开启hive依赖后,可以访问hive中的表以及UDF函数
通常我们用spark整合hive,说的是spark接管外部已经使用很长时间的hive,里面大大小小的表非常多,为了提高hive的查询效率,会使用spark来代替原来的mapreduce计算引擎,提升计算效率
可以看到就是下面的效果
看看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