Hadoop+Kafka相关重点复习

一、Linux

1、常用高级命令

Top:查看CPU使用情况(系统内存)

Iotop:查看磁盘IO使用情况

ps -ef :查看服务器进程信息      

df -h:显示磁盘分区使用情况

netstat:查看端口号       

rpm:安装软件包

tar:解压缩

jmap-heap:查看某一个进程对应的内存

distcp:集群间数据迁移

scp :节点之间数据迁移

二、shell

1、用过哪些工具

awk、sed、sort、cut、<python>

2、写过的shell脚本

1)分发脚本

2)启停脚本<重点>

#!/bin/bash

case $1 in

"start")

for i in hadoop102 hadoop103 hadoop104

do

ssh $i " 绝对路径"

done

;;

"stop")

do

ssh $i "绝对路径"

done

;;

esac

3)数仓中数据导入和导出脚本

        mySQL -> hdfs <datax>

hdfs -> mySQL <datax>

4)数仓层级内部

ods -> ads (5步)

3、单引号('')和双引号("")

'' :不解析里面变量的值

"":解析里面变量的值

两者嵌套使用:谁在外面谁起作用

三、hadoop

1、入门

1)常用端口号:3.x:9870(hdfs),8088(yarn),19888(历史服务器),9820/9000/8020(内部通讯)

2)常用配置文件:core_site.xml        hdfs_site.xml        mapred_site.xml        yarn_site.xml        workers

2、HDFS

1)hdfs读写流程(笔试题):

2)小文件(面试题):危害:

a.存储:影响namenode的存储,一个文件的元数据大约150字节

b.计算:默认情况会对每个文件单独切片,一个文件需要一个maptask

3) 小文件怎么处理:a.CombineTextInputFormat:可以把多个小文件放在一起统一切片

         b.har归档:多个小文件打包成块

        c.jvm重用:开启一个jvm进程之后一直处理小文件不关闭

4)副本数:3个

5)块大小:1.x:64m

                        2.x:128

                本地模式:32m

                企业中:128m,256m,512m (根据磁盘读写速度而定)

3、MR

        shuffle:横跨map和reduce,混写的过程为shuffle

        数据进来先getpartition进行分区,方便后续处理

        然后进入环形缓冲区:100m,80%(可以提高为200m,90%)

        出缓冲区之后对key进行<快速>排序,产生大量溢写文件

         将数据按照分区不同进行归并,在内存中完成,然后将数据溢写到磁盘,map阶段结束

        reduce阶段开始:拉取指定分区的数据,放入内存中,内存不够用放入磁盘,然后将数据进行归并排序(拉去过来的数据都是有序的,无序的数据使用快排),然后放入reduce方法中

优化:a.getpartition阶段自定义分区处理数据倾斜  b.环形缓冲区优化 c.溢写文件归并过程,调整溢写文件个数(默认10个),d.溢写文件预聚合,不能影响最终业务逻辑(不能求平均值)e.减少磁盘io,使用压缩,f.reduce拉取文件个数调整

4、yarn

1)yarn的工作机制:

client(客户端)

2)有哪些调度器:

默认调度器,FIFO调度器,容量调度器(资源不够可以借,优先保证先进来的任务),公平调度器(也可以借,按缺额分配资源)

3)实际生产中:如果要求并行度比较高(中大型公司):公平调度器

        如果要求并行度比较低(中小公司):容量调度器

4)默认几个队列:

默认一个default队列,需要用户创建,按照框架分:hive,spark,flink

提交一个递归死循环/rm -rf / 6.18,11.11

因此企业中会按照部门进行创建队列,降级使用

四、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,delete all

***Paxos算法和ZAB协议(扩展)

zookeeper底层使用的就是ZAB协议

***什么是CAP法则,zookeeper符合这个法则的那两个(扩展)

一致性(C),可用性(A),分区容错性(P)

zookeeper满足CP,在zookeeper其中一个节点挂掉之后重新选举之间无法使用,因此不满足可用性

