如何在win7下的eclipse中调试Hadoop2.2.0的程序

如何在win7下的eclipse中调试Hadoop2.2.0的程序,第1张

在上一篇博文中,散仙已经讲了Hadoop的单机伪分布的部署,本篇,散仙就说下,如何eclipse中调试hadoop2.2.0,如果你使用的还是hadoop1.x的版本,那么,也没事,散仙在以前的博客里,也写过eclipse调试1.x的hadoop程序,两者最大的不同之处在于使用的eclipse插件不同,hadoop2.x与hadoop1.x的API,不太一致,所以插件也不一样,我们只需要使用分别对应的插件即可. 

下面开始进入正题: 

序号    名称    描述  

1    eclipse    Juno Service Release 4.2的本  

2     *** 作系统    Windows7  

3    hadoop的eclipse插件    hadoop-eclipse-plugin-2.2.0.jar  

4    hadoop的集群环境    虚拟机Linux的Centos6.5单机伪分布式  

5    调试程序    Hellow World  

遇到的几个问题如下: 

Java代码  

java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries.

解决办法: 

在org.apache.hadoop.util.Shell类的checkHadoopHome()方法的返回值里写固定的 

本机hadoop的路径,散仙在这里更改如下: 

Java代码  

private static String checkHadoopHome() {

// first check the Dflag hadoop.home.dir with JVM scope

//System.setProperty("hadoop.home.dir", "...")

String home = System.getProperty("hadoop.home.dir")

// fall back to the system/user-global env variable

if (home == null) {

home = System.getenv("HADOOP_HOME")

}

try {

// couldn't find either setting for hadoop's home directory

if (home == null) {

throw new IOException("HADOOP_HOME or hadoop.home.dir are not set.")

}

if (home.startsWith("\"") && home.endsWith("\"")) {

home = home.substring(1, home.length()-1)

}

// check that the home setting is actually a directory that exists

File homedir = new File(home)

if (!homedir.isAbsolute() || !homedir.exists() || !homedir.isDirectory()) {

throw new IOException("Hadoop home directory " + homedir

+ " does not exist, is not a directory, or is not an absolute path.")

}

home = homedir.getCanonicalPath()

} catch (IOException ioe) {

if (LOG.isDebugEnabled()) {

LOG.debug("Failed to detect a valid hadoop home directory", ioe)

}

home = null

}

//固定本机的hadoop地址

home="D:\\hadoop-2.2.0"

return home

}

第二个异常,Could not locate executable D:\Hadoop\tar\hadoop-2.2.0\hadoop-2.2.0\bin\winutils.exe in the Hadoop binaries.  找不到win上的执行程序,可以去下载bin包,覆盖本机的hadoop跟目录下的bin包即可 

第三个异常: 

Java代码  

Exception in thread "main" java.lang.IllegalArgumentException: Wrong FS: hdfs://192.168.130.54:19000/user/hmail/output/part-00000, expected: file:///

at org.apache.hadoop.fs.FileSystem.checkPath(FileSystem.java:310)

at org.apache.hadoop.fs.RawLocalFileSystem.pathToFile(RawLocalFileSystem.java:47)

at org.apache.hadoop.fs.RawLocalFileSystem.getFileStatus(RawLocalFileSystem.java:357)

at org.apache.hadoop.fs.FilterFileSystem.getFileStatus(FilterFileSystem.java:245)

at org.apache.hadoop.fs.ChecksumFileSystem$ChecksumFSInputChecker.<init>(ChecksumFileSystem.java:125)

at org.apache.hadoop.fs.ChecksumFileSystem.open(ChecksumFileSystem.java:283)

at org.apache.hadoop.fs.FileSystem.open(FileSystem.java:356)

at com.netease.hadoop.HDFSCatWithAPI.main(HDFSCatWithAPI.java:23)

出现这个异常,一般是HDFS的路径写的有问题,解决办法,拷贝集群上的core-site.xml和hdfs-site.xml文件,放在eclipse的src根目录下即可。 

第四个异常: 

Java代码  

Exception in thread "main" java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/StringI)Z

出现这个异常,一般是由于HADOOP_HOME的环境变量配置的有问题,在这里散仙特别说明一下,如果想在Win上的eclipse中成功调试Hadoop2.2,就需要在本机的环境变量上,添加如下的环境变量: 

(1)在系统变量中,新建HADOOP_HOME变量,属性值为D:\hadoop-2.2.0.也就是本机对应的hadoop目录 

(2)在系统变量的Path里,追加%HADOOP_HOME%/bin即可 

