首页 > 其他分享 >note2

note2

时间:2024-07-07 21:31:30浏览次数:6  
标签:10 分区 note2 kafka 内存 spark 数据

一、Linux
1、常用的高级命令
ps -ef top iotop netstat df -h free tar rpm
2、查看磁盘使用情况 查看内存 查看端口号
df -h top jmap -heap 进程号 netstat
二、Shell
1、常用工具
awk sed sort cut 知道对应名称 =》 python
关注尚硅谷教育公众号 回复 python 前端 java
区块链 安卓 运维 ui
大数据
2、手写过哪些脚本
1)分发
2)启动停止
#!/bin/bash

        case $1 in 
        "start")
            for i in  hadoop102 hadoop103 hadoop104
            do
                ssh $i "绝对路径"
            done
        ;;
        "stop")
        
        ;;
        esac

    3)与mysql的导入导出  datax 
    4)数据层级内部 
        ods  => ads 
        
        #!/bin/bash
        
        定义变量 (app= gmall)x
        
        获取时间 (如果输入时间,按照输入时间走;如果没有输入时间,T+1)
        
        sql ="具体逻辑   遇到时间换成$do_date  遇到表 库名.表   自定义函数 库名.自定义函数"
        
        执行sql
3、''  "" 
    ''  不解析里面变量的值
    "" 解析里面变量的值
    嵌套:看谁在最外层。

三、Hadoop
1、入门
1)常用的端口号
2.x 50070 8088 19888 9000/8020
3.x 9870 8088 19888 9820/9000/8020

    2)常用配置
        2.x  core-site.xml  hdfs-site.xml  mapred-site.xml  yarn-site.xml slaves 
        3.x  core-site.xml  hdfs-site.xml  mapred-site.xml  yarn-site.xml workers 

2、HDFS 
    1)HDFS读写流程  笔试题里面出现   有没有朋友
    
    2)小文件的危害
        (1)存储
            默认情况 一个文件块 不管多小都会占用NN  150字节左右。
            128m  一个文件块 =》  150字节
            1字节  =》  150字节
            小文件过多 浪费 NN的存储内存
            128g的内存 能存储多少文件块
            128g * 1024m * 1024k * 1024 字节 / 150字节 = 9.1亿 
        
        (2)计算
            默认情况的切分规则 ,每个文件单独切片。
            1字节 =》 1个maptask  => 1g内存
            128m => 1个maptask => 1g内存
    
    
    3)小文件怎么解决
        (1)har归档   本质减少 NN的存储压力
        
        (2)JVM重用(10次)
            开始   3s 
            干活    2s 
            .......
            干活    2s 
            结束   3s 

        (3)combineTextinputformat   解决计算问题
            将多个文件放到一起统一切片,减少了maptask的个数,进而减少了集群内存
            (10个小文件)
            
    4)默认副本数
        3个 
    5)块大小
        1.x         64m
        2.x 3.x     128m
        本地          32m   1.1 倍
        企业        128m   256m  512m 
        块大小取决于什么?
        磁盘的读写速度  普通的机械硬盘  100m/s 左右 =》 128m
                        普通的固态硬盘   200-300m/s  => 256m
                        高级的固态硬盘   500-600m/s =>  512m

3、mr 
    shffle  及其优化
    
    map方法之后,reduce方法之前 ,混洗的过程 叫shuffle 

4、yarn
    1)yarn的工作机制
    
    2)调度器
        (1)FIFO 、容量、公平
        (2)FIFO特点
            支持单队列   任务执行顺序  先进先出   在企业中几乎不用
            
        (3)容量特点
            支持多队列  资源不够的时候可以借资源  执行任务的顺序,优先满足先进入任务的资源
        
        (4)公平特点
            支持多队列  资源不够的时候可以借资源    执行任务的顺序,每个任务公平享有队列资源
            
            按照缺额分配。
        (5)在生产环境中应该怎么选择
            如果对并发度要求比较高 ,选择公平   中大型公司 
            如果对并发度要求比较低,选择容量   中小型公司   我们的公司。
            
        (6)默认的队列有几个
            默认就一个default 
            
            按照框架引擎:hive  spark flink  mr  用的不多
            
           部门 =》 业务线 
           用户域  √
           流量域  x
           交易域  x
           互动域  x
           工具域  x
           
           一个队列  公司来了一个菜鸟  写了一个递归死循环   整个数仓全部瘫痪
           
           11.11  6.18  

