Hadoop

访问HDFS数据提示Operation category READ is not supported in state standby?

由于在UHadoop中Master配置是HA的,故NameNode也有2个,同一时刻一个节点为Active,另一个为Standby,一般内存跑高或者网络波动都可能会导致主从切换,不建议客户端使用Master节点IP访问HDFS数据。

正确使用方法: 如果所在机器已经部署好UHadoop客户端(部署方法请参考在UHost上安装Hadoop客户端),可直接通过hadoop fs -ls / 或者hadoop fs -ls hdfs://Ucluster/访问

如果是客户端代码,可以将集群/home/hadoop/conf/hdfs-site.xml和/home/hadoop/conf/core-site.xml拷贝到本地程序中,通过conf.addResource加载2个文件,即可通过hdfs://Ucluster/访问HDFS数据

为什么HDFS实际可用空间比配置的小?

core节点由于要启动node-manager 服务,会存一部分本地数据。所以,会用到额外的空间。core1节点会被zookeeper和 jornal-node占用一部分空间。所以,会更少一点。标准是配置90%空间给HDFS。

为什么/home/hadoop/etc/hadoop/slaves没有指定其他节点IP,只配置了localhost?

slaves相当于一份白名单机制,如果不配置此文件,默认新加core节点可以直接加入集群;新加节点是通过读取hdfs-site.xml文件中的namenode相关信息找到并正确加入集群的,其他用户节点或者网络不通的节点是无法加入本集群的。

hbase的regionservers文件配置同理。

Hadoop回收站占用大量空间,数据文件未正常清理,如何清理空间占用?

".Trash" 的文件默认配置是按5天check一次的,如果 ".Trash" 目录下的文件超过5天就会删除,如果没超过5天,这个文件会放到类似 "/.Trash/yyMMddHHmm" 命名的文件中,然后等待5天做下一次检查,这些文件才会被删除,因此 ".Trash" 文件会保存5-10天。

可以更改以下2个参数更改保存与check时间:

fs.trash.interval文件保存时间
fs.trash.checkpoint.interval文件check时间,默认等于 "fs.trash.interval"

Hadoop lzo找不到Native的库?

  • 错误1:Could not load native gpl library

确认当前客户端配置和集群一样的环境变量 “LD_LIBRARY_PATH”

  • 错误2:java.lang.RuntimeException: native-lzo library not available

这个错误是执行任务的机器没有安装lzo-devel,程序找不到liblzo2.so.2导致的,在该机器上执行如下命令安装即可:

yum install lzo lzo-devel

如何调整task节点的配置?

为了便于管理,目前task节点必须保持统一的配置。

所以需要调整task节点配置的时候,只能通过删除现有的task节点后,选择新的类型。

注意:
1.删除task节点时,会影响到当前正在运行中的任务;
2.需要用户自行备份的删除节点上的数据。

用户给任务设置的内存量为1000MB,为何最终分配的内存却比1000MB大?

为了易于管理资源和调度资源,Yarn内置了资源规整化算法,它规定了最小可申请资源量、最大可申请资源量和资源规整化因子,如果应用程序申请的资源量小于最小可申请资源量,则Yarn会将其大小改为最小可申请量,也就是说,应用程序获得资源不会小于自己申请的资源,但也不一定相等;如果应用程序申请的资源量大于最大可申请资源量,则会抛出异常,无法申请成功;规整化因子是用来规整化应用程序资源的,应用程序申请的资源如果不是该因子的整数倍,则将被修改为最小的整数倍对应的值,公式为ceil(a/b)*b,其中a是应用程序申请的资源,b为规整化因子。

以上介绍的参数需在yarn-site.xml中设置,相关参数如下:

  • yarn.scheduler.minimum-allocation-mb:最小可申请内存量,默认是1024
  • yarn.scheduler.minimum-allocation-vcores:最小可申请CPU数,默认是1
  • yarn.scheduler.maximum-allocation-mb:最大可申请内存量,默认是8096
  • yarn.scheduler.maximum-allocation-vcores:最大可申请CPU数,默认是4

对于规整化因子,不同调度器不同,具体如下:

  • FIFO和Capacity Scheduler:规整化因子等于最小可申请资源量,不可单独配置。
  • Fair Scheduler:规整化因子通过参数yarn.scheduler.increment-allocation-mb和yarn.scheduler.increment-allocation-vcores设置,默认是1024和1。

通过以上介绍可知,应用程序申请到资源量可能大于资源申请的资源量,比如YARN的最小可申请资源内存量为1024,规整因子是1024,如果一个应用程序申请1500内存,则会得到2048内存,如果规整因子是512,则得到1536内存。

怎么在任务日志里定位损坏的文件?

如果上传的文件使用了压缩,并且有破损的时候,会导致执行的任务失败。可以通过查看任务的日志文件定位损坏的文件。

  1. 从web-yarn的界面找到出错的任务;
  2. 点击查看任务的详细信息;
  3. 打开任务的History链接,找到失败的Mapper;
  4. 查看具体失败的mapper处理的是哪一个文件。

有两种方法可以避免这个问题:

  1. 如果这个文件对结果影响不大, 那么可以跳过这个错误。 可以通过交任务时指定mapreduce.map.skip.maxrecords来跳过这个错误,让任务可以继续下去;
  2. 使用其他的压缩格式。因为gzip压缩需要保持整个文件完整才能解压,推荐使用lzo格式,即使文件部分损坏,也可以保证任务继续运行。

为集群添加了core节点以后,是否需要进行数据均衡?

添加节点成功后,后台会自动进行数据均衡。如果长时间之后,集群的数据量还是不均衡,可以在“集群管理”页面提交数据均衡请求,如下图:

也可以在master节点提交均衡命令:

/home/hadoop/sbin/start-balancer.sh -threshold 10
threshold是判断集群是否平衡的目标参数。默认值为10。表示当集群中所有core节点的可用磁盘容量百分比的差距小于10时,退出数据均衡。

因为在数据均衡的同时,也会有数据写入,可以在/home/hadoop/conf/hdfs-site.xml中修改数据均衡时可以占用的带宽:

> 
>dfs.balance.bandwidthPerSec> 
>10485760>
>

这面是设置传输速率为20M/S。

注意:
该值如果设置过大,可能会影响正常的hdfs读写和yarn任务执行。

hdfs读数据响应慢怎么办?

如果发现hdfs读数据响应慢,出现

WARN org.apache.hadoop.hdfs.server.datanode.DataNode: Slow BlockReceiver write data to disk cost

可以从以下几个方面查找问题:

  1. 检查磁盘IO;
  2. 检查对于节点的GC情况;
  3. 检查网络带宽;

hdfs并发写入失败?

HDFS 支持并发读、读写,但写入不能并发。有且仅有一个客户端时可同一时刻写某个文件,但多个客户端不能同时对HDFS写文件。这是由于当一个客户端获得NameNode的允许去写DataNode上的一个块时,这个块会被锁住,直到操作完成。