hadoop节点动态上线下线怎么操作?

)节点上线操作:

当要新上线数据节点的时候,需要把数据节点的名字追加在 dfs.hosts 文件中

()关闭新增节点的防火墙

()在 NameNode 节点的 hosts 文件中加入新增数据节点的 hostname

()在每个新增数据节点的 hosts 文件中加入 NameNode 的 hostname

()在 NameNode 节点上增加新增节点的 SSH 免密码登录的操作

()在 NameNode 节点上的 dfs.hosts 中追加上新增节点的 hostname,

()在其他节点上执行刷新操作:hdfs dfsadmin -refreshNodes

()在 NameNode 节点上,更改 slaves 文件,将要上线的数据节点 hostname 追加到 slaves 文件中

()启动 DataNode 节点

()查看 NameNode 的监控页面看是否有新增加的节点

)节点下线操作:

()修改/conf/hdfs-site.xml 文件

()确定需要下线的机器,dfs.osts.exclude 文件中配置好需要下架的机器,这个是阻止下架的机器去连接 NameNode。

()配置完成之后进行配置的刷新操作./bin/hadoop dfsadmin -refreshNodes,这个操作的作用是在后台进行 block 块的移动。

()当执行三的命令完成之后,需要下架的机器就可以关闭了,可以查看现在集群上连接的节点,正在执行 Decommission,会显示:Decommission Status : Decommission in progress 执行完毕后,会显示:Decommission Status :Decommissioned

()机器下线完毕,将他们从excludes 文件中移除。

hdfs整体架构介绍

)Client:就是客户端。
        ()文件切分。文件上传HDFS的时候,Client将文件切分成一个一个的Block,然后进行存储;
        ()与NameNode交互,获取文件的位置信息;
        ()与DataNode交互,读取或者写入数据;
       ()Client提供一些命令来管理HDFS,比如启动或者关闭HDFS;
        ()Client可以通过一些命令来访问HDFS;
)NameNode:就是Master,它是一个主管、管理者。
        ()管理HDFS的名称空间;namespace
        ()管理数据块(Block)映射信息;
        ()配置副本策略(默认);
      ()处理客户端读写请求。
) DataNode:就是Slave。NameNode下达命令,DataNode执行实际的操作。
        ()存储实际的数据块;
        ()执行数据块的读/写操作。
) SecondaryNameNode:并非NameNode的热备。当NameNode挂掉的时候,它并不能马上替换NameNode并提供服务。
        ()辅助NameNode,分担其工作量;
        ()定期合并Fsimage和Edits,并推送给NameNode;
        ()在紧急情况下,可辅助恢复NameNode。

namenode内存包含哪些,具体如何分配

)Namespace:维护整个文件系统的目录树结构及目录树上的状态变化;

)BlockManager:维护整个文件系统中与数据块相关的信息及数据块的状态变化;

)NetworkTopology:维护机架拓扑及DataNode信息,机架感知的基础;

)其它:

  LeaseManager:读写的互斥同步就是靠Lease实现,支持HDFS的Write-Once-Read-Many的核心数据结构;

  CacheManager:Hadoop 2.3.0引入的集中式缓存新特性,支持集中式缓存的管理,实现memory-locality提升读性能;

  SnapshotManager:Hadoop 2.1.0引入的Snapshot新特性,用于数据备份、回滚,以防止因用户误操作导致集群出现数据问题;

  DelegationTokenSecretManager:管理HDFS的安全访问;

  另外还有临时数据信息、统计信息metrics等等。

  NameNode常驻内存主要被Namespace和BlockManager使用,二者使用占比分别接近50%。其它部分内存开销较小且相对固定,与Namespace和BlockManager相比基本可以忽略。

HDFS无法高效存储大量小文件,如何处理好小文件?

