大数据面试前的总体准备(一)

2 篇文章 0 订阅
2 篇文章 0 订阅

咱们学了这么久的大数据了,也改到面试的时候了。那么我们该怎么去面试呢?我觉得不论你学多少面试技巧,你的基本能力不到位那是不可能要你的,因为你总得去干活吧,不会怎么去干活呢?所以我打算从头过一遍咱们的所有知识,来,不多bb!淦!

(一)Hadoop

Hadoop:HDFS/YARN/MapReduce
简单概述
HDFS:
NameNode
DataNode
SecondaryNameNode
概念:
Client
NN :一个,Single Point of Failure(单点问题,如果挂了,就一个,那就没了) ===》HA
metadata:谁创建 权限 文件对应的block的信息
DN :多个
存储数据
和NN之间是有心跳的

    Block:File存入HDFS,是按照block进行拆分   128M
	
	生产上东西一定是要保证高可用的! 
				  HDFS  YARN。。。
	RM HA 
				但是但是但是:起不来
				SLA如何保证???  99.99%  99.95%   99.9%
	NN HA
				 也有这个问题吗?因为小文件问题

	Hadoop适合大文件
	
	小文件
				 明显小于block size的文件  80%
				 129M:128M+1M

	Hadoop中的目录、文件、block都会以元数据的方式存储下来的(200字节)

常用的SQL on Hadoop框架
Hive:sql==>对应的SQL转换成执行引擎的作业:MapReduce/Spark/Tez
Impala:内存必须够
Presto:JD
Drill:
Phoenix:HBase(rowkey)
Spark SQL:

MetaStore:存储元数据信息
框架之间是共享元数据信息的

Hive on Spark:HIVE社区
Spark SQL:spark社区

