大数据面试题

大数据面试题

  • 一、Linux
    • 常用高级命令
  • 二、shell
  • 三、hadoop
  • 四、zookeeper
  • 五、flume(三件事)
  • 六、Kafka(23件事)
  • 七、hive
  • 八、Sqoop
  • 九、Azkaban oozie airflow DolphinScheduler
  • 十、从0-1怎么办?
  • 十一、数仓分层
  • 十二、 热点
  • 十三、spark

一、Linux

常用高级命令

netstat  
ps -ef
top
iotop
rpm  
tar 

查看磁盘

df -h 

查看内存

ps -ef   

查看端口

netstat

二、shell

awk sed  sort cut (python)

写过那些脚本

启动 停止 分发

#!/bin/bash

case $1 in
	"start")
		for i in cpucode100 cpucode101 cpucode102
		do
			ssh $i "绝对路径"
		done
	;;
	
	"stop")
		for i in cpucode100 cpucode101 cpucode102
		do
			ssh $i "绝对路径"
		done
	;;
esac

与mysql的导入导出

mysql hdfs (hive)
sqoop (datax/ canal hadoop )

驱动
主机名称 端口号
用户名
密码
路径
删除

query "select id,name from user 创建时间=今天  or  操作时间=今天 "

同步策略(全量、增量、新增和变化、特殊)

ods => ads

#!/bin/bash

定义变量 APP=gmall

获取时间  (T+ 1)

sql ="
		找到当前这一天 按照这一天写sql ,将时间替换 $do_date 遇到表 $APP.
		自定义UDF UDTF   $APP.
"

执行sql 

‘’ “” 区别 谁在最外边谁起作用

union union all

三、hadoop

常用端口号

2.x 50070 8088 19888 9000/8020/
3.x 9870 8088 19888 9000/8020/9820

2)配置文件

2.x core-site.xml hdfs-site.xml mapred-site.xml yarn-site.xml slavers
3.x core-site.xml hdfs-site.xml mapred-site.xml yarn-site.xml workers

2、HDFS
	1)HDFS读写流程  笔试题  有朋友

	2)HDFS小文件危害
		(1)存储 
			影响NN 存储    一个文件块   150字节
			128g内存
			128g * 1024m * 1024kb * 1024字节 / 150字节 = 9亿
		
		(2)计算
			默认的切片规则  每个文件单独切片  1k => maptask  1g 
		
	3)解决办法
		(1)har 
		(2)combineTextInputforamt
		(3)JVM重用
		
			开始      3s
			干活      2s

			干活      2s

			干活      2s
			结束      3s
	4)有几个副本  3个
	
	5)块大小
		1.x       64m
		2.x 3.x   128m 
		本地		32m 
		企业		128m 256m  512m 
		hive		256m

		什么会影响块大小?
		磁盘读写速度

3、MR
	shuffle及其优化
	
	map方法之后reduce方法之前混洗的过程

4、YARN

yarn工作机制

2)调度器
fifo 容量 公平

(1)fifo 特点 单队列 先进先出 在企业几乎不用

(2)容量调度器
多队列、 资源不够时可以借 优先保证先进来的任务执行

(3)公平调度器
多队列 资源不够时可以借 队列里面所有任务公平享有队列资源 缺额

(4)公平调度器并发度高
(5)在企业中,对并发度要求高的场景 选择公平 通常 大厂
(6)中小企业对并发度要求不高
(7)默认1个队列,
按照计算引擎 hive spark mr
来了一个菜鸟 写了一个递归死循环
按照业务:11.11 降级
登录 x
注册 x
下单 √
支付 √

按照部门:
业务增长
生鲜、配送、物流、仓储

解耦 、降低风险

四、zookeeper

1、安装奇数台

2、选举机制 半数机制

3、安装台数

10台服务器 安装zk 3台
20台服务器 安装zk 5台
50台服务器 安装zk 7台
100台服务器 安装zk 11台
200台服务器 安装zk 11台

zk台数多好处:可靠性高 坏处,效率低

4、常用命令

ls  get create delete 

五、flume(三件事)

1、组成(事务)
1)taildirsource
(1)断点续传 多目录
(2)apache 1.7 cdh 1.6
(3)自定义source 有可能重复
(4)自己可以增加事务 但是不会用
(5)下一级处理 hive dwd spark flink redis
group by 开窗取第一条

2)channel
(1)memory channel 内存 效率高 可靠性差

(2)file channel  磁盘   效率低  可靠性高 

