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

引入部分:通常我们在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.SparkSessionobject 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.mzph.cn/diannao/17453.shtml

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

相关文章

【VTKExamples::Utilities】第六期 DataAnimation

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 公众号:VTK忠粉 前言 本文分享VTK样例DataAnimation,并解析接口vtkProgrammableFilter,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力(^U…

Windows远程桌面是什么?

Windows远程桌面是一种远程桌面协议&#xff0c;允许用户通过网络连接到远程Windows计算机&#xff0c;并在本地操作远程计算机。它为用户提供了访问远程计算机的便利性&#xff0c;可以在不同地区的电脑或设备之间进行信息远程通信。 天联解决方案 在远程桌面技术中&#xff…

制作ARM架构 docker镜像

docker简介 docker客户端 Docker 客户端有两种替代选项:名为 docker 的命令行应用程序或名为 Docker Desktop 的基于图形用户界面 (GUI) 的应用程序。 CLI 和 Docker Desktop 均与 Docker 服务器交互。 来自 CLI 或 Docker Desktop 的 docker 命令使用 Docker REST API 将指…

KAN(Kolmogorov-Arnold Network)的理解 1

系列文章目录 第一部分 KAN的理解——数学背景 文章目录 系列文章目录前言KAN背后的数学原理&#xff1a;Kolmogorov-Arnold representation theorem 前言 这里记录我对于KAN的探索过程&#xff0c;每次会尝试理解解释一部分问题。欢迎大家和我一起讨论。 KAN tutorial KAN背…

NVIDIA AGX Orin/Jetson 平台+GMSL 车载AI视觉方案——索尼车载1700万超高像素前视摄像头

推出“1700万超高像素前视摄像头”以及基于该摄像头的“智驾超级视觉5V方案”&#xff0c;该摄像头采用索尼1700万像素IMX735车载图像传感器&#xff0c;搭载水平120度超大广角镜头和出色的超高速传输技术&#xff0c;是行业革命性创新产品&#xff0c;在车展上备受关注。 索尼…

mysql实战——mysql5.7保姆级安装教程

1、上传 上传5.7压缩包到/usr/local目录下 2、解压 cd /usr/local tar -zxvf mysql--5.7.38-linux-glibc2.12-x86_64.tar.gz mv mysql-5.7.38-linux-glibc2.12-x86_64/ mysql 3、创建mysql用户组和用户 groupadd mysql useradd -g mysql mysql 4、创建数据目录data&#xf…

git冲突

git冲突的产生&#xff1a; 首先用户A新建一个文件conflict&#xff0c;并在里面添加内容 然后通过add,commit,push将该文件上传到远端仓库 然后用户B通过pull将程序拉下来之后&#xff0c;也在这个文档里面进行编辑&#xff0c;并且内容不一样 如果这个时候其中一个人push&…

从alpine构建预装vcpkg的docker image用于gitea actions CI

动机 想要构建一个基于vcpkg的交叉编译容器平台用于cpp项目的CI&#xff08;自动集成&#xff09;&#xff0c;此处仅提供最基础的image&#xff0c;amd64的机子上构建完成后大小为533兆&#xff08;着实不小&#x1f613;&#xff09;&#xff0c;各位看官可以在此基础上自行…

产品公告 | MemFire Cloud认证服务支持微信扫码登录

前言 为了满足国内用户日益增长的操作习惯需求&#xff0c;并进一步提升用户体验&#xff0c;MemFire Cloud认证服务已集成微信扫码登录功能。微信&#xff0c;作为国内广受欢迎的社交平台&#xff0c;其扫码登录功能以其便捷性和快速性赢得了广大用户的青睐。现在&#xff0c…

SQL 语言:完整性约束

文章目录 概述主键 ( Primary Key ) 约束外键&#xff08;Foreign Key&#xff09;约束属性值上的约束全局约束总结 概述 数据库的完整性是指数据库正确性和相容性&#xff0c;是防止合法用户使用数据库时向数据库加入不符合语义的数据。保证数据库中数据是正确的&#xff0c;…

2024年03月 Python(四级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python等级考试(1~6级)全部真题・点这里 一、单选题(共25题,共50分) 第1题 运行如下代码,若输入整数3,则最终输出的结果为?( ) def f(x):if x==1:s=1else:s

记录关联(笛卡尔积)——kettle开发24

一、记录关联(笛卡尔积) 记录关联就是对两个数据流进行笛卡尔积操作。如下图所示&#xff0c;我们有两组数据分别为aaa和bbb,笛卡尔积后我们生成了4种结果&#xff0c;即2*24条记录。 记录关联(笛卡尔积)需要注意的是我们需要指定一个主步骤。即参考基准的数据 &#xff1a; 二…

leetCode.82. 删除排序链表中的重复元素 II

leetCode.82. 删除排序链表中的重复元素 II 题目思路&#xff1a; 代码 class Solution { public:ListNode* deleteDuplicates(ListNode* head) {auto dummy new ListNode(-1);dummy->next head;auto p dummy;while(p->next){auto q p->next->next;while(q …

vue3项目使用pinia状态管理器----通俗易懂

1、首先安装pinia yarn add pinia # 或使用npm npm install pinia 2、在项目的src目录下新建store文件夹&#xff0c;然后store目录下新建index.js / index.ts &#xff1a; 我这里是index,js import { createPinia } from "pinia"// 创建 Pinia 实例 const pini…

【C语言】10.C语言指针(2)

文章目录 1.数组名的理解2.使用指针访问数组3.一维数组传参的本质4.冒泡排序算法步骤 5.二级指针6.指针数组7.指针数组模拟二维数组 1.数组名的理解 int arr[10] {1,2,3,4,5,6,7,8,9,10}; int *p &arr[0];这里我们使用 &arr[0] 的方式拿到了数组第一个元素的地址&am…

约翰·舒尔曼访谈解读:2027年AGI将成现实?

随着人工智能技术的不断进步&#xff0c;AGI&#xff08;通用人工智能&#xff09;的实现似乎不再是遥不可及的梦想。近日&#xff0c;OpenAI联合创始人兼首席架构师约翰舒尔曼&#xff08;John Schulman&#xff09;在访谈中分享了他对AI模型未来发展的看法&#xff0c;并预言…

判断dom元素是否滚动到底、是否在可视区域

概览 我们日常开发中&#xff0c;在面对懒加载、虚拟列表需求时&#xff0c;经常需要判断dom元素是否滚动到底、是否在可视区域。但是由于涉及的属性太多了&#xff0c;比如scrollTop、clientHeight、scrollHeight、getBoundingClientRect()等属性&#xff0c;现根据这两个场景…

多个存储权限管理的好处,你get到了吗?

多个存储权限管理是NAS&#xff08;网络附加存储&#xff09;系统中的一个重要功能&#xff0c;它允许管理员对存储在NAS上的文件和文件夹进行细粒度的访问控制。以下是实现多个存储权限管理的关键点&#xff1a; 1.用户和用户组&#xff1a; 创建不同的用户账户和用户组&…

计算机网络——TCP / IP 网络模型

OSI 七层模型 七层模型是国际标准化的一个网络分层模型&#xff0c;大体结构可以分成七层。每层提供不同的功能。 图片来源 JavaGuide 但是这样七层结构比较复杂&#xff0c;不太实用&#xff0c;所以有了 TCP / IP 模型。 TCP / IP 网络模型 TCP / IP 网络模型可以看作是 O…