首页 > 其他分享 >note1

note1

时间:2024-07-07 21:31:47浏览次数:4  
标签:note1 分区 默认 kafka 内存 数据 channel

一、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 

标签:note1,分区,默认,kafka,内存,数据,channel
From: https://www.cnblogs.com/siyenvwang/p/18288950

相关文章

  • Note1 基于MNE实现脑电信号的源定位(重建或成像)
    写在最前最开始接触mne还是在20年,那时候它的版本才刚刚开发到0.21。几年过去他的正式版都已经发布了,而我还依旧是一个学术小白orz。简单调研一下,发现网上关于mne的教程不多,看到脑机接口社区有推出一系列的epoch的mne教程,几位大佬撰写的mne中文手册,另外还有收费培训班。但作为情......
  • FlutterNote1
    Flutter基本结构以一个helloworld程序展示一个flutter应用的基本结构。import'package:flutter/material.dart';voidmain()=>runApp(Myapp());classMyappextendsStatelessWidget{@overrideWidgetbuild(BuildContextcontext){......
  • note1
    C语言2024程序的作用是完成某种计算数据类型数据类型分类关键字常量常量是指在程序运行过程中,其值不发生改变的量;常量又可分为整型、实型(浮点型)、字符型和字符串型。变量变......
  • 荣耀note10开发者选项在哪
     第一步:首先打开手机桌面的【设置】,找到【系统】选项点击打开第二步:在系统界面,点击【关于手机】,找到【版本号】,然后点击该选项5-7下即可开启开发者模......
  • Review-python-Note1
    Note1标签:python目录Note1learningtechniques1.format1.1comment1.2lineandindence2.number2.1howmanytypesofnumberdoesamethematicalcalculatormayh......