转自:http://www.cnblogs.com/justinzhang/p/4983673.html

介绍了如何将Maven依赖的包一起打包进jar包。使用maven-assembly打成jar后,将这个jar提供给其他工程引用的时候,报出如下错误:

log4j:WARN No appenders could be found for logger (org.apache.hadoop.metrics2.lib.MutableMetricsFactory).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Exception in thread "main" java.io.IOException: No FileSystem for scheme: hdfsat org.apache.hadoop.fs.FileSystem.getFileSystemClass(FileSystem.java:2421)at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2428)at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:88)at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:2467)at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:2449)at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:367)at org.apache.hadoop.fs.FileSystem$1.run(FileSystem.java:156)at org.apache.hadoop.fs.FileSystem$1.run(FileSystem.java:153)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:1491)at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:153)at com.cetc.di.HDFSFileSystem.<init>(HDFSFileSystem.java:41)at callhdfs.Main.main(Main.java:11)

但是,在没有打成jar包的工程中,是可以正常运行的,通过长时间的观察和分析,发现与hadoop filesystem相关的包有两个,分别是:hadoop-hdfs-2.7.1.jar和hadoop-common-2.7.1.jar,这两个包的META-INF中的services目录下,都有如下的内容:

可以看到,这两个包的services目录下都有,org.apache.hadoop.fs.FileSystem这个文件。使用Maven-assembly-plugin的时候,会将所有依赖的包unpack,然后在pack,这样就会出现,同样的文件被覆盖的情况,我们看下打好的包中保留的是啥:

可以看到,maven-assembly-plugin(fatjar也是一样的),将hadoop-common.jar中的services内容打进了最终的jar包中,而hadoop-hdfs.jar包中,services的内容被覆盖了。由于我们的函数调用是这样写的:

  

在函数中使用了hdfs://IP : port的schema,而在生成的最终jar包中,无法找到这个schema的实现。所以就抛出了

java.io.IOException: No FileSystem for scheme: hdfs

解决方案是,在设置hadoop的配置的时候,显示设置这个类:"org.apache.hadoop.hdfs.DistributedFileSystem:

configuration.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");

然后在重新打包,一切works ok了。

jar包中META-INF中的services文件下的内容,牵涉到servicelocator的概念:

详细的介绍,看java官方文档:http://docs.oracle.com/javase/7/docs/api/java/util/ServiceLoader.html

查看这篇文章,可以知道servicelocator具体是如何运作的http://www.concretepage.com/java/serviceloader-java-example

java.io.IOException: No FileSystem for scheme: hdfs相关推荐

  1. java.io.IOException No FileSystem for scheme hdfs

    java.io.IOException: No FileSystem for scheme: hdfs 以下将转载两篇博文,博文中有解决方法. 1.Java下Maven打包项目解决方法 log4j:W ...

  2. java.io.IOException: No FileSystem for scheme: hdfs转载加自己笔记

    问题出现使用maven+scala+spark的时候,运行 java -jar xxx.jar的时候出现的: java.io.IOException: No FileSystem for scheme ...

  3. 【hadoop】java.io.IOException: No FileSystem for scheme: hdfs

    文章目录 1.概述 1.概述 异常 org.apache.hadoop.fs.UnsupportedFileSystemException: No FileSystem for scheme &quo ...

  4. Exception in thread main java.io.IOException: No FileSystem for scheme: hdfs

    如果是命令行spark-submit运行时出现这个问题,那么: import org.apache.spark.sql.{Dataset, SparkSession}val spark = Spark ...

  5. Eclipse运行Spark程序报错No FileSystem for scheme: hdfs

    场景:通过spark程序读取hdfs文件. 错误: Exception in thread "main" java.io.IOException: No FileSystem fo ...

  6. hadoop 修复hdfs中文件块错误 和文件修复 Error: java.io.IOException: Cannot obtain block length for LocatedBlock

    一:问题 Error: java.io.IOException: Cannot obtain block length for LocatedBlock Error: java.io.IOExcept ...

  7. PriviledgedActionException as:Administrator cause:java.io.IOException

    在windows下用Eclipse运行MapReduce程序会报错: 12/04/24 15:32:44 WARN util.NativeCodeLoader: Unable to load nati ...

  8. linux rm 提示io异常,Hadoop异常 java.io.IOException: Job status not available

    Hadoop集群上跑mapreduce,在job任务执行完成退出时报 java.io.IOException: Job status not available异常.Job client请求job状态 ...

  9. java.io.IOException: Incompatible clusterIDs

    Datanode未成功启动,查看slave节点的日志,发现报如下错误java.io.IOException: Incompatible clusterIDs. 原因如下: 执行hdfs namenod ...

最新文章

  1. 互联网跨界营销掘金“大数据”
  2. 2021 CSDN年度回忆录
  3. Map集合遍历的四种方式理解和简单使用
  4. java md5加密32位小写_Java生成MD5的方法,简单封装并转为32位小写
  5. 1.确保容器中的对象拷贝正确而高效
  6. 连锁反应装置积木好玩到尖叫!
  7. Java API 文档中的接口方法和抽象方法,有什么区别?
  8. freemarker html 乱码,Freemarker生成静态html文件及中文乱码的问题.pdf
  9. linux centos 7定时任务添加,CentOS 7 cron服务 定时任务使用方法
  10. Android ListView 疯狂之旅 之 《自定义下拉刷新功能的ListView》
  11. .net 反编译_向.net/Unity 程序员推荐一个十分因吹斯听的网站:sharplab.io
  12. Node.js下载安装及各种npm、cnpm、nvm、nrm配置(保姆式教程---提供全套安装包)---npm的安装与配置(2)
  13. 初学 快速幂 的理解
  14. linux 无法启动matlab,在具有 jre 1.7.0 _05的科学linux上,无法启动 MATLAB gui ( 指南)_matlab_开发99编程知识库...
  15. oracle主机自增,Oracle中实现ID自增
  16. 【并查集】NOI2015 洛谷 P1955 程序自动分析
  17. 第35课 函数对象分析(函数操作符()重载)
  18. linux 学习感悟
  19. C# Event Action与Invoke
  20. 【转载】Java分布式键-值缓存系统Voldemort

热门文章

  1. Ubuntu读取/root/.profile时发现错误:mesg:ttyname fa
  2. 我的WCF之旅(7):面向服务架构(SOA)和面向对象编程(OOP)的结合——如何实现Service Contract的继承...
  3. 软件疑难杂症解决办法汇总
  4. php循环方法实现先序、中序、后序遍历二叉树
  5. notepad++ html格式化
  6. 云创大会来了!全行业关心的热点都在这里
  7. 划分vlan,制作trunk口。使同一vlan能互相通讯
  8. [转]小心C# 5.0 中的await and async模式造成的死锁
  9. 我依然坚持建议你开始写博客 | 写给我的 2017
  10. eclipse下运行自定义maven命令