待续: Hadoop shuffle流程
Hive调优
kafka 数据重复和数据乱序:幂等性
flume调优
监控
hadoop
0.什么是hadoo
Hadoop是一个分布式系统基础架构,解决数据存储和数据分析计算的问题
1.hadoop三大框架及作用
1.HDFS:数据的存储
2.Mapreduce:数据的计算
3.YARN :给计算框架分配资源
2.HDFS读流程
1.Client 调用 FS.ope与NN通信,
NN以FSDataInputS返回部分或全部的block列表
2.Client调用FSDataInputS.read
去第一个块最近的DN读取
读取完成,check,若ok关闭DN通信
读取失败,记录DN和block
下次不再从这个节点读取,找第二个节点
3.当block读取完,文件未读取完,则调用下一批block
4.Client调用FSDataInputS.close关闭输入流
3.HDFS写流程
1.Client调用FS.create方法和nn通信,
检查是否路径文件是否存在,
检查是否有权限去创建
检查通过创建文件
2.nn根据文件大小,块大小,副本数参数】
计算块的数量,和存储DN位置,
返回给FSOutS
3.Client调用FSOutS.write方法
将第一个块的第一个副本写在第一个DN上
在第二个DN写第二副本
在第三个DN写第三副本
4.当第三个副本写完,返回一个ack包给DN2节点
DN2也写完返回一个ack包给DN1
DN1也写完返回一个ack包给FSOuts
5.重复流程直到所有块写完,client调用
FSOutS的close,告诉NN,文件写完
4.yarn流程
1.client向RM提交job,申请job_id
2.RM返回job_id和作业的路径给client
3.client将数据提交到指定路径
4.client向RM提交执行作业请求
5.RM 创建一个Appmaster管理该job
6.Appmaster将该job添加到ResourceScheduler
7.到该job执行时,ResourceScheduler通知Appmaster有一个空闲的NM
8.Appmaster启动NM,让NM开辟容器,并启动job对应的Appmaster
9.Appmaster获取HDFS的文件
10.Appmaster向RM申请运行资源
11.RM分配task任务,NM创建用于执行task的容器
12.Appmaster通知NM启动计算
13.NM计算,并执行后续的task
14.Appmaster向RM申请注销
5.Mapreduce流程
1.map task
1.读取数据,对文件切片得到spilt
2.执行map逻辑
3.对结果进行分区
4.将结果写入buffer,等待reduce task
2.reduce task
1.拉取maptask产生的数据到内存缓存区
2.合并排序
3.对排序后的数据调用reduce方法
4.将结果写入到hdfs文件
6.yarn的调度器
1.单行调度器 fifo
2. 容量调度器
3. 公平调度器
7.副本放置策略
1.第一个副本
1.放置在client的DN上
2.client不在DN上,随机选择一个DN
2.第二个副本放置在第一个副本不同机架的DN上
3.第三个副本放置在第二个副本相同机架不同DN
4.4个以上随机放置
8.task个数
1.输入文件的个数与大小
2.split与block的关系来决定
9.hdfs小文件产生原因及解决
原因:reduce 数量越多,小文件也越多,reduce 的个数和输出文件个数一致
1.Hadoop Archive(HAR)
2.小文件合并
10.shuffle流程
0.Map 方法之后Reduce 方法之前这段处理过程叫Shuffle
1.
hive
0.hive是什么
hive是基于Hadoop的一个数据仓库工具,
提供完整的sql查询功能,
可以将sql语句转换为MapReduce任务进行运行
1.4个by
1.order by:全局排序
2.sort by:分区排序
3.Distribute By 数据分发
4.Cluster By:数据分发排序+分区排序
2.数据倾斜原因并解决
0.原因:数据分布不均,造成大量数据集中到一点,造成数据热点
1.group by导致的数据倾斜:将倾斜的key加前后缀
2.join导致的数据倾斜:将倾斜的key与未倾斜的join分开
倾斜key就会分散到多个task去进行join操作
3.Hive 小文件过多怎么解决
1. hive 自带的 concatenate
2.调整参数减少Map数量
4.Hive内部表和外部表的区别
Hive删除内部表时,内部表的元数据和数据会一起被删除
Hive删除外部表时,不删除数据,只删除元数据
5.三种排序的区别
1.ROW_NUMBER() 会根据顺序计算
2.DENSE_RANK() 排序相同时会重复,总数会减少
3.RANK() 排序相同时会重复,总数不会变
6.Hive调优
spark
0.什么是spark及特点
1.saprk流程
2.血缘关系
1.一个rdd是如何从父rdd计算得来的
2.每个转换都会形成一个rdd
3.好处:容错:
1.性能
2.容错
当子rdd中的一个分区数据挂了,只需从父rdd对应的分区重新计算
3.宽窄依赖,如何划分stage,决定task个数
1.宽依赖
1.一个父rdd的paritition至多被子rdd的partition使用多次
2.会产生shuffle 会有新的stage产生
2.窄依赖
1.一个父rdd的paritition至多被子rdd的partition使用一次
2.在一个stage里完成
3.产生宽依赖
一个shuffle算子会划分两个stage
4.Task的数量 = RDD的分区数
4.reduceByKey与groupByKey的区别
1.reduceByKey:按照key进行聚合,在shuffle之前有combine(预聚合)操作,返回结果是RDD[k,v]。
2.groupByKey:按照key进行分组,直接进行shuffle
3.所以,在实际开发过程中,reduceByKey比groupByKey,更建议使用。但是需要注意是否会影响业务逻辑。
5.checkpoint
1.checkpoint有问题,小文件多,修改业务逻辑代码后不能使用
5.spark五大特性
1. rdd底层存储一系列partition
2.针对rdd计算/操作就是对rdd底层的partition进行计算/操作
3.rdd之间的依赖关系(血缘关系)
4.默认分区是:hash分区
元素% 分区数 = 分区号
5.数据本地性=》 减少数据传输的网络io
7.spark on hive 和 hive on spark
1.hive on spark:hive查询引擎是spark
2.spark on hive:sparksql去hive上查询数据【hive引擎是mr】
8.什么是rdd
1.弹性分布式数据集
2.弹性:容错=》可以重试
3.数据集:partitoins(分区)
构建rdd本身的数据是一条一条的数据
4.分布式:rdd可以被分区存储/计算的
一个rdd由多个partitions所构成
rdd数据存储是分布式的,是跨节点进行存储的
9.df和ds
1.DataFrame也可以叫Dataset[Row],每一行的类型是Row,
2.Dataset中,每一行是什么类型是不一定的
10.减少Spark运行中的数据库连接数
使用foreachPartition代替foreach
11.Spark Streaming第一次运行不丢失数据
12.spark流程
1.sparkcontext 去连接 cluster manager
2.cluster manager 给spark作业分配资源
3.sparkcontext 连接到cluster manager后,启动executor负责计算,存储数据
4.sparkcontext发送代码给executor,发送task给exectuor去执行
13.spark提交到yarn
1.client:
提交作业 如果client关闭了 driver进程挂了
对spark作业有影响
2.cluster:
提交作业 client作业提交完后client就可以关闭了
对spark作业无影响
kafka
0.什么是kafka
是一个分布式流式计算平台,也是它是一个分布式消息队列
1.消费者和消费者组,topic和partition的关系
1.消费者属于消费者组,多个消费者组成一个消费者组
2.一个topic可以划分为多个partition
3.在同一个消费组内,一个消费者可以消费一个或多个partition,
4.在同一个消费者组内,一个partition只能被一个消费者消费.
5.在同一个消费者组内,所有消费者组合起来必定可以消费一个 Topic 下的所有 Partition
6.在不同消费者组内,同一个分区可以被多个消费者消费
7.每个消费者组一定会完整消费一个Topic下的所有 Partition
2.交付语义
1.至多一次
2.至少一次
3.精准一次
3.数据丢失
设置数据可靠性级别 request.required.ack=-1
auto.commit.enable=false 设置手动提交
4.数据重复和数据乱序
1.幂等性
flume
0.什么是flume
Flume是一个分布式、可靠和高可用的海量日志采集、聚合和传输的系统
1.flume的核心概念组件及作用
1.核心概念:编写agent的配置
2. source:采集数据
channel:存储数据
sink:发送数据
2.四种source的作用
1.netcat 端口采集
2.exet 文件采集(
3.spooldir 文件夹采集
4.taidir 文件和文件夹采集
3.sink 负载和均衡的含义
1.负载:当主输出口出现问题是由副输出口代替,
当主输出口恢复后,继续由主输出口输出
2.均衡:配置多个并列的输出口,有轮换 和随机两种模式
可以减轻 sink压力
4.Flume采集数据会丢失吗
1.不会
5.解决小文件
1.hdfs.rollInterval =》 按照时间滚动(秒)
2.hdfs.rollSize => 按照文件大小 (134,217,728 =》 128G)
3.hdfs.rollCount => 按照hdfs文件数据条数 (条)
6.调优
linux
1.Linux的五条命令和作用
1.ln -s 软连接
2.yum install -y 下载
3.监控 tail -F
4。别名 alias
5.grep 过滤
2.环境变量的位置
1.所有用户环境变量:/ect/profile
2.个人环境变量: ~/.bashrc
3.无法启动别名的原因
1.未配置当前别名 可用 which is alias_name 查看
2.未使别名生效,未配置环境变量 可用whereis alias_name 查看
4.查端口
ps -ef|grep did
netstat -npl|grep httpd
5.内网ip
inconfig
6.生产空文件
1.echo /dev/null >xxx.log
2.vim xxx.log
3.gg+dG
7.查看文件和文件夹大小
1.查看文件大小 1.ls -h
2.du -h
2.查看文件夹大小:du -h
shell
0.什么是shell
shell是用Linux命令编辑成的普通文件
1.awk和sed的作用
awk:按行或列输出
sed:替换
2.$0,$1,$#,$$ 的意义
$0:文件名
$1:第一个参数
$#:所有变量的个数
$$:将所有变量变成字符串进行输出
sql
0.什么是sql
SQL 是一种数据库查询和程序设计语言,
用于存取数据以及查询、更新和管理关系数据库系统
1.数据清洗(nvl)
1.ifnull
2.colease
3.where col_name is not null
3.sql的三大类型
1.ddl 数据定义语言
2.dml 数据操作语言
3.dcl 数据控制语言
4.多表联查
1.左链接: left join
以左表为基准,有就拼接没有就是null
2.右链接:right join
以右表为基准,有就拼接没有就是null
3.内链接:inner join
左,右表都有的数据进行拼接
4.全链接 full join
左,右表所有数据进行拼接,有就拼接没有就是null
5.union和unionall的区别
1.union 去重
2.union all 不去重
6.drop,delete,truncate的区别
1.drop 删除表
2.delete 删除数据库
3.truncate 清空表中数据
监控
flume:监控channel
1.http监控
2.ganglia
kafka: 1.自带KafkaManager
2.Kafka Eagle