Spark SQL主要目的是使得用户可以在Spark上使用SQL,其数据源既可以是RDD,也可以是外部的数据源(比如Parquet、Hive、Json等)。
Spark SQL的其中一个分支就是Spark on Hive,也就是使用Hive中HQL的解析、逻辑执行计划翻译、执行计划优化等逻辑,可以近似认为仅将物理执行计划从MR作业替换成了Spark作业。
本文就是来介绍如何通过Spark SQL来读取现有Hive中的数据。
不过,预先编译好的Spark assembly包是不支持Hive的,如果你需要在Spark中使用Hive,必须重新编译,加上<code>-Phive</code>选项既可,具体如下:
[iteblog@spark]$ ./make-distribution.sh --tgz -Phadoop-2.2 -Pyarn -DskipTests -Dhadoop.version=2.2.0  -Phive
编译完成之后,会在SPARK_HOME的lib目录下多产生三个jar包,分别是datanucleus-api-jdo-3.2.6.jar、datanucleus-core-3.2.10.jar、datanucleus-rdbms-3.2.9.jar,这些包都是Hive所需要的。下面就开始介绍步骤。

一、环境准备
为了让Spark能够连接到Hive的原有数据仓库,我们需要将Hive中的hive-site.xml文件拷贝到Spark的conf目录下,这样就可以通过这个配置文件找到Hive的元数据以及数据存放。
如果Hive的元数据存放在Mysql中,我们还需要准备好Mysql相关驱动,比如:mysql-connector-java-5.1.22-bin.jar。
二、启动spark-shell</h2>
环境准备好之后,为了方便起见,我们使用spark-shell来进行说明如何通过Spark SQL读取Hive中的数据。我们可以通过下面的命令来启动spark-shell:
[iteblog@spark]$  bin/spark-shell --master yarn-client  --jars lib/mysql-connector-java-5.1.22-bin.jar
....
15/08/27 18:21:25 INFO repl.SparkILoop: Created spark context..
Spark context available as sc.
....
15/08/27 18:21:30 INFO repl.SparkILoop: Created sql context (with Hive support)..
SQL context available as sqlContext.

启动spark-shell的时候会先向ResourceManager申请资源,而且还会初始化SparkContext和SQLContext实例。sqlContext对象其实是HiveContext的实例,sqlContext是进入Spark SQL的切入点。接下来我们来读取Hive中的数据。

scala> sqlContext.sql(&quot;CREATE EXTERNAL  TABLE IF NOT EXISTS ewaplog (key STRING, value STRING)
STORED AS INPUTFORMAT 'com.hadoop.mapred.DeprecatedLzoTextInputFormat' OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION '/user/iteblog/ewaplog' &quot;)

res0: org.apache.spark.sql.DataFrame = [result: string]

scala> sqlContext.sql(&quot;LOAD DATA LOCAL INPATH '/data/test.lzo' INTO TABLE ewaplog&quot;)
res1: org.apache.spark.sql.DataFrame = [result: string]

scala> sqlContext.sql(&quot;FROM ewaplog SELECT key, value&quot;).collect().foreach(println)

我们先创建了ewaplog表,然后导入数据,最后查询。我们可以看出所有的SQL和在Hive中是一样的,只是在Spark上运行而已。在执行SQL的时候,默认是调用hiveql解析器来解析SQL的。当然,你完全可以调用Spark SQL内置的SQL解析器sql,可以通过spark.sql.dialect
参数来设置。但是建议还是使用hivesql解析器,因为它支持的语法更多,而且还支持Hive的UDF函数,在多数情况下推荐使用hivesql解析器。

