使用命令开启一个spark-shell:
./spark-shell --master local[2] --jars /home/iie4bu/software/mysql-connector-java-5.1.35.jar
因为我们要操作hive,因此需要添加mysql的driver类。

查看表

使用命令spark.sql("show tables").show

查看表数据

比较spark-shell和hive的性能

在hive中执行一条join操作:
hive> select * from sal s join people p on s.transactionid=p.id;

可以看到使用Hive操作时,花费20s。
在Spark-shell中执行相同个操作:
scala> spark.sql("select * from sal s join people p on s.transactionid=p.id").show

在使用spark时,几乎是瞬间出来。高下立判。

升级spark-shell

上面我们可以通过spark-shell来使用sql,当然我们可以使用另一个命令,更加方便的使用sql。那就是spark-sql.
使用命令:./spark-sql --master local[2] --jars /home/iie4bu/software/mysql-connector-java-5.1.35.jar --driver-class-path /home/iie4bu/software/mysql-connector-java-5.1.35.jar
当我们执行:spark-sql> select * from sal;

在页面中也可以看到相应的执行计划。

使用spark-sql创建表

使用命令spark-sql> create table t (key string, value string);
然后查看这张表:

可以看到刚创建的t表。

spark-sql执行计划

我们使用上面创建的t表,运行执行计划:
spark-sql> explain select a.key*(2+3), b.value from t a join t b on a.key = b.key and a.key > 3;
可以看到物理执行计划:

spark-sql> explain select a.key*(2+3), b.value from t a join t b on a.key = b.key and a.key > 3;
20/03/27 00:04:55 INFO HiveMetaStore: 0: get_table : db=default tbl=t
20/03/27 00:04:55 INFO audit: ugi=iie4bu   ip=unknown-ip-addr cmd=get_table : db=default tbl=t
20/03/27 00:04:55 INFO HiveMetaStore: 0: get_table : db=default tbl=t
20/03/27 00:04:55 INFO audit: ugi=iie4bu   ip=unknown-ip-addr cmd=get_table : db=default tbl=t
20/03/27 00:04:55 INFO CodeGenerator: Code generated in 16.512742 ms
== Physical Plan ==
*(5) Project [(cast(key#28 as double) * 5.0) AS (CAST(key AS DOUBLE) * CAST((2 + 3) AS DOUBLE))#32, value#31]
+- *(5) SortMergeJoin [key#28], [key#30], Inner:- *(2) Sort [key#28 ASC NULLS FIRST], false, 0:  +- Exchange hashpartitioning(key#28, 200):     +- *(1) Filter (isnotnull(key#28) && (cast(key#28 as int) > 3)):        +- Scan hive default.t [key#28], HiveTableRelation `default`.`t`, org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe, [key#28, value#29]+- *(4) Sort [key#30 ASC NULLS FIRST], false, 0+- Exchange hashpartitioning(key#30, 200)+- *(3) Filter ((cast(key#30 as int) > 3) && isnotnull(key#30))+- Scan hive default.t [key#30, value#31], HiveTableRelation `default`.`t`, org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe, [key#30, value#31]
Time taken: 0.362 seconds, Fetched 1 row(s)
20/03/27 00:04:55 INFO SparkSQLCLIDriver: Time taken: 0.362 seconds, Fetched 1 row(s)

如果要查看逻辑执行计划,添加extended
spark-sql> explain extended select a.key*(2+3), b.value from t a join t b on a.key = b.key and a.key > 3;
运行结果如下:

spark-sql> explain extended select a.key*(2+3), b.value from t a join t b on a.key = b.key and a.key > 3;
20/03/27 00:07:10 INFO HiveMetaStore: 0: get_table : db=default tbl=t
20/03/27 00:07:10 INFO audit: ugi=iie4bu   ip=unknown-ip-addr cmd=get_table : db=default tbl=t
20/03/27 00:07:10 INFO HiveMetaStore: 0: get_table : db=default tbl=t
20/03/27 00:07:10 INFO audit: ugi=iie4bu   ip=unknown-ip-addr cmd=get_table : db=default tbl=t
== Parsed Logical Plan ==
'Project [unresolvedalias(('a.key * (2 + 3)), None), 'b.value]
+- 'Join Inner, (('a.key = 'b.key) && ('a.key > 3)):- 'SubqueryAlias `a`:  +- 'UnresolvedRelation `t`+- 'SubqueryAlias `b`+- 'UnresolvedRelation `t`== Analyzed Logical Plan ==
(CAST(key AS DOUBLE) * CAST((2 + 3) AS DOUBLE)): double, value: string
Project [(cast(key#35 as double) * cast((2 + 3) as double)) AS (CAST(key AS DOUBLE) * CAST((2 + 3) AS DOUBLE))#39, value#38]
+- Join Inner, ((key#35 = key#37) && (cast(key#35 as int) > 3)):- SubqueryAlias `a`:  +- SubqueryAlias `default`.`t`:     +- HiveTableRelation `default`.`t`, org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe, [key#35, value#36]+- SubqueryAlias `b`+- SubqueryAlias `default`.`t`+- HiveTableRelation `default`.`t`, org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe, [key#37, value#38]== Optimized Logical Plan ==
Project [(cast(key#35 as double) * 5.0) AS (CAST(key AS DOUBLE) * CAST((2 + 3) AS DOUBLE))#39, value#38]
+- Join Inner, (key#35 = key#37):- Project [key#35]:  +- Filter (isnotnull(key#35) && (cast(key#35 as int) > 3)):     +- HiveTableRelation `default`.`t`, org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe, [key#35, value#36]+- Filter ((cast(key#37 as int) > 3) && isnotnull(key#37))+- HiveTableRelation `default`.`t`, org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe, [key#37, value#38]== Physical Plan ==
*(5) Project [(cast(key#35 as double) * 5.0) AS (CAST(key AS DOUBLE) * CAST((2 + 3) AS DOUBLE))#39, value#38]
+- *(5) SortMergeJoin [key#35], [key#37], Inner:- *(2) Sort [key#35 ASC NULLS FIRST], false, 0:  +- Exchange hashpartitioning(key#35, 200):     +- *(1) Filter (isnotnull(key#35) && (cast(key#35 as int) > 3)):        +- Scan hive default.t [key#35], HiveTableRelation `default`.`t`, org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe, [key#35, value#36]+- *(4) Sort [key#37 ASC NULLS FIRST], false, 0+- Exchange hashpartitioning(key#37, 200)+- *(3) Filter ((cast(key#37 as int) > 3) && isnotnull(key#37))+- Scan hive default.t [key#37, value#38], HiveTableRelation `default`.`t`, org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe, [key#37, value#38]
Time taken: 0.19 seconds, Fetched 1 row(s)
20/03/27 00:07:10 INFO SparkSQLCLIDriver: Time taken: 0.19 seconds, Fetched 1 row(s)

可以看到,第一步先使用抽象语法树解析成unresolved逻辑执行计划。第二步基于Metastore生成逻辑执行计划,然后优化逻辑执行计划,最后生成物理执行计划。

Spark-shell和Spark-hive的使用相关推荐

  1. 启动Spark Shell,在Spark Shell中编写WordCount程序,在IDEA中编写WordCount的Maven程序,spark-submit使用spark的jar来做单词统计

    1.启动Spark Shell spark-shell是Spark自带的交互式Shell程序,方便用户进行交互式编程,用户可以在该命令行下用scala编写spark程序.要注意的是要启动Spark-S ...

  2. 启动spark shell

    spark集群安装教程:http://blog.csdn.net/zengmingen/article/details/72123717 启动spark shell. 在spark安装目录bin文件夹 ...

  3. 【原创】大叔经验分享(65)spark读取不到hive表

    spark 2.4.3 spark读取hive表,步骤: 1)hive-site.xml hive-site.xml放到$SPARK_HOME/conf下 2)enableHiveSupport Sp ...

  4. Hadoop、Spark、Hbase、Hive的安装

    为什么80%的码农都做不了架构师?>>>    工作中需要使用Hadoop环境,在三节点上搭建了一套Hadoop环境,顺便做下笔记.因为机器内存较低,没有使用CDH,为保证和线上环境 ...

  5. spark shell 删除失效_Spark任务提交源码解析

    1. 前言 反反复复捣鼓了很久,终于开始学习Spark的源码了,果不其然,那真的很有趣.这里我打算一本正经的胡说八道来讲一下Spark作业的提交过程. 基础mac系统基础环境如下: JDK 1.8 I ...

  6. spark shell 启动 出现org.apache.spark.SparkException: Found both spark.executor.extraClassPath and SPARK

    启动spark shell报错: Setting default log level to "WARN". To adjust logging level use sc.setLo ...

  7. 【开发工具】Spark Shell 的使用

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/u010416101/article/d ...

  8. Spark-SQL从MySQL中加载数据以及将数据写入到mysql中(Spark Shell方式,Spark SQL程序)

    1. JDBC Spark SQL可以通过JDBC从关系型数据库中读取数据的方式创建DataFrame,通过对DataFrame一系列的计算后,还可以将数据再写回关系型数据库中. 1.1. 从MySQ ...

  9. 《循序渐进学Spark》一1.6 使用Spark Shell开发运行Spark程序

    本节书摘来自华章出版社<循序渐进学Spark>一书中的第1章,第1.6节,作者 小象学院 杨 磊,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 1.6 使用S ...

  10. spark用scala读取hive表数据(不同版本区别)

    spark用scala读取hive表数据 spark1.6写法: val conf = new SparkConf()      val sc = new SparkContext(conf)     ...

最新文章

  1. ctypes python3_聊聊Python ctypes 模块
  2. kafka springboot配置_springboot 将日志导入kafka配置文件 logbackspring.xml(多环境)
  3. C++中的变量不初始化是什么结果?(整型、bool型、字符型)结果都是随机的,不确定
  4. Pandas使用DataFrame进行数据分析比赛进阶之路(一)
  5. 商汤科技大涨逾15% 市值突破2000亿港元
  6. 基于JAVA+SpringMVC+Mybatis+MYSQL的网上零食销售系统
  7. JSK-4 简单斐波那契【基础+打表+记忆化递归】
  8. Jumpserver安装和总结
  9. 初中计算机课堂游戏设计方案,初中信息技术教案设计
  10. 那些脱颖而出的云计算认证
  11. 上传图片到腾讯云(海外服务器)com.qcloud5.5.4版本
  12. STM32基础12--数模转换(DAC)
  13. linux中的.sh文件是什么
  14. Redis之击穿、穿透、雪崩问题
  15. 计算机网络协会宣传文案,心理协会 | 一千句招新文案,不及你出现的一刻
  16. Unity自带GL详解
  17. 《单片机原理及应用(魏洪磊)》第六章第12题
  18. 极点中文2011周年珍藏版备份
  19. ARM嵌入式Linux系统设计与开发
  20. mac电脑macOS常用软件必备软件命令行安装,史上最全mac插件2

热门文章

  1. 从Web借鉴UI设计
  2. 实战项目:考勤系统的需求分析
  3. B+Tree索引为什么可以支持千万级别数据量的查找——讲讲mysql索引的底层数据结构
  4. PHP的composer报错 failed loading cafile stream: `C:\Users\Administrator\Ap pData\Local\Temp\opeB1C9.t
  5. Yii的Url::toRoute
  6. windows设置右键sublime Text3
  7. php composer 缓慢,php – 下载Laravel时,Composer非常慢
  8. kali mysql停止服务器_第 2 篇 MySQL 安装
  9. 在计算机硬盘中没有什么,如果在打开计算机后找不到硬盘,应该怎么办?
  10. crf java实现_Tensorflow实现crf损失