先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新大数据全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
如果你需要这些资料,可以添加V获取:vip204888 (备注大数据)
正文
create_time timestamp(3),
dt string
) partitioned by(dt)
with (
‘connector’=‘hudi’,
‘path’ =‘hdfs://hadoop:8020/dw/dim_product’,
‘table.type’=‘MERGE_ON_READ’,
‘hoodie.datasource.write.recordkey.field’ = ‘product_id’,
‘hoodie.datasource.write.precombine.field’ = ‘create_time’,
…
);
insert into hudi.dwd_ord_order_info_dd select …;
insert into hudi.dim_product select …;
– 维表Join SQL示例(以下SQL会存在数据质量问题)
set table.exec.state.ttl = 8192s;
insert into hudi.dws_ord_order_info_dd
select *
from hudi.dwd_ord_order_info_dd t1
left join hudi.dim_product t2 on t1.product_id = t2.product_id
;
上边示例中的sql表示实时订单数据流(hudi.dwd\_ord\_order\_info\_dd)关联商品维表的功能,用来补全宽表商品属性(hudi.dim\_product)数据。这段SQL在实际生产环境中执行会出现数据丢失的问题,从而导致数据质量不合格。那么问题出现在哪里呢?
* 维表数据只能保存TTL时间范围内变更数据记录有效,而订单流产生交易的商品很可能是去年上架销售商品,在商品state中已经没有该商品记录信息,从而导致关联商品信息失效;
* 如果不设置TTL,那么订单流和商品流都要保存启动全量历史数据状态,这么大的状态对于内存压力巨大,如果商品维表巨大,且周期较长,那么商品维表也无法保留全部历史数据;
这里问题主要原因是订单数据事件时间和对应商品事件时间差异比较大导致的问题。
## 二 FlinkSQL基于Hudi维表Join场景缺陷解决方案
在章节1中我们分析了代码可能存在的问题原因,那么怎么解决呢?对于FlinkSQL来说,关联维表最好的方式是通过Lookup Join方式关联外部最新维度数据。
### 1 方案一
针对商品表在hbase创建商品维表,同时装载历史数据,然后通过流写入hudi维表外同时写入Hbase一份数据。伪代码如下:
>
> 为什么要创建hbase维表?
>
>
> * hudi表的数据文件从hdfs上看也是普通的parquet或者log格式,这种格式存储数据本质上来说对于批量分析比较友好,但对于向单行数据的快速扫描性能比较低。这一点是由存储结构造成的。
> * hbase表结构对于单行rowkey访问友好,但对于批处理不友好;
> * 基于上面两点,我们只能选择在存储层通过存储两份不同格式的数据来解决批处理和单行访问之间差异的问题。
>
>
>
– Hudi订单事实表
create table hudi.dwd_ord_order_info_dd(
order_id bigint,
product_id bigint,
order_amount double,
order_time timestamp(3),
dt string
) partitioned by(dt)
with (
‘connector’=‘hudi’,
‘path’ =‘hdfs://hadoop:8020/dw/dwd_ord_order_info_dd’,
‘table.type’=‘MERGE_ON_READ’,
‘hoodie.datasource.write.recordkey.field’ = ‘order_id’,
‘hoodie.datasource.write.precombine.field’ = ‘order_time’,
…
);
– Hudi产品维表
create table hudi.dim_product(
product_id bigint,
product_name string,
category string,
create_time timestamp(3),
dt string
) partitioned by(dt)
with (
‘connector’=‘hudi’,
‘path’ =‘hdfs://hadoop:8020/dw/dim_product’,
‘table.type’=‘MERGE_ON_READ’,
‘hoodie.datasource.write.recordkey.field’ = ‘product_id’,
‘hoodie.datasource.write.precombine.field’ = ‘create_time’,
…
);
– Hbase产品维表
create table hbase.dim_product(
product_id bigint,
product_name string,
category string,
create_time string,
dt string
) partitioned by(dt)
with (
‘connector’=‘hbase’,
…
);
insert into hudi.dwd_ord_order_info_dd select …;
create view tmp_product as …;
insert into hudi.dim_product select * from tmp_product;
insert into hbase.dim_product select * from tmp_product;
set table.exec.state.ttl = 8192s;
insert into hudi.dws_ord_order_info_dd
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注大数据)
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
链图片转存中…(img-fvLthJCR-1713123678892)]
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!