一.环境

  Hadoop部署环境:

  Centos3.10.0-327.el7.x86_64

  Hadoop2.6.5

  Java1.8.0_221

  代码运行环境:

  Windows 10

  Hadoop 2.6.5 

二.安装Hadoop-Eclipse-Plugin

  在Eclipse中编译和运行Mapreduce程序,需要安装hadoop-eclipse-plugin,可下载Github上的 hadoop2x-eclipse-plugin 。

   下载后将release中的hadoop-eclipse-plugin-2.6.0.jar放在eclipse下面plugins目录下。

三.配置Hadoop-Plugin

  运行eclipse后,点击Window->Preferences在Hadoop Map/Reduce中填上计算机中安装的hadoop目录。

        

四.在Eclipse中操作HDFS中的文件

 我们之前一直使用命令操作Hdfs,接下来再配置几步就可以在Eclipse中可视化操作啦。

选择Window下面的Show View->Other... ,在弹出的框里面展开MapReduce Tools,选择Map/Reduce Locations点击Open。

  

  然后在弹出的栏目右键,点击New Hadoop location在弹出框General下面填上活跃的NameNode和端口号信息。

  

  

  配置好后,可以在左侧刷新即可看到HDFS文件(Tips:对HDFS很多操作后,插件不会自动帮我们刷新内容,需要我们手动刷新)

   

五.在Eclipse中创建MapReduce项目

  选择File->New->Project...  选择Map/Reduce Project ,选择Next,填写项目名称,这里我起名MapReduceFirstDemo。

   然后将服务器上的core-site.xml和hdfs-site.xml复制到项目根目录下,并在根目录下创建一个log4j.properties,填上如下内容:

  hadoop.root.logger=DEBUG, console
  log4j.rootLogger = DEBUG, console
  log4j.appender.console=org.apache.log4j.ConsoleAppender
  log4j.appender.console.target=System.out
  log4j.appender.console.layout=org.apache.log4j.PatternLayout
  log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{2}: %m%n

     在src中右键创建一个Package,起名MapReduceFirstPack,然后在MapReduceFirstPack下面创建一个WordCount类。大致结构如下图:

   

  将下面的代码复制到WordCount里面  

  1. package MapRedoceFirstPack;
  2.  
  3. import java.io.IOException;
  4. import java.util.Iterator;
  5. import java.util.StringTokenizer;
  6. import org.apache.hadoop.conf.Configuration;
  7. import org.apache.hadoop.fs.Path;
  8. import org.apache.hadoop.io.IntWritable;
  9. import org.apache.hadoop.io.Text;
  10. import org.apache.hadoop.mapreduce.Job;
  11. import org.apache.hadoop.mapreduce.Mapper;
  12. import org.apache.hadoop.mapreduce.Reducer;
  13. import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
  14. import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
  15. import org.apache.hadoop.util.GenericOptionsParser;
  16.  
  17. public class WordCount {
  18.  
  19. public static void main(String[] args) throws Exception {
  20. // TODO Auto-generated method stub
  21. Configuration conf=new Configuration();
  22. String[] otherArgs=(new GenericOptionsParser(conf, args)).getRemainingArgs();
  23. if(otherArgs.length<) {
  24. System.err.println("Usage:wordcount");
  25. System.exit();
  26. }
  27. Job job=Job.getInstance(conf,"word count");
  28. job.setJarByClass(WordCount.class);
  29. job.setMapperClass(WordCount.TokenizerMapper.class);
  30. job.setCombinerClass(WordCount.IntSumReducer.class);
  31. job.setReducerClass(WordCount.IntSumReducer.class);
  32. job.setOutputKeyClass(Text.class);
  33. job.setOutputValueClass(IntWritable.class);
  34. for(int i=;i<otherArgs.length-;++i) {
  35. FileInputFormat.addInputPath(job, new Path(otherArgs[i]));
  36. }
  37. FileOutputFormat.setOutputPath(job, new Path(otherArgs[otherArgs.length-]));
  38. System.exit(job.waitForCompletion(true)?:);
  39.  
  40. }
  41.  
  42. private static class IntSumReducer extends Reducer<Text,IntWritable,Text,IntWritable>{
  43. public IntSumReducer() {}
  44.  
  45. private IntWritable result=new IntWritable();
  46. public void reduce(Text key,Iterable<IntWritable> values,Reducer<Text,IntWritable,Text,IntWritable>.Context context) throws IOException,InterruptedException{
  47. int sum=;
  48. IntWritable val;
  49. for(Iterator i$=values.iterator();i$.hasNext();sum+=val.get()) {
  50. val=(IntWritable)i$.next();
  51. }
  52. this.result.set(sum);
  53. context.write(key, this.result);
  54. }
  55. }
  56.  
  57. public static class TokenizerMapper extends Mapper<Object,Text,Text,IntWritable>{
  58. private static final IntWritable one=new IntWritable();
  59. private Text word=new Text();
  60. public TokenizerMapper() {
  61.  
  62. }
  63. public void map(Object key,Text value,Mapper<Object,Text,Text,IntWritable>.Context context) throws IOException,InterruptedException {
  64. StringTokenizer itr=new StringTokenizer(value.toString());
  65. while(itr.hasMoreTokens()) {
  66. this.word.set(itr.nextToken());
  67. context.write(this.word, one);
  68. }
  69.  
  70. }
  71.  
  72. }
  73.  
  74. }

