常见问题

下面列举HDFS运行过程中可能出现的常见问题及解决方法,这些问题一般都会在日志中出现的相应的记录。
Incompatible clusterIDs in … :namenode clusterID = … ,datanode clusterIDs =…
出现该错误是由于NameNode重新格式化后会被赋予新的namespaceID,这个ID与DataNode不一致而导致的。解决该错误的方法有三种:

  • 删除datanode上的数据目录(如果DataNode上的数据无关紧要,可以这么做);
  • 修改DataNode上的clusterID与NameNode一致,具体的是将${dfs.datanode.data.dir}/current/VERSION文件中的clusterID改成与NameNode上的一致;
  • 重新指定DataNode的数据目录(修改配置项dfs.datanode.data.dir)。

... could only be replicated to 0 nodes, instead of 1 …
出现这个错误说明没有可用的DataNode可供操作,其原因有多种,

  • DataNode中XceiverServer的连接数超过了指定阈值
  • 磁盘空间不足
  • 防火墙导致无法访问DataNode

解决方法的关键是提供可用的DataNode,主要有如下几种方式:

  • 防火墙设置导致无法连接DataNode的情形,可以通过关闭防火墙来解决;
  • 重新格式化NameNode也可以解决这个问题;
  • 磁盘空间不足可以通过增加单节点容量或添加新DataNode节点来解决;
  • 并发过大导致连接数超过阈值的情况也可以通过添加DataNode节点来解决。

...ipc.Client: Retrying connect to server:...
这个错误主要是由于错误的端口配置导致的,请仔细检查core-site.xml和hdfs-site.xml文件,同时,还需确认/etc/hosts文件是否包含了所需组件的网络地址映射。
 java.net.NoRouteToHostException: No route to host
这个错误说明找不到主机,请检查网络连接是否正常,防火墙是否关闭。
...org.apache.hadoop.util.DiskChecker$DiskErrorException: Invalid value for volsFailed : 3 , Volumes tolerated : 0...
磁盘损坏会导致该错误。检查并更换损坏的磁盘即可。

全SSD盘的环境下,HDFS客户端版本ABI不兼容导致无法写数据的问题

在全SSD机型的服务器上,如果应用使用的HDFS客户端jar包版本与服务端不一致,会导致无法写入数据的问题。

该问题是由于HDFS客户端ABI不兼容导致的,在HDFS 2.5.x版本中,对存储策略的编号与HDFS 2.6.x版本的编号不一致,在全SSD机型中,客户端写入数据的策略被定义为HOT,而在服务端,该策略被解析为DISK,因为全SSD机型中不存在SATA盘,所以无法获取可行的磁盘,导致无法写入数据。

HDFS优化

优化Linux文件系统

noatime和nodiratime属性 
Linux文件系统会记录文件创建、修改和访问操作的时间信息,这在读写操作频繁的应用中将带来不小的性能损失。在挂载文件系统时设置noatime和nodiratime可禁止文件系统记录文件和目录的访问时间,这对HDFS这种读取操作频繁的系统来说,可以节约一笔可观的开销。可以修改/etc/fstab文件来实现这个设置。
$ vim /etc/fstab
如对/mnt/disk1使用noatime属性,可以做如下修改:
/ ext4 defaults 1 1
/mnt/disk1 ext4 defaults,noatime 1 2
/mnt/disk2 ext4 defaults 1 2
/mnt/disk3 ext4 defaults 1 2
/mnt/disk4 ext4 defaults 1 2
/mnt/disk5 ext4 defaults 1 2
/mnt/temp ext4 defaults 1 2
swap swap defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
修改完成后,运行下述命令使之生效:
$ mount –o remount /mnt/disk1
预读缓冲
预读技术可以有效的减少磁盘寻道次数和应用的I/O等待时间,增加Linux文件系统预读缓冲区的大小(默认为256 sectors,128KB),可以明显提高顺序文件的读性能,建议调整到1024或2048 sectors。预读缓冲区的设置可以通过blockdev命令来完成。下面的命令将/dev/sda的预读缓冲区大小设置为2048 sectors。
$ blockdev –setra 2048 /dev/sda
注意:预读缓冲区并不是越大越好,多大的设置将导致载入太多无关数据,造成资源浪费,过小的设置则对性能提升没有太多帮助。
不使用RAID 
应避免在TaskTracker和DataNode所在的节点上进行RAID。RAID为保证数据可靠性,根据类型的不同会做一些额外的操作,HDFS有自己的备份机制,无需使用RAID来保证数据的高可用性。
不使用LVM
LVM是建立在磁盘和分区之上的逻辑层,将Linux文件系统建立在LVM之上,可实现灵活的磁盘分区管理能力。DataNode上的数据主要用于批量的读写,不需要这种特性,建议将每个磁盘单独分区,分别挂载到不同的存储目录下,从而使得数据跨磁盘分布,不同数据块的读操作可并行执行,有助于提升读性能。
JBOD
JBOD是在一个底板上安装的带有多个磁盘驱动器的存储设备,JBOD没有使用前端逻辑来管理磁盘数据,每个磁盘可实现独立并行的寻址。将DataNode部署在配置JBOD设备的服务器上可提高DataNode性能。

