Hadoop day05 (HDFS)

  • 日志级别
    • info    日志多
    • warn  日志偏少
    • error   日志更少
  • 1.HDFS写流程    面试
    对用户操作是无感知的

    • [hadoop@bigdata13 ~]$ hadoop fs -put ./wc.data /
      [hadoop@bigdata13 ~]$ hadoop fs -ls /
    • 1.Client调用FileSystem.crete(filepath)去namenode进行【RPC】通信
          NameNode检查这个路径文件是否存在,是否有权限能够创造这个文件
          假如都满足,就去创建一个新文件,
          但是这时还没有写入数据,是不关联任何block
          namenode根据上传的文件的大小、根据块大小 + 副本数参数
          计算要上传多少块和块存储在DataNode的位置
          最终要将这些信息 返回给客户端
    • 2.Client调用【FSDataOutputStream对象】
          write方法
          将第一个块的第一个副本数写第一个DataNode节点
          写完去第二个DN节点写第二个副本
          写完去第三个DN节点写第三个副本
          当第三个副本写完,就返回一个ack package
          确认包给DN2节点
          当DN2节点接收到这个ack packet确认包 加上自己也
          写完了就返回一个ack package给第一个DN节点
          当DN1节点收到这个ack确认包 加上自己也写完了
          DN1节点
          将ack package 返回给【FSDataOutputStream对象】
          就表示第一个块 的三个副本 写完
          其他块以此类推。。。
    • 3.当所有的块全部写完 client调用
        【FSDataOutputStream对象】的
         close方法 告诉NN文件写完了 。
  • 解决linux网卡丢失问题
     service NetworkManager stop
     chkconfig NetworkManager off
     重启网络
     systemctl restart network

     
  • 2.HDFS读流程    面试
       对用户操作是无感知的

    • 1.Client调用FS.open(filepath)
         与NN进行RPC通讯,返回该文件的
         部分或者全部的block列表
         以【FSDataInputStream】对象
    • 2.Client 【FSDataInPutStream】对象的read方法

          去与第一个块的最近的DN进行读取,读取完成会check
          假如满足 就关闭与DN通信
          假如读取失败 会记录 DN+block信息 
          下次就不会从这个节点读取。那么就从第二个节点读取
          然后去与第二个块的最近的DN进行读取,以此类推
          假如当block列表全部读取完成,文件还没有读取完
          继续调用FS从NN获取下一个批次的block列表 以此类推

    • 3.Client调用【FSDataInPutStream】对象
         close方法 关闭输入流
  • 3.HDFS副本放置策略   面试+生产
       ​​​​​机架(为了容错)

    • 第一副本
      • 1.放置在client上传的DN节点
      • 2.client 不在DN节点 ,就随机选择一个DN
    • 第二副本
      • 1.放置在第一个副本不同的机架上
    • 第三个副本
      • 与第二个副本相同机架的不同节点上
    • 补充
       副本数3
       如果副本数设置跟多4 就随机放置
  • 4. hdfs 按全模式

    • 1. 什么时候发生安全模式
      • 启动hadoop
      • hdfs故障
                      集群文件块大量丢失:说明集群不稳定 会进入安全模式
      • 人为主动进入安全模式 (与业务场景有关)
                      集群维护
    • 2.安全模式对业务有什么影响
      • 读文件:可以的
      • 写文件:不可以的
    • 3.命令
      hdfs dfsadmin [-safemode <enter | leave | get | wait | forceExit>]
      hdfs dfsadmin -safemode 

  • linux

    • 1.app => pid
          kill - 9 pid
          补充: kill - num pid
                      kill -15 pid

    • 部署基础框架

      • mysql          ------       mysql用户

      • orcale          ------      orcale用户

      • hadoop、hive  ------  hadoop用户

  • musql

    • 每个查询都有进程
       show processlist;
       kill id;

    • 创建数据库
      bigdata       bigdata用户去管理
      hive            创建一个hive用户

      //创建数据库流程
      mysql> create database dl2262;
      mysql> grant all privileges on dl2262.* to dl2262
             identified by '123456';
      mysql> flush privileges;
      
  • 5.模板模式

    • 定义定类、抽象类或者接口

      • 1.只需要把过程定义好即可

      • 2.具体实现由子类完成

        package com.bigdata.telple;
        
        public class Client {
            public static void main(String[] args) throws Exception{
        //        Mapper zh = new zh();
        //        zh.run();
                //反射
                Class<?> aClass = Class.forName(ParmsUtil.getProperties().getProperty("username"));
                Mapper mapper = (Mapper) aClass.newInstance();
                mapper.run();
            }
        }
        
        package com.bigdata.telple;
        
        public abstract class Mapper {
            abstract  void setup();
            abstract  void map();
            abstract  void cleanup();
            public  void  run(){
                setup();
                map();
                cleanup();
            }
        }
        
        public class ParmsUtil {
        
            private static Properties properties = new Properties();        //创建对象
            static {
                try {
                    properties.load(ParmsUtil.class.getClassLoader().getResourceAsStream("mapper.properties"));
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            public static Properties getProperties(){
                return properties;
            }
            public static void main(String[] args){
                Properties properties = ParmsUtil.getProperties();
                String username = properties.getProperty("MAPPER_CLASS");
                System.out.println(username);
            }
        }
        
        package com.bigdata.telple;
        
        public class zh extends Mapper{
        
            @Override
            void setup() {
                System.out.println("zh setup");
            }
            @Override
            void map() {
                System.out.println("zh map");
            }
            @Override
            void cleanup() {
                System.out.println("zh cleanup");
            }
        }
        
    • 好处:多个子类之间 实现流程一样 但是 业务不一样

  • 6.hdfs生产最佳实践

    • 如何查看hdfs block是否丢失

    • hdfs block丢失 如何解决?

      • 1.不用解决 hdfs 高容错 自动恢复 【多副本情况下】
            dn 6h

      • 2.手动进行恢复 丢失的block
           hdfs debug recoverLease -path <filename> [-retries <num-retries>]

  • 模拟 文件块丢失

    • 1. 删除一个文件的文件块 =》 删除副本
          rm -rf blk_1073741831 blk_1073

    • 2. 重启hdfs检查文件块是否丢失
          hdfs fsck /

    • 3.手动修复
          hdfs debug recoverLease -path /1_blk.log -retries 10  [拼人品]

       

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值