(3)kafka channel  kafka 磁盘  效率高  可靠性高 
kafka channel 》 memory channel + kafka sink 
1.6版本产生  有bug   不用
1.7 版本  解决了bug  大量使用

3)sink
大小 时间 event个数

2、三个器
1)拦截器
(1)那些地方用到拦截器 ETL 时间戳拦截器
(2)ETL 判断json是否完整
(3)是否可以不用ETL 可以在dwd
(4)时间戳拦截器解决零点漂移问题
(5)定义类 实现interceptor接口 重写4个方法 初始化 关闭 单event 多event
builder
打包 上传 flume/lib 在配置文件中 全类名 $builder

2)选择器
	re  默认的   把数据发往下一级所有通道
	
	ml  选择性发往指定通道
	
	只有一个  log 

3)监控器
	g   
	增加内存  flume-env.sh  默认内存2000m  =>  4-6g 
	11.11  6.18
	
	增加flume台数
	日志服务器配置  8g  16g  32g

3、挂了 及优化

memory 100个event
file channel 100万个event

有可能重复 下一级处理

1)file channel 多目录 (多磁盘)
2)sink
大小 时间 event个数

3)监控器
g
增加内存 flume-env.sh 默认内存2000m => 4-6g

11.11 6.18
增加flume台数
日志服务器配置 8g 16g 32g

六、Kafka(23件事)

1、组成  生产者 broker   消费者    zk
2、安装多少台   2 * (生产者峰值生产速率 * 副本 / 100) + 1 = 3台
3、压测:生产者峰值生产速率  消费者峰值消费速率
4、副本: 默认1个  2-3个  2个居多
	副本多:好处 可靠性高  坏处  效率低 
5、速率
	100万日活   100条    一天100万 * 100条=1亿
	
	1亿/ ( 24 * 3600s) = 1150条/s  1k  1m/s 
	
	7-12点左右   30m/s  1-3万
6、保存日志 默认7天=》  3天	
	oppo   6个小时
	
7、磁盘买多大
	100g  * 3天 * 2个副本 / 0.7= 1t
8、是否做监控
	kafka eagle  
	kafka manager java11   多赞美 
9、分区分配策略
	ra
	 3个分区 10个线程
	 0  1 2 3   数据倾斜
	 4 5 6 
	 7 8 9 
	
	randbin
	所有的都hash方式打散   轮询
10、分区
	作用:提高并发
	期望的吞吐量  t 100m/s 
	生产者峰值生产速率  tp  20m/s 
	消费者峰值消费速率  tc  40m/s
	分区数= t / min(tp, tc )= 100/ 20= 5个分区
	3-10分区
11、ISR队列
	旧版本 :延迟时间  延迟条数
	新版本:延迟时间 
12、多少个topic
	满足下一级所有消费者
	

	
13、丢了
	ack 
	0  生产者 发送过来数据  就不管了   效率高  可靠性低
	1  生产者 发送过来数据  leader应答  效率一般 可靠性一般
	-1 生产者 发送过来数据 leader + follower(ISR )应答  效率低  可靠性高 
	
	企业中: 0一般不选;
			1:普通日志 追求效率 
			-1:金融和钱相关的数据  追求可靠性  

14、重复了
	事务(效率低  可靠性高)  幂等性 ack=-1
	
	金融和钱相关的数据  选择事务
	普通日志 下一级处理 hive  dwd 

15、积压了
	增加分区:  1个分区=》 5个分区   消费者 CPU1个   5个
	增加消费者  每批次拉取 数据量   flume  spark  flink  (批次大小)
	 1000event  => 2000个event 3000
16、挂了
	短时间没事
	长时间有30天日志
	
17、优化
	保存时间7=》 3天
	副本1 =》 2 

18、杂七杂八
	1)Kafka高效读写数据
	(1)集群 分区 =》高并发
	(2)顺序读写
	(3)零拷贝
	2)传过来大于1m文件 卡死

七、hive

七、Hive(10件事)
1、组成

2、hive与 MySQL 区别
				hive     	MySQL
	数据量		大       	小 
	
	速度		大查询 快   小 查询快

3、内部表和外部表区别
	大多数外部表 
	元数据  原始数据
	
	删除内部表:元数据  原始数据
	删除外部表:元数据

4、4个by
	order by    全局排序   
	sort by 	排序
	d 			分区 
	c			分区排序
	
5、系统函数
	date_add  date_sub   next_day  date_format  get_json_object

6、自定义函数
	UDF   定义类 继承UDF=》 evaluate   一进一出

	UDTF   定义类 继承G...UDTF  重写三个方法:初始化(校验返回值类型和名称)、关闭、process  
	
	UDAF 

	打包、上传HDFS   需要在hive客户端注册 =》 shell => $APP. 


