目录
- 前言
- 实战
- 分解步骤:
- 命令调用:
- Hive及Spark配置:
- 队列指定:
- SQL 执行:
- SQL 查询:
- 输出处理:
- 目的和使用场景:
前言
shell 是一种脚本语言。脚本:本质是一个文件,文件里面存放的是 特定格式的指令,系统可以使用脚本解析器 翻译或解析 指令 并执行(它不需要编译)shell 既是应用程序 又是一种脚本语言(应用程序 解析 脚本语言)。
实战
#!/bin/bash
datainfo=`
spark3-sql \
--driver-memory "10G" \
--conf spark.hadoop.lzo.text.input.format.ignore.nonlzo="false" \
--conf spark.locality.wait="0s" \
--conf spark.kryoserializer.buffer="512k" \
--executor-cores "4" \
--hiveconf hive.cli.print.header="false" \
--conf spark.grouping.sets.reference.hive="true" \
--conf spark.dynamicAllocation.maxExecutors="200" \
--executor-memory "20G" \
--conf spark.executor.memoryOverhead="6G" \
--conf spark.dynamicAllocation.enabled="true" \
--conf spark.locality.wait.rack="0s" \
--queue "root.mi.sh" \
--e"
select
count(1) as mark_num
,min(begin_date) as begin_date
,max(end_date) as end_date
from default.testtable
"| tr "\t" ","
`
分解步骤:
命令调用:
命令以 spark3-sql 开始,表示使用 Spark SQL 命令行接口(CLI)。
这个 CLI 用于与 Spark 进行通信,以执行类似于数据库 CLI 的 SQL 查询。
Hive及Spark配置:
比如:
–hiveconf hive.cli.print.header=“false”:设置 Hive 配置参数以禁止在输出中打印表头,这对于处理数据的脚本非常有用。
–conf spark.dynamicAllocation.maxExecutors=“200”:配置 Spark 以使用最多 200 个 executors,executors 是 Spark 作业中的计算单位。
–conf spark.dynamicAllocation.enabled=“true”:启用资源动态分配,允许 Spark 根据工作负载自动调整使用的 executors 数量。
队列指定:
–queue “root.mi.sh”:此选项指定了 YARN 队列,任务将提交到该队列。它用于在 Hadoop 集群上组织资源分配和作业调度。
SQL 执行:
-e 用于指定要执行的 SQL 命令,SQL 命令用引号括起来。
SQL 查询:
查询选择三个字段:
count(1) as mark_num:计算满足查询条件的数据集中的行数。
,min(begin_date) as begin_date:找到数据集中最早的 begin_date。
,max(end_date) as end_date:类似地找到最新的 end_date。
From 子句:查询表 default.testtable。
输出处理:
tr “\t” “,”:将制表符分隔的输出转换为逗号分隔的输出,这对于直接从命令输出生成类似 CSV 的结果非常有用。
目的和使用场景:
此类脚本常用于数据工程和分析工作流中,例如:
使用 Spark 执行大规模数据查询和转换。
在 Unix/Linux 环境中利用自动化脚本处理大数据平台上的数据。
需要与 Hive 表或类似的基于 SQL 的数据存储解决方案进行交互。
查询结果被存储在 dateinfo 变量中,通过将命令的输出捕获到一个变量中,使得可以灵活地将复杂的数据查询和处理集成到脚本工作流中。
可以根据需要对这个变量进行处理,比如将其写入文件、传递给其他命令或者用于判断逻辑中的条件检测。