本文来自网络整理,原文存在一定的问题,而且有解释不是很清楚以及错误的地方,我在这里进行了详细的描述,希望对大家有用。
主要流程分为4部分:
1.安装cygwin配置sshd服务
2.配置hadoop
3.配置eclipse访问hadoop
4.配置eclipse测试mapreduce
第1步是最容易出现各种问题的地方,我在配置服务的时候前后遇到解决过一二十个问题,建议1、2步如果出现什么问题最好完全卸载删除然后严格按照步骤重新来。
1.安装cygwin配置sshd服务
安装cygwin是为了给hadoop提供linux环境,sshd是为了提供hadoop的通信方式。
1.1安装cygwin
从官网上下载安装就好,安装选项的时候在net模块下需要选择安装openssh和openssl两个子模块
【在安装过程中会让你搜索你要安装的模块,单击对应模块的bin属性,使他产生个叉,就表示他被选中了,详情请查看http://wenku.baidu.com/view/7e8dd50b52ea551810a6879c.html,此处我是把所有的与openssh和openssl相关的部分都安装了。】,其他default就好。
安装完成后需要配置系统变量,在Path里面加入cygwin的bin目录和usr/sbin目录
1.2取得cygwin的root权限
安装完成后运行一个bash窗口再关闭,在/home/目录下就会出现一个以你的用户名命名的文件夹(也就是cygwin为你创建了一个和windows一样的用户),例如我的就是/home/WANGCHAO,将这个文件夹改名为root
在/etc/passwd文件中找到你的用户名的哪一行,(WANGCHAO:unused:1000:513:U-WANGCHAO-PC\WANGCHAO,S-1-5-21-703394362-527095193-1703888876-1000:/home/WANGCHAO:/bin/bash)【小心此处会有三个这样类似的条目,administrator、guest、WANGCHAO,修改WANGCHAO这个条目】把这一行的用户名都改为root同时设置权限为最大(root:unused:0:0:U-WANGCHAO-PC\root,S-1-5-21-703394362-527095193-1703888876-1000:/home/root:/bin/bash)
保存完成以后再打开bash就会发现你的用户名变为了root并且通配符是#,这样就拿到了root权限并创建了root用户
1.3安装sshd服务 【可参看http://wenku.baidu.com/view/7e8dd50b52ea551810a6879c.html】
在bash里面运行ssh-host-config,第一个问题"Should privilege separation be used?"选no,“Do you want to install sshd as a service?”选yes,“enter the value of CYGWIN for the daemon:”,填“ntsec”,“Do you want to proceed anyway?”,选yes。其他都选no。后面就是创建sshd的用户名密码,自己设一下就好,最后告诉你"Have fun!"【这个是必须要出现的,不然表示你安装失败了】就是安装成功了,这时候执行net start sshd是启动不起来的,因为上一步配置服务的时候强制需要设置密码,但我们不需要密码,所以接下来在/etc/passwd里面追加一行
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
重开一个bash运行net start sshd如果没有返回错误代码就可以在win7自己的查看服务里面看是不是有一个交CYGWIN_SSHD的服务以及启动了.
1.4建立sshd和localhost互信
运行ssh localhost,会让你输入密码,这是因为此时localhost还不在服务的信任列表中【密码为你计算机的密码,此时不用登入】,需要
ssh-keygen -t dsa出现提示都回车就行。
cd ~/.ssh
cat id_dsa.pub >> authorized_keys 【此为一行命令】
然后ssh localhost如果不需要密码就是设置成功了.
如果不成功,检查authorized_keys和.ssh目录的权限
chmod 644 authorized_keys
cd ~
chmod 700 .ssh
应该就可以了.
至此第一步就完成了,这一步可能会有非常多的错误,目前写得是最简单且成功的方法,请务必按照说明的步骤顺序严格执行.
2.配置hadoop
2.1下载hadoop
从官网上下载hadoop1.0.2版本的hadoop1.0.2.tar.gz,之所以下这个版本是因为要想在eclipse里面跑需要编译插件及修改源码,网上有人把这个版本做好了,咱们可以直接拿来用,否则需要找源代码自己修改打包,我在官网没找到src的包,所以就使用了这个版本,不过最新也才1.0.4,这个还不错
2.2配置java系统变量
这一步是必须的,因为hadoop自己的代码实现的问题,所以你的jdk必须要安装在C:\program\目录下.请注意不是program files,如果不是对应的位置就重装一下jdk吧.
配置环境变量,例如我的jdk在C:\Program\Java\jdk1.7.0_05下面,新建JAVA_HOME变量,值为jdk下面的jre目录,即C:\Program\Java\jdk1.7.0_05\jre;
在Path里面加入jdk的bin目录C:\Program\Java\jdk1.7.0_05\bin
2.3配置hadoop
将hadoop1.0.2.tar.gz解压到cygwin的目录下,例如我放在了/home/root/,进入conf目录修改3个文件
2.3.1 hadoop-env.sh
在里面设置JAVA_HOME的路径,里面注释部分有写法示例,我的是export JAVA_HOME=C:\\Program\\Java\\jdk1.7.0_05\\jre
2.3.2 core-site.xml
在configuration节点里面加入两个property节点
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9100</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/var/log/hadoop/tmp</value>
<description>A base for other temporary directories</description>
</property>
第一个指明hadoop filesystem的路径,端口号可以自己设置;第二个指明fs的存储位置
2.3.3mapred-site.xml
在configuration节点里面加入property节点
<property>
<name>mapred.job.tracker</name>
<value>localhost:9101</value>
</property>
这个是指明mapreduce的时候的jobtrack路径,端口自己设
2.4启动hadoop
开一个bash进到hadoop的bin目录下,首先初始化filesystem的数据节点,运行./hadoop namenode -format;完成后运行./start-all.sh,如果没有出现有错误的信息就可以使用
./hadoop fs -ls / 命令看到hadoop 文件系统了
3.配置eclipse访问hadoop
3.1安装eclipse hadoop插件
在附件里面有我从别人那里下好的hadoop-eclipse-plugin-1.0.2.jar【可以直接从网上找到】,把它放到eclipse的plugins目录下,打开eclipse在Window->open perspective里面就可以看到一个大象图表的Map/Reduce选项,选出来在console同级那里的窗口就可以看到一个mapreduce location窗口了,右键新建一个,
location name: localhost
Map/Reduce master端口:9101(自己设置的对应端口)
dfs master端口:9100
user name:root
即可新建出来,这样在左边显示Project Explorer窗口就可以看到一个Dfs location的选项了,点开如果正确就可以看到之前配好的hadoop的目录结构和文件了
4.配置eclipse测试mapreduce
此目录刷新才可看到,在此处要常刷新。
这样可以正常的进行HDFS分布式文件系统的管理:上传,删除等操作。
为下面测试做准备,需要先建了一个目录 user/root/input2,然后上传两个txt文件到此目录:
intput1.txt 对应内容:Hello Hadoop Goodbye Hadoop
intput2.txt 对应内容:Hello World Bye World
HDFS的准备工作好了,下面可以开始测试了。
Hadoop工程
新建一个Map/Reduce Project工程,设定好本地的hadoop目录
新建一个测试类WordCountTest:
package com.hadoop.learn.test; import java.io.IOException; import java.util.StringTokenizer; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.Text; 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.output.FileOutputFormat; import org.apache.hadoop.util.GenericOptionsParser; import org.apache.log4j.Logger; /** * 运行测试程序 * * @author yongboy * @date 2012-04-16 */ public class WordCountTest { private static final Logger log = Logger.getLogger(WordCountTest.class); public static class TokenizerMapper extends Mapper<Object, Text, Text, IntWritable> { private final static IntWritable one = new IntWritable(1); private Text word = new Text(); public void map(Object key, Text value, Context context) throws IOException, InterruptedException { log.info("Map key : " + key); log.info("Map value : " + value); StringTokenizer itr = new StringTokenizer(value.toString()); while (itr.hasMoreTokens()) { String wordStr = itr.nextToken(); word.set(wordStr); log.info("Map word : " + wordStr); context.write(word, one); } } } public static class IntSumReducer extends Reducer<Text, IntWritable, Text, IntWritable> { private IntWritable result = new IntWritable(); public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException { log.info("Reduce key : " + key); log.info("Reduce value : " + values); int sum = 0; for (IntWritable val : values) { sum += val.get(); } result.set(sum); log.info("Reduce sum : " + sum); context.write(key, result); } } public static void main(String[] args) throws Exception { Configuration conf = new Configuration(); String[] otherArgs = new GenericOptionsParser(conf, args) .getRemainingArgs(); if (otherArgs.length != 2) { System.err.println("Usage: WordCountTest <in> <out>"); System.exit(2); } Job job = new Job(conf, "word count"); job.setJarByClass(WordCountTest.class); job.setMapperClass(TokenizerMapper.class); job.setCombinerClass(IntSumReducer.class); job.setReducerClass(IntSumReducer.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(IntWritable.class); FileInputFormat.addInputPath(job, new Path(otherArgs[0])); FileOutputFormat.setOutputPath(job, new Path(otherArgs[1])); System.exit(job.waitForCompletion(true) ? 0 : 1); } }
右键,选择“Run Configurations”,弹出窗口,点击“Arguments”选项卡,在“Program argumetns”处预先输入参数:
hdfs://localhost:9100/user/root/input2 hdfs://localhost:9100/user/root/output2
备注:参数为了在本地调试使用,而非真实环境。
然后,点击“Apply”,然后“Close”。现在可以右键,选择“Run on Hadoop”,运行。
但此时会出现类似异常信息:
12/04/24 15:32:44 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable 12/04/24 15:32:44 ERROR security.UserGroupInformation: PriviledgedActionException as:Administrator cause:java.io.IOException: Failed to set permissions of path: \tmp\hadoop-Administrator\mapred\staging\Administrator-519341271\.staging to 0700 Exception in thread "main" java.io.IOException: Failed to set permissions of path: \tmp\hadoop-Administrator\mapred\staging\Administrator-519341271\.staging to 0700 at org.apache.hadoop.fs.FileUtil.checkReturnValue(FileUtil.java:682) at org.apache.hadoop.fs.FileUtil.setPermission(FileUtil.java:655) at org.apache.hadoop.fs.RawLocalFileSystem.setPermission(RawLocalFileSystem.java:509) at org.apache.hadoop.fs.RawLocalFileSystem.mkdirs(RawLocalFileSystem.java:344) at org.apache.hadoop.fs.FilterFileSystem.mkdirs(FilterFileSystem.java:189) at org.apache.hadoop.mapreduce.JobSubmissionFiles.getStagingDir(JobSubmissionFiles.java:116) at org.apache.hadoop.mapred.JobClient$2.run(JobClient.java:856) at org.apache.hadoop.mapred.JobClient$2.run(JobClient.java:850) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAs(Subject.java:396) at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1093) at org.apache.hadoop.mapred.JobClient.submitJobInternal(JobClient.java:850) at org.apache.hadoop.mapreduce.Job.submit(Job.java:500) at org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:530) at com.hadoop.learn.test.WordCountTest.main(WordCountTest.java:85)
这个是Windows下文件权限问题,在Linux下可以正常运行,不存在这样的问题。
这里提供一份修改版的hadoop-core-1.0.2.jar文件【此文件在本文的附件中】,替换原C:\cygwin\home\root\hadoop-1.0.2\hadoop-core-1.0.2.jar即可。
替换之后,刷新项目,设置好正确的jar包依赖,现在再运行WordCountTest,即可。
成功之后,在Eclipse下刷新HDFS目录,可以看到生成了ouput2目录:
点击“ part-r-00000”文件,可以看到排序结果:
Bye 1 Goodbye 1 Hadoop 2 Hello 2 World 2
相关推荐
在实际使用中,安装Hadoop-Eclipse-Plugin非常简单。只需将jar文件(如hadoop-eclipse-plugin-2.8.0.jar)复制到Eclipse的plugins目录下,然后重启Eclipse,即可在“New Project”中看到Hadoop相关的项目类型。在...
### Hadoop集群配置及MapReduce开发手册知识点梳理 #### 一、Hadoop集群配置说明 ##### 1.1 环境说明 本手册适用于基于CentOS 5系统的Hadoop集群配置,具体环境配置如下: - **操作系统**:CentOS 5 - **JDK版本...
9. **调试与优化**:Hadoop Eclipse plugin还提供了调试功能,你可以设置断点,对MapReduce程序进行单步调试,从而更好地理解和优化代码。 总的来说,Hadoop Eclipse plugin 2.5.2极大地简化了Hadoop开发流程,让...
Hadoop-Eclipse-Plugin-3.1.1是一款专为Eclipse集成开发环境设计的插件,用于方便地在Hadoop分布式文件系统(HDFS)上进行开发和调试MapReduce程序。这款插件是Hadoop生态系统的组成部分,它使得Java开发者能够更加...
- **安装Hadoop Eclipse Plugin**: 使用插件可以更方便地进行MapReduce程序的开发和调试。 - **配置Eclipse Plugin**: 设置Eclipse IDE中的Hadoop插件,以连接到Hadoop集群。 **3.2 Eclipse Plugin配置** - **配置...
Hadoop-Eclipse插件是Apache Hadoop项目与Eclipse IDE集成的一个重要工具,它使得Hadoop开发者能够在Eclipse环境中直接创建、编辑、调试和管理Hadoop MapReduce作业,极大地提升了开发效率。本合集包含了多个版本的...
Hadoop-Eclipse插件是将Hadoop的功能与Eclipse IDE结合的工具,它使得开发人员能够在Eclipse环境中直接编写、调试和运行Hadoop MapReduce程序,极大地提升了开发效率。 标题中的"hadoop-eclipse2.7.1、hadoop-...
在实际应用中,开发者首先需要在Eclipse中安装Hadoop Eclipse Plugin,然后配置Hadoop的相关环境,包括HADOOP_HOME、HADOOP_CONF_DIR等环境变量。接着,可以创建新的MapReduce项目,编写map和reduce函数,最后通过...
2. **配置Hadoop环境**:在Eclipse中,需要配置Hadoop的运行环境,包括Hadoop的安装路径、HDFS地址等信息。 3. **创建Hadoop项目**:在Eclipse的“文件”菜单中选择“新建” -> “其他”,在弹出的对话框中找到...
这个插件使得Java开发者能够在熟悉的Eclipse环境中无缝地创建、调试和管理Hadoop MapReduce项目,极大地提高了开发效率。 1. **Hadoop概述** Hadoop是一个开源框架,由Apache软件基金会维护,用于存储和处理大数据...
总结来说,Hadoop Eclipse Plugin 2.6.0作为Hadoop与Eclipse之间的桥梁,显著提高了Hadoop应用的开发效率,使得开发者能够更专注于业务逻辑的实现,而非环境配置和运维工作。对于需要处理大量数据的企业或个人开发者...
这个插件是专门为Eclipse IDE设计的,使得开发人员可以在Eclipse中直接编写、运行和调试Hadoop MapReduce程序,极大地提高了开发效率。 Hadoop-Eclipse-Plugin 2.7.3版本,是针对Hadoop 2.x系列的一个重要插件,它...
在安装Hadoop-Eclipse-Plugin-2.6.4.jar之后,开发者可以通过Eclipse的"New -> Project"菜单选择"Hadoop Map/Reduce Project"选项来创建新的MapReduce项目。这个过程会自动为项目设置合适的构建路径和依赖项,使得...
Eclipse 配置 Hadoop 及 MapReduce 开发指南 一、Eclipse 中配置 Hadoop 插件 配置 Hadoop 插件是使用 Eclipse 进行 MapReduce 开发的第一步。首先,需要安装 Eclipse 3.3.2 和 Hadoop 0.20.2-eclipse-plugin.jar ...
Eclipse是流行的Java集成开发环境(IDE),而Hadoop-Eclipse插件是将Hadoop与Eclipse结合的工具,允许开发者在Eclipse中直接创建、运行和调试Hadoop MapReduce程序。这些文件"hadop-eclipse-plugin-2.5.2.jar"、...
7. **提交作业**:当代码调试完成后,你可以将MapReduce作业提交到Hadoop集群上。在Driver类上右键单击,选择“Run As” -> “Hadoop Job”,然后按照提示步骤提交作业。 8. **监控作业状态**:一旦作业提交,你...
Eclipse Hadoop2 插件是为开发人员提供的一种强大工具,它允许用户在Eclipse集成开发环境中(IDE)直接编写、调试和管理Hadoop项目。这个插件针对Hadoop 2.x版本进行了优化,提供了丰富的功能来简化Hadoop应用程序的...
在本例中,`hadoop-eclipse-plugin-2.6.0.jar`就是这样的一个插件,它允许开发人员在Eclipse中直接创建、管理和运行Hadoop MapReduce项目,无需离开IDE,极大地提高了开发效率。 安装此插件的过程如下: 1. **下载...
通过该插件,开发者无需离开熟悉的Eclipse环境,就能完成对Hadoop MapReduce任务的开发、调试和测试,大大提高了开发效率。 安装Hadoop Eclipse Plugin 2.6.5非常简单,只需要将下载的jar文件(如:hadoop-eclipse-...