调优策略(调优:在资源不变的前提下,让作业的执行性能有提升;有两大类:CPU负载、IO负载)
(前提:1.行式存储2.每分钟2亿条数据3.500个作业访问这个大表)
1.架构
分表(将一个大表中的某些字段抽取出来,重新建个表将数据放入)
分区表 partition,如对于年月日分区,
充分利用中间结果表(比如原本是select a,b,c, from XXX where…
select a,b from XXX…
select a,c from XXX…
可以create table A as select a,b,c,d from … where

压缩:在大数据中的使用场景(1.输入数据2.中间数据3.输出数据)
压缩技术分为有损和无损:大数据场景下我们用到的都是无损;不允许丢失数据
好处:
节省我们的磁盘空间,提升磁盘利用率
降低IO(网络的IO和磁盘的IO)
加快数据在磁盘和网络中的传输速度,从而提高系统的处理速度
缺点:
由于使用数据时,需要先将数据解压,加重CPU负荷;所以如果整个集群cpu利用率非常高,不要开压缩;
若集群负载不高,强烈建议开压缩!在这里插入图片描述
在这里插入图片描述
map要能分片(split)的压缩
中间shuffle要快的压缩
reduce要压缩比高了,因为节省磁盘空间

2.语法
排序:order by(严格模式和非严格模式,全局排序)/sort by(只能保证每个reduce内部是有序的,不能保证全局是有序的 )/distribute by(按照指定的字段把数据分散到不同的reduce里面去)/cluster by
控制输出(reduce/partition/task)的数量
join:普通join/mapjoin
在这里插入图片描述
3.执行
推测执行
并行执行
JVM重要
在这里插入图片描述

在这里插入图片描述

HDFS读取流程

在这里插入图片描述

HDFS写入流程

在这里插入图片描述切记:写入时要切分文件,读取时要合并文件

HDFS-HA架构

在这里插入图片描述
总结:如果真的只有一个NN,挂掉的话,重启耽误时间,不知道会重启多久,如果里面的块比较多的话,要慢慢加载的。
所以要有两个NN,一个Active NN和一个Standby NN,同一时间上一个NN处于活跃状态,一个NN处于备份状态,两个NN之间一定要同步,否则a挂了,s没法提供服务。那么两个NN之间又怎么进行切换的呢?通过zookeper进行监控,然后进行状态的切换。

什么是小文件
小文件定义
明显小于block size的文件 80%
129M:128M+1M
为什么会有小文件
1.做批处理或者是离线计算的时候,默认会有小文件,特别是用spark处理时,会有非常非常多的小文件。
2.拷贝数据,如果数据源上已经有非常非常多的小的文件了,你在把他丢到HDFS上,不管是你手工搬过去的还是flume采集过去的,都会有这种小文件产生。
3.在MapReduce作业或者spark作业的时候,你的reduce没有做很好的设置。因为reduce是决定了你文件输出的个数的,而对于spark来说它的partition数量就决定了输出的文件的多少,这两者如果没有(在shuffle)做到很好的设置,就会产生很多小文件。

所以小文件一定要想办法规避

这里要提一下什么是flume

什么是flume

一个分布式、可靠、和高可用的海量日志采集、聚合和传输的系统
flume可以收集的数据: socket数据包、文件、文件夹、kafka等
flume可以收集的数据: hdfs 、hive 、hbase ,kafka
举例说明:扫地机器人、收快递的人员,吸尘器、扫码枪
Flume内部组成
1、 Source :与数据源对接,用于采集、收集数据
2、Channel : 用于数据传输(在flumeAgent内部)
3、Sink : 用户数据的发送 或数据下沉(在flumeAgent内部)
在这里插入图片描述
在这里插入图片描述

小文件给Hadoop集群带来的瓶颈问题
在这里插入图片描述
磁盘的IO问题
task启动销毁的开销
资源有限

那么这个瓶颈问题该如何解决呢?(自己去想办法)

HDFS 特性
1、 存储海量数据:HDFS可横向扩展,其存储的文件可以支持PB级数据
2、容错性高:数据保存多个副本,副本丢失后自动恢复。
可构建在廉价(与小型机大型机对比)的机器上,实现线性扩展。(随着节点数量的增加,集群的性能-计算性能和
存储性能都会有所增加)
当集群增加新节点之后,namenode也可以感知,进行负载均衡,将数据分发和备份数据均衡到新的节点上。(负载
均衡:集群可将原本使用容量较高的节点上的数据自动写入新的节点上,达到所有节点容量均匀)每个节点磁盘使用
容量百分比的差异可以人工设置。
3、大文件存储: 数据分块存储,将一个大块的数据切分成多个小块的数据。
HDFS缺点
1、不能做到低延迟数据访问:HDFS针对一次性获取大量的数据做了优化,牺牲了小数据量快速查询的性能。
2、多次写入,一次读取(擅长:HDFS适合一次写入,多次读取的场景。)
3、不支持多用户的并行写
4、不适合大量的小文件存储
A: 由于namenode将文件系统的元数据存储在内存中,因此该文件系统所能存储的文件总数受限于namenode的内
存容量。
B: 元数据信息中每个文件、目录和数据块的存储信息大约占150字节。(1G 数据存储的元数据信息占用150字节 ,
1M的数据元数据信息占用150字节)
受限于内存,元数据信息的存储机制导致无论数据多大,元数据信息中描述这个数据的信息都是150字节

hadoop 视硬件设备经常损坏为常态,为了防止硬件损坏导致系统不可用,所
以构建多副本机制。
HDFS高级命令
特定文件夹下的副本数可以设置、存储容量可以设置,存储的文件个数可以设置。
设置文件夹内数据的个数: hdfs dfsadmin -setQuota 50 lisi (lisi 本身算一个 最多可上传49个)
清除文件数量限制 hdfs dfsadmin -clrQuota /user/root/lisi
限制空间大小 hdfs dfsadmin -setSpaceQuota 100M /user/root/lisi (最多可以存储100M)
清除空间限额 hdfs dfsadmin -clrSpaceQuota /user/root/lisi
查看hdfs文件限额数量 hdfs dfs -count -q -h /user/root/lisi
HDFS 安全模式(safemode) 是HDFS一种特殊状态,该状态下 只允许数据读取,不允许数据的修改与添加等变更操作。
什么时候进入安全模式:集群重新启动的时候进入安全模式。
安全模式下多了什么:DataNode在启动的时候会向namenode汇报可用的block等状态。
如何查看集群当前的状态: hdfs dfsadmin -safemode get
如何进入安全模式:hdfs dfsadmin -safemode enter
如何退出安全模式:hdfs dfsadmin -safemode leave
Fsimage,Edits
NameNode在工作时生成Fsimage,Edits两个文件
Fsimage 文件系统的快照,这个文件相对较小
Edits 记录客户端对集群的所有添加、删除、修改等操作,这个文件相对较大。
作用:用于恢复集群到关闭前的状态。开机时系统会将这两个文件加载到内存,进行合并恢复。
合并:将Fsimage Edits两个文件合并成一个Fsimage.(恢复完后Edits失效)
HDFS配置选项
dfs.namenode.name.dir 设置fsimage 数据的存放路径
dfs.namenode.edits.dir 设置edits数据的存放路径
将edits文件转换成XML
hdfs oev -i edits_0000000000000000416-0000000000000000418 -p XML -o test002.xml
将Fsimage文件转换成XML
hdfs oiv -i fsimage_0000000000000000418 -p XML -o test001.xml
secondarynameNode工作原理(意义)
前提:未使用secondarynameNode时,NameNode工作中会产生fsimage 和edtes,edits日志过大,直接导致集群
二次开机恢复原本状态过慢,引起开机时间过长。
secondarynameNode存在的意义就是加快集群二次启动的速度(减小集群二次启动的时间)
secondarynameNode原理(如何帮助NameNode 周期性在NameNode节点拷贝fsimage 和edtes 到自己的节点
上,进行合并,合并后生成全新的FSimage,最后将FSimage发送回NameNode.)
secondarynameNode最好是一个独立的节点, 此节点的配置最好与NameNode 相同。
触发secondarynameNode合并文件的条件
1、时间维度, 默认一小时合并一次 , 人为设置使用如下参数
dfs.namenode.checkpoint.period :3600
2、次数维度,默认100W次合并一次。人为设置使用如下参数
dfs.namenode.checkpoint.txns : 1000000
NameNode存储到元数据信息(fsimage 和edtes)可以多目录存储,防止元数据丢失。
fsimage 1 2 3 4 5
Edtes 1 2 3 4 5
集群再次启动时,两个文件以最新的为准。若删除了最新的两个日志,会导致部分数据丢失。
SNN不能做NN的热备份
1、SNN不能接替NN工作
2、SNN有可能会造成数据丢失
SNN存储Fsimage 和Edits日志文件的路径
SNN存储Fsimage 的路径是以dfs.namenode.checkpoint.dir为key value 是 路径
SNN存储Edits的路径是以dfs.namenode.checkpoint.edits.dir为key value 是 路径
使用SNNFsimage 和Edits恢复集群
1、关闭集群
./stop-all.sh
2、删除NN上的Fsimage 和Edits
rm -rf /export/servers/hadoop-2.6.0-cdh5.14.0/hadoopDatas/namenodeDatas/current/*
rm -rf /export/servers/hadoop-2.6.0-cdh5.14.0/hadoopDatas/dfs/nn/edits/current/*
3、开启集群验证

在这里插入图片描述
在这里插入图片描述

4、关闭以启动的服务(关闭集群)
./stop-all.sh
5 拷贝 SNN上的Fsimage 和Edits到NN上
cp /export/servers/hadoop-2.6.0-cdh5.14.0/hadoopDatas/dfs/snn/name/current/* /export/servers/hadoop-
2.6.0-cdh5.14.0/hadoopDatas/namenodeDatas/current/
cp /export/servers/hadoop-2.6.0-cdh5.14.0/hadoopDatas/dfs/nn/snn/edits/current/* /export/servers/hadoop-
2.6.0-cdh5.14.0/hadoopDatas/dfs/nn/edits/current/
6、启动集群在这里插入图片描述
HDSF集群扩容
A: 准备一个全新的节点
1、关闭防火墙
2、关闭selinux
3、修改主机名
4、主机名与IP的对应关系
5、SSH免密码登录
6、安装JDK
B: 添加到集群
1、创建HDFS的Datanode的白名单
touch dfs.hosts
2 、修改hdfs-site.xml,将白名单添加到配置文件中
dfs.hosts /export/servers/hadoop-2.6.0-cdh5.14.0/etc/hadoop/dfs.hosts
3、刷新节点
HDFS 刷新 hdfs dfsadmin -refreshNodes
YARN 刷新 yarn rmadmin -refreshNodes
4、将新节点的主机名添加到slaves文件中
5、启动新结点上的DataNode NodeManager
sbin/hadoop-daemon.sh start datanode
sbin/yarn-daemon.sh start nodemanager
6、web 查看
7、数据负载均衡
./start-balancer.sh

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值