public int compareTo(OrderBean o){
int result = this.getMark().cpmpareTo(o.getMark);
if(result ==0){
return Integer.compare(this.getId() , o.getId());
}else{
return result;
}
}
public int compare(WritableComparable a ,WritableComparable b){
OrderBean order1 = OrderBean(a);
OrderBean order2 = OrderBean(b);
return order1.getMark().compareTo(order2.getMark());
}
1.mrmaster会把map()输出的kv对存到环形缓冲区中,
2.当环形缓冲区存的数据达到80%后,先进行快排,再溢写到磁盘文件中
3.多个溢写的文件进行归并排序生成一个大的文件
4.在溢出的过程和归并的过程,都要根据partition进行分区和key进行排序
5.reduceTask根据自己的分区号,去各个mapTask机器上copy各个文件,reduce会
先将这些文件存到内存中,达到一定的阈值后溢写到磁盘上,
6.每个reduceTask会得到自己对应分区的数据,最后对内存和磁盘的文件进行归并排序
1.提交job到客户端所在结点
2.向rm申请一个Apprication
3.rm收到请求后,返回appid和提交路径
4.nm将切片信息,配置文件,jar包提交到这个路径
5.资源提交完毕,向rm申请运行一个mrmaster
6.rm收到客户端请求后,将这些信息封装成Task,并放到容量调度器中
6.rm为task分配一个空闲的nm,并开启mrmaster
6.rm为nm分配资源,nm开启container和mrmaster,
7.container会将从hdfs拷贝资源到本地
8.mrmaster向nm申请运行mapTask
9.rm将运行maptask的任务分配给其他空闲的nm,并创建容器
10.nm向领取到maptask的nm发送启动脚本,运行maptask
11.mrmaster等所有maptask运行完后,向nm申请运行reduceTask
12.nm将运行reduceTask的任务分配给其他空闲的nm,并创建容器
13.reduceTask向maptask获取分区数据,然后运行
14.等所有reducetask运行完后,mr向rm申请注销自己
1.首先由一个main()线程
2.在main()创建zk对象,得到两个线程,connect和listener
3.connect将监听事件添加到zk中
4.在zk的监听列表将监听事件添加到列表中
5.zk监听到数据或者路径发生变化,就将这个消息发送给listener线程
6.listener内部调用process()方法得到监听
range:默认策略。range是对每个topic而言的,首先将每个topic的所有分区按照分区号
进行排序,将所有消费者按照字母顺序进行排序。接着用分区数除以消费者的消费线程的
总数来决定每个消费者消费的分区。如果除不尽,那么前几个消费者消费多一个分区。
round_robin:前提:1.每个消费者订阅同样的主题,2,同一个consumer group的
所有消费者必须拥有同样的消费者消费线程数。
首先将topic的分区取出来得到topicandpartition列表,接着对tap列表按照hashcode
进行排序,
最后按照轮询的方式发给每一个消费者线程。
小文件太多:1.元数据太多 2.开启太多mapTask
办法:1.使用har归档 2.采用combineTextInputFormat 3.jvm重用
shuffle优化:1.增大环形缓冲区的大小 2.增大环形缓冲区溢写的比例
3. 减少归并时merge的次数 4.在不影响业务的情况下,使用combine,减少I/O
5.合理设置map和reduce的个数。6.设置map和reduce共存。7.增大reduce阶段的内存
8.增加每个reduce去map中拿数据的并行数。
9870nn.http 9868 2nn 19888 历史 8088 yarn 9864 dn.webapp 9866 dn.address
cume_list()
bin/kafka-console-producer.sh --bootstrap-server hadoop102:9092 --topic first
bin/kafka-consumer-groups.sh --bootstrap-server hadoop102:9092 --list
bin/kafka-console-consumer.sh --bootstrap-server hadoop102:9092 --topic first
2,请简述scala语言中闭包、柯里化和伴生对象。
有多个参数列表的方法称之为柯里化,闭包是指函数体中使用了不属于函数本身的变量的函数。
对象是静态的,可以通过类名直接访问方法。通过该对象调用Hello$的main函数,可以理解我们在main中写的代码在放在Hello$的main,
在底层执行Scala编译器做了一个包装。
3. Spark有几种部署方式?请分别简要描述。
1)Local:运行在一台机器上,通常是练手或者测试环境。
2)Standalone:构建一个基于Mster+Slaves的资源调度集群,Spark任务提交给Master运行。是Spark自身的一个调度系统。
3)Yarn: Spark客户端直接连接Yarn,不需要额外构建Spark集群。有yarn-client和yarn-cluster两种模式,主要区别在于:Driver程序的运行节点。
4)Mesos:国内大环境比较少用。
4列举Spark提交作业参数,并描述其作用。
executor-cores —— 每个executor使用的内核数,默认为1,官方建议2-5个,我们企业是4个
num-executors —— 启动executors的数量,默认为2
executor-memory —— executor内存大小,默认1G
driver-cores —— driver使用内核数,默认为1
driver-memory —— driver内存大小,默认512M
5,请画图描述Spark的任务提交流程。
6.请简述Spark 中cache和checkpoint算子的联系与区别。
都是做RDD持久化的
cache:内存,不会截断血缘关系,使用计算过程中的数据缓存。
checkpoint:磁盘,截断血缘关系,在ck之前必须没有任何任务提交才会生效,ck过程会额外提交一次任务。
7.当Spark涉及到数据库的操作时,如何减少Spark运行中的数据库连接数?
使用foreachPartition代替foreach,在foreachPartition内获取数据库的连接。
8,请手写出一种wordcount的Spark代码实现(Scala) 。
9. Spark作业什么情况下会发生数据倾斜?如何调优?
做数据运算的时候会涉及到,count distinct、group by、join on等操作,这些都会触发Shuffle动作。一旦触发Shuffle,
所有相同key的值就会被拉到一个或几个Reducer节点上,容易发生单点计算问题,导致数据倾斜。
1)key分布不均匀
2)建表时考虑不周
3)业务数据激增
join,groupbykey
使用Hive ETL预处理数据
过滤少数导致倾斜的key
提高shuffle操作的并行度
将reduce join转为map join
采样倾斜key并分拆join操作
两阶段聚合(局部聚合+全局聚合)
10,数仓项目共将数据分为哪几层?各层分别做了哪些事?请简要描述
ods 保持数据原貌不做任何修改,起到备份数据的作用。数据采用压缩,减少磁盘存储空间。创建分区表,防止后续的全表扫描。
dwd DWD层需构建维度模型,一般采用星型模型,呈现的状态一般为星座模型。选择业务过程→声明粒度→确认维度→确认事实。脱敏,维度退化,清洗。
DWS层统计各个主题对象的当天行为 。 DWS层的宽表字段,是站在不同维度的视角去看事实表,重点关注事实表的度量值,通过与之关联的事实表,获得不同的事实表的度量值。
ADS对电商系统各大主题指标分别进行分析。
11.数仓项目中分析过最难的需求是哪个?请简要介绍需求实现思路。
使用hdfs的copyMeger 方法来合并目录下的所有文件为一个文件
distribute by rand()
distribute by :用来控制map输出结果的分发,即map端如何拆分数据给reduce端。
会根据distribute by 后边定义的列,根据reduce的个数进行数据分发,默认是采用hash算法。
某品牌的退款率 order info 表->orderwide
-bin/flink run -m yarn-cluster -ytm 1000 -yjm 1000 -ys 3 -p 2 -c com.atguigu.java.TestFlinkRunSubmit /home/atguigu/TestFlinkRunSubmit.jar
https://zhuanlan.zhihu.com/p/146318229
https://segmentfault.com/a/1190000021210111
https://zhuanlan.zhihu.com/p/80482732
https://blog.csdn.net/xt1233/article/details/101370561
https://www.bilibili.com/video/BV1L4411K7hW?p=79
https://www.bilibili.com/video/BV1df4y1U79z?p=193
专业技能粘贴在工作经验里
flink实时(8个月):
降低延迟,解决有序问题,双流join,结果更准确,为公司决策提供数据支撑。
1.调整顺序,合并内容
2.比较了解的需求
技术:每一层,aginx的作用,解决什么问题,调优,小文件问题,放一点点底层源码
spark:数据倾斜,双流join,rdd,框架原理写一点点,碰到问题,调优
用这个框架的什么特xing,解决什么问题,这一层有什么作用 技术 5-10条
ranger atlas superset
字数:2300-3000
数据倾斜-》oom-》大表join大表
https://www.freesion.com/article/7877499345/
https://www.cnblogs.com/Christbao/p/13569616.html
https://www.dazhuanlan.com/2020/03/26/5e7c5c27c73bd/
https://blog.csdn.net/zhangshenghang/article/details/105322423
https://blog.csdn.net/IT_Lee_J_H/article/details/88641894?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2.control
https://www.cnblogs.com/zhyg/p/12511313.html
https://www.cnblogs.com/jj1106/p/13214614.html
19520865476
https://blog.csdn.net/weixin_42478648/article/details/110010668
bin/spark-submit \
--class com.atguigu.spark.Analysis \
--master yarn
--deploy-mode cluster
--num-executors 80 \
--driver-memory 6g \
--executor-memory 6g \
--executor-cores 3 \
bin/flink run