小言_互联网的博客

【Spark_处理hive数据】

307人阅读  评论(0)


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:
mysql:2table =》 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 

转载:https://blog.csdn.net/weixin_47922102/article/details/128684164
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场