title: SparkSQL操作Hive
date: 2020-05-12 16:12:55
tags:

  • Spark

Apache Hive 是 Hadoop 上的 SQL 引擎,Spark SQL 编译时可以包含 Hive 支持,也可以不包含。包含 Hive 支持的 Spark SQL 可以支持 Hive 表访问、UDF (用户自定义函数)以及 Hive 查询语言(HiveQL/HQL)等。需要强调的一点是,如果要在 Spark SQL 中包含Hive 的库,并不需要事先安装 Hive。一般来说,最好还是在编译 Spark SQL 时引入 Hive支持,这样就可以使用这些特性了。如果你下载的是二进制版本的 Spark,它应该已经在编译时添加了 Hive 支持。

若要把 Spark SQL 连接到一个部署好的 Hive 上,你必须把 hive-site.xml 复制到Spark 的配置文件目录中($SPARK_HOME/conf)。即使没有部署好 Hive,Spark SQL 也可以运行。 需要注意的是,如果你没有部署好 Hive,Spark SQL 会在当前的工作目录中创建出自己的 Hive 元数据仓库,叫作 metastore_db。此外,如果你尝试使用 HiveQL 中的CREATE TABLE (并非 CREATE EXTERNAL TABLE)语句来创建表,这些表会被放在你默
认的文件系统中的 /user/hive/warehouse 目录中(如果你的 classpath 中有配好的hdfs-site.xml,默认的文件系统就是 HDFS,否则就是本地文件系统)。spark-shell 默认是 Hive 支持的;代码中是默认不支持的,需要手动指定(加一个参数即可)。

内嵌的Hive

如果使用 Spark 内嵌的 Hive, 则什么都不用做, 直接使用即可.
Hive 的元数据存储在 derby 中, 默认仓库地址:$SPARK_HOME/spark-warehouse

scala> spark.sql("show tables").show
。。。
+--------+---------+-----------+
|database|tableName|isTemporary|
+--------+---------+-----------+
+--------+---------+-----------+
scala> spark.sql("create table aa(id int)")
。。。
scala> spark.sql("show tables").show
+--------+---------+-----------+
|database|tableName|isTemporary|
+--------+---------+-----------+
| default|aa     | false    |
+--------+---------+-----------+

向表加载本地数据

scala> spark.sql("load data local inpath 'input/ids.txt' into table aa")
。。。
scala> spark.sql("select * from aa").show
+---+
| id|
+---+
| 1|
| 2|
| 3|
| 4|
+---+

在实际使用中, 几乎没有任何人会使用内置的 Hive !!!

外部的 HIVE

如果想连接外部已经部署好的 Hive,需要通过以下几个步骤:
➢ Spark 要接管 Hive 需要把 hive-site.xml 拷贝到 conf/目录下
➢ 把 Mysql 的驱动 copy 到 jars/目录下
➢ 如果访问不到 hdfs,则需要把 core-site.xml 和 hdfs-site.xml 拷贝到 conf/目录下
➢ 重启 spark-shell

scala> spark.sql("show tables").show
20/04/25 22:05:14 WARN ObjectStore: Failed to get database global_temp, returning
NoSuchObjectException
+--------+--------------------+-----------+
|database| tableName|isTemporary|
+--------+--------------------+-----------+
| default| emp| false|
| default|hive_hbase_emp_table| false|
| default| relevance_hbase_emp| false|
| default| staff_hive| false|
| default| ttt| false|
| default| user_visit_action| false|
+--------+--------------------+-----------+

运行 Spark SQL CLI

Spark SQL CLI 可以很方便的在本地运行 Hive 元数据服务以及从命令行执行查询任务。在Spark 目录下执行如下命令启动 Spark SQL CLI,直接执行 SQL 语句,类似一 Hive 窗口

bin/spark-sql

运行 Spark beeline

Spark Thrift Server 是 Spark 社区基于 HiveServer2 实现的一个 Thrift 服务。旨在无缝兼容HiveServer2。因为 Spark Thrift Server 的接口和协议都和 HiveServer2 完全一致,因此我们部署好 Spark Thrift Server 后,可以直接使用 hive 的 beeline 访问 Spark Thrift Server 执行相关语句。Spark Thrift Server 的目的也只是取代 HiveServer2,因此它依旧可以和 Hive Metastore进行交互,获取到 hive 的元数据。
如果想连接 Thrift Server,需要通过以下几个步骤:
➢ Spark 要接管 Hive 需要把 hive-site.xml 拷贝到 conf/目录下
➢ 把 Mysql 的驱动 copy 到 jars/目录下
➢ 如果访问不到 hdfs,则需要把 core-site.xml 和 hdfs-site.xml 拷贝到 conf/目录下
➢ 启动 Thrift Server

sbin/start-thriftserver.sh

➢ 使用 beeline 连接 Thrift Server

bin/beeline -u jdbc:hive2://linux1:10000 -n root

代码操作

导入依赖

<dependency><groupId>org.apache.spark</groupId><artifactId>spark-hive_2.12</artifactId><version>3.0.0</version>
</dependency>
<dependency><groupId>org.apache.hive</groupId><artifactId>hive-exec</artifactId><version>1.2.1</version>
</dependency>
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.27</version>
</dependency>

