• hdfs


    1.通过代码验证集群的配置文件的优先级
    1.编写源代码
    @Test
    public void testCopyFromLocalFile() throws IOException, InterruptedException, URISyntaxException {

            // 1 获取文件系统
            Configuration configuration = new Configuration();
            configuration.set("dfs.replication", "2");
            FileSystem fs = FileSystem.get(new URI("hdfs://hadoop102:9000"), configuration, "jinghang");

            // 2 上传文件
            fs.copyFromLocalFile(new Path("e:/banzhang.txt"), new Path("/banzhang.txt"));

            // 3 关闭资源
            fs.close();

            System.out.println("over");
    }
    2.将hdfs-site.xml拷贝到项目的根目录下
    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

    <configuration>
        <property>
            <name>dfs.replication</name>
            <value>1</value>
        </property>
    </configuration>
    3.参数优先级
    参数优先级排序:(1)客户端代码中设置的值 >(2)ClassPath下的用户自定义配置文件 >(3)然后是服务器的默认配置


    2.通过代码验证seek指定位置下载

    @Test

    public void testCopyToLocalFile() throws IOException, InterruptedException, URISyntaxException{

     

    // 1 获取文件系统

    Configuration configuration = new Configuration();

    FileSystem fs = FileSystem.get(new URI("hdfs://hadoop102:9000"), configuration, "jinghang");

     

    // 2 执行下载操作

    // boolean delSrc 指是否将原文件删除

    // Path src 指要下载的文件路径

    // Path dst 指将文件下载到的路径

    // boolean useRawLocalFileSystem 是否开启文件校验

    fs.copyToLocalFile(false, new Path("/banzhang.txt"), new Path("e:/banhua.txt"), true);

     

    // 3 关闭资源

    fs.close();

    }
    3.hdfs的文件的上传、下载流程
    文件的上传
    1)客户端通过Distributed FileSystem模块向NameNode请求上传文件,NameNode检查目标文件是否已存在,父目录是否存在。
    2)NameNode返回是否可以上传。
    3)客户端请求第一个 Block上传到哪几个DataNode服务器上。
    4)NameNode返回3个DataNode节点,分别为dn1、dn2、dn3。
    5)客户端通过FSDataOutputStream模块请求dn1上传数据,dn1收到请求会继续调用dn2,然后dn2调用dn3,将这个通信管道建立完成。
    6)dn1、dn2、dn3逐级应答客户端。
    7)客户端开始往dn1上传第一个Block(先从磁盘读取数据放到一个本地内存缓存),以Packet为单位,dn1收到一个Packet就会传给dn2,dn2传给dn3;dn1每传一个packet会放入一个应答队列等待应答。
    8)当一个Block传输完成之后,客户端再次请求NameNode上传第二个Block的服务器。(重复执行3-7步)。
    文件下载
    1)客户端通过Distributed FileSystem向NameNode请求下载文件,NameNode通过查询元数据,找到文件块所在的DataNode地址。
    2)挑选一台DataNode(就近原则,然后随机)服务器,请求读取数据。
    3)DataNode开始传输数据给客户端(从磁盘里面读取数据输入流,以Packet为单位来做校验)。
    4)客户端以Packet为单位接收,先在本地缓存,然后写入目标文件。


    4.hdfs的默认副本策略
    第一个副本在客户端所处的节点上,如果客户端在集群外,随机选一个
    第二个副本和第一个副本位于相同机架上,随机节点
    第三个副本位于不同机架,随机节点。


    5.nn和2nn的工作机制?2nn有什么作用?集群的故障处理、集群的安全模式
    1. 第一阶段:NameNode启动
    (1)第一次启动NameNode格式化后,创建Fsimage和Edits文件。如果不是第一次启动,直接加载编辑日志和镜像文件到内存。
    (2)客户端对元数据进行增删改的请求。
    (3)NameNode记录操作日志,更新滚动日志。
    (4)NameNode在内存中对元数据进行增删改。
    2. 第二阶段:Secondary NameNode工作
        (1)Secondary NameNode询问NameNode是否需要CheckPoint。直接带回NameNode是否检查结果。
        (2)Secondary NameNode请求执行CheckPoint。
        (3)NameNode滚动正在写的Edits日志。
        (4)将滚动前的编辑日志和镜像文件拷贝到Secondary NameNode。
        (5)Secondary NameNode加载编辑日志和镜像文件到内存,并合并。
        (6)生成新的镜像文件fsimage.chkpoint。
        (7)拷贝fsimage.chkpoint到NameNode。
        (8)NameNode将fsimage.chkpoint重新命名成fsimage。
        
        NameNode故障后,可以采用如下两种方法恢复数据。
    方法一:将SecondaryNameNode中数据拷贝到NameNode存储数据的目录;
    1. kill -9 NameNode进程
    2. 删除NameNode存储的数据(/opt/module/hadoop-2.7.2/data/tmp/dfs/name)
    [jinghang@hadoop102 hadoop-2.7.2]$ rm -rf /opt/module/hadoop-2.7.2/data/tmp/dfs/name/*
    3. 拷贝SecondaryNameNode中数据到原NameNode存储数据目录
    [jinghang@hadoop102 dfs]$ scp -r jinghang@hadoop104:/opt/module/hadoop-2.7.2/data/tmp/dfs/namesecondary/* ./name/
    4. 重新启动NameNode
    [jinghang@hadoop102 hadoop-2.7.2]$ sbin/hadoop-daemon.sh start namenode
    方法二:使用-importCheckpoint选项启动NameNode守护进程,从而将SecondaryNameNode中数据拷贝到NameNode目录中。
    1.修改hdfs-site.xml中的
    <property>
      <name>dfs.namenode.checkpoint.period</name>
      <value>120</value>
    </property>

    <property>
      <name>dfs.namenode.name.dir</name>
      <value>/opt/module/hadoop-2.7.2/data/tmp/dfs/name</value>
    </property>
    2.  kill -9 NameNode进程
    3.    删除NameNode存储的数据(/opt/module/hadoop-2.7.2/data/tmp/dfs/name)
    [jinghang@hadoop102 hadoop-2.7.2]$ rm -rf /opt/module/hadoop-2.7.2/data/tmp/dfs/name/*
    4.    如果SecondaryNameNode不和NameNode在一个主机节点上,需要将SecondaryNameNode存储数据的目录拷贝到NameNode存储数据的平级目录,并删除in_use.lock文件
    [jinghang@hadoop102 dfs]$ scp -r jinghang@hadoop104:/opt/module/hadoop-2.7.2/data/tmp/dfs/namesecondary ./

    [jinghang@hadoop102 namesecondary]$ rm -rf in_use.lock

    [jinghang@hadoop102 dfs]$ pwd
    /opt/module/hadoop-2.7.2/data/tmp/dfs

    [jinghang@hadoop102 dfs]$ ls
    data  name  namesecondary
    5.    导入检查点数据(等待一会ctrl+c结束掉)
    [jinghang@hadoop102 hadoop-2.7.2]$ bin/hdfs namenode -importCheckpoint
    6.    启动NameNode
    [jinghang@hadoop102 hadoop-2.7.2]$ sbin/hadoop-daemon.sh start namenode

    集群的安全模式
    1.namenode启动
    namenode启动时,首先将镜像文件载入内存,并执行编辑日志中的各项操作。一旦在内存中成功建立文件系统元数据的映像,则创建一个新的Fsimage文件和一个空的编辑日志。此时,namenode开始监听datanode请求。这个过程期间,namenode一直运行安全模式,即namenode的文件系统对于客户端来说是之读的。
    2.datanode启动
    系统中的数据块的位置并不是由namenode维护的,而是以块列表的形式存储在datanode中。在系统的正常操作期间,namenode会在内存中保留所有块位置的映射信息。在安全模式下,各个datanode会向namenode发送最新的块列表信息,namenode了解到足够多的块位置信息之后,即可高效运行文件系统。
    3.安全模式退出判断
    如果满足“最小副本条件”,namenode会在30秒后退出安全模式。
    基本语法
    (1)bin/hdfs dfsadmin -safemode get        (功能描述:查看安全模式状态)
    (2)bin/hdfs dfsadmin -safemode enter      (功能描述:进入安全模式状态)
    (3)bin/hdfs dfsadmin -safemode leave    (功能描述:离开安全模式状态)
    (4)bin/hdfs dfsadmin -safemode wait    (功能描述:等待安全模式状态)


    6.dn的工作机制
    1)一个数据块在DataNode上以文件形式存储在磁盘上,包括两个文件,一个是数据本身,一个是元数据包括数据块的长度,块数据的校验和,以及时间戳。
    2)DataNode启动后向NameNode注册,通过后,周期性(1小时)的向NameNode上报所有的块信息。
    3)心跳是每3秒一次,心跳返回结果带有NameNode给该DataNode的命令如复制块数据到另一台机器,或删除某个数据块。如果超过10分钟没有收到某个DataNode的心跳,则认为该节点不可用。
    4)集群运行中可以安全加入和退出一些机器。


    7.判断dn的离线
      1.datanode进程死亡或网络故障造成datanode无法与namenode通信
      2.namenode不会立即把节点判定为死亡,要经过一段时间,这段时间暂称作超时时长
      3.hdfs默认的超时时长为10分钟30秒
      4.超长公式
      TimeOut=2*dfs namenode.heartbeat.recheck-interval+10*dfs heartbeat-interval



    8.添加新节点
    (1)在xiaokai01主机上再克隆一台xiaokai04主机
        (2)修改IP地址和主机名称
        (3)删除原来HDFS文件系统留存的文件(/opt/module/hadoop-2.7.2/data和log)
        (4)source一下配置文件
    [jinghang@hadoop105 hadoop-2.7.2]$ source /etc/profile


    9.什么是黑名单?什么是白名单?如何退役旧节点?
        添加到白名单的主机节点,都允许访问NameNode,不在白名单的主机节点,都会被退出。
    配置白名单的具体步骤如下:
    (1)在NameNode的/opt/module/hadoop-2.7.2/etc/hadoop目录下创建dfs.hosts文件
    [jinghang@hadoop102 hadoop]$ pwd
    /opt/module/hadoop-2.7.2/etc/hadoop
    [jinghang@hadoop102 hadoop]$ touch dfs.hosts
    [jinghang@hadoop102 hadoop]$ vi dfs.hosts
    添加如下主机名称(不添加hadoop105)
    hadoop102
    hadoop103
    hadoop104
        (2)在NameNode的hdfs-site.xml配置文件中增加dfs.hosts属性
    <property>
    <name>dfs.hosts</name>
    <value>/opt/module/hadoop-2.7.2/etc/hadoop/dfs.hosts</value>
    </property>
    (3)配置文件分发
    [jinghang@hadoop102 hadoop]$ xsync hdfs-site.xml
        (4)刷新NameNode
    [jinghang@hadoop102 hadoop-2.7.2]$ hdfs dfsadmin -refreshNodes
    Refresh nodes successful
        (5)更新ResourceManager节点
    [jinghang@hadoop102 hadoop-2.7.2]$ yarn rmadmin -refreshNodes
    17/06/24 14:17:11 INFO client.RMProxy: Connecting to ResourceManager at hadoop103/192.168.1.103:8033
        在黑名单上面的主机都会被强制退出。
    1.在NameNode的/opt/module/hadoop-2.7.2/etc/hadoop目录下创建dfs.hosts.exclude文件
    [jinghang@hadoop102 hadoop]$ pwd
    /opt/module/hadoop-2.7.2/etc/hadoop
    [jinghang@hadoop102 hadoop]$ touch dfs.hosts.exclude
    [jinghang@hadoop102 hadoop]$ vi dfs.hosts.exclude
    添加如下主机名称(要退役的节点)
    hadoop105
    2.在NameNode的hdfs-site.xml配置文件中增加dfs.hosts.exclude属性
    <property>
    <name>dfs.hosts.exclude</name>
          <value>/opt/module/hadoop-2.7.2/etc/hadoop/dfs.hosts.exclude</value>
    </property>
    3.刷新NameNode、刷新ResourceManager
    [jinghang@hadoop102 hadoop-2.7.2]$ hdfs dfsadmin -refreshNodes
    Refresh nodes successful

    [jinghang@hadoop102 hadoop-2.7.2]$ yarn rmadmin -refreshNodes
    17/06/24 14:55:56 INFO client.RMProxy: Connecting to ResourceManager at hadoop103/192.168.1.103:8033
    4.        检查Web浏览器,退役节点的状态为decommission in progress(退役中),说明数据节点正在复制块到其他节点,如图3-17所示

    图3-17  退役中
    5.等待退役节点状态为decommissioned(所有块已经复制完成),停止该节点及节点资源管理器。注意:如果副本数是3,服役的节点小于等于3,是不能退役成功的,需要修改副本数后才能退役,如图3-18所示

    图3-18 已退役
    [jinghang@hadoop105 hadoop-2.7.2]$ sbin/hadoop-daemon.sh stop datanode
    stopping datanode
    [jinghang@hadoop105 hadoop-2.7.2]$ sbin/yarn-daemon.sh stop nodemanager
    stopping nodemanager
    6.    如果数据不均衡,可以用命令实现集群的再平衡
    [jinghang@hadoop102 hadoop-2.7.2]$ sbin/start-balancer.sh
    starting balancer, logging to /opt/module/hadoop-2.7.2/logs/hadoop-jinghang-balancer-hadoop102.out
    Time Stamp               Iteration#  Bytes Already Moved  Bytes Left To Move  Bytes Being Moved
        注意:不允许白名单和黑名单中同时出现同一个主机名称

  • 相关阅读:
    PDF文件中的Form保存问题
    Understanding IP Fragmentation
    tcp ip guide IPsec IKE
    Windows安全事件日志中的事件编号与描述
    Cisco PIX fix up and Juniper firewall FTP ALG
    很好的IPSec介绍,详细解释了IKE协商的2个阶段的作用
    virtualbox 下运行Ubuntu 8.10的分辨率和guest additions的问题。
    Fixing the ‘Do you want to display nonsecure items’ message
    windows xp 开始菜单里面所有项目右键不起作用。
    HP backup and recovery manager
  • 原文地址:https://www.cnblogs.com/qu125-tf/p/12088003.html
Copyright © 2020-2023  润新知