Spark Sql写代码方式(yarn)以及 spark sql整合hive详解

news2024/11/15 23:38:50

引入部分:通常我们在IDEA中写spark代码中如果设置了loacl参数,基本都是在IDEA本地运行,不会提交到 standalone或yarn上运行,在前几篇文章中写的大多数都是该种形式的spark代码,但也写到了如何将spark代码提交到standalone或yarn上运行,但是提交的代码都是spark-core形式的代码,今天我们谈一谈使用Spark Sql写代码的几种方式,并在yarn上执行

一、IDEA里面将代码编写好打包上传并提交打到yarn上运行

提交命令:

spark-submit --master yarn --deploy-mode client/cluster --class 主类名 --conf spark.sql.shuffle.partitions=1 jar包名

注意:--conf spark.sql.shuffle.partitions=1该参数为指定分区数

参数的优先级(从高到低):代码的参数 > 命令行设置的参数 > 配置文件设置的参数

这种方式在前面文章中写过,在此不再赘述,文章链接:http://t.csdnimg.cn/gN6tj

二、Spark Shell(repl)

repl:read-eval-print loop

简介:类似于写python代码的jupyter notebook,spark shell是spark中的交互式命令行客户端,可以在spark shell中使用scala编写spark程序。spark-shell的本质是在后台调用了spark-submit脚本来启动应用程序的,启动命令为

spark-shell --master  xxx

注意:

--master用来设置context将要连接并使用的资源主节点,master的值是standalone模式中spark的集群地址、或yarn、或mesos集群的URL,或是一个local地址

例如指定本地核数为2:spark-shell --master local[2]

如果需要指定jar包路径,也可以在后面加参数 --jars  jar包路径

回归正题,我们现在使用以下命令与yarn交互:

spark-shell --master yarn --deploy-mode client

可以看到yarn已经开了一个任务供使用,可以在yarn上查看

此时我们就可以在spark shell中写代码了

注意:

1、spark-shell中可以写scala, python(启动pyspark服务),spark-core,spark sql,spark streaming等形式的代码

2、spark-shell不支持yarn-cluster,如果我们的启动命令是spark-shell --master yarn --deploy-mode cluster,那么会报错,spark-shell启动不了

三、Spark SQL 命令行界面(CLI)

简介:Spark SQL 命令行界面(CLI)是一个交互式工具,允许用户直接通过 SQL 语句来查询和分析存储在 Spark 集群中的数据。它提供了一个方便的方式来查询各种数据源,如 Hive、Parquet、JSON、CSV 等,并返回结果给用户。当启动 Spark SQL CLI 时,它会连接到 Spark 集群,并为你提供一个类似于传统 SQL 数据库管理系统的命令行界面。在这个界面中,你可以输入 SQL 语句,然后 Spark SQL 会将这些语句转换为 Spark 作业,在集群上执行,并将结果返回。

启动命令:

spark-sql --master yarn --deploy-mode client

注意:与Spark Shell中类似,spark-sql --master yarn --deploy-mode cluster 命令是不能启动一个交互式的 Spark SQL 命令行界面(CLI)。

使用流程:

1、首先在linux环境中创建一个文件夹

mkdir spark-sql-master

2、进入该文件夹中并启动CLI

spark-sql --master yarn --deploy-mode client

在此界面我们可以只能写纯sql语法,就像使用传统的SQL 数据库一样。

现在进入spark-sql-master文件夹下,发现多出了一些文件,这些文件存储的就是刚刚在命令行创建数据库、数据表的信息数据,元数据信息,以及日志信息。如果我们将此文件夹删除,那么在就意味着创建的数据库、数据表等信息也将不存在。

这种启动方式的数据库是以文件的形式存储在本地的,但观察启动时的日志发现,其实默认应该是在hive中的,只是我们没有指定,所以就在本地存储了。

现在,我们开始使用spark sql去整合hive,hive底层默认是使用MapReduce框架进行计算的,因此速度很慢,现在使用spark框架结合hive,能使速度大大提升。

四、spark sql整合hive

1、vim hive-site.xml

在hive的hive-site.xml修改以下配置,增加了这一行配置之后,以后在使用hive之前都需要先启动元数据服务。其实这个配置我们在hive启动beline模式时就已经配置过,否则beline模式是开启不了的。

<property>
<name>hive.metastore.uris</name>
<value>thrift://master:9083</value>
</property>

 

2、将hive-site.xml 复制到spark conf目录下

使spark jars共用hive的元数据信息

cp /usr/local/soft/hive-3.1.2/conf/hive-site.xml /usr/local/soft/spark-3.1.3/conf/

 

3、将mysql 驱动包复制到spark jars目录下

 cp /usr/local/soft/hive-3.1.2/lib/mysql-connector-java-8.0.29.jar /usr/local/soft/spark-3.1.3/jars/

 

4、整合好之后在spark-sql里面就可以使用hive的表了

4.1启动hive元数据服务与hiveserver2服务

nohup hive --service metastore &

