Hadoop 常见问题合集


1. WARN org.apache.hadoop.hdfs.server.datanode.DataNode: IOException in offerService java.io.IOExce

出现这个问题多数是由于多次 format 后的文件系统版本不同造成的

解决办法:

  1. 删除所有有关名字空间和 secondaryname 的文件,再删除有关hbase的文件;

  2. 然后格式化 master, 并且格式化所有的slaves节点。

2. WARN org.apache.hadoop.security.UserGroupInformation: No groups available for user dr.who

注意上述代码的最后几行发出的警告信息,意思是说对于dr.who这个用户,没有有效的组归属,在hadoop的权限认证中,如果默认没有用户组声明,就会把当前的这个hadoop用户,归属于dr.who用户,当然这个用户在我们的用户组里面是不存在的,所以log里面就记录了这个warn信息。

解决方式 1. 在core-site.xml里面添加如下配置:

<property>  
    <name>hadoop.http.staticuser.user</name>  
    <value>hadoop</value>  
</property> 

解决方式 2. 在当前的用户组里面添加一个dr.who的用户

# 将dr.who用户添加到hadoop用户组里面
gpasswd -a dr.who hadoop

如此就能通过linux的权限验证,改完之后,重启hadoop集群之后,就不会出现这样的警告了

3. You have loaded library /hnbian/hadoop-2.2.0/lib/native/libhadoop.so.1.0.0

在 etc/profile 中加入如下代码

export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"

export LD_LIBRARY_PATH=$HADOOP_HOME/lib/native/Linux-amd64-64/

4. util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable

官方详细文档请参阅:http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/NativeLibraries.html

5. hadoop启动时:ssh: Could not resolve hostname ‘,: Name or service not known

# 1. 编辑配置文件
vim /etc/profile

# 2. 添加如下配置
export HADOOP_HOME=/hnbian/hadoop-2.2.0//hadoop环境变量
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_YARN_HOME=$HADOOP_HOME
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
# hadoop 环境变量后面追加到path后面 ($HADOOP_HOOME/sbin:$HADOOP_HOME/lib)
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOOME/sbin:$HADOOP_HOME/lib/

# 3.刷新配置 
source /etc/profile

6. Unable to load native-hadoop library for your platform… using builtin-java classes where applicable

  • 详细报错信息如下:
Unable to load native-hadoop library for your platform... using builtin-java classes where applicable 
 Starting namenodes on [Java HotSpot(TM) 64-Bit Server VM warning: You have loaded library /home/hadoop/2.2.0/lib/native/libhadoop.so.1.0.0 which might have disabled stack guard. The VM will try to fix the stack guard now.
 It's highly recommended that you fix the library with 'execstack -c <libfile>', or link it with '-z noexecstack'.
 localhost]
 sed: -e expression #1, char 6: unknown option to `s'
 HotSpot(TM): ssh: Could not resolve hostname HotSpot(TM): Name or service not known
 64-Bit: ssh: Could not resolve hostname 64-Bit: Name or service not known
 Java: ssh: Could not resolve hostname Java: Name or service not known
 Server: ssh: Could not resolve hostname Server: Name or service not known
 VM: ssh: Could not resolve hostname VM: Name or service not known
  • 解决问题
# 编辑下面的配置文件
 vim ~/.bash_profile

 # 2.  加入如下代码
 export HADOOP_COMMON_LIB_NATIVE_DIR=/hnbian/hadoop-2.2.0/lib/native
 export HADOOP_OPTS="-Djava.library.path=$HADOOP_PREFIX/lib"

 # 3. 刷新配置
 source ~/.bash_profile

# 4. 在hadoop-env.sh和yarn-env.sh中一样添加

7. yarn 起不来,需更改端口号

修改 yarn-site.xml 配置文件

<property>
    <name>yarn.resourcemanager.webapp.address</name>
    <value>node1:9999</value> <!--修改为可用的端口号-->
</property>

8. java.io.IOException: Incompatible clusterIDs in *****

  • 问题原因:
    1. 主节点的namenode clusterID与从节点的datanode clusterID不一致
    2. 多次格式化了namenode跟datanode之后的结果,格式化之后从节点生成了新的ID,造成不一致
  • 解决办法:
    1. 在格式化之前,先把所有的服务停掉(stop-dfs.sh、stop-yarn.sh或者stop-all.sh),确保都停掉了之后,
    2. 分别到所有节点的namenode目录、datanode目录、临时目录,把以上目录里面的所有内容都删除掉。
    3. 然后再重新启动就可以了。

9. no length prefix available

由于DataNode终止了block的传输,所以client会出现这种错误,导致client无法正常数据读写,

查询NameNode和相应DataNode的错误日志即可发现错误原因。

 noclassdeffounderror:%20org/apache/hadoop/yarn/util/Apps

添加yarn 的所有jar即可

10. Operation category READ is not supported in state standby

  • 问题描述

在执行 hive 命令时,报错信息如下

Exception in thread "main" java.lang.RuntimeException: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.ipc.StandbyException): Operation category READ is not supported in state standby

初步判断是由于HA节点中处于standby状态造成的异常

  • 问题验证
# 执行命令
$./hdfs haadmin -getServiceState namenode1
standby                                

$./hdfs haadmin -getServiceState namenode2
standby
# 确定两个namenode 互为 HA 的 namenode 节点均处于 standby 状态
  • 解决问题
# 强行将 namenode1 状态转换为 active
$/hdfs haadmin -transitionToActive --forcemanual namenode1 

11. HADOOP:WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable

  1. 通常编译好的 hadoop 库是在 lib 中,如果你不想编译,可以用 lib/native 里面的预编译库,然后把 native 的库移动到 lib 文件夹中。
cp hadoop-2.6.0/lib/native/* hadoop-2.6.0/lib/
  1. 加入系统变量
export HADOOP_COMMON_LIB_NATIVE_DIR=/home/administrator/work/hadoop-2.6.0/lib/native

export HADOOP_OPTS="-Djava.library.path=/home/administrator/work/hadoop-2.6.0/lib"

export HADOOP_ROOT_LOGGER=DEBUG,console

12. hadoop Safe mode is ON

  • 报错信息
org.apache.hadoop.hdfs.server.namenode.SafeModeException: Cannot delete /home/hadoop/tmp/mapred/system. Name node is in safe mode.
...
Safe mode is ON. The ratio of reported blocks 0.2000 has not reached the     threshold 0.9990. Safe mode will be turned off automatically.
  • 解决方式
# 强制离开安全模式
bin/hadoop dfsadmin -safemode leave

# dfsadmin -safemode value 参数value的说明如下:
# enter - 进入安全模式
# leave - 强制NameNode离开安全模式
# get -  返回安全模式是否开启的信息
# wait - 等待安全模式结束。

文章作者: hnbian
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 hnbian !
评论
 上一篇
Hadoop 环境部署文档 Hadoop 环境部署文档
1. Hadoop 1.2.1 伪分布式部署1.1 使用host-only方式将Windows上的虚拟网卡改成跟Linux上的网卡在同一网段 注意:一定要将widonws上的WMnet1的IP设置和你的虚拟机在同一网段,但是IP不能相同 1
2015-07-31
下一篇 
实时计算框架 Storm 介绍 实时计算框架 Storm 介绍
1. storm是什么? Storm是Twitter开源的一个分布式的实时计算系统 使用场景:数据的实时分析,持续计算,分布式RPC等等 2.storm 有哪些优点 分布式 可扩展 高可靠性 编程模型简单 高效实时 3. storm 常
2015-06-12
  目录