netstat
ps -ef
top
iotop
rpm
tar
查看磁盘
df -h
查看内存
ps -ef
查看端口
netstat
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
常用端口号
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
下单 √
支付 √
按照部门:
业务增长
生鲜、配送、物流、仓储
解耦 、降低风险
1、安装奇数台
2、选举机制 半数机制
3、安装台数
10台服务器 安装zk 3台
20台服务器 安装zk 5台
50台服务器 安装zk 7台
100台服务器 安装zk 11台
200台服务器 安装zk 11台
zk台数多好处:可靠性高 坏处,效率低
4、常用命令
ls get create delete
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
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(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、杂七杂八
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个数
1、跑多少任务 100-200之间 100个 150-160
2、什么时间之间 半夜 00:30 =》 8点之前结束
3、服务挂了 =》 重启
4、指标挂了 =》 邮件 打电话
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
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、优化