大数据面试题 -- 04

1、hdfs的写流程

1、client调用分布式文件系统对象通过RPC协议连接namenode,调用create方法在namenode上创建一个新文件,此时文件中是没有数据的
2、namenode会对client进行权限检查,和检查这个文件是否存在,如果通过检查,返回client一个输出流对象,如果没通过则返回IOExceptiion
3、通过检查后,client向namenode请求上传节点,namenode根据机架感知策略返回副本数个datanode(一般为3个),client将这些节点连接起来形成一个管道
4、client调用输出流将文件在内存中分为一个一个64kb大小的包,并将这些包放入一个数据队列中
5、client调用dataStreamer将数据队列中的包流式传输到第一个节点上,然后第一个节点接收成功之后发送给第二个节点,一直到最后一个节点
6、dataStrreamer将包发送给第一个节点的同时也会将包移动到一个确认队列,当所有的节点都返回保存成功的回执时,数据才会从确认队列中删除,否则重新传输。
7、当第一个块传输完成之后,会断开对应的节点,重新向namenode申请节点上传第二个块
9、当所有块都上传完毕之后,client会向naemnode发送成功回执,namenode更新元数据

2、hdfs的读流程

1、client调用分布式文件系统对象,通过RPC协议连接naemnode,调用open方法打开想要读取的文件,namenode会检查此文件是否存在并且检查权限,检查元数据确认第一个块的存储位置
2、namenode会根据存有数据块的节点和client的距离返回一个距离最近的节点
3、client调用FsDataInputStream读取对应的datanode上的块文件
4、读完第一个块后,断开连接,向namenode请求第二个块的节点,重复以上步骤读取剩下的文件块

3、yarn的job提交流程

1、client向RM申请jobID,并且检查文件路径和计算切片信息
2、如果成功申请到jonID,client会将运行job的资源(jar包,分片信息,配置文件等)上传到hdfs上一个用jobID命名的目录下,默认10个副本
3、通知RM上传成功,RM会分配资源启动appMaster
4、appMaster主要的作用是初始化任务,并且接收任务的进度和完成报告。之后appMaster会从hdfs上拉取job资源,根据分片信息计算maptask的数量,以及程序中指定的reducetask的数量
5、appMaster会向RM申请资源运行maptask和reducetask
6、分配的datanode会先拉取hdfs上的job资源,之后开始运行maptask或reducetask
7、当任务完成之后,appMaster会通知client,并且把任务执行信息输出到控制台

4、hive中静态分区和动态分区的区别

静态分区加载数据时要手动指定将数据加载到哪个分区,如:
load data local inpath “/data.txt” into table test partitioin (year=‘2020’,month=‘12’)

动态分区加载数据要使用insert into 语法,hive会自动根据分区字段的值将数据加载到对应的分区内,(使用动态分区要不指定一个静态分区字段,要不就要修改为非严格模式==>set hive.mapred.mode=nonstrict),如
insert into test partition(year,month) select id,name,year,month from source_data
注意:分区字段必须是查询字段的最后几个,并且按照顺序放置

hive的分区表就是在表的目录下根据分区字段再创建一些子目录,这些子目录就是我们的分区表,并且在查询时可以通过分区字段来当成普通字段来使用,这样就避免了全表扫描,提高查询的速度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值