nohup hiveserver2 &

4.2 进入Spark SQL 命令行界面

spark-sql --master yarn --deploy-mode client

如果测试的资源不够,也可以指定参数进入:

spark-sql --master yarn --deploy-mode client --conf spark.sql.shuffer.partitions=1 --executor-memory 512m --total-executor-cores 1

此时,我们查询的数据库或表就是hive中的了:

4.3 spark sql 与 hive sql 查询速度对比

执行以下sql语句,对比查询速度:

SELECT clazz, COUNT(1) AS stu_num FROM datax_students GROUP BY clazz ORDER BY stu_num DESC;

经过测试使用spark差不多速度比hive要快10倍左右(spark官网写的是100倍   ^_^)

五、在IDEA使用代码操作spark整合的hive

1、添加以下依赖

<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-hive_2.12</artifactId>
</dependency>

<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-client</artifactId>
</dependency>

<dependency>
    <groupId>org.apache.hive</groupId>
    <artifactId>hive-exec</artifactId>
</dependency>

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.10.0</version>
</dependency>
 
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.10.0</version>
<dependency>

2、将以下四个配置文件加入到资源文件夹下

hive中的hive-site.xml和hadoop中的其他三个文件

3、编写代码测试

import org.apache.spark.sql.SparkSession

object SparkSqLOnHive {
  def main(args: Array[String]): Unit = {
    val sparkSession: SparkSession = SparkSession.builder()
      .master("local")
      .appName("spark读取hive数据")
      .enableHiveSupport()
      .config("spark.sql.shuffle.partitions", 1)
      .getOrCreate()

    import sparkSession.implicits._
    import org.apache.spark.sql.functions._

    sparkSession.sql("show databases")
    sparkSession.sql("select * from bigdata29.emp").show()

  }

}

结果:

六、在linux命令行写spark-sql

1、方式一:spark-sql -e

-- 执行一条sql语句,执行完,自动退出
spark-sql -e "select * from bigdata29.emp"

2、方式二:spark-sql -f

2.1 创建比编写sql脚本文件

vim test.sql

2.2 命令行执行该文件

spark-sql -f  test.sql

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1705366.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何防止锂电池反充

锂电池通常用于许多需要备用电源的设备应用中&#xff0c;例如实时时钟 (RTC) 和存储设备。当锂电池不是电路中的单一电源时&#xff0c;如果电池意外连接到可为电池充电的电源&#xff0c;则存在火灾或爆炸的风险。本应用笔记提供了在备用电源开关电路中连接锂电池所需的信息&…

springboot实现多开发环境匹配置

首先logbok-spring.xml里面的内容 <?xml version"1.0" encoding"UTF-8"?> <configuration><!-- 开发、测试环境 --><springProfile name"dev,test"><include resource"org/springframework/boot/logging/log…

MouseBoost Pro for Mac v3.4.7 鼠标右键助手 安装教程【支持M芯片】

MouseBoost Pro for Mac v3.4.7 鼠标右键助手 安装教程【支持M芯片】 原文地址&#xff1a;https://blog.csdn.net/weixin_48311847/article/details/139201501

Midjourney进阶篇 | 10大高阶风格,内附关键词

MJ绘画10大高阶风格&#xff0c;内附关键词&#xff01; 前言迪士尼风格 Disney style水彩画 watercolor paint波普艺术 pop art全息色彩风格 Holographic电影风格 film still二次元风格 Anime style赛博朋克风格 cyberpunk style极简主义风格 Minimalist design提示词&#xf…

【权威出版】2024年电气工程与传感检测技术国际会议(EESDT 2024)

2024年电气工程与传感检测技术国际会议 2024 International Conference on Electrical Engineering and Sensing Detection Technology 【1】会议简介 2024年电气工程与传感检测技术国际会议即将召开&#xff0c;这是一场汇聚全球电气工程与传感检测技术领域精英的学术盛会。 本…

832. 翻转图像 - 力扣

1. 题目 给定一个 n x n 的二进制矩阵 image &#xff0c;先 水平 翻转图像&#xff0c;然后 反转 图像并返回 结果 。 水平翻转图片就是将图片的每一行都进行翻转&#xff0c;即逆序。 例如&#xff0c;水平翻转 [1,1,0] 的结果是 [0,1,1]。 反转图片的意思是图片中的 0 全部被…

AT32F415 使用embedded studio笔记

由于Embedded Studio还没有支持雅特力的支持包&#xff0c;因此通过MDK的工程无法直接导入到embedded studio中。需要自己新建一个工程。 新建的时候是可以选择雅特力的单片机的。 工程新建好后&#xff0c;默认会包含3个文件。如下图所示。其中两个汇编文件的作用是之前MDK的…

Linux-----sed案例练习

1.数据准备 准备数据如下&#xff1a; [rootopenEuler ~]# cat openlab.txt My name is jock. I teach linux. I like play computer game. My qq is 24523452 My website is http://www.xianoupeng.com My website is http://www.xianoupeng.com My website is http://www.…