优化HDFS配置

HDFS提供了十分丰富的配置选项,几乎每个HDFS配置项都具有默认值,一些涉及性能的配置项的默认值一般都偏于保守。根据业务需求和服务器配置合理设置这些选项可以有效提高HDFS的性能。表3-7列出了可优化的配置选项及参考值。
表3-7HDFS可优化配置项参考

配置项

优化原理

推荐值

dfs.namenode.handler.count

NameNode中用于处理RPC调用的线程数,默认为10。对于较大的集群和配置较好的服务器,可适当增加这个数值来提升NameNode RPC服务的并发度。

64

dfs.datanode.handler.count

DataNode中用于处理RPC调用的线程数,默认为3。可适当增加这个数值来提升DataNode RPC服务的并发度。 
*线程数的提高将增加DataNode的内存需求,因此,不宜过度调整这个数值。

10

dfs.replication

数据块的备份数。默认值为3,对于一些热点数据,可适当增加备份数。

3

dfs.block.size

HDFS数据块的大小,默认为64M。数据库设置太小会增加NameNode的压力。数据块设置过大会增加定位数据的时间。

128

dfs.datanode.data.dir

HDFS数据存储目录。如3.3.1所述,将数据存储分布在各个磁盘上可充分利用节点的I/O读写性能。

设置多个磁盘目录

hadoop.tmp.dir

Hadoop临时目录,默认为系统目录/tmp。在每个磁盘上都建立一个临时目录,可提高HDFS和MapReduce的I/O效率。

设置多个磁盘目录

io.file.buffer.size

HDFS文件缓冲区大小,默认为4096(即4K)。

131072(128K)

fs.trash.interval

HDFS清理回收站的时间周期,单位为分钟。默认为0,表示不使用回收站特性。

为防止重要文件误删,可启用该特性

dfs.datanode.du.reserved

DataNode保留空间大小,单位为字节。默认情况下,DataNode会占用全部可用的磁盘空间,该配置项可以使DataNode保留部分磁盘空间工其他应用程序使用。

视具体应用而定

机架感应

对于较大的集群,建议启用HDFS的机架感应功能。启用机架感应功能可以使HDFS优化数据块备份的分布,增强HDFS的性能和可靠性。

-