小文件问题,Hadoop本身也提供了几个解决方案,分别为:Hadoop Archive,Sequence file和CombineFileInputFormat
() Hadoop Archive Hadoop Archive或者HAR,是一个高效地将小文件放入HDFS块中的文件存档工具,它能够将多个小文件打包成一个HAR文件,这样在减少namenode内存使用的同时,仍然允许对文件进行透明的访问。 对某个目录/foo/bar下的所有小文件存档成/outputdir/ zoo.har: hadoop archive -archiveName zoo.har -p /foo/bar /outputdir 当然,也可以指定HAR的大小(使用-Dhar.block.size)。 HAR是在Hadoop file system之上的一个文件系统,因此所有fs shell命令对HAR文件均可用,只不过是文件路径格式不一样,HAR的访问路径可以是以下两种格式: har://scheme-hostname:port/archivepath/fileinarchive har:///archivepath/fileinarchive(本节点) 可以这样查看HAR文件存档中的文件: hadoop dfs -ls har:///user/zoo/foo.har 输出: har:///user/zoo/foo.har/hadoop/dir1 har:///user/zoo/foo.har/hadoop/dir2 使用HAR时需要两点,第一,对小文件进行存档后,原文件并不会自动被删除,需要用户自己删除;第二,创建HAR文件的过程实际上是在运行一个mapreduce作业,因而需要有一个hadoop集群运行此命令。 此外,HAR还有一些缺陷:第一,一旦创建,Archives便不可改变。要增加或移除里面的文件,必须重新创建归档文件。第二,要归档的文件名中不能有空格,否则会抛出异常,可以将空格用其他符号替换(使用-Dhar.space.replacement.enable=true 和-Dhar.space.replacement参数)。 () Sequence file sequence file由一系列的二进制key/value组成,如果为key小文件名,value为文件内容,则可以将大批小文件合并成一个大文件。 Hadoop-0.21.0中提供了SequenceFile,包括Writer,Reader和SequenceFileSorter类进行写,读和排序操作。如果hadoop版本低于0..0的版本,实现方法可参见[]。 ()CombineFileInputFormat CombineFileInputFormat是一种新的inputformat,用于将多个文件合并成一个单独的split,另外,它会考虑数据的存储位置。

hdfs的压缩算法

.Gzip压缩

优点:
()压缩比例比较高,而且压缩、解压速度比较快;
()hadoop 本身支持,在应用中处理gzip 格式的文件就和直接处理文本一样;大部分 linux 系统都自带 gzip 命令,使用方便.
缺点:不支持 split。
应用场景: 当每个文件压缩之后在 130M 以内的( 个块大小内),都可以考虑用 gzip压缩格式。
.Bzip2 压缩 优点:支持 split;具有很高的压缩率,比 gzip 压缩率都高; hadoop 本身支持,但不支持 native;在 linux 系统下自带 bzip2 命令,使用方便。
缺点:压缩/解压速度慢;不支持 native。
应用场景: 适合对速度要求不高,但需要较高的压缩率的时候,可以作为 mapreduce 作业的输出格式; 或者输出之后的数据比较大,处理之后的数据需要压缩存档减少磁盘空间并且以后数据用得比较少的情况;或者对单个很大的文本文件想压缩减少存储空间,同时又需要支持 split,而且兼容之前的应用程序(即应用程序不需要修改)的情况。
.Lzo 压缩 优点:压缩/解压速度也比较快,合理的压缩率;支持 split,是 hadoop 中最流行的压缩格式;可以在 linux 系统下安装 lzop 命令,使用方便。
缺点:压缩率比 gzip 要低一些; hadoop 本身不支持,需要安装;在应用中对 lzo 格式的文件需要做一些特殊处理(为了支持 split 需要建索引,还需要指定 inputformat 为 lzo 格式)。
应用场景: 一个很大的文本文件,压缩之后还大于 200M 以上的可以考虑,而且单个文件越大, lzo 优点越越明显。
.Snappy 压缩 优点:高速压缩速度和合理的压缩率。
缺点:不支持 split;压缩率比 gzip 要低; hadoop 本身不支持,需要安装;
应用场景: 当 Mapreduce 作业的 Map 输出的数据比较大的时候,作为 Map 到 Reduce的中间数据的压缩格式;或者作为一个 Mapreduce 作业的输出和另外一个 Mapreduce 作业的输入。