四、zookeeper
1、选举机制 半数机制
2、安装什么数台 安装奇数台
3、经验值:
10台服务器安装多少zk 3台
20台服务器安装多少zk 5台
50台服务器安装多少zk 7台
100台服务器安装多少zk 11台
100台服务器安装多少zk 11台

    zk台数越多好处:可靠性高;  坏处  效率低
4、常用命令
    create  get   ls   delete  deleteall

五、flume (三件事)
1、组成
1)taildir source
(1)断点续传、多目录
(2)CDH1.6 apache 1.7 => 自定义source 实现断点续传
(3)重复:
自身想方法 自己采用事务
兄弟帮忙:下游处理 hive dwd spark flink redis 建议采用

    2)channel
        (1)file channel     磁盘   可靠性高   效率低 
        
        
        (2)memory  channel  内存   可靠性低   效率高
        
        (3)kafka channel    kafka (磁盘)  可靠性高  效率 高 
            kafka channel 》 memory  channel  + kafka sink 
            
            apache 1.6版本产生的 当时没有火  1.7之后火了
            event(header ,body )
            
            在生产环境中怎么选择: 
            如果下游是kafka ,优先选择 kafka channel 
            如果下游不是kafka ,如果追求可靠性 选择flie channel   和钱相关的
                                如果追求效率,选择memory channel  普通的日志

    3)hdfs sink
        小文件 :  控制大小  128m 
                    控制时间 30分钟

2、三个器
    1)拦截器
        ETL拦截器。判断json是否完整
        可以不要,下游解析就可以。
        
        时间戳拦截器:解决零点漂移问题。
        
        自定义拦截器步骤:定义类 实现interceptor  重写四个方法  初始化、关闭、单event、多event
        静态内部类 builder 
        打包 上传到flume/lib  在配置文件中 全类名$builder

    2)选择器
        replicating  默认   把数据发往下一级所有通道
        
        mul ...  把数据选择性发往指定通道
    
    
    3)监控器
        g   如果发现 尝试提交的次数 远远的大于最终 成功的次数。  说明发生了回滚。
        
        增加flume内存
            flume-env.sh      4-6g   默认内存非常小
        
        找兄弟帮忙
            增加flume台数  
            
        日志服务器配置  8g  16g   32g 

3、挂了 及其优化
    挂了:
    如果是memory channel 有可能丢失数据  100个event
    
    优化:
    1)hdfs sink
        小文件 :  控制大小  128m 
                    控制时间 30分钟

    2)增加flume内存
            flume-env.sh      4-6g   默认内存非常小
        
        找兄弟帮忙
            增加flume台数  

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

2、与mysql 等关系数据库的区别
            mysql          hive 
数据量     小              大 
速度      小   增删改查    大   查询
除了语法接近以外,其他都不一样


3、内部表和外部表区别
    元数据   原始数据
 删除内部表:元数据   原始数据
 删除外部表:元数据   
 
 在企业中 绝大多数情况创建外部表;
 只有自己使用的临时表,会创建内部表。
    

4、4个by
    order by   全局排序  容易OOM
    sort  by   排序
    d  by    分区     sort  by  + d  by  => 分区内有序
    c by    用的比较少

5、系统函数
    date_add  date_sub  next_day  dateformat lastday
    get_json_object 
    split   substring 
    explode   concat   concat_ws  collect_list collect_set 
    map   array   string 


6、自定义函数
    1)UDF   一进一出  map  
        定义类  继承G..UDF   重写里面核心方法  evaluate
    

    2)UDTF   一进多出  flatmap
        定义类  继承G..UDTF  重写里面三个方法  初始化(校验返回值类型及名称)  关闭  process (核心逻辑)

    3)UDAF   多进一出  sum
    
    打包  上传到 HDFS路径 在hive客户端注册  如果自定义函数在脚本中出现,需要在自定义函数前面加上库名