以上的问题,是散仙在测试遇到的,经过对症下药,我们的eclipse终于可以成功的调试MR程序了,散仙这里的Hellow World源码如下: 

Java代码  

package com.qin.wordcount

import java.io.IOException

import org.apache.hadoop.fs.FileSystem

import org.apache.hadoop.fs.Path

import org.apache.hadoop.io.IntWritable

import org.apache.hadoop.io.LongWritable

import org.apache.hadoop.io.Text

import org.apache.hadoop.mapred.JobConf

import org.apache.hadoop.mapreduce.Job

import org.apache.hadoop.mapreduce.Mapper

import org.apache.hadoop.mapreduce.Reducer

import org.apache.hadoop.mapreduce.lib.input.FileInputFormat

import org.apache.hadoop.mapreduce.lib.input.TextInputFormat

import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat

import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat

/***

*

* Hadoop2.2.0测试

* 放WordCount的例子

*

* @author qindongliang

*

* hadoop技术交流群:  376932160

*

*

* */

public class MyWordCount {

/**

* Mapper

*

* **/

private static class WMapper extends Mapper<LongWritable, Text, Text, IntWritable>{

private IntWritable count=new IntWritable(1)

private Text text=new Text()

@Override

protected void map(LongWritable key, Text value,Context context)

throws IOException, InterruptedException {

String values[]=value.toString().split("#")

//System.out.println(values[0]+"========"+values[1])

count.set(Integer.parseInt(values[1]))

text.set(values[0])

context.write(text,count)

}

}

/**

* Reducer

*

* **/

private static class WReducer extends Reducer<Text, IntWritable, Text, Text>{

private Text t=new Text()

@Override

protected void reduce(Text key, Iterable<IntWritable> value,Context context)

throws IOException, InterruptedException {

int count=0

for(IntWritable i:value){

count+=i.get()

}

t.set(count+"")

context.write(key,t)

}

}

/**

* 改动一

* (1)shell源码里添加checkHadoopHome的路径

* (2)974行,FileUtils里面

* **/

public static void main(String[] args) throws Exception{

//      String path1=System.getenv("HADOOP_HOME")

//      System.out.println(path1)

//      System.exit(0)

JobConf conf=new JobConf(MyWordCount.class)

//Configuration conf=new Configuration()

//conf.set("mapred.job.tracker","192.168.75.130:9001")

//读取person中的数据字段

// conf.setJar("tt.jar")

//注意这行代码放在最前面,进行初始化,否则会报

/**Job任务**/

Job job=new Job(conf, "testwordcount")

job.setJarByClass(MyWordCount.class)

System.out.println("模式:  "+conf.get("mapred.job.tracker"))

// job.setCombinerClass(PCombine.class)

// job.setNumReduceTasks(3)//设置为3

job.setMapperClass(WMapper.class)

job.setReducerClass(WReducer.class)

job.setInputFormatClass(TextInputFormat.class)

job.setOutputFormatClass(TextOutputFormat.class)

job.setMapOutputKeyClass(Text.class)

job.setMapOutputValueClass(IntWritable.class)

job.setOutputKeyClass(Text.class)

job.setOutputValueClass(Text.class)

String path="hdfs://192.168.46.28:9000/qin/output"

FileSystem fs=FileSystem.get(conf)

Path p=new Path(path)

if(fs.exists(p)){

fs.delete(p, true)

System.out.println("输出路径存在,已删除!")

}

FileInputFormat.setInputPaths(job, "hdfs://192.168.46.28:9000/qin/input")

FileOutputFormat.setOutputPath(job,p )

System.exit(job.waitForCompletion(true) ? 0 : 1)

}

}

控制台,打印日志如下: 

Java代码  

INFO - Configuration.warnOnceIfDeprecated(840) | mapred.job.tracker is deprecated. Instead, use mapreduce.jobtracker.address

模式:  local

输出路径存在,已删除!

INFO - Configuration.warnOnceIfDeprecated(840) | session.id is deprecated. Instead, use dfs.metrics.session-id

INFO - JvmMetrics.init(76) | Initializing JVM Metrics with processName=JobTracker, sessionId=

WARN - JobSubmitter.copyAndConfigureFiles(149) | Hadoop command-line option parsing not performed. Implement the Tool interface and execute your application with ToolRunner to remedy this.

WARN - JobSubmitter.copyAndConfigureFiles(258) | No job jar file set.  User classes may not be found. See Job or Job#setJar(String).

INFO - FileInputFormat.listStatus(287) | Total input paths to process : 1

INFO - JobSubmitter.submitJobInternal(394) | number of splits:1

