【Spark

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

文章目录


Spark_09_处理hive数据

Spqrksql处理hive里的数据api方式有问题

saveAsTable:
普通表自动建表 可以使用
分区表 会自动建表动态分区方式写入 不能使用
insertInto不能和分区partitionBy()一起使用
写入方式
append
overwrite

解决手段

 *     1.data  写入到 hdfs table path 即可   =》
 *          mysql sqoop/datax  => hdfs:
 *             普通表 read
 *             分区表 
 *               no read 
 *                 hdfs ok
 *                 metastore no ok
 *                 hive 元数据 和数据 没有关联上
 *
 *                 修复table 元数据 ok
 *                 msck
 *
 *       SaveMode.Overwrite  绝对不能用 =》 table
 *                   parition
 *
 *       幂等性如何解决
 *          table 
 *            元数据 + 数据
 *
 *            1.删除 对应分区 hdfs上数据  =》 hdfs api
 *            2.删除 对应分区  元数据  =》alter table xx drop parition
 *            3.api 写入对应分区 hdfs上数据  => sparksql api
 *            4.api 对应分区  元数据 加上  => alter table xx add parition /msck

案例需求
mysql数据
city_info、 城市表
product_info 商品表
{“product_status”:1}
1表示自营
0表示第三方
日志数据user_click.txt
1.按照区域求最受欢迎【点击次数】的商品的 top3
2.统计每个城市每个商品状态[自营/非自营]的最受欢迎的商品
注意
1.使用sparksql 代码的方式做需求并把结果数据写入mysql
2.需求需要 部署在xxl上进行调度调度周期 t+1
3.将结果数据进行可视化展示使用superset
1.可视化要求
必须要使用下拉框其他图表任意使用
4.整理整个需求的思路架构图

临时需求
1.数据源在不同位置
1.把多种数据源数据 放到hive里处理 【推荐】
2.sparksql code 临时开发
1.df
input:
mysql2table =》 sparksql =》 2df
日志数据:hdfs => sparksql => df
todo:
1.按照区域求最受欢迎【点击次数】的商品的 top3
2.统计每个城市每个商品状态[自营/非自营]的最受欢迎的商品
output:
mysql
部署
xxl T+1
spark-submit jar
数据可视化
superset

linux:测试 spark作业

spark-submit
–master local[2]
–name userlog
–jars /home/hadoop/software/mysql-connector-java-5.1.28.jar
–driver-class-path /home/hadoop/software/mysql-connector-java-5.1.28.jar
–class com.dl2262.sparksql.day02.UserLogApp
/home/hadoop/project/spark/spark-2262-1.0.jar

以yarn方式进行部署面试会问
1.
client driver =》 client机器
cluster driver =》 集群内部的
2.提交作业有关
cluster
提交作业 client作业提交 client就可以关闭了 对spark作业是没有影响的
client
提交作业 client作业提交 如果client关闭了 driver process 挂了 对spark作业有影响的
3.输出日志
client =》 可以直接查看日志
cluster =》 yarn上去看运行日志

spark-submit
–master yarn
–deploy-mode client
–name userlog
–executor-memory 1g
–num-executors 1
–executor-cores 1
–jars /home/hadoop/software/mysql-connector-java-5.1.28.jar
–driver-class-path /home/hadoop/software/mysql-connector-java-5.1.28.jar
–class com.dl2262.sparksql.day02.UserLogApp
/home/hadoop/project/spark/spark-2262-1.0.jar

spark-submit
–master yarn
–deploy-mode cluster
–name userlog
–executor-memory 1g
–num-executors 1
–executor-cores 1
–jars /home/hadoop/software/mysql-connector-java-5.1.28.jar
–driver-class-path /home/hadoop/software/mysql-connector-java-5.1.28.jar
–driver-library-path /home/hadoop/software/mysql-connector-java-5.1.28.jar
–class com.dl2262.sparksql.day02.UserLogApp
/home/hadoop/project/spark/spark-2262-1.0.jar

总结

cluster  
	提交作业  client作业提交  client就可以关闭了 对spark作业是没有影响的
client 
	提交作业  client作业提交 如果client关闭了 driver process 挂了  对spark作业有影响的

补充
idea 打包方式
瘦包 code =》 jar jar包较小
胖包 jar 160M
code
dependency jar
缺点
160M * 1000 =》 占用linux磁盘空间

不建议将第三方驱动放在spark/lib目录
脏了 spark 环境 =》 不做最好 mysql.jar可以不会产生冲突
1.jar xxjar 冲突 spark 很容易冲突
2.cdh
spark 2.1.6 版本
spark 3.3.2 版本
apache

数据写入hive

1.sql方式 hivesql

	insert into 
	insert overwrite 

分区表  
	1.hive创建一张分区表
	2.insert  
		into 
		overwrite
分区表需要开启两个参数
	spark.conf.set("hive.exec.dynamic.partition", "true")
		spark.conf.set("hive.exec.dynamic.partition.mode", "nonstrict")
	静态分区参数写死
	动态分区参数是字段

2.api方式(需要自己解决)

saveAsTable: 
	普通表自动建表 可以使用
	分区表 会自动建表动态分区方式写入  不能使用
insertInto不能和分区partitionBy()一起使用
写入方式 
	append
	overwrite 
文件存储格式 
	text【有问题】、orc、parquet

sparksql 类似 sqoop、datax 工具

以orc方式存储的分区表
CREATE TABLE bigdata.result05 (
uid STRING,
cnt BIGINT,
totol_cnt BIGINT)
PARTITIONED BY( month STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘,’
STORED AS orc;
湖仓一体 =》 存储
批流一体 =》 计算 spark、flink

存算分离 =》 hdfs、cos、oss、s3
冷数据 =》 cos、oss

waterdrop => spark
SeaTunnel => 前身 waterdrop
spark
flink
实时同步 flinkcdc[一次同步一张表 ] 、
mysql -> maxwell -> kafka->sparkstreaming/flink/sss -> phoenix /hbase <-> hive
【同步 n个 db】
离线同步
spark flink hive/hudi hadoop

sql分析平台
自定义的sql =》 antlr 抄 hive 不足
自定义的sql =》 calcite 热的 不需要掌握 【做平台用的】

spark-hive

1.udf 
2.catalog 

1.catalog

可以拿到hive元数据

hive元数据 mysql里面
spark2.0之前
spark 访问hive元数据 通过jdbc
spark2.0之后
catalog 可以拿到 hive元数据的内容

拿到hive元数据=》 做什么事情
1.大数据平台
元数据

思考 spark-shell 可以以yarn方式运行
spark-shell
–master yarn
–deploy-mode cluster
–name dl2262
–executor-memory 1g
–num-executors 1
–executor-cores 1
–jars /home/hadoop/software/mysql-connector-java-5.1.28.jar

报错org.apache.spark.SparkException:Cluster deploy mode is not applicable to Spark shells

client
cluster

driver 提交机器 client
driver yarn集群内部 cluster

Spark shell =》 交互式脚本
driver 就在提交机器 client

2.udf

1.idea 代码的方式定义 udf函数 
2.hive udf 可以在sparksql里面直接使用 
	使用场景  xxx.sql 
		hive jar 
			add jar xx.jar 
			create function 
阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6