7、窗口函数
    over ()
    rank
    
    手写代码  =》 http://139.198.163.91:8083/#/list

8、优化
    1)mapjoin默认打开不用关闭  大小表join 
    2)提前进行行列过滤 (谓词下推)
        join  where  =>  where  join 
    3)创建分区表,防止后续全表扫描
        创建分桶表,不是必须的。   是在 对海量未知的数据,提前采样,主要用来防止数据倾斜
    4)小文件处理
        (1)Combinehiveinputformat   => combinetextinputformat  
            将多个文件放到一起统一切片,减少了maptask的个数,进而减少了集群内存
        (2)JVM重用 =》 mr中 jvm重用 道理一致  本周减少JVM开关的时间
        (3)merge 如果maponly 任务默认打开,如果是mr任务需要手动打开。
            单独开启一个mr,将小于16m的文件合并到256m  
    5)采用压缩
        map (压缩 快  snappy)   reduce   减少磁盘IO
    6)列式存储
        id   name  age 
        1    zs    18
        2    lishi  19
    行:1    zs    18  2    lishi  19
    列:1  2   zs  lishi   18  19
    
    select  name from user 
     
     
    7)可以提前进行 combiner  at,1  at,1  => at,2
    
    8)合理的设置map个数和reduce个数 
       128m  数据 =》  1g内存    1CU   1CPU =》 4G内存
       
       map个数  =  切片个数   切片 =max (0, min(块大小,long的最大值))
       
       reduce个数   直接设置 
       
    9)更换引擎
        mr  => spark 

9、数据倾斜
    1)groupby   
        (1)map-side  开启  相当于在map阶段提前预聚合
        (2)开启 skewindata  在reduce阶段自动帮你 底层二次聚合
            (先加随机数 之后 将随机数去掉 再聚合)
    2)join  
        (1)如果是 大表 和小表join  =>mapjoin  
        (2)大表  大表 => skewjoin =true   默认 10万个相同key进入一个reduce 
        (3)大表  大表 =》 SMBjoin  要求两张表必须是 分桶 且有序的表
        (4)大表  大表 =》 不是分桶表   左表随机  右表扩容
        累积型快照事实表

10、杂七杂八

七、Kafka 33件事
1、组成 生产者 broker 消费者 zk 4张图
2、分区器分配策略:
1)如果指定了分区,那就把数据发送到指定的分区
2)如果没有指定分区,指定了key,按照key的hashcode值%分区数
3)如果没有指定分区,也没有指定key ,按照粘性分区处理
底层采用的是随机
3、acks 应答
1)0 生产者发送过来的数据,不需要应答,一直发送。在生产环境中几乎不用
2)1 生产者发送过来的数据 ,Leader收到后,进行应答
3)-1 生产者发送过来的数据,Leader和isr里面所有的Follower都收到后,应答。

4、isr 
    follower和Leader如果在规定的时间30s 能够正常通信一次,该follower就会加到isr里面
    
    超过30s,该follower会进入到osr 

5、如何保证数据可靠        
    acks = -1  + isr里面最小副本数 》=2  + 副本数大于等于2
    isr (Leader   follower) 有退化为acks=1

6、如何提高吞吐量
    1)32m缓存 =》 64m 
    2)批次大小默认16k => 32k 
    3)linger.ms  默认是0ms =>  5-100ms
    4)采用压缩  snappy   zstd
7、如何保证数据有序
    单分区内有序
    我希望 将mysql中某张表 发送到指定分区  key=表名
8、乱序问题
    inflightrequest = 1 
    幂等性 + inflightrequest 《=5 

9、重复数据处理
    幂等性  +  事务
    幂等性(《pid,分区号,序列号》)
    pid每次kafka重启后都会重新分配pid,  那也就是一旦kafka重启后,就不能保证数据不重复了
    
    幂等性只能保证  单会话内数据不重复。
    事务 (事务开启的前提是幂等性开启)  5个api 
        初始化事务、启动事务  、提交事务、事务终止、offset相关

