Hadoop快速入门——第三章、MapReduce案例

目录

环境要求:

1、项目创建:

2、修改Maven

3、编码

4、本地文件测试

5、修改【Action】文件(修改测试文件路径)

6、导出jar包

7、启动hadoop服务

8、上传【jar】包以及【info.txt】文件至【/opt/soft/hadoop/share/hadoop/mapreduce】 下

9、创建存储文件的文件夹

10、通过【jar】执行

​11、查看生成结果

12、总结


环境要求:

1、分布式/伪分布式的hadoop环境【hadoop2.7.3】

2、win10本地Java环境【jdk8】

3、win10本地hadoop环境【2.7.3】

4、win10本地Maven环境【Maven3】

5、idea开发工具【IntelliJ IDEA 2020.1.3 x64】

1、项目创建:

需要建立【maven】项目,建立过程中

项目名称无所谓:

2、修改Maven

点击【file】->【Settings】后如下图操作,选择本地的Maven配置文件以及仓库地址。

引入【hadoop-client】

    <dependencies><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-client</artifactId><version>2.7.3</version></dependency></dependencies>

3、编码

在【src的java】下创建【com.item.test】包,以及【MapAction】【ReduceAction】【Action】的类文件。

【MapAction】编码

package com.item.test;import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;import java.io.IOException;public class MapAction extends Mapper<LongWritable, Text, Text, LongWritable> {@Overrideprotected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {char[] split = value.toString().toCharArray();for (char s : split) {context.write(new Text(s+""), new LongWritable(1));}}
}

【ReduceAction】编码

package com.item.test;import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;import java.io.IOException;public class ReduceAction extends Reducer<Text, LongWritable, Text, LongWritable> {@Overrideprotected void reduce(Text key, Iterable<LongWritable> values, Context context) throws IOException, InterruptedException {long count = 0;for (LongWritable value : values) {count += value.get();}context.write(key, new LongWritable(count));}
}

【Action】编码

