Hadoop错误集:Could not find the main class: org.apache.hadoop.*
2015-07-08 15:16
886 查看
在搭建Hadoop机群的时候,之前遇见了很多次找不到类的错误,因为对Hadoop了解不深,所以就在网上漫无目的的找解决方案,所以这里总结下我用的方法。
解决办法一:
我之前遇到了找不到
org.apache.hadoop.hdfs.tools.GetConf
org.apache.hadoop.hdfs.qjournal.server.JournalNode
org.apache.hadoop.hdfs.server.namenode.NameNode
对于上面的类,Hadoop是Java写的,那么肯定需要JDK,启动的时候首先会在CLASSPATH中找到jre lib,其次,还会在hadoop-config.sh中增加一些CLASSPATH,例如
所以,我之前的解决办法是,将找不到类的Jar包,拷贝到Java JRE的ext文件夹中。。。
将所有Hadoop-开头的JAR,如下,都拷贝到JRE下面,这样就回在找到相应的类了。这种方式,Hadoop能正常运行,但是后来不熟HBase的时候就出问题了,所以是有可能有潜在问题的
hadoop-annotations-2.5.0.jar
hadoop-archives-2.5.0.jar
hadoop-auth-2.5.0.jar
hadoop-common-2.5.0.jar
hadoop-common-2.5.0-tests.jar
hadoop-datajoin-2.5.0.jar
hadoop-distcp-2.5.0.jar
hadoop-extras-2.5.0.jar
hadoop-gridmix-2.5.0.jar
hadoop-hdfs-2.5.0.jar
hadoop-hdfs-2.5.0-tests.jar
hadoop-hdfs-nfs-2.5.0.jar
hadoop-mapreduce-client-app-2.5.0.jar
hadoop-mapreduce-client-common-2.5.0.jar
hadoop-mapreduce-client-core-2.5.0.jar
hadoop-mapreduce-client-hs-2.5.0.jar
hadoop-mapreduce-client-hs-plugins-2.5.0.jar
解决办法二:
如前面所讲,hadoop会在hadoop-config.sh中增加相关jar的路径,如
可以看到上面的路径,包括了common、hdfs、yarn、mapreduce的lib路径
我上面遇到了找不到org.apache.hadoop.hdfs.qjournal.server.JournalNode 这个类,这个类的路径是HADOOP_HOME/share/hadoop/hdfs/×。但是我的hadoop-config.sh导出的CLASSPATH中没有hdfs/×这个路径,所以我需要自己加上。要查看hadoop导出的classpath可以如下
大概是如下样子
因为没有HADOOP_HOME/share/hadoop/hdfs/× 这个路径,所以我在hadoop-config.sh最后自己加上
这样导出的classpath中就包含了所需要的jar包。
解决办法三:
在查资料的过程中,很多人说在hadoop-env.sh中加上HADOOP_COMMON_HOME或者是HADOOP_PREFIX,但是我试了好像不太管用
解决办法一:
我之前遇到了找不到
org.apache.hadoop.hdfs.tools.GetConf
org.apache.hadoop.hdfs.qjournal.server.JournalNode
org.apache.hadoop.hdfs.server.namenode.NameNode
对于上面的类,Hadoop是Java写的,那么肯定需要JDK,启动的时候首先会在CLASSPATH中找到jre lib,其次,还会在hadoop-config.sh中增加一些CLASSPATH,例如
# put mapred in classpath if present AND different from YARN if [ "$HADOOP_MAPRED_HOME" = "" ]; then if [ -d "${HADOOP_PREFIX}/$MAPRED_DIR" ]; then export HADOOP_MAPRED_HOME=$HADOOP_PREFIX fi fi if [ "$HADOOP_MAPRED_HOME/$MAPRED_DIR" != "$HADOOP_YARN_HOME/$YARN_DIR" ] ; then if [ -d "$HADOOP_MAPRED_HOME/$MAPRED_DIR/webapps" ]; then CLASSPATH=${CLASSPATH}:$HADOOP_MAPRED_HOME/$MAPRED_DIR fi if [ -d "$HADOOP_MAPRED_HOME/$MAPRED_LIB_JARS_DIR" ]; then CLASSPATH=${CLASSPATH}:$HADOOP_MAPRED_HOME/$MAPRED_LIB_JARS_DIR'/*' fi CLASSPATH=${CLASSPATH}:$HADOOP_MAPRED_HOME/$MAPRED_DIR'/*' fi
所以,我之前的解决办法是,将找不到类的Jar包,拷贝到Java JRE的ext文件夹中。。。
/usr/lib/jvm/java-7-openjdk-amd64/jre/lib/ext
将所有Hadoop-开头的JAR,如下,都拷贝到JRE下面,这样就回在找到相应的类了。这种方式,Hadoop能正常运行,但是后来不熟HBase的时候就出问题了,所以是有可能有潜在问题的
hadoop-annotations-2.5.0.jar
hadoop-archives-2.5.0.jar
hadoop-auth-2.5.0.jar
hadoop-common-2.5.0.jar
hadoop-common-2.5.0-tests.jar
hadoop-datajoin-2.5.0.jar
hadoop-distcp-2.5.0.jar
hadoop-extras-2.5.0.jar
hadoop-gridmix-2.5.0.jar
hadoop-hdfs-2.5.0.jar
hadoop-hdfs-2.5.0-tests.jar
hadoop-hdfs-nfs-2.5.0.jar
hadoop-mapreduce-client-app-2.5.0.jar
hadoop-mapreduce-client-common-2.5.0.jar
hadoop-mapreduce-client-core-2.5.0.jar
hadoop-mapreduce-client-hs-2.5.0.jar
hadoop-mapreduce-client-hs-plugins-2.5.0.jar
解决办法二:
如前面所讲,hadoop会在hadoop-config.sh中增加相关jar的路径,如
HADOOP_COMMON_DIR=${HADOOP_COMMON_DIR:-"share/hadoop/common"} HADOOP_COMMON_LIB_JARS_DIR=${HADOOP_COMMON_LIB_JARS_DIR:-"share/hadoop/common/lib"} HADOOP_COMMON_LIB_NATIVE_DIR=${HADOOP_COMMON_LIB_NATIVE_DIR:-"lib/native"} HDFS_DIR=${HDFS_DIR:-"share/hadoop/hdfs"} HDFS_LIB_JARS_DIR=${HDFS_LIB_JARS_DIR:-"share/hadoop/hdfs/lib"} YARN_DIR=${YARN_DIR:-"share/hadoop/yarn"} YARN_LIB_JARS_DIR=${YARN_LIB_JARS_DIR:-"share/hadoop/yarn/lib"} MAPRED_DIR=${MAPRED_DIR:-"share/hadoop/mapreduce"} MAPRED_LIB_JARS_DIR=${MAPRED_LIB_JARS_DIR:-"share/hadoop/mapreduce/lib"}
可以看到上面的路径,包括了common、hdfs、yarn、mapreduce的lib路径
我上面遇到了找不到org.apache.hadoop.hdfs.qjournal.server.JournalNode 这个类,这个类的路径是HADOOP_HOME/share/hadoop/hdfs/×。但是我的hadoop-config.sh导出的CLASSPATH中没有hdfs/×这个路径,所以我需要自己加上。要查看hadoop导出的classpath可以如下
hadoop classpath
大概是如下样子
/home/hadoop/software/cloud/hadoop-2.6.0/etc/hadoop:/home/hadoop/software/cloud/hadoop-2.6.0/share/hadoop/common/lib/*:/home/hadoop/software/cloud/hadoop-2.6.0/share/hadoop/common/*:/home/hadoop/software/cloud/hadoop-2.6.0/share/hadoop/hdfs/lib/*:/home/hadoop/software/cloud/hadoop-2.6.0/share/hadoop/yarn/lib/*:/home/hadoop/software/cloud/hadoop-2.6.0/share/hadoop/yarn/*:/home/hadoop/software/cloud/hadoop-2.6.0/share/hadoop/mapreduce/lib/*:/home/hadoop/software/cloud/hadoop-2.6.0/share/hadoop/mapreduce/*:/home/hadoop/software/cloud/hadoop-2.6.0/contrib/capacity-scheduler/*.jar:/home/hadoop/software/cloud/hadoop-2.6.0/share/hadoop/hdfs/*
因为没有HADOOP_HOME/share/hadoop/hdfs/× 这个路径,所以我在hadoop-config.sh最后自己加上
## 因为它的classpath中没有hdfs的路径,所以手动添加 CLASSPATH=${CLASSPATH}:$HADOOP_HDFS_HOME'/share/hadoop/hdfs/*'
这样导出的classpath中就包含了所需要的jar包。
解决办法三:
在查资料的过程中,很多人说在hadoop-env.sh中加上HADOOP_COMMON_HOME或者是HADOOP_PREFIX,但是我试了好像不太管用
#export HADOOP_COMMON_HOME=/home/hadoop/software/cloud/hadoop-2.6.0 #export HADOOP_PREFIX=/home/hadoop/software/cloud/hadoop-2.6.0
相关文章推荐
- copy与retain copy和mutableCopy区别
- hive subprocess failed with code X 的错误码对应信息
- email之TO、CC、BCC意义
- kindle3折腾之修砖、修复“wifi unavailable”等总结
- NDK 编译armebai-v7a的非4字节对齐crash Fatal signal 7 (SIGSEGV) 错误解决
- BZOJ 3172 [Tjoi2013]单词 AC自动机(fail树)
- svn cleanup failed–previous operation has not finished; run cleanup if it was interrupted
- Command /usr/bin/codesign failed with exit code 1
- <BaiduMapAPI/BMapKit.h>file not found
- 控制台下创建窗口和WinMain入口创建窗口简单程序
- svn: E230001: Server SSL certificate verification failed
- Directional Shadow Details 平行光阴影细节
- 011 Complaint
- 【1】MainActivity监听器使用
- Context-Dependent Pre-Trained Deep Neural Networks for Large-Vocabulary Speech Recognition
- Contains Duplicate
- Contains Duplicate II
- Loadrunner:POP3协议录制收信,使用foxmail录制到的脚本为空
- Failed to fetch URL https://dl-ssl.google.com/android/repository/addons_list-2.xml, reason:
- WebLogic11g-创建域(Domain)