[hadoop] map函数中使用FileSystem对象出现java.lang.NullPointerException的原因及解决办法
问题描述:
在hadoop中处理多个文件,其中每个文件一个map。
我使用的方法为生成一个文件,文件中包含所有要压缩的文件在HDFS上的完整路径。每个map 任务获得一个路径名作为输入。
在eclipse中调试时,map中处理hdfs上的文件用到的FileSystem对象为整个class中的静态成员变量,在eclipse中运行没有错误,打包成jar提交到集群运行,就会在map函数中
FileStatus fileStatus = tmpfs.getFileStatus(inputdir);
这一句报错java.lang.NullPointerException 卡了2天,不知到是哪错了。 昨天下午才想到应该是tmpfs是一个空对象,没有赋值。
虽然tmpfs 在最外层的类中声明为静态变量,并且在main函数中有赋值,然而在map函数内还是NullPointer。tmpfs赋值就解决了问题。
之后改为在map函数内部给
这也验证了eclipse中调试运行程序是在本地运行,只不过是调用了hadoop的类库,在8088端口的监控网页上也看不到提交应用的信息。
必须打包成jar,用bin/hadoop jar运行才能真正提交到集群运行。而且main函数内部初始化的静态变量,在map中还是未初始化状态,猜测是集群上运行的map任务,和本地的main函数是互相独立的关系。 改正后的代码:
@Override
public void map(Object key, Text value,
Context context)
throws
IOException, InterruptedException {
Configuration conf = context. getConfiguration();
FileSystem tmpfs = FileSystem.get(URI.create("hdfs://192.168.2.2:9000"), conf); Path inputdir = new Path(value.toString()); //获取待处理的文件的Path对象
FileStatus fileStatus = tmpfs.getFileStatus(inputdir); //做相应处理 context.write(new Text(value.toString()), new Text(" "));
}
Configuration conf = context. getConfiguration();//通过context获取job中配置的Configuration对象
FileSystem tmpfs = FileSystem.get(URI.create("hdfs://192.168.2.2:9000"), conf); //需要在map函数内部赋值
附录:
如何处理多个文件,其中每个文件一个map?
例如这样一个问题,在集群上压缩(zipping)一些文件,你可以使用以下几种方法:
- 使用Hadoop Streaming和用户编写的mapper脚本程序:
- 生成一个文件,文件中包含所有要压缩的文件在HDFS上的完整路径。每个map 任务获得一个路径名作为输入。
- 创建一个mapper脚本程序,实现如下功能:获得文件名,把该文件拷贝到本地,压缩该文件并把它发到期望的输出目录。
- 使用现有的Hadoop框架:
- 在main函数中添加如下命令:
FileOutputFormat.setCompressOutput(conf, true);
FileOutputFormat.setOutputCompressorClass(conf, org.apache.hadoop.io.compress.GzipCodec.class);
conf.setOutputFormat(NonSplitableTextInputFormat.class);
conf.setNumReduceTasks(0); - 编写map函数:
public void map(WritableComparable key, Writable value,
OutputCollector output,
Reporter reporter) throws IOException {
output.collect((Text)value, null);
} - 注意输出的文件名和原文件名不同
- 在main函数中添加如下命令:
[hadoop] map函数中使用FileSystem对象出现java.lang.NullPointerException的原因及解决办法的更多相关文章
- 在Servlet使用getServletContext()获取ServletContext对象出现java.lang.NullPointerException(空指针)异常的解决办法
今天遇到了一个在servlet的service方法中获取ServletContext对象出现java.lang.NullPointerException(空指针)异常,代码如下: 1 //获取Serv ...
- 轻松搞定项目中的空指针异常Caused by: java.lang.NullPointerException: null
大家在项目测试过程中,是不是经常会碰到这个空指针异常呢Caused by: java.lang.NullPointerException: null 当大家遇到这个问题,大家是怎么处理?自己解决还是让 ...
- Eclipse中启动tomcat报错java.lang.OutOfMemoryError: PermGen space的解决方法
有的项目引用了太多的jar包,或者反射生成了太多的类,异或有太多的常量池,就有可能会报java.lang.OutOfMemoryError: PermGen space的错误, 我们知道可以通过jvm ...
- Struts2中使用execAndWait后,在 Action中调用getXXX()方法报告java.lang.NullPointerException异常的原因和解决方法
使用 Struts2 编写页面,遇到一个要长时间运行的接口,因此增加了一个execAndWait ,结果在 Action 中调用 getContext()的时候报告异常 ActionContext c ...
- oracle中记录被另一个用户锁住的原因与解决办法
oracle数据中删除数据时提示“记录被另一个用户锁住” 解决方法: 1.查看数据库锁,诊断锁的来源及类型: select object_id,session_id,locked_mode from ...
- 在Android程序中使用Modbus协议时报 java.net.SocketException: recvfrom failed: ECONNRESET解决办法
最近在开发基本Modbus协议的Android端PLC控制程序,C#版程序没有任何问题,移到JAVA下出现各种问题,其中比较苦恼的是java.net.SocketException: recvfrom ...
- Spring MVC普通类或工具类中调用service报空空指针的解决办法(调用service报java.lang.NullPointerException)
当我们在非Controller类中应用service的方法是会报空指针,如图: 这是因为Spring MVC普通类或工具类中调用service报空null的解决办法(调用service报java.la ...
- 函数中的 arguments 对象
JavaScript函数具有像数组一样的对象,这些对象称为arguments,与传递给函数的参数相对应.传递给JavaScript函数的所有参数都可以使用arguments对象来引用. 现在我们开始学 ...
- spark map函数中使用println无法输出
问题 // 每个点为hardData中的一个Array val hardData = spark.read.textFile(args(0)).rdd .map(_.split(" &quo ...
随机推荐
- alsa-lib及alsa-utils成功移植(原…
准备工作 alsa-lib版本:alsa-lib-1.0.23.tar.bz2 alsa-util版本:alsa-utils-1.0.23.tar.bz2 其他版本的alsa-lib和alsa-uti ...
- ZOJ 3956 Course Selection System
题意 有n节课可供选择,每节课都有两个值Hi和Ci,如果学生选择了m节课(x1,x2,....,xm),则它的舒适值被定义为: //这里没有公式((lll¬ω¬)),因为那个图片我保存不下来≧ ﹏ ≦ ...
- SSH隧道技术简介
本文的受众如果你遇到了以下问题,那么你应该阅读这篇文章 我听说过这种技术,我对它很感兴趣 我想在家里访问我在公司的机器(写程序,查数据,下电影). 公司为了防止我们用XX软件封锁了它的端口或者服务器地 ...
- Linux查看内存,负载状态
Linux查看内存,负载状态 查看内存使用情况 www.ahlinux.com cat /proc/meminfo MemTotal: 16332644 kB MemFree: ...
- oracle高级查询练习题
1. 列出员工表中每个部门的员工数和部门编号 Select deptno,count(*) from emp group by deptno; 补充1:列出员工表中,员工人数大于3的部门编号和员工人 ...
- SpringMVC——处理 JSON:使用 HttpMessageConverter
一.SpringMVC处理JSON流程 1. 加入 jar 包: jackson-annotations-2.1.5.jarjackson-core-2.1.5.jarjackson-databind ...
- Struts2 让跳转指定执行某个方法
很多时候,我们想让jsp页面中的某个超链接,点击后执行后台的某个方法,里面该如何做呢? 这里方法很多种 我举例两种: 1.在struts.xml配置,配置如下: <package name=&q ...
- Ubuntu安装开发版pidgin支持lwqq插件
sudo add-apt-repository ppa:lainme/pidgin-lwqq """添加pidgin-lwqq源""" s ...
- Spring注解:Enable相关注解
@EnableXXX:可以用于取代xml配置中的一些配置,被该注解所标注的类,其中被@Bean标注的方法,一般就用于返回和EnableXXX的XXX相关的Bean,Bean中一般有XXX相关的注解 同 ...
- C# Winform Cef 闪屏
C# Winform Cef 闪黑屏 CefSettings cs = new CefSettings(); cs.CefCommandLineArgs.Add(");//禁用GPU Cef ...