Hadoop第6周练习—在Eclipse中安装Hadoop插件及测试(Linux操作系统)
1 运行环境说明
1.1 硬软件环境
1.2 机器网络环境
2 :安装Eclipse并测试
2.1 内容
2.2 实现过程
2.2.1
2.2.2
2.2.3
2.2.4
2.2.5
2.2.6
2.2.7
2.2.8
2.2.9
2.2.10编写代码
2.2.11设置运行参数
2.2.12运行并查看结果
3 :传递参数问题
3.1 内容
3.2 程序代码
3.2.1
3.3 实现过程
3.3.1 编写代码
3.3.2 准备数据
3.3.3 配置运行参数
3.3.4 运行作业
4 :Setup函数的作用
4.1 内容
运行环境说明
1.1 硬软件环境
线程,主频2.2G,6G内存
l 虚拟软件:VMware® Workstation 9.0.0 build-812388
l 虚拟机操作系统:CentOS 64位,单核,1G内存
l JDK:1.7.0_55 64 bit
l Hadoop:1.1.2
1.2 机器网络环境
个namenode、2个datanode,其中节点之间可以相互ping通。节点IP地址和主机名分布如下:
|
序号 |
IP地址 |
机器名 |
类型 |
用户名 |
运行进程 |
|
10.88.147.221 |
hadoop1 |
名称节点 |
hadoop |
NN、SNN、JobTracer |
|
|
10.88.147.222 |
hadoop2 |
数据节点 |
hadoop |
DN、TaskTracer |
|
|
10.88.147.223 |
hadoop3 |
数据节点 |
hadoop |
DN、TaskTracer |
所有节点均是CentOS6.5 64bit系统,防火墙均禁用,所有节点上均创建了一个hadoop用户,用户主目录是/usr/hadoop。所有节点上均创建了一个目录/usr/local/hadoop,并且拥有者是hadoop用户。
书面作业1:安装Eclipse并测试
内容
在linux或win下安装eclipse,并且连接到Hadoop集群(关键步骤是编译插件),运行上周课里的求最高温度的map-reduce程序作为测试,抓图整个过程
2.2 实现过程
2.2.1下载Eclipse
可以以多种方式下载Eclipse,下面介绍直接从eplise官网下载和从中国镜像站点下载,下载把eclipse上传到Hadoop环境中。
第一种方式从elipse官网下载:
http://www.eclipse.org/downloads/?osType=linux
我们运行的环境为CentOS 64位系统,需要选择eclipse类型为linux,然后点击linux 64bit链接下载

会根据用户所在地,推荐最佳的下载地址

在该页面的下部分也可以根据自己的情况选择合适的镜像站点进行下载

