Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 949|回复: 0

hadoop过程中遇到的错误与解决方法

[复制链接]
  • TA的每日心情
    奋斗
    2024-4-6 11:05
  • 签到天数: 748 天

    [LV.9]以坛为家II

    2034

    主题

    2092

    帖子

    70万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    705612
    发表于 2021-6-20 22:02:48 | 显示全部楼层 |阅读模式

    本文整理了在hadoop学习过程中遇到的各种问题。

    windows下开发环境搭建

    大部分情况下,我们都是在windows下开发,hadoop则一般部署于linux服务器(无论是CDH还是原生hadoop,也无论是单机伪分布式还是完全分布式)。很多教程的做法都是打成jar,然后上传到linux服务器,再提交执行。这完全就是外行人教科书式的做法。实际开发不能这样进行,就跟c++开发一样,虽然是linux c++开发,我们同样不会windows写好到linux测试。

    其安装很简单,下载hadoop发行版,并下载hadoop.dll-and-winutils.exe-for-hadoop2.7.3-on-windows_X64-master.zip。解压内容复制到HADOOP_HOME/bin下,这样运行就不会找不到相关工具如winutils.exe,hadoop的版本不一定要和windows tools相同,例如HADOOP发行版2.8.x完全是可以的。

    增加hadoop maven依赖:

                <dependency>
                  <groupId>org.apache.hadoop</groupId>
                  <artifactId>hadoop-hdfs</artifactId>
                  <version>2.8.5</version>
              </dependency>
            
              <dependency>  
                  <groupId>org.apache.hadoop</groupId>  
                  <artifactId>hadoop-client</artifactId>  
                  <version>2.8.5</version>  
              </dependency> 
            
              <dependency>
                  <groupId>org.apache.hadoop</groupId>
                  <artifactId>hadoop-common</artifactId>
                  <version>2.8.5</version>
              </dependency>

    然后只要将$HADOOP_HOME/conf中的core-site.xml和log4j.properties复制到resources目录下即可。core-site.xml中添加HADOOP服务器HDFS地址即可:

        <property>
            <name>fs.defaultFS</name>
            <!--  这里的端口号可能是9000或8020,需要看服务器core-site.xml文件中的fs.default.name-->
            <value>hdfs://192.168.223.141:8020</value>
        </property>

    这样就可以本地提交执行(这也是实际的做法)了。

    完整的手册可以参考本博客windows eclipse直接访问远程linux hadoop开发环境配置(最标准的做法)

    org.apache.hadoop.ipc.RpcException: RPC response exceeds maximum data length(客户端执行的时候,服务器端执行没有报错)

    原因是目标Hadoop连接有误,IP或端口,也就是上面 fs.defaultFS的设置以及FileInputFormat.addInputPath(job, new Path("hdfs://192.168.223.141:8020/user/cloudera/sample_data/tab1"));的值不正确,该值使用服务器core-site.xml文件中的fs.default.name的值,并确保对外开通。如下:

     

     有些帖子说是ipc.maximum.data.length过小的问题,但是我们没有修改过,所以134217728肯定足够大了。

    执行hadoop命令报"No FileSystem for scheme: hdfs"

    一直好好的,不知道为啥突然出现“No FileSystem for scheme: hdfs”。如下:

    重新登录即可,原因未知。

    客户端执行的时候报java.lang.NoClassDefFoundError: org/apache/hadoop/yarn/exceptions/YarnRuntimeException

    Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/yarn/exceptions/YarnRuntimeException
        at org.apache.hadoop.mapred.LocalDistributedCacheManager.setup(LocalDistributedCacheManager.java:93)
        at org.apache.hadoop.mapred.LocalJobRunner$Job.<init>(LocalJobRunner.java:171)
        at org.apache.hadoop.mapred.LocalJobRunner.submitJob(LocalJobRunner.java:758)
        at org.apache.hadoop.mapreduce.JobSubmitter.submitJobInternal(JobSubmitter.java:242)
        at org.apache.hadoop.mapreduce.Job$11.run(Job.java:1341)
        at org.apache.hadoop.mapreduce.Job$11.run(Job.java:1338)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Subject.java:422)
        at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1844)
        at org.apache.hadoop.mapreduce.Job.submit(Job.java:1338)
        at org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:1359)
        at hadoop.ParquetNewMR.main(ParquetNewMR.java:104)
    Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.yarn.exceptions.YarnRuntimeException
        at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        ... 12 more

    服务器端执行的时候报警告java.lang.NoClassDefFoundError: org/apache/parquet/format/CompressionCodec,但是运行成功了,文件内容为空

    hadoop-common包在maven依赖中,而且能找到(不知道是客户端还是服务器端问题,看起来是服务器端的问题)。

    原因:原来因为parquet相关依赖包下载不下载,改成了systemPath模式,所以有这个问题。直接从仓库下载后,这个问题是没有了。

    java.lang.VerifyError: Bad return type location:org/apache/hadoop/hdfs/DFSClient.getQuotaUsage

        2018-02-19 10:11:49,328 [ERROR] [main] |app.DAGAppMaster|: Error starting DAGAppMaster
        java.lang.VerifyError: Bad return type
        Exception Details:
          Location:
            org/apache/hadoop/hdfs/DFSClient.getQuotaUsage(Ljava/lang/String;)Lorg/apache/hadoop/fs/QuotaUsage; @94: areturn
          Reason:
            Type 'org/apache/hadoop/fs/ContentSummary' (current frame, stack[0]) is not assignable to 'org/apache/hadoop/fs/QuotaUsage' (from method signature) 

    看起来像是hadoop的版本和hadoop maven客户端版本不一致的问题,因为使用的是CDH-5.13的版本,将maven依赖版本调整为2.6.0之后,该错误没有了。

    Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/htrace/core/Tracer$Builder,但是依赖已经有了,如下:

    Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/htrace/core/Tracer$Builder
        at org.apache.hadoop.fs.FsTracer.get(FsTracer.java:42)
        at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2697)
        at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:96)
        at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:2747)
        at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:2729)
        at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:384)
        at com.abc.test.HdfsDAO.copyFile(HdfsDAO.java:96)
        at com.abc.test.HdfsDAO.main(HdfsDAO.java:34)
    Caused by: java.lang.ClassNotFoundException: org.apache.htrace.core.Tracer$Builder
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        ... 8 more

     

     原因:htrace-core 3.0.4中的报名时org.htrace而不是org.apache.htrace包,前者为hadoop 2.6依赖,后者需要人工引入依赖。另外好像cdh 5.13不支持jdk 8,因为是1.8依赖了htrace-core4的会出现。调整为jdk 1.7、hadoop 2.6之后,问题就解决了。

    提醒:hadoop开发,最好是服务器的版本和开发依赖的java库版本一致,这样不容易出问题。CDH的hadoop home是/var/lib/hadoop。

    Hive执行命令非常慢(无论是hive客户端还是hive2的beeline都是如此)

    [root@quickstart ~]# beeline -u jdbc:hive2://localhost:10000/default
    scan complete in 2ms
    Connecting to jdbc:hive2://localhost:10000/default
    Connected to: Apache Hive (version 1.1.0-cdh5.13.0)
    Driver: Hive JDBC (version 1.1.0-cdh5.13.0)
    Transaction isolation: TRANSACTION_REPEATABLE_READ
    Beeline version 1.1.0-cdh5.13.0 by Apache Hive
    0: jdbc:hive2://localhost:10000/default> show tables;
    INFO  : Compiling command(queryId=hive_20190410202727_01c12a1b-1266-4019-a94f-b0cc8b743577): show tables
    INFO  : Semantic Analysis Completed
    INFO  : Returning Hive schema: Schema(fieldSchemas:[FieldSchema(name:tab_name, type:string, comment:from deserializer)], properties:null)
    INFO  : Completed compiling command(queryId=hive_20190410202727_01c12a1b-1266-4019-a94f-b0cc8b743577); Time taken: 0.073 seconds
    INFO  : Executing command(queryId=hive_20190410202727_01c12a1b-1266-4019-a94f-b0cc8b743577): show tables
    INFO  : Starting task [Stage-0:DDL] in serial mode
    INFO  : Completed executing command(queryId=hive_20190410202727_01c12a1b-1266-4019-a94f-b0cc8b743577); Time taken: 0.039 seconds
    INFO  : OK
    +-----------+--+
    | tab_name  |
    +-----------+--+
    +-----------+--+
    No rows selected (68.033 seconds)
    
    0: jdbc:hive2://localhost:10000/default> create table parquet_xxx(name string,age int); -- 半天无响应,卡死

     https://blog.csdn.net/yukuaifeng/article/details/78810450也是这个问题,但是参照之后也没解决。

    20190420最新更新,问题已经找到,quickstart vm存在这个问题,换成自己搭建的cdh hadoop环境后,就没有这个问题了。

    WARNING: Hive CLI is deprecated and migration to Beeline is recommended

    hive2已经不推荐使用hive cli,而是beeline,参考:https://www.cnblogs.com/tomato0906/articles/6057333.html

    HUE Web UI Error Impala Could not connect to localhost:21050

    impala服务没有启动的原因。

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-4-27 03:54 , Processed in 0.069253 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表