在搭建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,例如

# 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--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./etc/hadoop:/home/hadoop/software/cloud/hadoop-2.6./share/hadoop/common/lib/*:/home/hadoop/software/cloud/hadoop-2.6./share/hadoop/common/*:/home/hadoop/software/cloud/hadoop-2.6./share/hadoop/hdfs/lib/*:/home/hadoop/software/cloud/hadoop-2.6./share/hadoop/yarn/lib/*:/home/hadoop/software/cloud/hadoop-2.6./share/hadoop/yarn/*:/home/hadoop/software/cloud/hadoop-2.6./share/hadoop/mapreduce/lib/*:/home/hadoop/software/cloud/hadoop-2.6./share/hadoop/mapreduce/*:/home/hadoop/software/cloud/hadoop-2.6./contrib/capacity-scheduler/*.jar:/home/hadoop/software/cloud/hadoop-2.6./share/hadoop/hdfs/*

因为没有HADOOP_HOME/share/hadoop/hdfs/× 这个路径,所以我在hadoop-XX\libexec\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

Hadoop错误集:Could not find the main class: org.apache.hadoop.*的更多相关文章

  1. hadoop fs -put上传文件失败,WARN org.apache.hadoop.hdfs.server.datanode.DataNode: Problem connecting to server: master:8020

    hadoop fs -put上传文件失败 报错信息:(test文件夹是已经成功建好的) [root@master ~]# hadoop fs -put test1.txt /test // :: WA ...

  2. 报错org.apache.hadoop.mapreduce.lib.input.FileSplit cannot be cast to org.apache.hadoop.mapred.FileSplit

    报错 java.lang.Exception: java.lang.ClassCastException: org.apache.hadoop.mapreduce.lib.input.FileSpli ...

  3. Ubuntu 14.10 下Hadoop 错误集

    1 FATAL org.apache.hadoop.ha.ZKFailoverController: Unable to start failover controller. Parent znode ...

  4. Error: Could not find or load main class org.apache.hadoop.mapreduce.v2.app.MRAppMaster

    自己搭建了一套伪分布的大数据环境,运行Hadoop包中自带的示例时,出现如下错误: 错误: 找不到或无法加载主类 org.apache.hadoop.mapreduce.v2.app.MRAppMas ...

  5. Hadoop错误集:Journal Storage Directory not formatted

    类型一: 当你从异常信息中看到JournalNode not formatted,如果在异常中看到三个节点都提示需要格式化JournalNode. 如果你是新建集群,你可以重新格式化NameNode, ...

  6. Yarn 踩坑 : Could not find or load main class org.apache.hadoop.mapreduce.v2.app.MRAppMaster

    原因:yarn-site.xml 中,yarn.application.classpath 未配置 解决:其中 hadoop 版本对应更改 <property> <name>y ...

  7. hadoop 3.x Could not find or load main class org.apache.hadoop.mapreduce.v2.app.MRAppMaster

    启动hdfs后执行share目录中自带的mapreduce程序时报如下错误 找到$HADOOP_HOME/etc/mapred-site.xml,增加以下配置 <property> < ...

  8. 安装hbase分布式集群出现的报错- ERROR:org.apache.hadoop.hbase.PleaseHoldException: Master is initializing

    可能的原因如下: 1. 时间没有同步 HBase需要结点间的时间必须是同步的,可以使用date命令在Linux查看时间(同步时间命令:ntpdate 1.cn.pool.ntp.org) 2. 底层采 ...

  9. MapReduce wordcount 输入路径为目录 java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$POSIX.stat(Ljava/lang/String;)Lorg/apache/hadoop/io/nativeio/NativeIO$POSIX$Stat;

    之前windows下执行wordcount都正常,今天执行的时候指定的输入路径是文件夹,然后就报了如题的错误,把输入路径改成文件后是正常的,也就是说目前的wordcount无法对多个文件操作 报的异常 ...

随机推荐

  1. 如何让jpa 持久化时不校验指定字段

    源文:https://www.toocruel.net/jpa-validate/ 怎么让jpa 持久化时不校验指定字段 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥 ...

  2. Python逻辑运算

    一.运算符种类 1.比较运算符 > ,< , >= ,<= , != , == 2.赋值运算符 =, +=,-=,*=,/=,**=,%= 3.成员运算符 in not in ...

  3. CH4901 关押罪犯

    题意 4901 关押罪犯 0x49「数据结构进阶」练习 描述 S 城现有两座监狱,一共关押着N 名罪犯,编号分别为1~N.他们之间的关系自然也极不和谐.很多罪犯之间甚至积怨已久,如果客观条件具备则随时 ...

  4. Django之路由配置系统(urlConfig)

    简而言之,django的路由系统作用就是使views里面处理数据的函数与请求的url建立映射关系.使请求到来之后,根据urls.py里的关系条目,去查找到与请求对应的处理方法,从而返回给客户端http ...

  5. c的动态内存管理

    在linux系统下使用malloc提示警告,解决方法,加入头文件<stdlib.h> 首先来个基本的例子 int *p=(int *)malloc(sizeof(int));(当mallo ...

  6. apache geode 试用

    使用docker 运行,文档参考的官方的5 分钟学习文档 拉取镜像 docker pull apachegeode/geode 启动 docker run -it -p 10334:10334 -p ...

  7. mysql查看某库表大小

    查询所有数据库占用磁盘空间大小的SQL语句: 语句如下 select TABLE_SCHEMA, concat(truncate(sum(data_length)/1024/1024,2),' MB' ...

  8. ML(2)——感知器

    感知器(PLA——Perceptron Learning Algorithm),也叫感知机,处理的是机器学习中的分类问题,通过学习得到感知器模型来对新实例进行预测,因此属于判别模型.感知器于1957年 ...

  9. [转]Java对象的序列化和反序列化

    一.序列化和反序列化的概念 把对象转换为字节序列的过程称为对象的序列化. 把字节序列恢复为对象的过程称为对象的反序列化. 对象的序列化主要有两种用途: 1) 把对象的字节序列永久地保存到硬盘上,通常存 ...

  10. nginx下js文件修改后访问不更新问题解决

    今天遇到一个问题,nginx下js修改后不更新,加版本号,刷新浏览器缓存都不行,重启服务器才行,修改后又不更新了而且加载的js文件会有乱码或者文件加载不全的问题. 解决办法:修改nginx.conf, ...