六.在Eclipse中运行MapReduce项目

 在运行上述项目之前,我们需要配置下运行参数。 在项目右键Run As->Run Configuration。 在弹出的框里面选择Java Applicaton下面的WordCount(Tips:如果没有WordCount,则双击Java Application就有了),在Arguments下面添加input output(Tips:代表了输入目录和输出目录,输入目录放要计算的内容,这个需要自己创建,输出目录一定不要创建,它会自动生成,否则会提示已存在此目录的错误),如下图:

   

然后点击Run运行。

运行完毕后,在左侧刷新,在output目录可以看到两个文件,_SUCCESS是标识文件,代表执行成功的意思。part-r-00000存放的执行结果。

参考资料:

林子雨大数据

官方文档

系列传送门

入门大数据---MapReduce-API操作的更多相关文章

  1. 入门大数据---SparkSQL联结操作

    一. 数据准备 本文主要介绍 Spark SQL 的多表连接,需要预先准备测试数据.分别创建员工和部门的 Datafame,并注册为临时视图,代码如下: val spark = SparkSessio ...

  2. 入门大数据---Spark_Structured API的基本使用

    一.创建DataFrame和Dataset 1.1 创建DataFrame Spark 中所有功能的入口点是 SparkSession,可以使用 SparkSession.builder() 创建.创 ...

  3. 入门大数据---Spark整体复习

    一. Spark简介 1.1 前言 Apache Spark是一个基于内存的计算框架,它是Scala语言开发的,而且提供了一站式解决方案,提供了包括内存计算(Spark Core),流式计算(Spar ...

  4. 入门大数据---Flink学习总括

    第一节 初识 Flink 在数据激增的时代,催生出了一批计算框架.最早期比较流行的有MapReduce,然后有Spark,直到现在越来越多的公司采用Flink处理.Flink相对前两个框架真正做到了高 ...

  5. 入门大数据---Kylin是什么?

    一.Kylin是什么? Apache Kylin是一个开源的.分布式的分析型数据仓库,提供Hadoop/Spark 上的SQL查询接口及多维度分析(OLAP)能力以支持超大规模的数据,最初由eBay开 ...

  6. 大数据 --> MapReduce原理与设计思想

    MapReduce原理与设计思想 简单解释 MapReduce 算法 一个有趣的例子:你想数出一摞牌中有多少张黑桃.直观方式是一张一张检查并且数出有多少张是黑桃? MapReduce方法则是: 给在座 ...

  7. 入门大数据---SparkSQL外部数据源

    一.简介 1.1 多数据源支持 Spark 支持以下六个核心数据源,同时 Spark 社区还提供了多达上百种数据源的读取方式,能够满足绝大部分使用场景. CSV JSON Parquet ORC JD ...

  8. 入门大数据---Hadoop是什么?

    简单概括:Hadoop是由Apache组织使用Java语言开发的一款应对大数据存储和计算的分布式开源框架. Hadoop的起源 2003-2004年,Google公布了部分GFS和MapReduce思 ...

  9. 入门大数据---Hbase_Java_API

    一.简述 截至到目前 (2019.04),HBase 有两个主要的版本,分别是 1.x 和 2.x ,两个版本的 Java API 有所不同,1.x 中某些方法在 2.x 中被标识为 @depreca ...

随机推荐

  1. 3. OpenCV-Python——图像梯度算法、边缘检测、图像金字塔与轮廓检测、直方图与傅里叶变换

    一.图像梯度算法 1.图像梯度-Sobel算子 dst = cv2.Sobel(src, ddepth, dx, dy, ksize) ddepth:图像的深度 dx和dy分别表示水平和竖直方向 ks ...

  2. SQL Server数据库附加失败错误:5123,拒绝访问

    发生错误的图片如下 我们需要更改数据库文件的权限(mdf和ldf两个文件) 右键数据库文件,点击属性 选择安全,点击高级,把每一个角色的访问权限都变成完全控制 如图所示 然后确定确定确定保存等等, l ...

  3. Java实现 LeetCode 649 Dota2 参议院(暴力大法)

    649. Dota2 参议院 Dota2 的世界里有两个阵营:Radiant(天辉)和 Dire(夜魇) Dota2 参议院由来自两派的参议员组成.现在参议院希望对一个 Dota2 游戏里的改变作出决 ...

  4. Java实现 蓝桥杯 算法提高 拿糖果

    算法提高 拿糖果 时间限制:1.0s 内存限制:256.0MB 问题描述 妈妈给小B买了N块糖!但是她不允许小B直接吃掉. 假设当前有M块糖,小B每次可以拿P块糖,其中P是M的一个不大于根号下M的质因 ...

  5. Java实现 LeetCode 441 排列硬币

    441. 排列硬币 你总共有 n 枚硬币,你需要将它们摆成一个阶梯形状,第 k 行就必须正好有 k 枚硬币. 给定一个数字 n,找出可形成完整阶梯行的总行数. n 是一个非负整数,并且在32位有符号整 ...

  6. Java实现 蓝桥杯VIP 算法训练 单词接龙

    问题描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的"龙"(每个单词都最多在"龙" ...

  7. Java实现 蓝桥杯VIP 算法提高 多项式输出

    算法提高 多项式输出 时间限制:1.0s 内存限制:512.0MB 问题描述 一元n 次多项式可用如下的表达式表示: f(x)=a[n]xn+a[n-1]x(n-1)+-+a[1]x+a[0], a[ ...

  8. java实现棋盘上的麦子

    ** 棋盘上的麦子** 你一定听说过这个故事.国王对发明国际象棋的大臣很佩服,问他要什么报酬,大臣说:请在第1个棋盘格放1粒麦子,在第2个棋盘格放2粒麦子,在第3个棋盘格放4粒麦子,在第4个棋盘格放8 ...

  9. java实现第四届蓝桥杯马虎的算式

    马虎的算式 题目描述 小明是个急性子,上小学的时候经常把老师写在黑板上的题目抄错了. 有一次,老师出的题目是:36 x 495 = ? 他却给抄成了:396 x 45 = ? 但结果却很戏剧性,他的答 ...

  10. Linux权限管理命令chmod详解

    命令chmod详解 命令chmod(英文原意:change permissions mode of a file),所在路径为: 可以看到,它的路径为:/usr/bin/chmod,因此,它的执行权限 ...