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指定位置下载node

@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 执行下载操做oop

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

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

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

// 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节点,分别为dn一、dn二、dn3。5)客户端经过FSDataOutputStream模块请求dn1上传数据,dn1收到请求会继续调用dn2,而后dn2调用dn3,将这个通讯管道创建完成。6)dn一、dn二、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]$ lsdata  name  namesecondary5.    导入检查点数据(等待一会ctrl+c结束掉)[jinghang@hadoop102 hadoop-2.7.2]$ bin/hdfs namenode -importCheckpoint6.    启动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-interval8.添加新节点(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/profile9.什么是黑名单?什么是白名单?如何退役旧节点?    添加到白名单的主机节点,都容许访问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)hadoop102hadoop103hadoop104    (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 -refreshNodesRefresh nodes successful    (5)更新ResourceManager节点[jinghang@hadoop102 hadoop-2.7.2]$ yarn rmadmin -refreshNodes17/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添加以下主机名称(要退役的节点)hadoop1052.在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 -refreshNodesRefresh nodes successful[jinghang@hadoop102 hadoop-2.7.2]$ yarn rmadmin -refreshNodes17/06/24 14:55:56 INFO client.RMProxy: Connecting to ResourceManager at hadoop103/192.168.1.103:80334.        检查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 datanodestopping datanode[jinghang@hadoop105 hadoop-2.7.2]$ sbin/yarn-daemon.sh stop nodemanagerstopping nodemanager6.    若是数据不均衡,能够用命令实现集群的再平衡[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.outTime Stamp               Iteration#  Bytes Already Moved  Bytes Left To Move  Bytes Being Moved    注意:不容许白名单和黑名单中同时出现同一个主机名称

相关文章
相关标签/搜索