hdfs什么时候不会去备份

blocksize设置为1的时候

HDFS写数据流程

)客户端通过Distributed FileSystem模块向NameNode请求上传文件,NameNode检查目标文件是否已存在,父目录是否存在。
)NameNode返回是否可以上传。
)客户端请求第一个 block上传到哪几个datanode服务器上。
)NameNode返回3个datanode节点,分别为dn1、dn2、dn3。
)客户端通过FSDataOutputStream模块请求dn1上传数据,dn1收到请求会继续调用dn2,然后dn2调用dn3,将这个通信管道建立完成。
)dn1、dn2、dn3逐级应答客户端。
)客户端开始往dn1上传第一个block(先从磁盘读取数据放到一个本地内存缓存),以packet为单位,dn1收到一个packet就会传给dn2,dn2传给dn3;
)当一个block传输完成之后,客户端再次请求NameNode上传第二个block的服务器。(重复执行3-7步)。

HDFS读数据流程

)客户端通过Distributed FileSystem向NameNode请求下载文件,NameNode通过查询元数据,找到文件块所在的DataNode地址。
)挑选一台DataNode(就近原则,然后随机)服务器,请求读取数据。
)DataNode开始传输数据给客户端(从磁盘里面读取数据输入流,以packet为单位来做校验)。
)客户端以packet为单位接收,先在本地缓存,然后写入目标文件。

NN和2NN工作机制

. 第一阶段:NameNode启动
()第一次启动NameNode格式化后,创建fsimage和edits文件。如果不是第一次启动,直接加载编辑日志和镜像文件到内存。
()客户端对元数据进行增删改的请求。
()NameNode记录操作日志,更新滚动日志。
()NameNode在内存中对数据进行增删改查。
. 第二阶段:Secondary NameNode工作
()Secondary NameNode询问NameNode是否需要checkpoint。直接带回NameNode是否检查结果。
()Secondary NameNode请求执行checkpoint。
()NameNode滚动正在写的edits日志。
()将滚动前的编辑日志和镜像文件拷贝到Secondary NameNode。
()Secondary NameNode加载编辑日志和镜像文件到内存,并合并。
()生成新的镜像文件fsimage.chkpoint。
()拷贝fsimage.chkpoint到NameNode。
()NameNode将fsimage.chkpoint重新命名成fsimage。

DataNode工作机制

)一个数据块在DataNode上以文件形式存储在磁盘上,包括两个文件,一个是数据本身,一个是元数据包括数据块的长度,块数据的校验和,以及时间戳。
)DataNode启动后向NameNode注册,通过后,周期性(1小时)的向NameNode上报所有的块信息。
)心跳是每3秒一次,心跳返回结果带有NameNode给该DataNode的命令如复制块数据到另一台机器,或删除某个数据块。如果超过10分钟没有收到某个DataNode的心跳,则认为该节点不可用。
HDFS写数据流程
[HDFS xiě shùjù liúchéng]
HDFS write data flow
 