HDFS运维和优化的更多相关文章

  1. HBase运维和优化

    管理工具 HBase ShellHBase Shell是HBase组件提供的基于JRuby IRB的字符界面的交互式客户端程序,通过HBase Shell可以实现对HBase的绝大部分操作 通过hel ...

  2. 人工智能是如何改变IT运维和DevOps的?

    要解决IT运维和DevOps团队面对的挑战,就是能够在大量的日志数据流中识别潜在的小的有害问题,这正是认知洞察力所做的事情. 接下来的几年里,DevOps(开发软件工程.技术运营和质量保障三者的交集) ...

  3. HDFS集群优化篇

    HDFS集群优化篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.操作系统级别优化 1>.优化文件系统(推荐使用EXT4和XFS文件系统,相比较而言,更推荐后者,因为XF ...

  4. JVM原理:4 运行期优化

    JVM运行期优化 Java程序在运行的期间,可能会有某个方法或者代码块的运行特别频繁时,就会把这些代码认定为“热点代码”.为了提高热点代码的执行效率,在运行时JVM会将这些代码编译成与本地平台相关的机 ...

  5. Linux命令注释—HDFS运维

    HDFS运维—命令注释 1 实验背景 HDFS是大数据其他组件的基础,Hive的数据存储在HDFS中,Mapreduce.Spark 等计算数据也存储在HDFS 中,HBase 的 region 也是 ...

  6. jvm虚拟机笔记<六> 运行期优化

    这节我们总结一下JVM运行期的优化问题. https://www.cnblogs.com/zhouyuqin/p/5224573.html JVM运行期优化 即时编译器(JIT) 编译对象与触发条件 ...

  7. HDFS 细粒度锁优化,FusionInsight MRS有妙招

    摘要:华为云FusionInsight MRS通过FGL对HDFS NameNode锁机制进行优化,有效提升了NameNode的读写吞吐量,从而能够支持更多数据,更多业务请求访问,从而更好的支撑政企客 ...

  8. HDFS NameNode重启优化

    http://tech.meituan.com/namenode-restart-optimization.html 一.背景 在Hadoop集群整个生命周期里,由于调整参数.Patch.升级等多种场 ...

  9. Oracle数据库运维优化六脉神剑口诀

    我们知道数据库性能是数据库运维中至关重要的一个部分,据传在Oracle数据库的江湖中也有威力无比的六脉神剑技能,下面与大家免费分享Oracle大师们广为流传的六脉神剑口诀,一般人我不告诉他哦:) 少商 ...

随机推荐

  1. BZOJ2707 [SDOI2012]走迷宫 【概率dp + tarjan + 高斯消元】

    题目 Morenan被困在了一个迷宫里.迷宫可以视为N个点M条边的有向图,其中Morenan处于起点S,迷宫的终点设为T.可惜的是,Morenan非常的脑小,他只会从一个点出发随机沿着一条从该点出发的 ...

  2. Ionic1与Ionic2

    1.Ionic2新特性 ①组织结构与框架: 在Ionic2中,每个组件.页面都只专注于做一件事,它单独有自己的一个目录,有自己的类(Class).模板文件(Template)和自己的样式文件(在这里我 ...

  3. SpringBoot + Spring Security 基本使用及个性化登录配置详解

    Spring Security 基本介绍 这里就不对Spring Security进行过多的介绍了,具体的可以参考官方文档 我就只说下SpringSecurity核心功能: 认证(你是谁) 授权(你能 ...

  4. 设置好uTorrent让你的下载速度飞起来

    由于有会员反映下载国外种子速度很慢的问题,而我下同样的种子,竟然那天下载最高速度能到500K/秒.(我用的是移动的校园网,这种出了名的烂网,十天有七天是图片都打不开的网)这可见是所用软件和软件的设置问 ...

  5. 【HDOJ5948】Thickest Burger(签到)

    题意:不知道 思路:队友写的 #include <stdio.h> #include <vector> #include <algorithm> #include ...

  6. 并发编程辅助工具-java.util.concurrent

    1. CountDownLatch 类似于计数器的功能,主要用于控制某个任务的执行先后顺序,可以控制某个任务在其他任务(可能是多线程的)执行完 之后,才会去执行. public static void ...

  7. elasticsearch入门使用(五) kibana&x-pack安装使用

    Kibana User Guide 一.UI安装 https://www.elastic.co/downloads/kibana 下载rpm直接运行即可 二.参数配置 find / -name kib ...

  8. Codeforces 864E Fire(DP)

    题目链接 Fire 题意 有n个物品,每个物品的挽救时间代价为ti, 消失时刻为di, 价值为pi. 如果要救某个物品,必须在他消失之前救出来. 同一时刻最多只能救一件物品. 当前耗时为当前已经救出的 ...

  9. eslint 在webstorm配置

    1.安装nodejs和eslint 2.在 webstorm 的 file - setting搜索eslint,配置eslint路径 3.在项目目录下新建.eslintrc文件 4.配置eslint ...

  10. Hadoop安装和基本单机部署

    下载安装  # 下载 $ cd /usr/local $ wget http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-2.9.2/hadoo ...