- Warning: $HADOOP_HOME is deprecated.
执行 Hadoop 命令时,收到警告:
[bash]
[hduser@master hadoop]$ ./bin/hadoop
Warning: $HADOOP_HOME is deprecated.
[/bash]
取消警告,设置环境变量$HADOOP_HOME_WARN_SUPPRESS=1。更简便的方法是将环境变量加入到 shell 配置文件中,假设 shell 为 bash:
[bash]
vim $HOME/.bashrc
export HADOOP_HOME_WARN_SUPPRESS=1
[/bash]
- Name node is in safe mode.
对 Hadoop 操作时,收到Name node is in safe mode的提示, e.g.
[bash]
[hduser@master hadoop]$ hadoop fs -put word-input/ wordinput
put: org.apache.hadoop.hdfs.server.namenode.SafeModeException: Cannot create directory /user/hduser/wordinput. Name node is in safe mode.
[/bash]
如想立即退出安全模式,直接执行hadoop dfsadmin -safemode leave命令。
Background:
NameNode 在启动的时候首先进入安全模式,如果 DataNode 丢失的 blocks 达到一定的比例(1 - dfs.safemode.threshold.pct),则系统会一直处于安全模式状态即只读状态。dfs.safemode.threshold.pct(默认值为0.999f,定义于conf/hdfs-site.xml文件中),表示 HDFS 启动的时候, 如果 DataNode 上报的 blocks 个数达到最小备份级别 (默认是1, 可以通过dfs.replication.min设置) blocks 个数的 0.999 倍 才可以离开安全模式,否则一直处于只读模式, 如果设为1,则 HDFS 永远是处于 safemode, 而如果设为0,NameNode 不会从安全模式启动。
下面是来自某个 NameNode 启动时的日志,blocks 上报比例为 1 , 达到了阀值 0.999:
The ratio of reported blocks 1.0000 has reached the threshold 0.9990. Safe mode will be turned off automatically in 18 seconds.
从上面可知,除了执行命令hadoop dfsadmin -safemode leave强制退出外,修改dfs.safemode.threshold.pct为较小的值也可退出安全模式。
操作安全模式下的命令:hadoop dfsadmin -safemode [value]:enter进入安全模式。leave强制 NameNode 离开安全模式。get返回安全模式是否开启的信息。wait等待,一直到安全模式结束。
- Shuffle Error: Exceeded MAX_FAILED_UNIQUE_FETCHES; bailing-out
Hadoop 运行时需要打开多个文件进行分析,系统一般默认是1024(ulimit -a可查看),正常情况下这个大小已经足够,但在 Hadoop 处理大数据量时来说,这还不够大。解决办法,需修改两个文件:- 文件 /etc/security/limits.conf:
[bash]
vim /etc/security/limits.conf
#加上
* soft nofile 102400
* hard nofile 409600
[/bash] - 文件 /etc/pam.d/login
[bash]
# 32 位机器加上
session required /lib/security/pam_limits.so
# 64 位机器加上
session required /lib64/security/pam_limits.so
[/bash]
- 文件 /etc/security/limits.conf:
- Too many fetch-failures
出现这个错误,表明 cluster 结点间的连接出现问题。- 检查所有节点的 /etc/hosts, 除了本机 IP 需要对应 服务器名外,还要包含 cluster 中所有结点的 IP 和 服务器名。
- 检查 $HOME/.ssh/authorized_keys,要求包含访问用户的public key
修改
conf/hadoop-env.sh 中 export HADOOP_HEAPSIZE=4000。在重新格式化一个新的分布式文件时,需要将 NameNode 上所配置的
dfs.name.dir 这一 NameNode 用来存放 NameNode 持久存储名字空间及事务日志的本地文件系统路径删除,同时将各 DataNode 上的 dfs.data.dir 的路径 DataNode 存放块数据的本地文件系统路径的目录也删除。这是因为 Hadoop 在格式化一个新的分布式文件系统时,每个存储的名字空间都对应了建立时间的那个版本(可查看/tmp/hadoop/dfs/name/current/VERSION目录下的 VERSION 文件,上面记录了版本信息),所以在重新格式化新的分布式系统文件时,最好先删除 name 目录。同时,也必须删除所有 DataNode 的 dfs.data.dir 指定的目录。这样才可以使 NameNode 和 DataNode 的版本信息对应。注意:删除很危险!出现这种情况大多是没有连接上结点。
出现这种异常,是 jvm 内存不够得,需修改所有的 DataNode 的 jvm 内存大小。
[bash gutter="false"]
Java -Xms1024m -Xmx4096m
[/bash]
一般 jvm 的最大内存使用应该为总内存大小的一半,若内存为 8G ,所以设置为 4096M ,这一值可能依旧不是最优的值。(其实最好设置为真实物理内存大小的 0.8)
检查
mapred.map.tasks是不是设置过大,设置太大的话会导致处理大量的小文件。另外,还需检查 mapred.reduce.parallel.copies 是否设置合适。hadoop.tmp.dir 修改后,master 需要 hadoop namenode -format 重新将 HDFS 格式化,且需要删除从库的 hadoop.data.dir 数据目录。dfs.replication 表示数据备份的数量,默认是 3。dfs.block.size,block 的大小,单位字节,它必须是必须是 512 的倍数,因为采用 crc 作文件完整性交验,默认配置 512 是 checksum 的最小单元。- 这可能是由于 HDFS format 失败引起的,format 失败的原因可能是用户对
hadoop.tmp.dir目录的权限不够,可以执行
[bash]
# 假设 hadoop.tmp.dirvalue 为 /tmp/hadoop
$ sudo chown -R hduser /tmp/hadoop
[/bash]
[bash gutter="false"]
[hduser@hadoop hadoop]# hadoop fs -ls
12/08/01 15:14:51 INFO ipc.Client: Retrying connect to server: hadoop.master/192.168.0.3:54310. Already tried 0 time(s).
12/08/01 15:14:52 INFO ipc.Client: Retrying connect to server: hadoop.master/192.168.0.3:54310. Already tried 1 time(s).
12/08/01 15:14:53 INFO ipc.Client: Retrying connect to server: hadoop.master/192.168.0.3:54310. Already tried 2 time(s).
12/08/01 15:14:54 INFO ipc.Client: Retrying connect to server: hadoop.master/192.168.0.3:54310. Already tried 3 time(s).
12/08/01 15:14:55 INFO ipc.Client: Retrying connect to server: hadoop.master/192.168.0.3:54310. Already tried 4 time(s).
12/08/01 15:14:56 INFO ipc.Client: Retrying connect to server: hadoop.master/192.168.0.3:54310. Already tried 5 time(s).
12/08/01 15:14:57 INFO ipc.Client: Retrying connect to server: hadoop.master/192.168.0.3:54310. Already tried 6 time(s).
12/08/01 15:14:58 INFO ipc.Client: Retrying connect to server: hadoop.master/192.168.0.3:54310. Already tried 7 time(s).
12/08/01 15:14:59 INFO ipc.Client: Retrying connect to server: hadoop.master/192.168.0.3:54310. Already tried 8 time(s).
12/08/01 15:15:00 INFO ipc.Client: Retrying connect to server: hadoop.master/192.168.0.3:54310. Already tried 9 time(s).
Bad connection to FS. command aborted. exception: Call to hadoop.master/192.168.0.3:54310 failed on connection exception: java.net.ConnectException: Connection refused
[/bash]
服务未启动。master 上执行命令启动服务:
[bash]
[hduer@master /usr/local/hadoop]$ bin/start-hdfs.sh
[/bash]
References:
没有评论 :
发表评论