INFO - Configuration.warnOnceIfDeprecated(840) | user.name is deprecated. Instead, use mapreduce.job.user.name

INFO - Configuration.warnOnceIfDeprecated(840) | mapred.output.value.class is deprecated. Instead, use mapreduce.job.output.value.class

INFO - Configuration.warnOnceIfDeprecated(840) | mapred.mapoutput.value.class is deprecated. Instead, use mapreduce.map.output.value.class

INFO - Configuration.warnOnceIfDeprecated(840) | mapreduce.map.class is deprecated. Instead, use mapreduce.job.map.class

INFO - C

我是用WIN7旗舰版的.瑞星可以正常的使用,安装的时候也没有出现这样的问题.

首先检查一下自己的序列号是不是出现了问题.

然后你可以在这里输入ID和序列号看看能不能登录

http://update.rising.com.cn/personvalidate/pcver/upgrade.htm

如果可以,那么说明瑞星的安装包出了问题,可能使用的安装包是很早版本的,可以在上面地址登录以后下载新的瑞星安装包,再尝试一下安装.

如果不能登录,说明可能是序列号问题,请确认序列号可用后与瑞星的客服联系解决问题.

下面第七个就是ID啦

网络术语大扫盲(2)-中文缩写指南1

1.IT是什么意思

IT是指信息技术,即英文Information Technology 的缩写.

2.bt是什么意思?

BT是一种P2P共享软件,全名叫"BitTorrent",中文全称:"比特流"又名"变态下载",论坛

中说某BT,则是"变态"的意思.

3.diy是什么意思?

DIY是每个电脑爱好者熟悉的新名词,是英文Do It Yourself的首字母缩写,自己动手制

作的意思,硬件爱好者也被俗称DIYer.

4.oem是什么意思?

OEM是英文Original Equipment Manufacturer的缩写,意思是原设备制造商。

5.xp是什么意思?

XP,是英文Experience(体验)的缩写, 自从微软发布Office XP后,成为软件流行命名

概念.

6.ps是什么意思?

在网上,常用软件一般都用缩写代替photoshop简称ps,DreamWeaver简称dw,等等..

play station

photoshop

parenthesis

7.ID是什么意思?

ID是英文IDentity的缩写,ID是身份标识号码的意思.

8.msn是什么意思?

MSN 即MICROSOFT NETWORK, 是微软公司的一个门户站点. MSN作为互联网上最受欢迎的

一个门户, 具备了为用户提供了在线调查、浏览和购买各种产品和服务的能力.

9.dj是什么意思?

DJ是DISCO JOCIKEY(唱片骑士)的英文缩写,以DISCO为主,DJ这两个字现在已经代表了最

新、最劲、最毒、最HIGH的Muisc。

10.URL是什么意思?

URL是英文Uniform Resoure Locator的缩写,即统一资源定位器,它是WWW网页的地址,如

http://www.99du.net.

11.ceo是什么意思?

CEO(Chief 执行utive Officer),即首席执行官,源自美国20世纪60年代进行公司治理

结构改革创新时.

12.ova是什么意思?

OVA是英文录象带的缩写.

13.vip什么意思?

VIP是英文Very Important Person的缩写,就是贵宾的意思。

14.mc是什么意思?

MC的意思是Micphone Controller的意思,翻译差不多是“控制麦克风的人”。也可以

理解为Rapper,很多Rap都在自己的艺名前面加上“MC”,比如台湾的MChotdog,香港

的MCYan,美国的MC Hammer等。

15.cs是什么意思?

CS是非常流行的网络游戏,中文名是反恐精英。

16.banner是什么意思?logo是什么意思?

BANNER是横幅广告,logo是图标广告.

17.ftp是什么意思?

FTP是英文File Transfer Protocol的缩写,即文本传输协议。

18.ip是什么意思?

为了使Internet上的众多电脑主机在通信时能够相互识别,Internet上的每一台主机都

分配有一个唯一的32位地址,该地址称为IP地址,也称作网际地址。IP地址由4个数组

成,每个数可取值0~255,各数之间用一个点号“.”

19.bug是什么意思

在英语中,bug表示“臭虫”的意思。但在电脑行业却把电脑内部发生的小故障也称为

“bug”,如程序运行不畅等,这种叫法也许与臭虫不无关系。有人猜测,之所以用

bug,是因为它非常简洁明快。其次,臭虫也确实使人连休息也不得安宁,如同电脑中

的小故障一样,它虽小,但麻烦还是很大的。

20.pm是什么意思

Private Messages 论坛短信


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/7795906.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-10
下一篇 2023-04-10

发表评论

登录后才能评论

评论列表(0条)

保存