10、Leader选举规则
    在isr里面活着,按照ar的顺序进行分配

11、Kafka底层怎么存储数据的
    1)segment 1g 
        .log  .index (稀疏索引  每4kb数据记录一条索引) .time ...
        
12、删除策略
    数据默认保存时间 7天
    1)delete 超期删除(segment中所有数据全部过期 删除)
    2)压缩  key v1 v2 v3  .... =>  key v1 

13、kafka如何做到高效读写的
    1)kafka本身是集群   同时支持分区
    2)采用稀疏索引   每4kb数据记录一条索引
    3)底层采用顺序读写  能达到  600m/s  
    4)零拷贝和页缓存

14、消费策略
    7个分区 3个消费者
    1)range
        针对某一个topic   
        如果topic数比较多 容易产生数据倾斜
    
    2)roundbin
        针对所有的topic 
        采用轮询的方式, 能够减少数据倾斜
    
    3)粘性 (协作者粘性)
    
    在企业中  range + 粘性
            roundbin + 粘性
            
    在触发再平衡后,粘性策略可以保证 不改变原来的消费分区。 性能要好一些
    
    
15、再平衡条件
    1)如果消费者 和消费者组协调器 通信时间超过 45s  会触发再平衡
    2)如果消费者 消费谋批数据的时间超过了  5分钟,会触发再平衡
16、每批次最大拉取的数据量 50m
    处理数据,一次最大处理500条
17、Kafka里面数据积压了怎么办
    1)增加分区数  同时要求消费者 增加 对应的CPU核数
    2)增加消费者  50m => 60m 
        每批次处理的条数   500条  =》 1000 -3000条
18、如何提高Kafka吞吐量
    1)32m缓存 =》 64m 
    2)批次大小默认16k => 32k 
    3)linger.ms  默认是0ms =>  5-100ms
    4)采用压缩  snappy   zstd
    
    1)增加分区数  同时要求消费者 增加 对应的CPU核数

     2)增加消费者  50m => 60m 
        每批次处理的条数   500条  =》 1000 -3000条

19、kafka消费数据时
    从头消费  --from-beginnging
    从当前最新位置消费  默认 
    我想从任意位置消费
        seek(offset 50)
20、可以按照时间进行消费
    可以将时间转换为offset    再调用 seek(offset 50)

21、安装多少台
    2 * (生产者峰值生产速率  * 副本 / 100)  + 1  =  3台
    
22、压测:生产者峰值生产速率、消费者峰值消费速率  
23、副本:默认副本 1个  =》  生产环境中 2-3 个   2个居多
    副本多 好处: 可靠性高   坏处:存储资源增加了  降到传输效率
24、速率 
    100万日活  每人每天产生  100条左右日志
    100万日活 * 100条 = 1亿条
    1亿条 / (24小时  *  3600s) = 1150条/s  
    1条日志多大   0.5k -2k  1k 
    
    1m/s    峰值速率    20m -30m/s 
                中午小高峰   7-12点
26、Kafka 默认保存 7天 =》  3天       1天 -》  3年

27、Kafka是否做了监控 
    kafka eagle   manager  montor 
    
28、kafka挂了怎么办?
    1)重启  zk 是否启动
    2)查看日志  磁盘不够(df -h )  查看内存 (jmap -heap )
                查看端口号(netstat )  查看CPU(top)
    3)如果是某个节点误删 了
        可以重写服役

29、硬盘选择
    选择机械硬盘  底层是顺序读写 可以 600m/s '

30、内存选择
   kafka 默认内存 1g  =》 10g -15g
   
   linux系统要留一部分内存 (页缓存)
31、网络带宽
    20m -30m/s 
    
    100m带宽  =》 12.5m/s 
    
    需要买千兆带宽
32、CPU核数选择
    建议 购买 32核 及以上的服务器