Spark SQL来读取现有Hive中的数据相关推荐

  1. Spark读取Hive中的数据加载为DataFrame

    首先要告诉SparkSql,Hive在哪.然后读取Hive中的数据,必须开启enableHiveSupport. val spark = SparkSession.builder().appName( ...

  2. Spark _25.plus _使用idea读取Hive中的数据加载成DataFrame/DataSet(四)

    对Spark _25 _读取Hive中的数据加载成DataFrame/DataSet(四) https://georgedage.blog.csdn.net/article/details/10309 ...

  3. Spark _25 _读取Hive中的数据加载成DataFrame/DataSet(四)

    由于Hive不在本地,操作略显麻烦.不过细心一点,分析错误,也还好,如果你搭建的hadoop是HA,需要多注意: 这里指出一个错误,如果你报了同类错误,可以参考:https://georgedage. ...

  4. Spark SQL 1.x之Hive Context

    使用SparkSQL时,并不需要搭建一个Hive,只需要一个HiveSite就可以 添加Hive配置文件 将Hive中的hive-site.xml复制到spark中的conf文件夹下. 添加依赖 在p ...

  5. Spark SQL实战(08)-整合Hive

    1 整合原理及使用 Apache Spark 是一个快速.可扩展的分布式计算引擎,而 Hive 则是一个数据仓库工具,它提供了数据存储和查询功能.在 Spark 中使用 Hive 可以提高数据处理和查 ...

  6. Spark SQL(六)之加载数据的参数配置

    一.配置 忽略损坏的文件.忽略丢失的文件.路径全局过滤器.递归文件查找和修改时间路径过滤器等选项/配置仅在使用基于文件的源(parquet,orc,avro,json,csv,txt)时才有效. 以下 ...

  7. 【clickhouse】使用waterdrop将Hive中的数据导入ClickHouse

    1.概述 转载:使用waterdrop将Hive中的数据导入ClickHouse 这里仅仅自己学习用. 前言 最近有一个需求需要把hive的数据同步到clickhouse,而且数据量还比较大,所以使用 ...

  8. python读取excel表格-python读取excel表格中的数据

    使用python语言实现Excel 表格中的数据读取,需要用到xlrd.py模块,实现程序如下: import xlrd #导入xlrd模块 class ExcelData(): def __init ...

  9. mysql source导入_读取MySQL数据库中的数据【Python数据分析百例连载】

    当所需的数据存贮在MySQL数据库中时,那么数据分析首要任务就是要通过Pandas读取MySQL数据.例如,某网站注册用户信息保存在MySQL数据库中,如图所示(部分数据),下面将使用Pandas的r ...

最新文章

  1. sap business one 笑谈
  2. 清北2021毕业生就业报告出炉!清华博士0人出国,70%进体制
  3. 计算机考研985三本,普通二三本学校的学生想考研到985/211现实吗?真相其实是这样!...
  4. Java overview JVM
  5. vue使用iview Timeline 时间轴不显示问题
  6. 《统计学习方法》代码全解析——第十一部分条件随机场
  7. Docker镜像、容器的理解和使用方法
  8. Linux下docker(centos7)
  9. dumpsys使用方法
  10. hdu 2011 多项式求和 解题报告
  11. position 属性和 z-index 属性对页面节点层级影响的例子
  12. HP OMEN品牌机配3090显卡,驱动,CUDA,Cudnn安装过程
  13. matlab5.0软件下载,MATLAB手机版
  14. 解决office2016显示图标异常
  15. RHCS 集群详解及 部署(ricci、luci、fence、apache、scsi、gfs、DLM)
  16. 有没有测试手机硬件是否损坏的软件,怎么检测手机硬件故障
  17. 在数组中插入一个数字
  18. PaaS市场迎风口,JEPaaS助你一臂之力
  19. Java进阶篇设计模式之十二 ---- 备忘录模式和状态模式
  20. 解决Origin导出图片失真问题

热门文章

  1. C++万能头文件#include“bits/stdc++.h”
  2. 无状态的HTTP协议
  3. Docker通过Cgroup 资源配置
  4. javaI/O之PushbackInputStream
  5. MiniGUI开发环境搭建全记录(嵌入式计X86)
  6. python语言的类型是_Python到底是强类型语言,还是弱类型语言?
  7. liteos内核驱动和linux,移植RTOS必备基础知识
  8. 学python的前提_Python语言学习前提:条件语句
  9. img设置宽高不生效_便宜 好用 不掉盘 保姆级粒子云刷机攻略
  10. nao机器人行走速度_震撼!寒冬腊月里惊现多台历途外墙清洗机器人