第二种方式从镜像站点直接下载elipse:
http://mirror.bit.edu.cn/eclipse/technology/epp/downloads/release/luna/R/
在镜像站点选择 eclipse-jee-luna-R-linux-gtk-x86_64.tar.gz进行下载
(http://mirror.bit.edu.cn/eclipse/technology/epp/downloads/release/luna/R/eclipse-jee-luna-R-linux-gtk-x86_64.tar.gz)

2.2.2解压elipse
在/home/hadoop/Downloads/目录中,使用如下命令解压elipse并移动到/usr/local目录下:
cd /home/hadoop/Downloads
tar -zxvf eclipse-jee-luna-SR1-linux-gtk-x86_64.tar.gz
sudo mv eclipse /usr/local/
cd /usr/local
ls


2.2.3启动eclipse
登录到虚拟机桌面,进入/usr/local/eclipse目录,通过如下命令启动eclipse:
cd /usr/local/eclipse
./eclipse


为了方便操作,可以在虚拟机的桌面上建立elipse的快捷操作

2.2.4加载eclipse插件
将hadoop-eclipse-plugin-1.1.2.jar拷贝到 eclipse的plugins目录:
cd /home/hadoop/Downloads
mv hadoop-eclipse-plugin-1.1.2.jar /usr/local/eclipse/plugins
cd /usr/local/eclipse/plugins
ll hadoop-eclipse-plugin-1.1.2.jar

启动eclipse,打开窗口 window-->preferences ,配置Hadoop MapReduce的安装路径,在实验环境为/usr/local/hadoop-1.1.2,如下图所示:

2.2.5打开MapReduce视图
点击eclipse菜单Window-->Show View-->Other 窗口,选择 MapReducer Locations,如下图所示:

添加完毕后在视图区域中出现MapReduce视图,同时在视图区域右上方出现蓝色小象的添加按钮,如下图所示

2.2.6启动hadoop
使用如下命令启动Hadoop:
cd /usr/local/hadoop-1.1.2/bin
start-all.sh

2.2.7新建 Hadoop Location
点击蓝色小象新增按钮,提示输入MapReduce和HDFS Master相关信息,其中:
l Lacation Name:为该位置命名,能够识别该;
l MapReduce Master:与$HADOOP_DIRCONF/mapred-site.xml配置保持一致;
l HDFS Master:与$HADOOP_DIRCONF/core-site.xml配置保持一致
l User Name:登录hadoop用户名,可以随意填写

2.2.8使用elipse上传测试数据
配置完毕后,在eclipse的左侧DFS Locations出现CentOS HDFS的目录树,该目录为HDFS文件系统中的目录信息:

为运行求最高温度MapReduce,通过eclipse上传测试数据,可以在DFS Locations相对应目录点击右键,选择Upload file to DFS出现选择文件界面,如下图所示:

可以看到MaxTemperatureData.txt已经成功上传到HDFS文件系统中

2.2.9创建MapReduce项目
安装插件之后,可以在New Project页面建立Map/Reduce Project:

需要注意的是填写完项目名称Rock后,需要指定Hadoop MapReduce运行包的路径,填写完毕后点击完成即可

2.2.10 编写代码
在Rock项目中创建/src/chapter06包,在该包下创建上一周求每年最大温度的代码,分别为MaxTemperature.java、MaxTemperatureMapper.java和MaxTemperatureReducer.java

2.2.11 设置运行参数
打开MaxTemperature.java,点击Run-Run Configurations设置运行参数,需要在Arguments页签填写MaxTemperature运行的输入路径和输出路径参数,需要注意的是输入、输出路径参数路径需要全路径,否则运行会报错:
l 输入:运行数据路径,这里为hdfs://hadoop1:9000/usr/hadoop/in/MaxTemperatureData.txt
l 输出:运行结果路径,这里为hdfs://hadoop1:9000/usr/hadoop/out_ch6_eplipse

2.2.12 运行并查看结果
设置运行参数完毕后,点击运行按钮:

运行成功后,刷新CentOS HDFS中的输出路径out_ch6_eclipse目录,打开part-r-00000文件,可以看到运行结果:

书面作业2:传递参数问题
内容
(选作)请阅读Exercise_1.java,编译并且运行。该程序从Test_1改编而来,其主要差别在于能够让用户在结果文件中的每一行前面添加一个用户自定义的字符串,而这个字符串将由参数传递到程序中。例如,运行 $hadoop jar Exercise_1.jar input_path output_path hadoop 之后,第三个参数“hadoop”将会在结果文件中显示,例如附件“result_1”所显示的。
问题:着重考虑Exercise_1.java里面”需要注意的部分“,改写Test_2程序,得到的结果必须跟附件"resule_2"一致,并且其中hadoop必须由参数传递。
3.2 程序代码
3.2.1Test_2_Adjust.java
注意:红色字体为与Test_2.java不同之处
import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.conf.Configured;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.*;
import org.apache.hadoop.mapreduce.*;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;
/**
* 有Reducer版本
*/
publicclass Test_2_Adjust extends Configured implements Tool {
/**
* 计数器用于计数各种异常数据
*/
enum Counter {
LINESKIP, // 出错的行
}
/**
* MAP任务
*/
publicstaticclass Map extends Mapper<LongWritable, Text, Text, Text> {
publicvoid map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
String line = value.toString(); // 读取源数据
try {
// 数据处理
String[] lineSplit = line.split(" ");
String anum = lineSplit[0];
String bnum = lineSplit[1];
String name = context.getConfiguration().get("name");
context.write(new Text(bnum + "," + name), new Text(anum)); // 输出
} catch (java.lang.ArrayIndexOutOfBoundsException e) {
context.getCounter(Counter.LINESKIP).increment(1); // 出错令计数器+1
return;
}
}
}
/**
* REDUCE任务
*/
publicstaticclass Reduce extends Reducer<Text, Text, Text, Text> {
publicvoid reduce(Text key, Iterable<Text> values, Context context) throws IOException, InterruptedException {
String valueString;
String out = "";
for (Text value : values) {
valueString = value.toString();
out += valueString + "|";
}
String[] keySplit = key.toString().split(",");
context.write(new Text(keySplit[0]), new Text(out + keySplit[1]));
}
}
@Override
publicint run(String[] args) throws Exception {
Configuration conf = getConf();
/** 获取传入的hadoop字符 **/
conf.set("name", args[2]);
Job job = new Job(conf, "Test_2_Adjust"); // 任务名
job.setJarByClass(Test_2_Adjust.class); // 指定Class
FileInputFormat.addInputPath(job, new Path(args[0])); // 输入路径
FileOutputFormat.setOutputPath(job, new Path(args[1])); // 输出路径
job.setMapperClass(Map.class); // 调用上面Map类作为Map任务代码
job.setReducerClass(Reduce.class); // 调用上面Reduce类作为Reduce任务代码
job.setOutputFormatClass(TextOutputFormat.class);
job.setOutputKeyClass(Text.class); // 指定输出的KEY的格式
job.setOutputValueClass(Text.class); // 指定输出的VALUE的格式
job.waitForCompletion(true);
// 输出任务完成情况
System.out.println("任务名称:" + job.getJobName());
System.out.println("任务成功:" + (job.isSuccessful() ? "是" : "否"));
System.out.println("输入行数:" + job.getCounters().findCounter("org.apache.hadoop.mapred.Task$Counter","MAP_INPUT_RECORDS").getValue());
System.out.println("输出行数:" + job.getCounters().findCounter("org.apache.hadoop.mapred.Task$Counter", "MAP_OUTPUT_RECORDS").getValue());
System.out.println("跳过的行:" + job.getCounters().findCounter(Counter.LINESKIP).getValue());
return job.isSuccessful() ? 0 : 1;
}
/**
* 设置系统说明设置MapReduce任务
*/
publicstaticvoid main(String[] args) throws Exception {
// 判断参数个数是否正确
// 如果无参数运行则显示以作程序说明
if (args.length != 3) {
System.err.println("");
System.err.println("Usage: Test_2_Adjust < input path > < output path > < name >");
System.err.println("Example: hadoop jar ~/Test_2_Adjust.jar hdfs://localhost:9000/usr/hadoop/Test_2_Data.txt hdfs://localhost:9000/usr/hadoop/out_ch6_test2_adjust");
System.err.println("Counter:");
System.err.println("\t" + "LINESKIP" + "\t"+ "Lines which are too short");
System.exit(-1);
}
// 记录开始时间
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date start = new Date();
// 运行任务
int res = ToolRunner.run(new Configuration(), new Test_2_Adjust(), args);
// 输出任务耗时
Date end = new Date();
float time = (float) ((end.getTime() - start.getTime()) / 60000.0);
System.out.println("任务开始:" + formatter.format(start));
System.out.println("任务结束:" + formatter.format(end));
System.out.println("任务耗时:" + String.valueOf(time) + " 分钟");
System.exit(res);
}
}
3.3 实现过程
3.3.1编写代码
打开eclipse,在Rock项目src/chapter6包下新建Test_2_Adjust.java:

3.3.2准备数据
、2周2.1.3.1Linux文件传输工具所描述)把提供的测试数据Test_2_Data.txt上传到本地目录/usr/local/hadoop-1.1.2/input中,然后使用eclipse的HDFS插件工具上传该文件到/usr/hadoop/in目录中,如下图所示:

3.3.3配置运行参数
新建一个Java应用运行程序,需要在Arguments页签填写Test_2_Adjust运行的输入路径、输出路径和输入字符三个参数,需要注意的是输入、输出路径参数路径需要全路径,否则运行会报错:
l 输入:运行数据路径,这里为hdfs://hadoop1:9000/usr/hadoop/in/Test_2_Data.txt
l 输出:运行结果路径,这里为hdfs://hadoop1:9000/usr/hadoop/out_ch6_test2_adjust
l 输入字符:为“hadoop”字符

3.3.4运行作业
配置完毕后,执行MapReduce作业,执行成功到eclipse的HDFS插件工具查看结果,下图显示在每行加入了传入参数:

书面作业3:Setup函数的作用
内容
(选作)阅读Exercise_2.java,这是一个与Exercise_1.java有相同效果的程序,自行搜索关于setup函数的资料,回答上述两个程序的不同。
4.2 回答
不同之处是:Exercise2中的name写成了reduce的成员变量,而且该变量在setup方法进行初始化。从第二题代码运行的console可以看出,不管运行多少次map和reduce方法,setup都只运行一次。setup方法是继承于父类,在Mapper类和Reducer类中都有setup,Mapper的setup方法会在map之前运行,Reducer的setup方法会在reduce之前运行。同样的Mapper类和Reducer类还有对应的cleanup方法,在整个过程中也只运行一次。而且Mapper的cleanup方法会在map之后运行,Reducer的cleanup方法会在reduce之后运行。
Hadoop第6周练习—在Eclipse中安装Hadoop插件及测试(Linux操作系统)的更多相关文章
- 总结eclipse中安装maven插件
当自己越来越多的接触到开源项目时,发现大多数的开源项目都是用maven来够建的.并且在开发应用时,也越来越意识到maven的确会解决很多问题,如果你要了解maven,可以参考:Maven入门指南(一) ...
- SVN工具的使用 和在Eclipse中安装GPD插件:(多步审批流,因此选择使用工作流(JBPM)来实现)
前言 重点解说SVN工具的还原版本号. 1.提交svn之前.要先更新文件.假设更新之后有版本号冲突的话.就线下解决掉冲突,在把该文件标记为已经解决冲突. 正文 使用SVN还原历史版本号 water ...
- 在Eclipse中安装spket插件
spket是一个开发JavaScript和Ext等的开发工具,它可以 是独立的IDE,也可以作为 Eclipse的插件使用,下面介绍如何在Eclipse中安装spket插件, 1.首先上 官网 htt ...
- Eclipse中安装MemoryAnalyzer插件及使用
Eclipse中安装MemoryAnalyzer插件 一.简介 Eclipse作为JAVA非常好用的一款IDE,其自带的可扩展插件非常有利于JAVA程序员的工作效率提升. MemoryAnalyzer ...
- eclipse中安装freemarker插件及ftl使用freemarker编辑器
http://www.07net01.com/2015/08/895212.html eclipse中安装freemarker插件及ftl使用freemarker编辑器 在线安装的方法是:Help – ...
- 在eclipse中安装groovy插件
在eclipse中安装groovy插件详细步骤: step 1:检查自己的eclipse版本:在help->About Eclipse中查看: step 2:进入 https://github. ...
- 在eclipse中安装properties插件PropertiesEditor及设置(附图),ASCII码转换成中文
在eclipse中安装properties插件PropertiesEditor及设置(附图),ASCII码转换成中文安装成功后ASCII还是不能转换成中文的,原因是设置里面没有把编码设置为utf8的, ...
- eclipse中安装pydev插件出现duplicate location
eclipse中安装pydev插件出现duplicate location,主要是因为之前已经填写了该地址并且已经加载了,具体的解决办法见下链接: http://jingyan.baidu.com/a ...
- 在Eclipse中安装python插件的方法
一个博士给了我一堆代码,原本以为是C++或者java写的,结果是python,我压根没学过呀,不过本着语言都是相通的原则,我硬着头皮开始学习Python,当然先学习安装IDE(以前学习一门新语言,我会 ...
随机推荐
- js 停止事件冒泡 阻止浏览器的默认行为(阻止超连接 # )
在前端开发工作中,由于浏览器兼容性等问题,我们会经常用到“停止事件冒泡”和“阻止浏览器默认行为”. 1..停止事件冒泡 JavaScript代码 //如果提供了事件对象,则这是一个非IE浏览器if ( ...
- 使用Excel制作万年历(可打印)
先来看看A4纸打印效果,其他功能后续继续完善中. 年份数据字典(农历节日) 农历节日表 年度 春节 元宵节 龙抬头 端午节 六月六 七月七 七月十五 仲秋节 除夕 2010年02月14日 2010年0 ...
- Avizo - 高级三维可视化及分析软件
今天从材料科学应用角度介绍Avizo的基本功能. Avizo是一款先进的三维可视化及分析应用,可用来探索从断层扫描.显微镜.核磁共振成像及更多其他技术获得的材料科学数据.从简单的可视化与测量到高级的图 ...
- Swift - 计算文本高度
Swift - 计算文本高度 效果 源码 // // String+StringHeight.swift // StringHeight // // Created by YouXianMing on ...
- Sencha Toucha 2 —1.环境安装配置、在线打包、离线打包
环境安装配置 1. 下载 1.1 Sencha Touch 下载 http://cdn.sencha.com/touch/sencha-touch-2.2.1-gpl.zip 1 ...
- 2014 Hangjs 见闻流水账第二天
前言 第一天传送门: 2014 Hangjs 见闻流水账第一天 写作风格跟第一天还是一样的. Slide 每个slide我都会根据自己的理解重新命名一次,用于表达自己的第一看法,主观意见,不喜可吐槽, ...
- 搞了个基于zookeeper的Leader/Follower切换Demo
基于zookeeper写了个Leader选举类库demo,场景如下: 上图中的Program1..4可以部署在1台server上,也可以部署在多台server上,也可以是一个进程中的多个线程. 运行效 ...
- SSH在Jenkins中的使用
我们今天在迁移Jenkins的时候又出现无法调用私钥来获取oschina的git代码和使用scp拷贝无法验证的问题.我发现主要的问题实际上是关于ssh的问题,因为git和scp都是通过ssh来实现与远 ...
- Eclipse远程调试HDP源代码
使用的是自己编译的HDP2.3.0的源代码编译的集群,此文介绍如何使用Eclipse远程调试Hadoop内核源代码,以调试namenode为例进行介绍. 在/usr/hdp/2.3.0.0-2557/ ...
- 手机软件mockup设计工具
软件界面设计工具 UIDesigner v2.5 详见 http://www.downyi.com/downinfo/26770.html