33、分区设置多少
    
    期望吞吐量  100m/s  t
    
    生产者峰值生产速率  20m/s tp
    消费者峰值消费速率  40m/s tc
    
    分区数 = t / min(tp, tc) = 100/ 20 = 5个分区
    
    企业中通常 3-10个分区
34、设置topic 
    进可能满足所有消费者    也要用适当的聚合操作

35、自动创建主题

36、Kafka单条日志传输大小 
    传输超过1m大小的日志  会卡住
    
    调整三个值大小 大于1m   2-10m 

八、maxwell
同步数据:
实时同步 : maxwell canal flink cdc ogg d...
批量同步 : datax sqoop
mysql =》 hdfs / kafka

1、为什么选择 maxwell 
    1)支持断点续传
    
2、 为什么不选择flink cdc 
    flink cdc 1.0  有bug   锁表  =》 2.0以上解决了这个问题  2022年初 才升级完毕。

3、maxwell 底层原理
    mysql 的主从复制   模拟的从表

九、datax
批量同步 : datax sqoop
1、为什么选择datax 阿里开源的一个版本
datax 底层: 一个进程 多个线程 单节点
datax处理的数据量 相对来说要小一些

    sqoop底层:4个map   分布式框架 
                sqoop 处理的数据量,相对来说要大一些
                sqoop  在apache中已经不在维护了。
                
    咱们属于中小公司,数据量不是很大 业务数据每天1-2g 

2、在使用datax过程中遇到哪些问题  怎么解决的
    空值问题
    mysql              hdfs/hive 
    null                \N   
            datax :改源码
                    让hive建表时候处理
            sqoop: 直接配置参数

    
    hive             mysql 
    \N                  null 
            datax :配置参数
            sqoop:配置参数
    
3、datax怎么调优的
    增加内存   增加线程数
    
4、datax每天同步多少数据
    业务数据:
    100万日活   =》 10万人下单(50-100元)   10万  *  10-20条日志 * 1k  = 1-2g  
                    加购、下单、支付、物流、
    
    每天同步时间:业务数据:00:10    同步   10-20分钟就结束了。

十、ds 海豚调度器
目前非常火(中国人参与的多一些) 当前最新版本 3.x (数据质量监控) 咱们上课用的 2.x

1、什么实时执行
    业务数据:00:10分  开始执行
    用户行为数据:00:30分 开始执行
    
2、调度器里面的指标挂了怎么办?
    集成故障报警:邮件、钉钉、微信、电话    睿象云(第三方报警平台)
    
    起床  =》  打开电脑 =》 远程连接公司服务器  =》  看一下任务  以及挂的日志
    =》 手动重写执行该任务  =》  是否有小文件、是否有数据倾斜。=》 
    如果短时间内不好解决,可以把该任务停止掉。 =》 第二天解决
3、调度器 自身挂了 
    重启 
    查看日志:
    检查磁盘、CPU、内存、。。。

4、调度器里面每天执行多少任务
    平时 不搞活动 100个左右
    如果搞活动  150-200之间 
    
    元旦、春节、元宵节、情人节(365天)、3.8、清明节、端午节、中秋节、5.1 6.1  7.1  8.1 10.1 
    1024  11.11  6.18   12.12   星期四   星期五  周末 

十一、spark
1、入门
1)spark是解决什么问题的? 海量数据的 计算问题
hadoop是解决海量数据的存储和计算

    2)spark为什么有自己的调度器  yarn  产生的比spark晚 
    
    3)spark的运行模式
        (1)local        本地调试  测试
        (2)standalone   在国内用的少  一般对效率要求比较高的场景
        (3)yarn         国内大量使用
        (4)m            不会 
        (5)k8s          是趋势  只不过目前bug非常多,不建议使用。
    4)常用端口号
        (1)4040  spark shell
        (2)7077   内部通信端口 8020/9000/9820
        (3)8080  8088任务调度
        (4)18080  19888 历史服务器
    
    5)手写spark wordcount   =》 flink wordcount 