***zookeeper选举机制:a.第一次选举:第一个和第二个来个先给自己投票,都不满足超过半数,进入等待,第三台来了前两台加第三台共三票,选举成功为leader

b.leader挂掉之后的重新选举:SID:服务器ID,和myid一样,ZXID:事务ID,用来标识一次服务器状态的变更,Epoch:每个Leader任期的代号,先比较Epoch,然后比较事务ID,最后比较myID

五、Flume(三件事)

1、组成

1)taildir sourse:a:断点续传,多目录b:对应版本:Apache1.7,cdh1.6产生 c.可能产生重复数据:可以加一个事务(不推荐,影响效率),也可以在下游处理,hive-dwd,redis,spark,flink

2)channel

a.file channel :基于磁盘。可靠性高,效率低(和钱有关)

b.memory channel:基于内存,可靠性低,效率高(日志文件)

c.kafka chanel:基于磁盘,可靠性高,效率高(下游是kafka)

3)hdfs sink:小文件

        先控制大小在128m,然后控制时间30分钟,event个数禁止掉(0)

2、三个器

1)拦截器:ETL拦截器:json不完整的数据过滤掉,时间戳拦截器:零点漂移问题,数据落盘按照时间落盘,数据处理过程有延迟 自定义拦截器步骤:定义类,实现interceptor接口,重写4个方法,单event,多event,初始化、关闭,静态内部类builder,打包上传,配置文件

2)选择器

a.re... 把数据发送下一级所有通道

b.mu...把数据选择性发往指定通道

3)监控器

g 监控put,take,事务 尝试提交的次数,如果尝试次数远远大于成功次数,说明flume异常,增加flume内存(flume-env.sh4-6g),增加flume台数 

日志服务器的配置:8g,16g 

3、挂了及优化

source和sink有事务机制,不会丢失数据

channel如果是memory channel,有丢失数据的风险

小文件相关优化

增加flume内存(flume-env.sh4-6g),增加flume台数 

六、kafka(重点:hive,kafka,spark,flink ,ck)

1、组成:生产者,broker,消费者,zk

2、安装多少台:2*(生产者峰值生产速率*副本数/100)+1 =3台

3、压测:得到生产者峰值生产速率,生产者峰值消费速率

4、副本:生产环境一般两个副本

        副本多的好处:可靠性高,坏处:占用存储空间,影响通信效率

5、传输速率:100万日活*100条日志=1亿条数据

        1亿/(24小时*3600s)= 1150条/s

        一条日志(0.5k-2k) ->1k    1m/s

小峰值:中午,大峰值,晚上,是平时的20倍:20-30m/s

6:选择服务器:硬盘(固态,机械):kafka底层是顺序读写,两者顺序读写速度几乎一样,600m/s,所以选择机械硬盘

7、网络带宽:20-30m/s:千兆带宽:125m/s

8、cpu选择:越多越好,20核40线程的服务器,单独部署

9、内存:启动脚本里面可以调整内存:默认1g,生产环境调整为10-15g

10、分区数:增加分区可以增加并行度,峰值生产速率:20m/s,消费速率:40m/s

期望达到:100m/s,分区数= 100/(min(20,40)) = 5个分区

企业中一般设置3-10个分区,**只能增加,不能减少**

11、kafka是否做了监控:kafka eagle (manager,montor)

12、分区器:如果制定了分区,发送到指定分区,没有指定分区,制定了key,按照key的hashcode值%分区数进行分区,既没有指定分区,也没有 指定key,按照粘性分区

13、生产者如何提高吞吐量:

32m缓存 ==》64m

16k批次大小 ==》 32k

linger.ms ==》 0 =》 5-100ms

压缩:snappy,zstd,gzip

14、如何保证数据不丢:

acks:-1+ 副本数大于等于2+isr里面最小副本数大于等于2

15、保证数据不重复:

幂等性(pid,分区,序列号)+事务

acks:-1+ 副本数大于等于2+isr里面最小副本数大于等于2

16、保证数据有序:单分区数据有序

17、会不会乱序:inflight默认=5,缓存5个元数据

        如果没有幂等性,设置inflight =1,如果开启了幂等性,inflight<=5 ,乱序的元数据不会落盘

