2021年大数据Spark(三十一):Spark On Hive

举报
Lansonli 发表于 2021/09/27 23:25:51 2021/09/27
【摘要】 目录 Spark On Hive spark-sql中集成Hive Spark代码中集成Hive Spark On Hive Spark SQL模块从发展来说,从Apache Hive框架而来,发展历程:Hive(MapReduce)-> Shark (Hive on Spark) -> Spark SQL(Sc...

目录

Spark On Hive

spark-sql中集成Hive

Spark代码中集成Hive


Spark On Hive

Spark SQL模块从发展来说,从Apache Hive框架而来,发展历程:Hive(MapReduce)-> Shark (Hive on Spark) -> Spark SQL(SchemaRDD -> DataFrame -> Dataset),所以SparkSQL天然无缝集成Hive,可以加载Hive表数据进行分析。

http://spark.apache.org/docs/latest/sql-data-sources-hive-tables.html

spark-sql中集成Hive

SparkSQL集成Hive本质就是:读取Hive框架元数据MetaStore,此处启动Hive MetaStore服务即可

nohup /export/server/hive/bin/hive --service metastore &

编写配置文件hive-site.xml,并放于node1的【$SPARK_HOME/conf】目录

cd /export/server/spark/conf/

vim hive-site.xml


  
  1. <?xml version="1.0"?>
  2. <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
  3. <configuration>
  4.     <property>
  5.       <name>hive.metastore.warehouse.dir</name>
  6.       <value>/user/hive/warehouse</value>
  7.     </property>
  8.     <property>
  9.       <name>hive.metastore.local</name>
  10.       <value>false</value>
  11.     </property>
  12.     <property>
  13.       <name>hive.metastore.uris</name>
  14.       <value>thrift://node3:9083</value>
  15.     </property>
  16.  </configuration>

也可以将hive-site.xml分发到集群中所有Spark的conf目录,此时任意机器启动应用都可以访问Hive表数据。

使用sparksql操作hive

/export/server/spark/bin/spark-sql --master local[2] --conf spark.sql.shuffle.partitions=2

show database;

show tables;

CREATE TABLE person (id int, name string, age int) row format delimited fields terminated by ' ';

LOAD DATA LOCAL INPATH 'file:///root/person.txt' INTO TABLE person;

show tables;

select * from person;

​​​​​​​Spark代码中集成Hive

在IDEA中开发应用,集成Hive,读取表的数据进行分析,构建SparkSession时需要设置HiveMetaStore服务器地址及集成Hive选项,首先添加MAVEN依赖包:


  
  1. <!--SparkSQL+ Hive依赖-->
  2.         <dependency>
  3.             <groupId>org.apache.spark</groupId>
  4.             <artifactId>spark-hive_2.11</artifactId>
  5.             <version>${spark.version}</version>
  6.         </dependency>
  7.         <dependency>
  8.             <groupId>org.apache.spark</groupId>
  9.             <artifactId>spark-hive-thriftserver_2.11</artifactId>
  10.             <version>${spark.version}</version>
  11. </dependency>

范例演示代码如下:


  
  1. package cn.it.sql
  2. import org.apache.spark.SparkContext
  3. import org.apache.spark.sql.SparkSession
  4. /**
  5.   * SparkSQL集成Hive
  6.   */
  7. object SparkSQLHive {
  8.     def main(args: Array[String]): Unit = {
  9.         val spark: SparkSession = SparkSession.builder()
  10.             .appName(this.getClass.getSimpleName.stripSuffix("$"))
  11.             .master("local[*]")
  12.             .config("spark.sql.shuffle.partitions", "4")
  13.             .config("spark.sql.warehouse.dir", "hdfs://node1:8020/user/hive/warehouse")
  14.             .config("hive.metastore.uris", "thrift://node3:9083")
  15.             .enableHiveSupport()//开启hive语法的支持
  16.             .getOrCreate()
  17.         val sc: SparkContext = spark.sparkContext
  18.         sc.setLogLevel("WARN")
  19.         
  20.         import spark.implicits._
  21.         import org.apache.spark.sql.functions._
  22.         //查看有哪些表
  23.         spark.sql("show tables").show()
  24.         //创建表
  25.         spark.sql("CREATE TABLE person2 (id int, name string, age int) row format delimited fields terminated by ' '")
  26.         //加载数据
  27.         spark.sql("LOAD DATA LOCAL INPATH 'file:///D:/person.txt' INTO TABLE person2")
  28.         
  29.         //查看有哪些表
  30.         spark.sql("show tables").show()
  31.         
  32.         //查询数据
  33.         spark.sql("select * from person2").show()
  34.     }
  35. }

文章来源: lansonli.blog.csdn.net,作者:Lansonli,版权归原作者所有,如需转载,请联系作者。

原文链接:lansonli.blog.csdn.net/article/details/115890346

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。