HDFS面试题的更多相关文章

  1. Hadoop,MapReduce,HDFS面试题

    今天发这个的目的是为了给自己扫开迷茫,告诉自己该进阶了,下面内容不一定官方和正确.全然个人理解,欢迎大家留言讨论 1.什么是hadoop 答:是google的核心算法MapReduce的一个开源实现. ...

  2. Hadoop(二)—— HDFS

    HDFS(Hadoop Distributed File System)Hadoop分布式文件系统. 一.HDFS产生的背景 随着数据量越来越大,如果大到一台主机的磁盘都存放不下,该如何解决这个问题. ...

  3. 大数据相关技术原理资料整理(hdfs, spark, hbase, kafka, zookeeper, redis, hive, flink, k8s, OpenTSDB, InfluxDB, yarn)

    hdfs: hdfs官方文档 深入理解HDFS的架构和原理 https://blog.csdn.net/kezhong_wxl/article/details/76573901 HDFS原理解析(总体 ...

  4. Hadoop 之面试题

    颜色区别: 蓝色:hive,橙色:Hbase.黑色hadoop 请简述hadoop怎样实现二级排序. 你认为用Java,Streaming,pipe 方式开发map/reduce,各有哪些优缺点: 6 ...

  5. Hadoop 面试题之Hbase

    Hadoop 面试题之九 16.Hbase 的rowkey 怎么创建比较好?列族怎么创建比较好? 答: 19.Hbase 内部是什么机制? 答: 73.hbase 写数据的原理是什么? 答: 75.h ...

  6. hadoop面试题答案

    Hadoop 面试题,看看书找答案,看看你能答对多少(2) 1. 下面哪个程序负责 HDFS 数据存储.a)NameNode  b)Jobtracker  c)Datanode d)secondary ...

  7. hadoop+海量数据面试题汇总(一)

    hadoop面试题 Q1. Name the most common InputFormats defined in Hadoop? Which one is default ? Following  ...

  8. HDFS基本原理及数据存取实战

    ---------------------------------------------------------------------------------------------------- ...

  9. [大数据面试题]hadoop核心知识点

    * 面试答案为LZ所写,如需转载请注明出处,谢谢. * 这里不涉及HiveSQL和HBase操作的笔试题,这些东西另有总结. 1.MR意义. MR是一个用于处理大数据的分布式离线计算框架,它采用”分而 ...

随机推荐

  1. vue提示插件[vscode]

    在VSCode Marketplace 搜素Vue 出现关于语法高亮的插件有 vue,vue-beautify,vue-color,VueHelper,vertur等等.比较了下载数量可以了解到,ve ...

  2. 使用docker来创建一个etcd集群

    docker run -d --name etcd1 --network etcdnet --ip 172.25.0.101 -p 23791:2379 -e ETCDCTL_API=3 -v /ro ...

  3. H5中实现加载更多的逻辑及代码执行。

    H5中加载更多的逻辑总结: 1.首先,需要三个底部的提示,分别是“加载中”.“--我是有底线的--”.“暂时没有记录”,当然,这三句话根据不同的项目,可以自定义.具体代码例子如下: <div c ...

  4. 2019.12.11 java程序中几种常见的异常以及出现此异常的原因

    1.java.lang.NullpointerException(空指针异常) 原因:这个异常经常遇到,异常的原因是程序中有空指针,即程序中调用了未经初始化的对象或者是不存在的对象. 经常出现在创建对 ...

  5. CLR 调试体系结构

    公共语言运行时 (CLR) 调试 API 专门用作操作系统内核的一部分. 在非托管代码中,当程序生成异常时,内核将暂停执行进程,并使用 Win32 调试 API 将异常信息传递给调试器. CLR 调试 ...

  6. SIGIR2018 Paper Abstract Reading Notes (1)

    1.A Click Sequence Model for Web Search(日志分析) 更好的理解用户行为对于推动信息检索系统来说是非常重要的.已有的研究工作仅仅关注于建模和预测一次交互行为,例如 ...

  7. 【UVA11134】传说中的车

    横纵坐标互不影响,所以问题转化到一维:在n个区间中每个区间选一个数,n个数都被选一次 将区间按右端点排序,枚举区间,每个区间选最靠左的没被选过的点 #include<algorithm> ...

  8. Python之NumPy(axis=0/1/2...)的透彻理解

    https://blog.csdn.net/sky_kkk/article/details/79725646 numpy中axis取值的说明首先对numpy中axis取值进行说明:一维数组时axis= ...

  9. uiautomator2使用教程

    一.要求 python 3.6+ android 4.4+   二.介绍 uiautomator2 是一个可以使用Python对Android设备进行UI自动化的库.其底层基于Google uiaut ...

  10. 微信小程序之使用checkbox

    效果图如下: 实例代码如下:type_add.js // pages/detail_add/detail_add.js Page({ /** * 页面的初始数据 */ data: { selectDa ...