hdfs下载出现Exception in thread "main" java.lang.NullPointerException

Posted ITboy-Bear

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hdfs下载出现Exception in thread "main" java.lang.NullPointerException相关的知识,希望对你有一定的参考价值。

一.从hdfs文件系统下载文件到本地文件系统时Java代码。  

    import java.net.URI;
    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.fs.FileSystem;
    import org.apache.hadoop.fs.Path;
    public class getfile 
	    public static void main(String[] args) throws Exception
	 	    FileSystem fs=FileSystem.get(new URI("hdfs://192.168.11.12:9000"),new Configuration());
		    Path src=new Path("/data/wordcount/file1");
		    Path dst=new Path("D:\\\\app");
		    fs.copyToLocalFile(src, dst);
		    fs.copyToLocalFile(false,src, dst,true);
	    
    

二.运行程序错误代码。  

   Exception in thread "main" java.lang.NullPointerException
   at java.lang.ProcessBuilder.start(ProcessBuilder.java:459)
   at org.apache.hadoop.util.Shell.runCommand(Shell.java:149)
   at org.apache.hadoop.util.Shell.run(Shell.java:134)
   at org.apache.hadoop.util.Shell$ShellCommandExecutor.execute(Shell.java:286)
   at org.apache.hadoop.util.Shell.execCommand(Shell.java:354)
   at org.apache.hadoop.util.Shell.execCommand(Shell.java:337)
   at org.apache.hadoop.fs.RawLocalFileSystem.execCommand(RawLocalFileSystem.java:481)
   at org.apache.hadoop.fs.RawLocalFileSystem.setPermission(RawLocalFileSystem.java:473)
   at org.apache.hadoop.fs.FilterFileSystem.setPermission(FilterFileSystem.java:280)
   at org.apache.hadoop.fs.ChecksumFileSystem.create(ChecksumFileSystem.java:372)
   at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:479)
   at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:460)
   at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:367)
   at org.apache.hadoop.fs.FileUtil.copy(FileUtil.java:208)
   at org.apache.hadoop.fs.FileUtil.copy(FileUtil.java:199)
   at org.apache.hadoop.fs.FileUtil.copy(FileUtil.java:142)
   at org.apache.hadoop.fs.FileSystem.copyToLocalFile(FileSystem.java:1211)
   at org.apache.hadoop.fs.FileSystem.copyToLocalFile(FileSystem.java:1192)
   ......
   .....
     而且下载的文件会成为 .crc文件并没有大小。

三.修改方式。 

       fs.copyToLocalFile(src, dst);改为fs.copyToLocalFile(false,src,dst,true);
       fs.copyToLocalFile)方法在源码中的代码如下
       public void copyToLocalFile(boolean delSrc, Path src, Path dst, boolean useRawLocalFileSystem) 
          throws IOException  
                  Configuration conf = getConf(); 
                  FileSystem local = null; 
                  if (useRawLocalFileSystem)  
                   local = getLocal(conf).getRawFileSystem(); 
                  
                  else  
                     local = getLocal(conf); 
                  
                  FileUtil.copy(this, src, local, dst, delSrc, conf);
       
 

 四.错误原因.   

      在使用copyToLocalFile(Path src, Path dst)方法时可能导致 setPermission文件本地文件效验失败.   

      因此使用copyToLocalFile( boolean delSrc,Path src, Path dst, boolean useRawLocalFileSystem)

         boolean delSrc 指是否将原文件删除

         Path src 指要下载的文件路径

         Path dst 指将文件下载到的路径

         boolean useRawLocalFileSystem 是否开启文件效验

 五. RawLocalFileSystem文件

        hadoop是一个综合文件系统,并不等价于hdfs文件系统。hadoop集成了众多的文件系统, hdfs仅仅是hadoop旗舰级文件系统。Hadoop的这个特点充分体现了hadoop的优良的可扩展性。在hadoop里,hadoop定义了一个抽象的文件系统的概念,类:org.apache.hadoop.fs.FileSystm,这个抽象类用来定义hadoop中的一个文件系统接口,只要某个文件系统实现了这个接口,就可以作为hadoop支持的文件系统。

      Hadoop LocalFileSystem是客户端校验的类。在使用LocalFileSystem写文件时,会透明的创建一个.filename.crc的文件。 校验文件大小的字节数由io.bytes.per.checksum属性设置,默认是512bytes,即每512字节就生成一个CRC-32校验和。.filename.crc文件会存 io.bytes.per.checksum的信息。在读取的时候,会根据此文件进行校验。事实上LocalFileSystem是通过继承ChecksumFileSystem实现校验的工作。


文件系统URI方案   Java实现(org.apache.hadoop)定义
Localfilefs.LocalFileSystem支持有客户端校验和本地文件系统。带有校验和的本地系统文件在fs.RawLocalFileSystem中实现。

以上是关于hdfs下载出现Exception in thread "main" java.lang.NullPointerException的主要内容,如果未能解决你的问题,请参考以下文章

hadoop错误FATAL org.apache.hadoop.hdfs.server.namenode.NameNode Exception in namenode join java.io.IOE

Exception in thread "main" java.lang.NullPointerException

C++程序运行后 出现对话框错误 提示 Unhandle exception in XX . exe (神马神马.DLL):M VC exception

LD50CALC.EXE文件无法运行,.提示:Exception EReadError in module 。。。(补充注明)

React-native Exception in thread "main" java.lang.RuntimeException: gradle-2.14.1-all.zip(

React-native Exception in thread "main" java.lang.RuntimeException: gradle-2.14.1-all.zip(