1. 三副本放置
1) 第一个副本放在写入文件的DataNode上
2) 第二个副本放在不同机架上的任意DataNode
3) 第三个副本放在同一个NameNode管理的DataNode上(一个NameNode可管理4000个DataNode)
2. Block概述
1) 默认是64MB
2) 错误处理:
l 每当DataNode读取Block时,会进行CRC校验计算得到checksum
l 计算得到的checksum与读取前的checksum对比,若不同则向NameNode报告,NameNode会标记该Block已损坏,并有该Block的其他副本进行恢复以达到配置的副本数
3. 安全模式(适用于升级)
NameNode处于安全模式下客户端是只读的
4. 常用命令
bin/hadoop job –list //列出正在运行的作业
bin/hadoop job –kill job_id //删除作业
bin/hadoop fsck //查看HDFS状态,是否有损坏块
bin/hadoop fsck –delete //删除损坏块
bin/hadoop dfsadmin –report //返回当前HDFS状态
sbin/start-balancer.sh //启动平衡器
5. 如何使用MapReduce解决问题
1. 将问题转化成MapReduce模型
2. 设置相关参数
3. 写Map逻辑
4. 写Reduce逻辑
MapReduce执行流程:
1) JobClient对输入数据源分片
2) 通过JobTracker生成jobid
3) 检查输出目录不存在,输入目录存在
4) 拷贝任务资源到JobTracker(jar,集群配置文件,输入源切片信息)
5) JobTracker遍历每一个InputSplit(切片信息),根据其记录的引用地址选择距离最近的TackTracker去执行
6) 将任务jar从HDFS拷贝到本地并进行解压
7)创建子JVM执行具体任务
7.1)若为Map任务,则处理流程:
l 加载InputSplit记录的数据源切片,通过InputFormat的getRecordReader()方法
获取到Reader后,执行如下操作
l K key = reader.createKey();
l V value = reader.createValue();
l while (reader.next(key, value)) {//遍历split中的每一条记录,执行map功能函数
l mapper.map(key, value, output, reporter);
如果JobTracker出现故障,则系统瘫痪
如果TaskTracker出现故障,JobTracker将其拉入黑名单,并调度其他TaskTracker重新执行此任务,失败次数超过4次,则Job失败或者以Task的成功数比例决定Job是否通过