Hadoop集群datanode磁盘不均衡的解决方案
- 格式:docx
- 大小:549.02 KB
- 文档页数:9
解决Hadoop使用中常见的问题在大数据时代,Hadoop已经成为了处理海量数据的重要工具。
然而,随着Hadoop的普及,一些常见的问题也随之出现。
本文将探讨这些问题并提供解决方案,帮助用户更好地使用Hadoop。
一、数据丢失问题在使用Hadoop时,数据丢失是一个常见的问题。
这可能是由于硬件故障、网络问题或软件错误引起的。
为了解决这个问题,我们可以采取以下措施:1. 数据备份:在Hadoop集群中,数据通常会被复制到多个节点上。
这样,即使一个节点发生故障,数据仍然可以从其他节点中恢复。
因此,我们应该确保数据的备份策略已经正确配置。
2. 定期监控:通过监控Hadoop集群的状态,我们可以及时发现并解决数据丢失的问题。
可以使用一些监控工具,如Ambari、Ganglia等,来实时监控集群的健康状况。
二、任务执行时间过长问题在处理大规模数据时,任务执行时间过长是一个普遍存在的问题。
这可能是由于数据倾斜、节点负载不均衡等原因引起的。
为了解决这个问题,我们可以采取以下措施:1. 数据倾斜处理:当某个任务的输入数据不均匀地分布在各个节点上时,会导致某些节点的负载过重,从而影响整个任务的执行效率。
我们可以通过数据倾斜处理算法,如Dynamic Partitioning、Salting等,将数据均匀地分布到各个节点上,从而提高任务的执行效率。
2. 节点负载均衡:通过调整Hadoop集群的配置,我们可以实现节点负载的均衡。
例如,可以使用Hadoop的资源管理器(ResourceManager)来动态分配任务给各个节点,从而使得节点的负载更加均衡。
三、数据安全问题随着大数据的快速发展,数据安全问题变得尤为重要。
在Hadoop中,数据安全主要包括数据的保密性和完整性。
为了解决这个问题,我们可以采取以下措施:1. 数据加密:我们可以使用Hadoop提供的加密功能来保护数据的机密性。
可以使用Hadoop的加密文件系统(HDFS Encryption)来对数据进行加密,从而防止未经授权的访问。
HADOOPHDFSBALANCER介绍及经验总结1.集群执行balancer命令,依旧不平衡的原因是什么?该如何解决?2.尽量不在NameNode上执行start-balancer.sh的原因是什么?集群平衡介绍Hadoop的HDFS集群非常容易出现机器与机器之间磁盘利用率不平衡的情况,比如集群中添加新的数据节点。
当HDFS出现不平衡状况的时候,将引发很多问题,比如MR程序无法很好地利用本地计算的优势,机器之间无法达到更好的网络带宽使用率,机器磁盘无法利用等等。
可见,保证HDFS中的数据平衡是非常重要的。
在Hadoop中,包含一个Balancer程序,通过运行这个程序,可以使得HDFS集群达到一个平衡的状态,使用这个程序的命令如下:1.sh $HADOOP_HOME/bin/start-balancer.sh –t 10%复制代码这个命令中-t参数后面跟的是HDFS达到平衡状态的磁盘使用率偏差值。
如果机器与机器之间磁盘使用率偏差小于10%,那么我们就认为HDFS集群已经达到了平衡的状态。
Hadoop的开发人员在开发Balancer程序的时候,遵循了以下几点原则:1. 在执行数据重分布的过程中,必须保证数据不能出现丢失,不能改变数据的备份数,不能改变每一个rack中所具备的block数量。
2. 系统管理员可以通过一条命令启动数据重分布程序或者停止数据重分布程序。
3. Block在移动的过程中,不能暂用过多的资源,如网络带宽。
4. 数据重分布程序在执行的过程中,不能影响name node的正常工作。
集群执行balancer依旧不平衡的原因基于这些基本点,目前Hadoop数据重分布程序实现的逻辑流程如下图所示:Rebalance程序作为一个独立的进程与name node进行分开执行。
1 Rebalance Server从Name Node中获取所有的Data Node 情况:每一个Data Node磁盘使用情况。
ApacheHadoop2.0之HDFS均衡操作分析1 HDFS均衡操作原理HDFS默认的块的副本存放策略是在发起请求的客户端存放一个副本,如果这个客户端在集群以外,那就选择一个不是太忙,存储不是太满的节点来存放,第二个副本放在与第一个副本相同的机架但是不同节点上,第三个放在与第二个和第一个副本不同的机架上,原则是尽量避免在相同的机架上放太多的副本。
随着时间的推移,在各个DataNode节点上的数据块会分布的越来越不均衡。
如果集群不均衡的程度很严重,会降低Mapreduce的使用性能,导致部分DataNode节点相对而言变得更加繁忙。
所以,应该尽量的避免出现这种情况。
HDFS的 Balancer 类,是为了实现HDFS的负载调整而存在的。
Balancer类是以一个独立的进程存在的,可以独立的运行和配置。
它NameNode节点进行通信,获取各个DataNode节点的负载状况,从而进行调整DataNode上的Block的分布。
主要的调整其实就是一个操作,将一个数据块从一个服务器搬迁到另一个服务器上。
Balancer会向相关的目标DataNode 节点发出一个DataTransferProtocol.OP_REPLACE_BLOCK 消息,接收到这个消息的DataNode节点,会将从源DataNode节点传输来的数据块写入本地,写成功后,通知NameNode,删除源DataNode上的同一个数据块,直到集群达到均衡为止,即每个DataNode的使用率(该节点已使用的空间和空间容量之间的百分比值)和集群的使用率(集群中已使用的空间和集群的空间容量之间的百分比值)非常接近,差距不超过均衡时给定的阈值。
其中,一个块是否可以被移动,要满足三个条件:(1)正在被移动或者已经被移动的块,不会重复移动(2)一个块如果在源节点和目标节点上都有其副本,则此块不会被移动;(3)移动不会减少一个块所在的机架的数目;可见,由于上述等条件的限制,均衡操作并不能使得HDFS达到真正意义上的均衡,它只能是尽量的减少不均衡。
[⼤数据运维]第28讲:Hadoop平台常见故障汇总以及操作系统性能调优第28讲:Hadoop 平台常见故障汇总以及操作系统性能调优⾼俊峰(南⾮蚂蚁)Hadoop ⽇常运维问题及其解决⽅法1.如何下线⼀个 datanode 节点?当⼀个 datanode 节点所在的服务器故障或者将要退役时,你需要在 Hadoop 中下线这个节点,下线⼀个 datanode 节点的过程如下。
(1)修改 hdfs-site.xml ⽂件如下选项,找到 namenode 节点配置⽂件 /etc/hadoop/conf/hdfs-site.xml:<property><name>dfs.hosts.exclude</name><value>/etc/hadoop/conf/hosts-exclude</value></property>(2)修改 hosts-exclude ⽂件执⾏如下操作,在 hosts-exclude 中添加需要下线的 datanode 主机名:vi /etc/hadoop/conf/hosts-exclude172.16.213.188(3)刷新配置在 namenode 上以 hadoop ⽤户执⾏下⾯命令,刷新 hadoop 配置:[hadoop@namenodemaster ~]$hdfs dfsadmin -refreshNodes(4)检查是否完成下线执⾏如下命令,检查下线是否完成:[hadoop@namenodemaster ~]$hdfs dfsadmin -report也可以通过 NameNode 的 50070 端⼝访问 Web 界⾯,查看 HDFS 状态,需要重点关注退役的节点数,以及复制的块数和进度。
2.某个 datanode 节点磁盘坏掉怎么办?如果某个 datanode 节点的磁盘出现故障,那么该节点将不能进⾏写⼊操作,并导致 datanode 进程退出,针对这个问题,你可以如下解决:⾸先,在故障节点上查看 /etc/hadoop/conf/hdfs-site.xml ⽂件中对应的 dfs.datanode.data.dir 参数设置,去掉故障磁盘对应的⽬录挂载点;然后,在故障节点上查看 /etc/hadoop/conf/yarn-site.xml ⽂件中对应的 yarn.nodemanager.local-dirs 参数设置,去掉故障磁盘对应的⽬录挂载点;最后,重启该节点的 DataNode 服务和 NodeManager 服务即可。
Hadoop 3.0磁盘均衡器(diskbalancer)新功能及使用介绍_光环大数据培训在HDFS中,DataNode 将数据块存储到本地文件系统目录中,具体的目录可以通过配置 hdfs-site.xml 里面的 dfs.datanode.data.dir 参数。
在典型的安装配置中,一般都会配置多个目录,并且把这些目录分别配置到不同的设备上,比如分别配置到不同的HDD(HDD的全称是Hard Disk Drive)和SSD(全称Solid State Drives,就是我们熟悉的固态硬盘)上。
当我们往HDFS上写入新的数据块,DataNode 将会使用volume选择策略来为这个块选择存储的地方。
目前hadoop支持两种volume选择策略:round-robin 和available space(详情参见:HDFS-1804),我们可以通过dfs.datanode.fsdataset.volume.choosing.policy 参数来设置。
循环(round-robin)策略将新块均匀分布在可用磁盘上;而可用空间( available-space )策略优先将数据写入具有最大可用空间的磁盘(通过百分比计算的)。
正如下图所示:默认情况下,DataNode 是使用基于round-robin策略来写入新的数据块。
然而在一个长时间运行的集群中,由于HDFS中的大规模文件删除或者通过往DataNode 中添加新的磁盘仍然会导致同一个DataNode中的不同磁盘存储的数据很不均衡。
即使你使用的是基于可用空间的策略,卷(volume)不平衡仍可导致较低效率的磁盘I/O。
比如所有新增的数据块都会往新增的磁盘上写,在此期间,其他的磁盘会处于空闲状态,这样新的磁盘将会是整个系统的瓶颈。
最近,Apache Hadoop community开发了好几个离线的脚本(可以参见HDFS-1312 或者 hadoop-balancer )以缓解数据不平衡问题。
Hadoop集群性能优化技巧分享随着大数据时代的到来,Hadoop已经成为处理海量数据的重要工具。
然而,随着数据量的增加,Hadoop集群的性能优化变得尤为重要。
本文将分享一些Hadoop集群性能优化的技巧,帮助读者更好地利用Hadoop处理数据。
1. 数据分区优化在Hadoop集群中,数据的分区对性能有着重要的影响。
首先,要确保数据均匀分布在不同的节点上,避免某些节点负载过重。
其次,可以根据数据的特点进行合理的分区策略,以提高查询效率。
例如,可以按照时间、地理位置等因素进行数据分区,使得相关的数据存储在同一个节点上,减少数据的移动和网络传输。
2. 数据压缩与序列化Hadoop默认使用Gzip进行数据压缩,但这种压缩算法会增加CPU的负载,降低整体性能。
因此,可以考虑使用更高效的压缩算法,如Snappy或LZO。
此外,选择合适的序列化方式也能提升性能。
Avro和Protocol Buffers是两种常用的高效序列化工具,可以减小数据的大小,提高网络传输效率。
3. 内存管理与调优Hadoop的内存管理对于集群性能至关重要。
首先,要合理配置每个节点的内存分配比例,以充分利用集群的资源。
其次,可以通过调整Hadoop的内存参数来提升性能。
例如,可以增加堆内存大小、调整垃圾回收参数等。
此外,还可以使用内存缓存技术,如HBase的BlockCache和Hive的内存表,来加速数据的访问。
4. 并行度与任务调度Hadoop通过并行处理来提高任务的执行效率。
要充分利用集群的并行计算能力,可以通过增加任务的并行度来提升性能。
可以通过调整map和reduce任务的数量,以及调整任务的分配策略,来实现更好的负载均衡和资源利用率。
此外,可以使用作业调度器,如Fair Scheduler或Capacity Scheduler,来优化任务的调度和资源管理。
5. 数据本地性优化Hadoop的一个重要特性是数据本地性,即将计算任务分配到存储数据的节点上执行。
Hadoop常见异常分析及解决方法1. org.apache.hadoop.security.AccessControlException: Permission denied: user=FDC2,access=EXECUTE,inode="job_201010161322_0003":heipark:supergroup:rwx------解决方法:在hdfs-site.xml中添加如下:<property><name>dfs.permissions</name><value>false</value></property>2. localhost: Error: JAVA_HOME is not set.需要在conf/hadoop-env.sh中设置JAVA_HOME环境变量:......export HADOOP_JOBTRACKER_OPTS="-Dcom.sun.management.jmxremote $HADOOP_JOBTRACKER_OPTS"export JAVA_HOME="/usr/customize/java"3. Warning: $HADOOP_HOME is deprecated.分析:Hadoop 在bin/hadoop-config.sh 中对HADOOP_HOME 进行了判断,意思是提醒你自己也定义了变量HADOOP_HOME.判断发生的地方:# the root of the Hadoop installationexport HADOOP_PREFIX=`dirname "$this"`/..export HADOOP_HOME=${HADOOP_PREFIX}报出错误的地方:if [ "$HADOOP_HOME_WARN_SUPPRESS" == "" ] && [ "$HADOOP_HOME" != "" ]; thenecho "Warning: \$HADOOP_HOME is deprecated." 1>&2留着异常也无所谓不会对程序的正常运行产生影响。
HadoopHDFS负载均衡Hadoop HDFS负载均衡转载请注明出处:Hadoop HDFSHadoop 分布式⽂件系统(Hadoop Distributed File System),简称 HDFS,被设计成适合运⾏在通⽤硬件上的分布式⽂件系统。
它和现有的分布式⽂件系统有很多的共同点。
HDFS 是⼀个⾼容错性的⽂件系统,提供⾼吞吐量的数据访问,⾮常适合⼤规模数据集上的应⽤。
HDFS副本摆放策略第⼀副本:放置在上传⽂件的DataNode上;如果是集群外提交,则随机挑选⼀台磁盘不太慢、CPU不太忙的节点上;第⼆副本:放置在于第⼀个副本不同的机架的节点上;第三副本:与第⼆个副本相同机架的不同节点上;如果还有更多的副本:随机放在节点中;需要注意的是:HDFS中存储的⽂件的副本数由上传⽂件时设置的副本数决定。
⽆论以后怎么更改系统副本系数,这个⽂件的副本数都不会改变;在上传⽂件时优先使⽤启动命令中指定的副本数,如果启动命令中没有指定则使⽤hdfs-site.xml中dfs.replication设置的默认值;HDFS负载均衡Hadoop的HDFS集群⾮常容易出现机器与机器之间磁盘利⽤率不平衡的情况,例如:当集群内新增、删除节点,或者某个节点机器内硬盘存储达到饱和值。
当数据不平衡时,Map任务可能会分配到没有存储数据的机器,这将导致⽹络带宽的消耗,也⽆法很好的进⾏本地计算。
当HDFS负载不均衡时,需要对HDFS进⾏数据的负载均衡调整,即对各节点机器上数据的存储分布进⾏调整。
从⽽,让数据均匀的分布在各个DataNode上,均衡IO性能,防⽌热点的发⽣。
进⾏数据的负载均衡调整,必须要满⾜如下原则:数据平衡不能导致数据块减少,数据块备份丢失管理员可以中⽌数据平衡进程每次移动的数据量以及占⽤的⽹络资源,必须是可控的数据均衡过程,不能影响namenode的正常⼯作Hadoop HDFS数据负载均衡原理数据均衡过程的核⼼是⼀个数据均衡算法,该数据均衡算法将不断迭代数据均衡逻辑,直⾄集群内数据均衡为⽌。
Hadoop中数据乱序问题解决方案分享在大数据时代,Hadoop已成为处理海量数据的首选工具。
然而,随着数据规模的不断增大,Hadoop面临着一个严重的问题——数据乱序。
数据乱序会导致计算节点之间的数据倾斜,进而影响作业的执行效率。
本文将分享一些解决Hadoop 中数据乱序问题的方案。
一、背景介绍Hadoop是一个分布式计算框架,它将海量数据分散存储在多台机器上,并通过MapReduce模型实现并行处理。
在MapReduce过程中,数据会被切分成多个数据块,然后分配给不同的计算节点进行处理。
然而,由于数据的特性和分布情况的不均匀性,导致计算节点之间的数据倾斜,从而导致作业执行效率低下。
二、数据倾斜的原因1. 数据分布不均匀:数据在不同的分区中分布不均匀,导致某些计算节点负载过重。
2. 数据键值冲突:在进行数据分组时,由于数据键值的冲突,导致某些计算节点处理的数据量过大。
三、解决方案1. 采用Combiner函数:Combiner函数可以在Map阶段进行局部聚合,减少数据量的传输。
通过使用Combiner函数,可以减少计算节点之间的数据传输量,从而减轻数据倾斜的问题。
2. 重新划分数据分区:通过重新划分数据分区,可以使得数据在不同的计算节点上分布更加均匀。
可以根据数据的特性和分布情况,采用不同的划分策略,如范围划分、哈希划分等。
3. 动态调整任务数量:根据作业的执行情况,动态调整任务的数量,以实现负载均衡。
通过监控作业的执行情况,可以根据计算节点的负载情况,动态调整任务的数量,从而减轻数据倾斜的问题。
4. 采用随机前缀技术:在进行数据分组时,可以采用随机前缀技术,将数据键值加上一个随机前缀,从而减少数据键值冲突的概率。
通过引入随机前缀,可以将数据分散到不同的计算节点上,减轻数据倾斜的问题。
5. 采用二次排序技术:在进行数据分组时,可以采用二次排序技术,对数据进行二次排序。
通过二次排序,可以将相同的键值放在相邻的位置,从而减少数据键值冲突的概率,减轻数据倾斜的问题。
解析Hadoop中的数据负载均衡与数据倾斜解决方案Hadoop是一个开源的分布式计算框架,被广泛应用于大数据处理和分析。
在Hadoop中,数据负载均衡和数据倾斜是两个重要的问题。
本文将解析Hadoop中的数据负载均衡与数据倾斜解决方案,并探讨它们对Hadoop性能的影响。
一、数据负载均衡数据负载均衡是指将数据均匀地分布到Hadoop集群中的各个节点上,以避免某些节点负载过重,从而提高整个集群的处理效率。
在Hadoop中,数据负载均衡的实现主要依赖于HDFS(Hadoop分布式文件系统)和YARN(Yet Another Resource Negotiator)。
1. HDFS中的数据负载均衡HDFS是Hadoop的核心组件之一,用于存储和管理大规模数据。
在HDFS中,数据被分割成多个块,并分布在不同的数据节点上。
为了实现数据负载均衡,HDFS会定期检查各个数据节点的存储情况,并通过数据块的复制和迁移来实现负载均衡。
具体来说,当某个数据节点的存储空间使用率超过阈值时,HDFS会将该节点上的部分数据块复制到其他节点上,以减轻该节点的负载。
相反,当某个节点的存储空间使用率较低时,HDFS会将其他节点上的数据块复制到该节点上,以提高整个集群的存储利用率。
2. YARN中的数据负载均衡YARN是Hadoop的资源管理系统,用于调度和分配集群中的计算资源。
在YARN中,数据负载均衡主要体现在任务的调度和分配上。
YARN通过监控各个节点的负载情况,根据节点的可用资源和任务的需求,动态地将任务分配给空闲的节点。
这样可以避免某些节点负载过重,从而提高任务的执行效率。
二、数据倾斜解决方案数据倾斜是指在数据处理过程中,某些数据分布不均匀,导致部分节点负载过重,从而影响整个任务的执行效率。
在Hadoop中,数据倾斜的解决方案主要包括数据预处理、数据重分区和数据合并。
1. 数据预处理数据预处理是指在数据进入Hadoop之前,对数据进行预处理,以尽量减少数据倾斜的发生。
Hadoop集群datanode磁盘不均衡的解决方案Hadoop的HDFS集群非常容易出现机器与机器之间磁盘利用率不平衡的情况,当hdfs出现不平衡状况的时候,将引发很多问题。
作者:朱林海来源:数据杂货铺|2016-09-19 14:52收藏分享一、引言:Hadoop的HDFS集群非常容易出现机器与机器之间磁盘利用率不平衡的情况,比如集群中添加新的数据节点,节点与节点之间磁盘大小不一样等等。
当hdfs 出现不平衡状况的时候,将引发很多问题,比如MR程序无法很好地利用本地计算的优势,机器之间无法达到更好的网络带宽使用率,机器磁盘无法利用等等。
二、问题:因业务需要搭建一个新hadoop集群,并将老的hadoop集群中的数据迁移至新的hadoop集群,而且datanode节点不能全部上线,其中还可能会出现节点上线或下线的情况,这个时候就很容易出现机器与机器之间磁盘的均衡的情况,具体如下:上图中可以看出max是94.18%,而min是0.37%,其中有600多台是达到94%的,这个时候在跑mapred的时候往往会报错误:登陆到该机器上查看服务器的磁盘,磁盘都快已经达到100%,如下:因为我们在hdfs-site.xml中设置了dfs.datanode.du.reserved的值,所以磁盘会有一定预留空间:1. <property>2. <name>dfs.datanode.du.reserved</name>3. <value>107374182400</value>4. </property>上面这个参数的意思:Reserved space in bytes per volume. Always leave this much space free for non dfs use.再查看datanode日志,希望能找到可靠的线索:这种错误无法通过namenode来避免,因为它不会再failed的时候去尝试往别的节点写数,最初的办法是将该节点的datanode关闭掉,就能顺利地跑完这个mapreduce。
再者查看namenode的页面,看到有好多datanode的节点的Remaining快要趋于0B了,这个时候就很容易出现上面的报错。
为了防止上面的报错再次出现以及避免hdfs数据不均衡,对hadoop集群做balance已经不可避免了!二、解决方案1、balancer大家首先会想到hadoop自带的balancer,那就先介绍一下balancer! Balancer.java中是这么描述balancer的:The balancer is a tool that balances disk space usage on an HDFS cluster when some datanodes become full or when new empty nodes join the cluster.The tool is deployed as an application program that can be run by the cluster administrator on a live HDFS cluster while applications adding and deleting files.下面的图片是官网中balancer命令得详解:考虑到balancer是最近需要经常做的操作,所以我们自己开发了一个查看balancer情况的页面,结果如下:上图可以看到每个集群下balancer执行情况。
balance一天能成功移动的数据量大约在10-20T,这个数据量很难满足超大集群。
目前我们调用balance会使用如下命令:1. start-balancer.sh -threshold 20 -policy blockpool -include -f /tmp/ip.txt上面的命令通过手工筛选出磁盘高的和磁盘低的放在ip.txt文件中,这样balance 就只通过这文件里的了,另外还需要设置适当的threshold值,因为是多namespace 的,所以需要选择blockpool模式。
另外带宽也是限制balance的一个因素,在hdfs-site.xml中是有设置的:1. <property>2. <name>dfs.datanode.balance.bandwidthPerSec</name>3. <value>10485760</value>4. </property>但是这个需要重启,hadoop提供了一个动态调整的命令:1. hdfs dfsadmin -fs hdfs://ns1:8020 -setBalancerBandwidth 1048576002. hdfs dfsadmin -fs hdfs://ns2:8020 -setBalancerBandwidth 1048576002、上下节点:其实将高磁盘的节点强制Decommission是最快最有效的方案。
下节点的时候可能会出现有ns不能正常下掉的情况,其实这个时候节点的数据大部分已经移出去了,可能有一些块卡在那边没有移出去。
这个时候只能一个一个节点将已经Decommissioned节点stop掉datanode进程,如果在namenode的页面上看到有丢失块的话,就需要将这个块先get到本地,在put上去。
例如:1. hdfs dfs -get hdfs://ns1/test1/dt=2016-07-24/000816_0.lzo2.3. hdfs dfs -put -f 000816_0.lzo hdfs://ns1/test1/dt=2016-07-24/000816_0.lzo4.5. hdfs dfs -chown test1:test1 hdfs://ns1/test1/dt=2016-07-24/000816_0.lzo前提条件需要将这个节点的datanode重新启动。
3、升降数据副本:升降副本是一个迫不得已的办法,这样如果datanode有挂掉节点,就会增加丢失块的几率。
具体降副本的命令如下:1. hdfs dfs -setrep -R -w 2 hdfs://ns1/tmp/test.db升副本的命令如下:1. hdfs dfs -setrep -R -w 3 hdfs://ns1/tmp/test.db上面的命令是将ns1下的/tmp/test.db副本数降至2个,然后又将它升至3个副本。
具体的hdfs dfs -setrep命令如下图:这样动态的升降副本可以解决。
另外在升降副本的遇到一个BUG:推测可能是namenode的replications模块有夯住情况,所以出现该情况执行kill 掉进行,跳过该块再跑!总结:之所以选择使用升降副本是因为它不受带宽的控制,另外在升降副本的时候hadoop是需要重新写数的,这个时候它会优先往磁盘低写数据,这样就能将磁盘高的数据迁移至磁盘低的。
4、distcpDistCp (distributed copy) is a tool used for large inter/intra-cluster copying. It uses MapReduce to effect its distribution, error handling and recovery, and reporting. It expands a list of files and directories into input to map tasks, each of which will copy a partition of the files specified in the source list. Its MapReduce pedigree has endowed it with some quirks in both its semantics and execution. The purpose of this document is to offer guidance for common tasks and to elucidate its model.在这里举一个例子:通过distcp将/tmp/output12上的数据调用mapreduce迁移至/tmp/zhulh目录下,原先/tmp/output12上的数据还是有存在的,但是它的块就发生了变化。
这个时候有人可能会说怎么不使用cp命令呢?两者的区别如下:CP的模式是不走mapreduce的;DISTCP的模式是走mapreduce的,所以它优先写有nodemanager的机器;CP是单线程的,类似scp的模式,在执行速度上比DISTCP要慢很多。
5、提高dfs.datanode.du.reserved值官网是这么说的:Reserved space in bytes per volume. Always leave this much space free for non dfs use.在上面的提到dfs.datanode.du.reserved的值是设成100G,因为namenode认为该节点还有剩余的空间,所以给分配到这里,假如这个块是128K,但是实际剩余空间只有100K,所以就会报上面的错误,假如把dfs.datanode.du.reserved成300G,让namenode知道该节点已经没有剩余空间,所以就不会往这里写数据了。
6、关闭nodemanger进程在现有计算资源多余的情况下,可以考虑关闭高磁盘节点的nodemanager,避免在该节点起YarnChild,因为如果在该节点上进行计算的话,数据存储首先会往本地写一份,这样更加加重了本地节点的负担。
7、删除旧数据该方案是在迫不得已的情况下进行的,因为删掉的数据可能以后还得补回来,这样的话又是得要浪费一定的时间。
另外在删除数据时候就得需要跳过回收站才能算是真正删除,可以使用的命令如下:三、方案选择考虑到有多达600台机器磁盘使用率达到94%,而且这部分高的机器是在同一个机房的,所以不能采用上下节点的方法,最好的办法如下:1、提高dfs.datanode.du.reserved的值;2、关闭nodemanager进程;3、升降副本;4、启动hadoop自带的balance;人工的定期观察,当达到期望的效果的时候就是恢复成原样;在提高dfs.datanode.du.reserved的值就得需要考虑到datanode需要进行轮询的重启,这个时候就考虑到时间间隔,如果时间过短就可能就丢,如果过长就是费的时间比较多。