赞
踩
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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。