常见问题

下面列举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. 【基础操作】FFT / DWT / NTT / FWT 详解

    1. 2. 点值表示法 假设两个多项式相乘后得到的多项式 的次数(最高次项的幂数)为 $n$.(这个很好求,两个多项式的最高次项的幂数相加就得到了) 对于每个点,要用 $O(n)$ 的时间 把 $x$ ...

  2. 【Vijos1412】多人背包(背包DP)

    题意:求0/1背包的前K优解总和 k<=50 v<=5000 n<=200 思路:日常刷水 归并即可,不用排序 ; ..,..,..]of longint; w,c,a,b:..]o ...

  3. [C/C++] 结构体内存对齐用法

    一.为什么要内存对齐 经过内存对齐之后,CPU的内存访问速度大大提升; 内存空间按照byte划分,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定变量的时候经常在特定的内 ...

  4. HDU 4433 locker(12年天津,DP)

    4576 njczy2010 C Accepted 860 KB 140 ms G++ 2063 B 2014-10-16 09:51:19 哎,为啥1000*100*100的复杂度的dp就不敢敲了呢 ...

  5. Yii 之Session使用

    public function actionIndex(){ $session = \YII::$app->session; //判断session是否开启 if(!$session->i ...

  6. Linux 下tomcat的配置

    参考文档:http://blog.csdn.net/jeamking/article/details/7881196 http://www.cnblogs.com/panxuejun/p/618641 ...

  7. pl/sql小技巧

    更正方法: 然后把Automatic statistics的勾选去掉,点击apply即可

  8. BZOJ 4034 [HAOI2015]树上操作(树链剖分)

    题目链接  BZOJ4034 这道题树链剖分其实就可以了. 单点更新没问题. 相当于更新 [f[x], f[x]]这个区间. f[x]表示树链剖分之后每个点的新的标号. 区间更新的话类似DFS序,求出 ...

  9. hzwer与逆序对

    codevs——4163 hzwer与逆序对 貌似这个题和上个题是一样的((⊙o⊙)…)  时间限制: 1 s  空间限制: 256000 KB  题目等级 : 黄金 Gold 题解       题目 ...

  10. 51NOD 1424 零树

    Discription 有一棵以1为根的树,他有n个结点,用1到n编号.第i号点有一个值vi. 现在可以对树进行如下操作: 步骤1:在树中选一个连通块,这个连通块必须包含1这个结点. 步骤2:然后对这 ...