拷贝hive-site.xml 文件

将 hive-site.xml 文件拷贝到项目的 resources 目录中

代码实现

//创建 SparkSession
val spark: SparkSession = SparkSession
.builder()
.enableHiveSupport()
.master("local[*]")
.appName("sql")
.getOrCreate()

注意:在开发工具中创建数据库默认是在本地仓库,通过参数修改数据库仓库的地址:
config("spark.sql.warehouse.dir", "hdfs://linux1:8020/user/hive/warehouse")
如果在执行操作时,出现如下错误:

可以代码最前面增加如下代码解决:
System.setProperty("HADOOP_USER_NAME", "root")
此处的 root 改为你们自己的 hadoop 用户名称

SparkSQL操作Hive相关推荐

  1. idea sparksql操作hive遇到的坑CoarseGrainedSchedulerBackend$DriverEndpoint: Asked to remove non-existent ex

    sparksql操作hive遇到的坑 第一次写sparksql项目想用sparksql操作hive查询数据就找到了百度代码做参考[idea工具开发] 代码如下: import org.apache.s ...

  2. python读取oracle数据到hvie parquet_关于sparksql操作hive,读取本地csv文件并以parquet的形式装入hive中...

    说明:spark版本:2.2.0 hive版本:1.2.1 需求: 有本地csv格式的一个文件,格式为${当天日期}visit.txt,例如20180707visit.txt,现在需要将其通过spar ...

  3. SparkSQL操作Hive Table

    Spark SQL支持对Hive的读写操作.然而因为Hive有很多依赖包,所以这些依赖包没有包含在默认的Spark包里面.如果Hive依赖的包能在classpath找到,Spark将会自动加载它们.需 ...

  4. sparksql对hive操作

    操作hive表数据 spark.table(tableName) 写回数据 df.wrtite.saveAsTable(tableName) spark.sql("select deptno ...

  5. sparkSQL操作hiveSQL

    sparkSQL操作hiveSQL <dependency><groupId>org.apache.spark</groupId><artifactId> ...

  6. sparksql 操作hive_Spark SQL 物化视图原理与实践

    导言 物化视图作为一种预计算的优化方式,广泛应用于传统数据库中,如Oracle,MSSQL Server等.随着大数据技术的普及,各类数仓及查询引擎在业务中扮演着越来越重要的数据分析角色,而物化视图作 ...

  7. Spark采坑系列(三)Spark操作Hive的坑

    2019独角兽企业重金招聘Python工程师标准>>> 跟着教学试着用Idea编程,实现Spark查询Hive中的表.结果上来就凉了. 捣鼓好久都不行,在网上查有说将hive-sit ...

  8. spark2.2读写操作hive和mysql数据库

    2019独角兽企业重金招聘Python工程师标准>>> sparksession操作hive数据库 1.需要将core-site.xml,hdfs-site.xml,hive-sit ...

  9. python数据导入hive_Python操作HIve,将数据插入到Mysql

    Python操作HIve,将数据插入到Mysql import sys from hive_service import ThriftHive from hive_service.ttypes imp ...

最新文章

  1. 【UVA】10152 ShellSort (几只乌龟的故事)
  2. python经典例题图形_Python 入门经典100实例:实例23 菱形
  3. [拓扑排序/强联通分量] [NOIP201402] 信息传递
  4. PAT甲级1141 PAT Ranking of Institutions :[C++题解]结构体、排序、哈希表、结构体构造函数、结构体内写函数、排名
  5. 《程序员在第一季度追姐姐的书》——提升自己的形象气质
  6. python基础语法快速浏览
  7. 从400+节点ElasticSearch集群的运维中,我们总结了这些经验
  8. EDC(Enterprise Data Center 企业数据中心)
  9. Hadoop2.x介绍与源代码编译
  10. 常用nginx rewrite重定向-跳转实例
  11. FCKeditor配置和使用(转)
  12. Hadoop2.2.0--Hadoop Federation、Automatic HA、Yarn完全分布式集群结构
  13. python_datetime
  14. 【Android -- 学习】学习资料汇总
  15. 交换机、路由器 以及 路由器工作模式:桥接模式、路由模式、中继模式
  16. Disk for DB is too low. Cassandra state detected DOWN. Disk space for DB not retrievable
  17. 深入解析J.U.C并发包(十五)—— Thread - Specific Storage(ThreadLocal)模式
  18. 树莓派配合迅雷搭建远程下载机
  19. linux mint 蓝牙驱动,Mint 使用蓝牙鼠标问题
  20. matlab中columns怎么用,css columns属性怎么用

热门文章

  1. 我的世界minecraft-Python3.9编程(2)-开发环境配置(2)
  2. C指针原理(2)-ATT汇编
  3. 【深度学习】Ivy 开源框架,深度学习大一统时代到来?
  4. 【面试招聘】阿里、腾讯 | 算法岗面试复盘
  5. 推荐:腾讯开源的词向量精简版本下载
  6. 一位算法工程师从30+场秋招面试中总结出的超强面经——目标检测篇(含答案)
  7. 如何在企业服务生态实现共赢?网易邀你共商智慧企业未来计划
  8. Python 学习笔记12 类 - 使用类和实例
  9. vue 自己写组件。
  10. 并查集 Python实现