总结中...
https://juejin.im/post/5b5ac91051882519a62f72e5
https://zhuanlan.zhihu.com/p/35591010
- HDFS上传文件和读文件过程
a. client向NameNode 发送数据请求
b. NameNode 向client 返回可以存储的列表 host1 host2…
c. Client 将文件 按照128M分块(Block 默认大小为128M)
d. Client 向Host1 发送Block1;发送过程是流式写入。
Host1同时将Block1发送Host2(DataNode),
Host2同时将Block1发送到Host3(DataNode)
e. Host1(DataNode)向Client发送通知,表示传完
Host1,2,3向NameNode报告存储完成。
f. Client 向NameNode发送消息,说写完了Block*
- HDFS在上传文件的时候,如果其中一个块突然损坏了怎么办?
没找到合适答案?
其中一个块坏了,只要有其它块存在,会自动检测还原。
- NameNode的作用
3.1 管理命名空间
3.2 管理元数据
3.3 管理Block副本策略:默认为3
3.4 处理客户端读写请求 为DataNode分配任务
- DataNode 的作用
4.1 Slave 工作节点
4.2 存储Block 和 数据校验和
4.3 执行客户端发送的读写操作
4.4 通过心跳机制定期(默认3秒)向 NameNode汇报运行状态和Block列表信息
4.5 集群启动时,DataNode向NameNode提供Block信息
5.NameNode在启动的时候会做哪些操作?
答:
加载fsimage ,在内存中构建整个namespace,同时将每个BlockID 写入BlockMap中,此时的BlockMap 对应的datanodes列表暂时为空,当Fsimage加载完毕后,整个HDFS的目录结构在内存中就已经初始化完毕。
缺少的DataNodes信息需要从datanode的blockReport中获取,所以加载fsimage完毕后,namenode进程进入rpc等待状态,等待所有的datanodes发送blockReports。
6.Hadoop提交作业流程
答:
第一步:
client中,客户端提交一个mr的jar包给JobClient
(提交方式:hadoop jar)
第二步:
JobClient持有RM的一个代理对象,它向RM发送一个RPC(Remote Procedure Call)请求,告诉RM作业开始,然后RM返回一个 JobID 和一个存放jar包的路径给client
第三步:
Client将得到的jar包的路径作为前缀,JobID作为后缀(path = hdfs上的地址 + jobId) 拼接成一个新的hdfs的路径,然后Client通过FileSystem向 hdfs中存放jar包,默认存放10份(NameNode和DateNode等操作)
第四步:
开始提交任务,Client将作业的描述信息(JobID和拼接后的存放jar包的路径等)RPC返回给RM
第五步:
RM进行初始化任务,然后放到一个调度器中
第六步:
RM读取HDFS上的要处理的文件,开始计算输入分片,每一个分片对应一个MapperTask,根据数据量确定起多少个mapper,多少个reducer
第七步:
NodeManager 通过心跳机制向ResourceManager领取任务(任务的描述信息)
第八步:
领取到任务的NodeManager去Hdfs上下载jar包,配置文件等
第九步:
NodeManager启动相应的子进程yarnchild,运行mapreduce,运行maptask或者reducetask
第十步:
map从hdfs中读取数据,然后传给reduce,reduce将输出的数据给回hdfs
Innodb事务怎么实现的
1.HDFS 高可用实现机制
- Active NN与Standby NN的主备切换
- 利用QJM实现元数据高可用
QJM机制:只要保证Quorum(法定人数)数量的操作成功,就认为这是一次最终成功的操作
QJM共享存储系统利用ZooKeeper实现Active节点选举
2.请描述TDH平台中在Yarn上可以使用哪几种调度策略,并分别阐述各调度策略的特点。
- 先进先出调度器
将所有任务放入一个队列,先进队列的先获得资源,排在后面的任务只有等待- 容量调度器
核心思想:提前做预算,在预算指导下分享集群资源
- 公平调度器
3. BulkLoad 数据入库
含义:由于HBase中数据以HFile文件的形式存储于HDFS,所以我们绕过HBase API,直接将 数据加工成HFile文件,再将其加载到HBase中,从而完成大规模数据的快速入库
HBase BulkLoad的基本流程 :
提取:从数据源中提取数据
— 对于MySQL,运行mysqldump命令导出数据转换:利用MapReduce,将数据转换为HFile文件
— 对于TSV或CSV文件,使用HBase ImportTsv工具将其转换成HFile文件 -每个输出文件夹中的每个区域都会创建一个HFile文件
— HDFS中的可用磁盘空间至少为原始输入文件的两倍。例如,对于100GB的mysqldump导出文件, HDFS中至少预留不少于200GB的磁盘空间,可以在任务结束后删除原始输入文件加载:将HFile文件加载到HBase
— 利用HBase CompleteBulkLoad工具,将HFile文件移动到HBase表的相应目录中,完成加载