hdfs下载出现Exception in thread "main" java.lang.NullPointerException
2016-05-23 11:07
260 查看
一.从hdfs文件系统下载文件到本地文件系统时Java代码。
二.运行程序错误代码。
三.修改方式。
四.错误原因.
在使用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实现校验的工作。
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) | 定义 |
Local | file | fs.LocalFileSystem | 支持有客户端校验和本地文件系统。带有校验和的本地系统文件在fs.RawLocalFileSystem中实现。 |
相关文章推荐
- java修饰符简单总结,this关键字的不完全理解.
- Spring 事务机制详解
- eclipse导入工程中文乱码问题
- ueditor1.3.6jsp版在struts2应用中上传图片报"未找到上传文件"解决方案
- 通过org.springframework.web.filter.CharacterEncodingFilter定义Spring web请求的编码
- eclipse下新建Maven项目index.xml文件报错
- java入门、java学习:如何理解Java面向对象
- 最大回文子串(java)
- 多个Form提交同一地址技巧(form序列化提交 java反序列化表单)
- 个人学习-java-多线程
- java同步锁中sychronized和Lock接口类的区别
- java学习笔记-JavaWeb篇二
- java之google style
- Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)
- MyEclipse文件查找技巧总结
- 接入支付宝即时到账接口-java
- MVC+EF+Spring.Net代码生成器
- java的同步机制synchronized
- java多线程
- Java线程池理解