2、sparkcore 
    1)代码是在哪运行的  D     E (和算子紧密相关的)
    2)rdd五大属性 一般在笔试题中出现
        (1)标记数据是哪个分区的
        (2)对数据计算  
        (3)分区器
        (4)血缘依赖
        (5)移动数据不如移动计算
    3)转换算子
        (1)单value
            map
            mapp
            mappw
            flatmap 
            filter 
            
            c            true   执行shuffle   false  不执行shffle   缩减分区
            repartition  true 执行shuffle  重新分区
        (2)双value
            交并差   zip  拉链
        (3)key value 
            partitionby 
            
            groupbykey      没有预聚合
            reducebykey     有预聚合
            
            reducebykey     没有初始值  分区内和分区间逻辑相同
            foldbykey       有初始值  分区内和分区间逻辑相同
            agg..bykey      有初始值  分区内和分区间逻辑可以不相同
            combinebykey    有初始值(可以变换结构)  分区内和分区间逻辑可以不相同
            
            sortbykey 
            mapvalues 

    4)行动算子
        take 
        first 
        collect 
        foreach 
        foreachp
    5)序列化
        KRYO
    6)血缘依赖
        有shuffle  宽依赖
        没有shuffle  窄依赖
    7)cache     不改变血缘     数据存储在内存 或者  磁盘中
        checkpoint  改变血缘   数据存储在 第三方数据库
        cache  + checkpoint 
    8)任务怎么切分的
        (1)app  spark context 
        (2)job   行动算子个数
        (3)stage   宽依赖个数 + 1 
        (4)task   每个阶段 最后一个算子对应的分区数
    9)广播变量
    
    10)累加器

3、sparkSQL
    1)rdd  df   ds  
    
    2)               元数据     计算引擎   语法
    hive on  spark   mysql        rdd        hive
    spark on hive   mysql       df  ds     spark      
    
    内置hive         derby  
    外置hive          mysql

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

5、内核 


6、优化
    hive on spark  
    
    数据倾斜:
        1)group by 
            (1)map-side 
            (2)skewindate
        
        2)join 
            (1)大小表  join  => mapjoin 
            (2)大表大表  skewjoin 
            (3)smbjoin (有条件:分桶有序表)
            (4)左表随机  右表扩容 
            (5)建模上 采用累积快照事实表
    
    小文件:
        1)combinehiveinputformat 
        2)merge  
    
    谓词下推
    CBO

十二、从0到1
现在我是项目经理 兼 产品经理 不懂大数据

招聘你来 负责大数据相关任务。

你给我出一套详细的解决方案。出计划的周期 3天。

1、具体需求
    统计日活、新增、留存 等需求   

2、数据 业务数据mysql
    用户行为数据  文件 日志服务器 

3、目前就你1个 
    你可以招聘
4、预算  50万元

5、前期离线 兼顾实时

6、平时每天  100g左右数据

7、项目周期   1个月(3个月 -6个月)  建模(2周的数据调研  搭建  2-3天  =》  2-3天写sql =>  其他预留时间)

8、数据保存多久  3年

苟富贵勿相忘

标签:10,分区,note2,kafka,内存,spark,数据
From: https://www.cnblogs.com/siyenvwang/p/18288952

相关文章

  • FlutterNote2
    Flutter布局水平布局body:Row()中间内容比如说要放上按钮,直接new一个RaisedButton,它的宽高是固定的,如果在它外面套上一个Expanded(),子元素再放按钮,就能达到自适应长度的效果,不至于边上漏出一块白的那么丑。注意expanded与不加expanded的混合使用。垂直布局body:Col......
  • mac版 endnote20无法导入文献到word怎么解决
    EndNote20formac是一款Mac首屈一指的文献编辑工具,作为一名研究人员,您经常处理不同的角色,处理对时间的竞争要求,并且不仅要协调您自己的出版研究活动,还要协调您的合作者,在......
  • Review-python-note2
    Note2-bodyandstructure标签(空格分隔):pythonLearningtechniquesAssumingyouareplaying<<callofduty>>andneedgothroughonedifficultscenewhere......