package com.item.test;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;import java.io.IOException;public class Action {public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {Configuration conf = new Configuration();Job job = Job.getInstance(conf);job.setJarByClass(Action.class);job.setMapperClass(MapAction.class);job.setReducerClass(ReduceAction.class);job.setMapOutputKeyClass(Text.class);job.setMapOutputValueClass(LongWritable.class);job.setOutputKeyClass(Text.class);job.setOutputValueClass(LongWritable.class);//本地测试FileInputFormat.setInputPaths(job,new Path("D:\\info.txt"));FileOutputFormat.setOutputPath(job,new Path("D:\\infos"));boolean b = job.waitForCompletion(true);System.exit(b?0:1);}
}

4、本地文件测试

本地测试文件【D:\\info.txt】:

Accept that this is your starting point.Instead of placing judgements on it,see the real,positive value that’s already yours.You cannot change where your past priorities and choices have brought you.Yet you can make use of the wisdom you’ve earned to create a future that fulfils your most treasured dreams.
相信此刻就是你的起点。无需再判断,看到你所具备的真正意义上的价值。你过去认为重要的事和以前做过的选择给你带来了什么都是无法改变的。然而你可以充分利用你的智慧去创造未来,实现你最珍爱的梦想。

测试成功:

5、修改【Action】文件(修改测试文件路径)

package com.item.test;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;import java.io.IOException;public class Action {public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {Configuration conf = new Configuration();Job job = Job.getInstance(conf);job.setJarByClass(Action.class);job.setMapperClass(MapAction.class);job.setReducerClass(ReduceAction.class);job.setMapOutputKeyClass(Text.class);job.setMapOutputValueClass(LongWritable.class);job.setOutputKeyClass(Text.class);job.setOutputValueClass(LongWritable.class);//本地测试FileInputFormat.setInputPaths(job,new Path("/info/info.txt"));FileOutputFormat.setOutputPath(job,new Path("/infos"));boolean b = job.waitForCompletion(true);System.exit(b?0:1);}
}

6、导出jar包

依次点击【file】【Project Structure】

点击【Artfacts】【JAR】【From modules with dependencies...】

点击【OK】退出即可

点击【Build】【Build Artfacts...】

​​​​​​​

在项目层级中可以看到生成的【out】文件夹,打开后找到对应的【jar】包文件。

7、启动hadoop服务

8、上传【jar】包以及【info.txt】文件至【/opt/soft/hadoop/share/hadoop/mapreduce】 下

9、创建存储文件的文件夹

输入以下命令:

cd /opt/soft/hadoop/share/hadoop/mapreduce
hadoop fs -mkdir /info
hadoop fs -put info.txt /info/info.txt
hadoop fs -cat /info/info.txt

 文件位置:

10、通过【jar】执行

hadoop jar DEMO1.jar com/item/test/Action /info/info.txt /infos

生成文件位置:

11、查看生成结果

hadoop fs -cat /infos/part-r-00000

12、总结

1、常用的【hdfs】命令一定要熟悉,用的很多。

2、在服务器中运行的时候不能使用【绝对地址D:\\类似的路径】

3、如果存在导出文件夹则会报错,故而生成的文件一定要放置在没有的文件夹内。

Hadoop快速入门——第三章、MapReduce案例(字符统计)相关推荐

  1. MyBatis快速入门——第三章、DML语句操作

    MyBatis快速入门--第三章.DML语句操作 目录 在接口类中添加[UsersMapper.java] 修改[com.item.mapper.UsersMapper.] [action.java] ...

  2. Hadoop快速入门——第四章、zookeeper安装

    Hadoop快速入门--第四章.zookeeper安装 压缩包下载地址:[https://download.csdn.net/download/feng8403000/85227883] 目录 1.上 ...

  3. 【Hadoop快速入门】Hdfs、MapReduce、Yarn

    1. Hahoop概述 1.1 Hodoop是什么 1) Hadoop是一个有Apache基金会所开发的分布式系统基础架构 2) 主要解决海量数据的存储和海量数据的分析计算问题 3) 广义上来说,Ha ...

  4. Hadoop快速入门——入门考试(伪分布式60+编码25+执行jar15)

    Hadoop快速入门--入门考试(伪分布式60+编码25+执行jar15) 目录 一.伪分布式搭建(60分) 1.创建1台Linux虚拟机,并打开对应的网络连接(VMnet8)(5分) 2.通过xsh ...

  5. QT快速入门、三点求圆心实现详解

    在编程中,会经常用到数学计算,所以C++将常用的数学计算,例如求正余弦等,封装成函数(正是我们在3.2 数学计算中学习到的),我们只需要写入简单的语句就可以执行所需要的功能,这正是函数的意义.在这一章 ...

  6. Python3快速入门(三)——Python3标准数据类型

    Python3快速入门(三)--Python3标准数据类型 一.Python3标准数据类型 Python3 中有六种标准数据类型: A.Number(数字) B.String(字符串) C.List( ...

  7. python快速入门【三】-----For 循环、While 循环

    python入门合集: python快速入门[一]-----基础语法 python快速入门[二]----常见的数据结构 python快速入门[三]-----For 循环.While 循环 python ...

  8. gRPC快速入门(三)——Protobuf应用示例

    gRPC快速入门(三)--Protobuf应用示例 一.Protobuf使用流程 在工程开发中使用Protobuf流程如下: (1)定义proto描述文件,以proto作为后缀名. (2)使用Prot ...

  9. X Window 程式设计入门--第三章 绘图(Graphic)

    http://cnpa.yzu.edu.tw/~thinker 作者:李圭烽 (Thinker; Thinker.bbs@bbs.yzu.edu.tw) (2001-06-01 20:10:00) I ...

最新文章

  1. 那位五十多岁的创业者给我的启示!
  2. 【译】缓存最佳实践 max-age的陷阱
  3. C#为什么多线程控制winform需要用委托?
  4. POJ_3685_Matrix_(二分,查找第k大的值)
  5. M码小黄衫买家秀=w=
  6. react中form可以嵌套一个form吗_Ant-Design从v3升级到v4的Form适配
  7. 为什么持续集成和部署在开发中非常重要?
  8. 微信messageutil.java_java微信公众平台开发回复文本消息
  9. JavaScript正则表达式使用详解
  10. 在浏览器输入URL会发生什么?
  11. 什么是你的核心竞争力之二?
  12. [Evolutionary Algorithm] 进化算法简介
  13. 提交form表单之前处理数据
  14. 技术分享 | gh-ost 在线 ddl 变更工具​
  15. 在VS2005和2008的对话框里,添加了一个MSCOMM通信控件,怎么mscomm.h和mscomm.cpp没有自动出现?
  16. linux如何使用sin函数,Ubuntu下使用make编译c文件,不能调用sin cos 等函数问题的解决...
  17. 英文论文画图常用软件
  18. 【转】msdev devenv 的命令行用法(以编译BerkeleyDB为例)
  19. android按字母数字排序,android 实现字母排序
  20. 白月黑羽教python之selenium:课后练习

热门文章

  1. EDIT控件只读模式及实践问题
  2. 神经网络算法有哪些模型,神经网络算法通俗解释
  3. 渗透安全及渗透测试流程
  4. SOA(Service-Oriented Architecture)面向服务的分布式架构详解
  5. java koala_Koala应用程序:用于现代Web开发的跨平台应用程序
  6. 程序员你有资格骄傲么?
  7. 使用R读取mtx文件
  8. SQL语句大全[300个关键字]
  9. 使用iconv命令批量原地转码文件
  10. 智能运维 | 故障诊断与根因分析论文一览