7、窗口函数
	rank  over   开窗   top  手写代码

8、优化
	1)mapjoin  默认打开  不关闭
	2)行列过滤  =》  join  where =>  where  join  
	3)创建分区 分桶
	4)小文件:
		(1)combinehiveinputformat
		(2)JVM重用
		(3)merge  mr  需要手动打开    maponly 默认打开  
				16m文件=》 256m
	5)压缩
	6)列式存储
		id   name  age
		1    zhansan 18
		2    li    19
		
		行:1    zs    18  2    li    19
		列:1  2   zs   li   18   19
		select name from user 
	7)提前combiner 
	8)合理设置map个数和reudce个数
		max(0,min(块大小,long最大值)  
		128m => 1g
	9)引擎:mr    tez   spark



9、数据倾斜
	zs    user_id字段为int
	li    log表中user_id字段string类型
	ww 

10、杂七杂八

八、Sqoop

1、在使用sqoop过程中遇到哪些问题怎么解决的?
	1)空值问题
		mysql       	hive 
		null			\N 
				4个参数	
	2)hive(ads)  =>    mysql 
				4map 
		2个成功     uv
		2个失败		gmv 
	
		1亿 			1万     跳楼
		1万				1亿     疯了
		
		可以没有不能错
		--staging
		mysql (tmp) => mysql (正式表) 
	3)什么时间执行?
		00:10 =》   20分钟左右  =》  11.11  618  时间长 1小时
		
	4)是否可能发送数据倾斜
		100万日活  业务(mysql )   10万人   10-20条 (加购、下单、支付、物流、退货)
		
		10万 * 10条 *  1k =>  1g 
	
		金融  保险 银行 =》  几乎没有用户行为日志=》 业务数据(1000张=》 3000张)
		有可能发生数据倾斜 TB PB 
		
		split-by  主键  增加map个数

九、Azkaban oozie airflow DolphinScheduler

1、跑多少任务   100-200之间   100个    150-160
2、什么时间之间  半夜 00:30  =》 8点之前结束
3、服务挂了 =》  重启
4、指标挂了 =》 邮件  打电话

十、从0-1怎么办?

1、数据量:  100万日活 
2、人:1个
3、需要几个:1个 + 1个 
4、没有机器:50万   阿里云(不需要运维)  物理机
5、时间:1个月:
6、离线还是实时    先做离线后做实时  (流批一体)
7、电商业务
8、用户行为数据(日志文件)   业务数据(mysql )
9、展示方式:  有报表(每天8点出)

十一、数仓分层

1、数仓如何建模的?
	1)将业务表 导入到EZDML,通过id,将所有表关联在一起
	
	2)ODS层
		(1)保持数据原貌不做任何修改    备份
		(2)创建分区表					防止后续全表扫描
		(3)采用压缩					减少磁盘存储空间
	3)DWD层
		(1)选择业务过程(100张表)
			①:中小公司,直接全量
			②:大型公司:根据业务过程选择(ads层最终统计的需求)

		(2)声明粒度
			粒度:一行信息代表什么含义     一次下单   一天下单  一周的下单   一个月的下单
			期望是最小粒度:只要不做聚合操作就可以。
	
		(3)确认维度
			 什么时间、什么地点  谁  商品、活动、优惠卷 (ads层最终统计的需求)
		
		(4)确认事实
			度量值:次数 件事  个数  金额  可以累加的值
			
		(5)维度退化
			商品表  商品SPU表  商品品类表   一级分类  二级分类  三级分类 =》  商品维度表
			
			省份表  +  地区表 =》  地区维度表
			
		(6)数据清洗 :手段  mr   hql  spark sql   python  kettle 
		
		(7)清洗的规则是什么?
			解析数据、核心字段不能为空、过期数据清洗、重复去重
			身份证号  手机号 邮箱号 网站。。。。。
			规则:删除   或者   替换 标准默认值 (null   "")
		(8)清洗掉多少脏数据? 1万条 /  1 条
		(9)压缩  减少磁盘空间
		(10)列式存储   
		(11)脱敏  手机号 135 **** 0013
					md5加密
					加权限:
	
	4)DWS层 (按天聚合的宽表)
		(1)有哪些表
			站在维度的角度去看事实  商品   用户、  访客   地区、  活动、  优惠卷
		
		
		(2)每个表里面的字段怎么来?
			站在维度的角度去看事实  看事实表的 度量值   =》  用户(性别  年龄  身高体重)
		
	5)DWT层 (从事件开始到结束的累积值)
		(1)有哪些表
		站在维度的角度去看事实  商品   用户、  访客   地区、  活动、  优惠卷
		
		(2)每个表里面的字段怎么来?
		站在维度的角度去看事实  看事实表的 开始时间  结束时间  累积度量值  最近一段时间的累积度量值

	6)ADS 层
		一口气30个指标(日活 新增 留存  转化率  7天内连续3天 )
		手写代码   秀 主动写sql  (开窗   topn    行转列    列转行   count  sum   topn )
		