18、kafka底层怎么高效读写:

1)kafka本身是集群,并行度高,可以增加分区

2)index稀疏索引,4k数据做一个索引

3)顺序读写600m/s

4)零拷贝+页缓存技术(重点)

19、删除数据策略:

delete(常用),压缩(保存最新)

20、消费者:主动拉取数据

21、消费策略:range(每个topic消费策略相同)

        roundin(大的轮询,每个topic消费策略不同,避免数据倾斜)

        粘性:出现故障后保证原先分区不动

topic数较少:粘性+range

topic数较大:粘性+roundin

22、触发再平衡条件

消费者会每隔3s和消费者组协调器通讯一次,如果通讯时间超过45s,会认为消费者挂掉了,就会把他的任务分配给别的消费者,

另一点:消费者消费一批数据超过5分钟还没消费完,也会认为挂掉了,触发再平衡

23、可以指定消费者消费位置:seek

24、可以按照时间指定消费位置

25、如何提高整个kafka的吞吐量

生产者:

32m缓存 ==》64m

16k批次大小 ==》 32k

linger.ms ==》 0 =》 5-100ms

压缩:snappy,zstd,gzip

broker:增加分区 ,对应的要增加消费者cpu核数

消费者:增加每批次处理的数据量,默认500 =》 1000-5000

        最大数据量 默认50m =》 60m

26、kafka topic设置多少个合适

满足下一级消费者所有需求,同时也要适当聚合

27、传输大于1m的日志,会出现什么情况(重点)

kafka会卡住

kafka处理单条日志的上限:1m

28、默认保存时间:7天。生产环境:3天

29、kafka挂了:

1)重启(内存,磁盘,网络带宽)

2)误删:采用服役流程,先退役,再服役

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是在阿里云服务器上搭建HadoopKafka、JDK环境的步骤: 1. 安装JDK 在阿里云服务器上下载JDK安装包,解压后配置环境变量。可以使用以下命令检查JDK是否安装成功: ``` java -version ``` 2. 安装Hadoop 在阿里云服务器上下载Hadoop安装包,解压后配置环境变量。配置Hadoop的环境变量需要在.bashrc文件中添加以下内容: ``` export HADOOP_HOME=/path/to/hadoop export PATH=$PATH:$HADOOP_HOME/bin ``` 然后使用以下命令检查Hadoop是否安装成功: ``` hadoop version ``` 3. 安装Kafka 在阿里云服务器上下载Kafka安装包,解压后配置环境变量。配置Kafka的环境变量需要在.bashrc文件中添加以下内容: ``` export KAFKA_HOME=/path/to/kafka export PATH=$PATH:$KAFKA_HOME/bin ``` 然后使用以下命令检查Kafka是否安装成功: ``` kafka-topics.sh --list --zookeeper localhost:2181 ``` 4. 配置HadoopKafkaHadoop的配置文件中,需要添加Kafka的jar包路径到Hadoop的CLASSPATH中。可以使用以下命令将Kafka的jar包添加到CLASSPATH中: ``` export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:/path/to/kafka/libs/kafka-clients-2.8.0.jar:/path/to/kafka/libs/kafka_2.13-2.8.0.jar ``` 在Kafka的配置文件中,需要添加Hadoop的jar包路径到Kafka的CLASSPATH中。可以使用以下命令将Hadoop的jar包添加到CLASSPATH中: ``` export CLASSPATH=$CLASSPATH:/path/to/hadoop/share/hadoop/common/hadoop-common-3.3.1.jar:/path/to/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-client-core-3.3.1.jar ``` 5. 启动HadoopKafka 使用以下命令启动Hadoop: ``` start-dfs.sh start-yarn.sh ``` 使用以下命令启动Kafka: ``` zookeeper-server-start.sh -daemon /path/to/kafka/config/zookeeper.properties kafka-server-start.sh -daemon /path/to/kafka/config/server.properties ``` 现在,您已经在阿里云服务器上成功搭建了HadoopKafka和JDK环境。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值