hadoop過程當中遇到的錯誤與解決方法

本文整理了在hadoop學習過程當中遇到的各類問題。html

windows下開發環境搭建

大部分狀況下,咱們都是在windows下開發,hadoop則通常部署於linux服務器(不管是CDH仍是原生hadoop,也不管是單機僞分佈式仍是徹底分佈式)。不少教程的作法都是打成jar,而後上傳到linux服務器,再提交執行。這徹底就是外行人教科書式的作法。實際開發不能這樣進行,就跟c++開發同樣,雖然是linux c++開發,咱們一樣不會windows寫好到linux測試。java

其安裝很簡單,下載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徹底是能夠的。linux

增長hadoop maven依賴:c++

<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地址便可:apache

<property>
        <name>fs.defaultFS</name>
        <!-- 這裏的端口號多是9000或8020,須要看服務器core-site.xml文件中的fs.default.name-->
        <value>hdfs://192.168.223.141:8020</value>
    </property>

這樣就能夠本地提交執行(這也是實際的作法)了。windows

完整的手冊能夠參考本博客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的值,並確保對外開通。以下:app

 

 有些帖子說是ipc.maximum.data.length太小的問題,可是咱們沒有修改過,因此134217728確定足夠大了。eclipse

執行hadoop命令報"No FileSystem for scheme: hdfs"

一直好好的,不知道爲啥忽然出現「No FileSystem for scheme: hdfs」。以下:maven

從新登陸便可,緣由未知。

客戶端執行的時候報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.七、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服務沒有啓動的緣由。

相關文章
相關標籤/搜索