2、数仓每层做了什么事?	
	用户行为宽表
	那张表数据量最多
	那两张表  join 发生了数据倾斜?
	
	用户  + 订单 
	订单(100万) + 订单详情(200万)   =》 数据量分别是多少   
										数据倾斜的时候,执行了多久?1-4小时
										修改优化完成之后,执行多久?30分钟以内
	地区  + 订单 
	
	
测试:
sum(a, b )
a: 1 - 10000000000
b:1 - 100

	边界值:a :1  100 0  101 
	
	等价类:a :  100   300000

测试用例:a=1 b =1 => 期望输出 2 
		实际测试:1 * 1 =》  结果输出1 
	提bug =>  禅道、bugzila=>   发送邮件  测试经理  开发程序员    大数据组组长
	开发程序员(这不是bug)  这是一个bug  =>  下一个版本解决
		

瀑布式开发  (传统项目  1-5年)  V  字模型
系统需求200个									需求测试
	系统总体设计							系统集成测试
		软件概要设计					软件集成测试
			软件详细设计			单元测试
				代码编写		代码走查	
			
敏捷开发   小步快跑
	需求5个
	代码编写
	测试 
	需求5个
	代码编写
	测试 

十二、 热点

insert into table ads_user
select id,name from dws_user

十三、spark

1、入门
	1)spark是解决什么问题的:海量数据的计算问题
		hadoop   :  计算  存储
	2)spark为什么有自己的调度器 ?yarn 
	3)运行模式
		(1)local 			测试
		(2)standalone		对性能要求非常高的场景
		(3)yarn			国内大量使用
		(4)m				不会
		(5)k8s			了解
	4)常用端口号
		(1)4040  spark shell 
		(2)7077  8020 /9000
		(3)8080  8088
		(4)18080  19888
	5)手写wordcount 

2、sparkcore
	1)代码都在哪执行   E(算子执行)   D  
	2)RDD五大属性
		(1)标记数据是哪个分区的
		(2)计算
		(3)分区器
		(4)血缘依赖
		(5)移动数据不如移动计算
	3)转换算子
		(1)value
			map 
			mapp
			mappw
			flatmap
			filter
			re  shuffle   修改分区
			c 	 缩减分区
			pipe
			groupby
		
		
		(2)双value
			zip
		
		
		
		(3)keyvalue
			partitionby
			
			groupbykey     不预聚合
			reducebykey   预聚合
					
			reducebykey   没有初始值    分区内分区间逻辑 相同
			fold			有初始值   分区内分区间逻辑 相同
			agg 			有初始值		分区内分区间逻辑 可以不相同
			combin		有初始值(变换结构)分区内分区间逻辑 可以不相同
			
			sortbykey 
			mapvalues 
	4)行动算子
		reduce 
		first
		take 
		forecah
		collect 
	5)KRYO序列化
	6)cache   	不改变血缘     内存
		checkpoint  切断血缘    HDFS  
		企业:cache + checkpoint
	7)血缘
		宽依赖(shuffle )  窄依赖
	8)任务分配
		(1)app   context上下文个数
		(2)job   行动算子个数
		(3)stage  shuffle + 1
		(4)take  每个阶段  最后一个算子对应的分区数

	9)累加器
	
	10)广播变量


3、spark sql 
	rdd  df  ds 
	
	hive on  spark    元数据:mysql   执行引擎:rdd   语法:hql
	spark on hive 		元数据:mysql 执行引擎:df  ds    语法:spark sql 
	
	内部hive :derby
	外部hive :mysql 


4、spark streaming
	(1)SparkStreaming是纯流式处理框架吗? 他的抽象是谁?
	(2)背压机制原理
	(3)Receiver和Direct模式原理
	(4)kafka的offset维护在什么位置( 0.10)
	(5)transform算子里面的代码都在什么端执行
	(6)UpdateStateByKey状态保存在什么位置?  有什么缺点
	(7)window有三个概念  用wordcount案例画图说明	

5、内核


6、优化

你可能感兴趣的