使用Eclipse运行Hadoop 2.x MapReduce程序常见问题

1、 当我们编写好MapReduce程序,点击Run on Hadoop的时候,Eclipse控制台输出如下内容:

这个信息告诉我们没有找到log4j.properties文件。如果没有这个文件,程序运行出错的时候,就没有打印日志,因此我们会很难调试。

解决方法:复制$HADOOP_HOME/etc/hadoop/目录下的log4j.properties文件到MapReduce项目 src文件夹下。

2、当执行MapReduce程序的时候,Eclipse可能会报告堆益处的错误。 此时,MapReduce程序执行的out目录已经被创建,但是此时目录为空,再重新运行程序之前我们需要删除这个输出目录。如下图所示:

                                           

分析:首先我们可以输入命令(java -client -XX:+UnlockDiagnosticVMOptions -XX:+PrintFlagsFinal -version | grep -i heapsize),来查看当前JDK支持的最大堆。然后在此基础上增加堆大小。

解决方案:在当前运行程序的运行配置中设置VM arguments参数,如下图所示:

3.Hadoop的本地库(Native Libraries)介绍

Hadoop是使用Java语言开发的,但是有一些需求和操作并不适合使用java,所以就引入了本地库(Native Libraries)的概念,通过本地库,Hadoop可以更加高效地执行某一些操作。

目前在Hadoop中,本地库应用在文件的压缩上面:

在使用这两种压缩方式的时候,Hadoop默认会从$HADOOP_HOME/lib/native/Linux-*目录中加载本地库。

如果加载成功,输出为:

DEBUG util.NativeCodeLoader - Trying to load the custom-built native-hadoop library...
INFO util.NativeCodeLoader - Loaded the native-hadoop library

如果加载失败,输出为:

INFO util.NativeCodeLoader - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

在Hadoop的配置文件core-site.xml中可以设置是否使用本地库:

<property>
  <name>hadoop.native.lib</name>
  <value>true</value>
  <description>Should native hadoop libraries, if present, be used.</description>
</property>

Hadoop默认的配置为启用本地库。

另外,可以在环境变量中设置使用本地库的位置:

export JAVA_LIBRARY_PATH=/path/to/hadoop-native-libs

有的时候也会发现Hadoop自带的本地库无法使用,这种情况下就需要自己去编译本地库了。在$HADOOP_HOME目录下,使用如下命令即可:

ant compile-native

编译完成后,可以在$HADOOP_HOME/build/native目录下找到相应的文件,然后指定文件的路径或者移动编译好的文件到默认目录下即可。

时间: 2024-10-20 23:49:20

使用Eclipse运行Hadoop 2.x MapReduce程序常见问题的相关文章

eclipse运行hadoop程序报错:Connection refused: no further information

log4j:WARN No appenders could be found for logger (org.apache.hadoop.conf.Configuration.deprecation). log4j:WARN Please initialize the log4j system properly. log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info. Exceptio

一脸懵逼学习Hadoop中的MapReduce程序中自定义分组的实现

1:首先搞好实体类对象: write 是把每个对象序列化到输出流,readFields是把输入流字节反序列化,实现WritableComparable,Java值对象的比较:一般需要重写toString(),hashCode(),equals()方法 1 package com.areapartition; 2 3 import java.io.DataInput; 4 import java.io.DataOutput; 5 import java.io.IOException; 6 7 im

在Hadoop上运行基于RMM中文分词算法的MapReduce程序

原文:http://xiaoxia.org/2011/12/18/map-reduce-program-of-rmm-word-count-on-hadoop/ 在Hadoop上运行基于RMM中文分词算法的MapReduce程序 23条回复 我知道这个文章标题很“学术”化,很俗,让人看起来是一篇很牛B或者很装逼的论文!其实不然,只是一份普通的实验报告,同时本文也不对RMM中文分词算法进行研究.这个实验报告是我做高性能计算课程的实验里提交的.所以,下面的内容是从我的实验报告里摘录出来的,当作是我学

Hadoop 调试第一个mapreduce程序过程详细记录总结

     开发环境搭建参考    <Hadoop 在Windows7操作系统下使用Eclipse来搭建hadoop开发环境>:http://blog.itpub.net/26230597/viewspace-1370205/ 1,程序代码如下: ? package wc; import java.io.IOException;import java.util.StringTokenizer;import org.apache.hadoop.conf.Configuration;import o

Hadoop之MapReduce程序应用一

摘要:MapReduce程序处理专利数据集. 关键词:MapReduce程序   专利数据集 数据源:专利引用数据集cite75_99.txt.(该数据集可以从网址http://www.nber.org/patents/下载) 问题描述: 读取专利引用数据集并对它进行倒排.对于每一个专利,找到那些引用它的专利并进行合并.top5输出结果如下: 1                                3964859, 4647229 10000                      

MapReduce程序运行模式

本地运行模式: mapreduce程序是被提交给LocalJobRunner在本地以单进程的形式运行 而处理的数据及输出结果可以在本地文件系统,也可以在hdfs上 怎样实现本地运行?写一个程序,不要带集群的配置文件 本质是程序的conf中是否有mapreduce.framework.name=local以及yarn.resourcemanager.hostname参数 本地模式非常便于进行业务逻辑的debug,只要在eclipse中打断点即可 集群运行模式: 将mapreduce程序提交给yar

linux上安装eclipse并配置mapreduce程序开发环境

我们打算在linux(centos)上安装eclipse,并配置好mapreduce程序开发环境. 第一步:下载并安装eclipse(前提是已经安装好JDK) 在linux系统中打开浏览器,输入网址:http://archive.eclipse.org/eclipse/downloads/我们选择3.7.2版本. 下载下来后,文件存在于: [[email protected] Downloads]$ ll total 178052 -rw-rw-r--. 1 liuqingjie liuqing

运行hadoop的Wordcount程序报错java.lang.ClassNotFoundException: WordCount$TokenizerMapper

在运行hadoop的官方Wordcount程序时报错 java.lang.ClassNotFoundException: WordCount$TokenizerMapper 提示信息为找不到TokenizerMapper类,但程序师官方的,应该没错. 打包到Linux上可以运行,确定不是程序的错. 然后在网上搜索一番,看到有人说可能是eclipse版本原因,试了一下就ok了 使用的eclipse版本是3.5.1. 遇到此问题的兄弟们可以试一下

MapReduce程序(一)——wordCount

写在前面:WordCount的功能是统计输入文件中每个单词出现的次数.基本解决思路就是将文本内容切分成单词,将其中相同的单词聚集在一起,统计其数量作为该单词的出现次数输出. 1.MapReduce之wordcount的计算模型 1.1 WordCount的Map过程 假设有两个输入文本文件,输入数据经过默认的LineRecordReader被分割成一行行数据,再经由map()方法得到<key, value>对,Map过程如下: 得到map方法输出的< key,value>对后,Ma