成都爱尔眼科巫雷院长教你在家“自查”白内障

检查以下自己&#xff08;或者父母、亲属&#xff09;是否有发生以下情况&#xff1a; 视物模糊视物模糊是白内障的主要症状。2、眼前暗影白内障早期&#xff0c;有的患者眼前会出现阴影&#xff0c;这是因为晶状体发生浑浊。晶状体混浊在眼前固定位置&#xff0c;患者会“看到…

PID传感器在光电显示行业VOC气体检测的应用

随着光电显示技术的飞速发展&#xff0c;液晶显示器等显示器件产品已经成为我们日常生活和工作中不可或缺的一部分。然而&#xff0c;在生产过程中&#xff0c;液晶显示器会释放大量的挥发性有机物&#xff08;VOC&#xff09;气体&#xff0c;对生产环境及工作人员的健康构成威…

Stable Diffusion 使用安装

Stable Diffusion是一个文本到图像的潜在扩散模型&#xff0c;由CompVis、Stability AI和LAION的研究人员和工程师创建。它使用来自LAION-5B数据库子集的512x512图像进行训练。使用这个模型&#xff0c;可以生成包括人脸在内的任何图像&#xff0c;因为有开源的预训练模型&…

【全开源】CMS内容管理系统源码(ThinkPHP+FastAdmin)

基于ThinkPHPFastAdmin的CMS内容管理系统&#xff0c;自定义内容模型、自定义单页、自定义表单、专题、统计报表、会员发布等 提供全部前后台无加密源代码和数据库私有化部署&#xff0c;UniAPP版本提供全部无加密UniAPP源码。 ​构建高效内容管理的基石 一、引言&#xff1a…

Unity 生成模版代码

1、创建模版代码文本 using System.Collections; using System.Collections.Generic; using UnityEngine;public class ClassNameScritpItem : MonoBehaviour {public GameObject go;// Start is called before the first frame updatevoid Start(){go new GameObject();}// …

充电宝哪家好用推荐?买什么充电宝性价比高?2024年充电宝排行榜

说实话&#xff0c;我其实是个手机重度使用者&#xff0c;买过的充电宝也有无数款了&#xff0c;每次手机没电的时候插座都离得不是特别近&#xff0c;不是要下床充电就是要固定在一个位置充电感觉怪麻烦的&#xff0c;但是有了充电宝后可以在床上玩手机都不用担心手机没电&…

李飞飞亲自撰文:大模型不存在主观感觉能力,多少亿参数都不行

近日&#xff0c;李飞飞连同斯坦福大学以人为本人工智能研究所 HAI 联合主任 John Etchemendy 教授联合撰写了一篇文章&#xff0c;文章对 AI 到底有没有感觉能力&#xff08;sentient&#xff09;进行了深入探讨。 「空间智能是人工智能拼图中的关键一环。」知名「AI 教母」李…

HAL工程应该这样搭建~

目录 一、为何要自己手动搭建一个软件工程&#xff1f; 二、在Keil5STM32F429**平台下的软件工程搭建 三、打开Keil MDK5软件创建一个新工程 四、在各个文件夹下添加所需文件 五、在MDK工程下添加文件 六、在MDK下添加路路径 一、为何要自己手动搭建一个软件工程&#xff…

010、哈希_命令

在Redis中&#xff0c;哈希类型是指键值本身又是一个键值对结构&#xff0c;形如value{{field1&#xff0c;value1}&#xff0c;…{fieldN&#xff0c;valueN}} 如图字符串和哈希类型对比 &#xff08;1&#xff09;设置值 hset key field value下面为user&#xff1a;1添加…

免费,Python蓝桥杯等级考试真题--第13级(含答案解析和代码)

Python蓝桥杯等级考试真题–第13级 一、 选择题 答案&#xff1a;C 解析&#xff1a;正向下标由0开始&#xff0c;下标3代表第四个元素&#xff0c;故答案为C。 答案&#xff1a;A 解析&#xff1a;range&#xff08;0,4&#xff09;的取前不取后&#xff0c;元组的符号是小括…

【运维自动化-配置平台】如何跨业务转移主机

在如何创建业务拓扑中&#xff0c;了解到业务是蓝鲸体系重要的资源管理纬度&#xff0c;主机在业务之前需要流转怎么做呢&#xff1f;比如要把A业务一台主机划给B业务使用权限中心 跨业务转移主机一般场景是由源主机所在业务的负责人发起&#xff0c;需要申请目标业务的相关权…

蓝牙Mesh模块多跳大数据量高带宽传输数据方法

随着物联网技术的飞速发展&#xff0c;越来越多的设备需要实现互联互通。蓝牙Mesh网络作为一种低功耗、高覆盖、易于部署的无线通信技术&#xff0c;已经成为物联网领域中的关键技术之一。在蓝牙Mesh网络中&#xff0c;节点之间可以通过多个跳数进行通信&#xff0c;从而实现大…