hdfs下载文件时出现Exception in thread "main" java.lang.NullPointerException
2016-10-06 18:17
537 查看
一.从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实现校验的工作。
点击(此处)折叠或打开
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中实现 |
相关文章推荐
- hdfs下载出现Exception in thread "main" java.lang.NullPointerException
- 从零开始使用eclipse Ant脚本语言生成.h头文件:[javah] Exception in thread "main" java.lang.NullPointerException
- Exception in thread "main" java.lang.NullPointerException java报空指针异常
- NDK: ant 错误 [javah] Exception in thread "main" java.lang.NullPointerException
- 项目启动时出现Exception in thread "HouseKeeper" java.lang.NullPointerException
- Exception in thread "main" java.lang.NullPointerException问题
- Exception in thread "main" java.lang.NullPointerException
- 全局变量和局部变量重复之this.name.toString());Exception in thread "main" java.lang.NullPointerException
- 20170204Exception in thread "main" java.lang.NullPointerException
- Exception in thread "main" java.lang.NullPointerException
- 对象数组报错“空指针”:Exception in thread "main" java.lang.NullPointerException
- Java报错异常-----Exception in thread "main" java.lang.NullPointerException
- 使用eclipse编译出现java.lang.NoClassDefFoundError Exception in thread "main"
- 关于lucene的demo运行时出现Exception in thread "main" java.lang.NoClassDefFoundError错误
- Eclipse下好使,但是cmd下执行java运行class文件提示Exception in thread "main" java.lang.NoClassDefFoundError问题
- myeclipse中发送邮件出现Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream
- eclipse出现Exception in thread "main" java.lang.NoClassDefFoundError
- Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
- java运行出现:Exception in thread "main" java.lang.NOClassDefFoundError:Hello(wrong name:hello/Hello)
- Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException