Hadoop界的Hello World!
Hadoop界的Hello World!
2019-05-20 19:50:09
应用平台:Eclipse+ubantu+hadoop包
注:例分析的形式给宝宝们解释一下,详细运行过程省略。
实例:定义一个进行统计的原始文件
|
Hello MrZhangxd Hello Yootk Hello Bye Bye Bye Hello MrZhangxd |
预期结果:
|
Bye 3 Hello 4 MrZhangxd 2 Yootk 1 |
主要实现利用MapReduce,那么什么是MapReduce?
MapReduce是一种可用于数据处理的编程模型。MapReduce程序本质是并行运行的。
第一步 使用可视化表格进行分析
对于MapReduce而言有两个阶段
Map阶段:对数据的处理阶段
Reduce阶段:对处理后的数据进行计算
以上实例如果使用MapReduce处理的话其流程如下:
|
Map处理 |
排序处理 |
合并处理 |
Reduce处理 |
|
<Hello,1> <MrZhangxd,1> <Hello,1> <Yootk,1> <Hello,1> <Bye,1> <Bye,1> <Hello,1> <MrZhangxd,1> |
<Bye,1> <Bye,1> <Bye,1> <Hello,1> <Hello,1> <Hello,1> <Hello,1> <MrZhangxd,1> <MrZhangxd,1> <Yootk,1> |
<Bye,1,1,1> <Hello,1,1,1,1> <MrZhangxd,1,1> <Yootk,1> |
<Bye,3> <Hello,4> <MrZhangxd,2> <Yootk,1> |
以上整个操作称作一个完整的作业“Job”
第二步 代码编写(代码格式主要参考《代码整洁之道》的编码格式)
实现单词统计的代码:
|
package import import import import import import import import import import import /** * 本操作主要是进行Map的数据处理 * @author MrZhangxd * 在Mapper父类里面接受的内容如下: * Object:输入数据的具体内容 * Text:每行的文本数据 * Text:每个单词分解后的统计结果 * IntWritable:输出记录的结果 */ public class WordCount {//本处要求实现单词统计的处理操作 //在整个代码中最为关键部分就是Map和Reduce部分,而且这两个部分是需要用户自己了实现的 private static class WordCountReducer extends Reducer<Text,IntWritable,Text,IntWritable>{ @Override protected void reduce(Text key, Iterable<IntWritable> values, Reducer<Text, IntWritable, Text, IntWritable>.Context context) throws IOException, InterruptedException { // TODO Auto-generated method stub super.reduce(key, values, context); int sum = 0;//保存每个单词出现的数据 for(IntWritable count : values) { sum += count.get(); } context.write(key, new IntWritable(sum)); } } @SuppressWarnings("unused") private static class WordCountMapper extends Mapper<Object,Text,Text,IntWritable>{ @Override protected void map(Object key, Text value, Mapper<Object, Text, Text, IntWritable>.Context context) throws IOException, InterruptedException { // TODO Auto-generated method stub super.map(key, value, context); //默认情况下是提取每一行数据,所以每行数据里面都会存在空格,那么要按照空格进行分割,每当出现一个单词就需要做一个统计的1 String lineContent = value.toString(); String result [] = lineContent.split(" ");//按空格进行数据拆分 for(int x = 0;x < result.length;x++) { //每一个单词最终生成的保存个数是1 context.write(new Text(result[x]), new IntWritable(1)); } } } public static void main(String[] args) throws IOException { // TODO Auto-generated method stub if(args.length != 2) { System.out.println("本程序需要两个参数,执行,hadoop yootk.jar /input/info.txt System.exit(1); } //每一次的执行实际上都属于一个作业(Job),但是现在希望可以通过初始化参数来设置HDFS的文件存储路径 //假设现在的文件保存在HDFS上的“input/info.txt”上,而且最终输出结果也将保存在HDFS的“output”目录中 Configuration conf = new Configuration(); //考虑到最终要使用HDFS进行内容的处理操作,并且输入的时候不带有HDFS地址 String[] argArray = new GenericOptionsParser(conf, args).getRemainingArgs();//对输入的参数进行处理 //后面就需要作业进行处理了,而且Map与Reduces操作必须通过作业来配置 Job job = Job.getInstance(conf,"hadoop");//定义一个hadoop作业 job.setMapperClass(WordCountMapper.class);//设置执行的jar文件的程序类 job.setJarByClass(WordCount.class); //指定Mapper的处理类 job.setMapOutputKeyClass(Text.class); //设置输出key的类型 job.setMapOutputValueClass(IntWritable.class);//设置输出的value类型 job.setReducerClass(WordCountReducer.class);//设置reduce操作的处理类 //设置Map-Reduce最终的执行结果 job.setOutputKeyClass(Text.class);//信息设置为文本 job.setOutputValueClass(IntWritable.class);//最终将内容设置为一个数值 //设置输入以及输出路径 //FileInputFormat.addInputPath(job, new FileInputFormat.addInputPath(job, new Path(argArray[0])); FileOutputFormat.setOutputPath(job,new Path(argArray[1])); //等待执行完毕 try { System.exit(job.waitForCompletion(true) ? 0 : 1); } catch (ClassNotFoundException | InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); }//执行完毕并且退出 } } |
注:代码的编写是需要使用到Hadoop中提供的*.jar文件的。
C:\Users\ XXX \Desktop\大数据\hadoop-3.2.0\share\hadoop
需要配置如下几个路劲的开发包:
|--Common组件包:
| |--C:\Users\XXX\Desktop\大数据\hadoop-3.2.0\share\hadoop\common
| |--C:\Users\XXX\Desktop\大数据\hadoop-3.2.0\share\hadoop\common\lib;
|--Mapreduce组件包:
| |--C:\Users\XXX\Desktop\大数据\hadoop-3.2.0\share\hadoop\mapreduce
| |--C:\Users\XXX\Desktop\大数据\hadoop-3.2.0\share\hadoop\mapreduce\lib;
Hadoop界的Hello World!的更多相关文章
- Hadoop安装成功之后,访问不了web界面的50070端口怎么解决?
Hadoop安装成功之后,访问不了web界面的50070端口 先查看端口是否启用 [hadoop@s128 sbin]$ netstat -ano |grep 50070 然后查看防火墙的状态,是否关 ...
- 使用ganglia监控hadoop及hbase集群
一.Ganglia简介 Ganglia 是 UC Berkeley 发起的一个开源监视项目,设计用于测量数以千计的节点.每台计算机都运行一个收集和发送度量数据(如处理器速度.内存使用量等)的名为 gm ...
- Hadoop学习路线图
Hadoop家族产品,常用的项目包括Hadoop, Hive, Pig, HBase, Sqoop, Mahout, Zookeeper, Avro, Ambari, Chukwa,新增加的项目包括, ...
- 从零自学Hadoop(06):集群搭建
阅读目录 序 集群搭建 监控 系列索引 本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 文章是哥(mephisto)写的,SourceLink 序 上一 ...
- 一篇文看懂Hadoop:风雨十年,未来何去何从
本文分为技术篇.产业篇.应用篇.展望篇四部分 技术篇 2006年项目成立的一开始,“Hadoop”这个单词只代表了两个组件——HDFS和MapReduce.到现在的10个年头,这个单词代表的是“核心” ...
- Hadoop! | 大数据百科 | 数据观 | 中国大数据产业观察_大数据门户
你正在使用过时的浏览器,Amaze UI 暂不支持. 请 升级浏览器 以获得更好的体验! 深度好文丨读完此文,就知道Hadoop了! 来源:BiThink 时间:2016-04-12 15:1 ...
- Hadoop家族 路线图(转)
主要介绍Hadoop家族产品,常用的项目包括Hadoop, Hive, Pig, HBase, Sqoop, Mahout, Zookeeper, Avro, Ambari, Chukwa,新增加的项 ...
- 浅析Hadoop文件格式
Hadoop 作为MR 的开源实现,一直以动态运行解析文件格式并获得比MPP数据库快上几倍的装载速度为优势.不过,MPP数据库社区也一直批评Hadoop由于文件格式并非为特定目的而建,因此序列化和反序 ...
- Hadoop 生态系统
1.概述 最近收到一些同学和朋友的邮件,说能不能整理一下 Hadoop 生态圈的相关内容,然后分享一些,我觉得这是一个不错的提议,于是,花了一些业余时间整理了 Hadoop 的生态系统,并将其进行了归 ...
随机推荐
- Java Web 深入分析(10) Spring 实践
Spring helloworld [http://wiki.jikexueyuan.com/project/spring/hello-world-example.html] HelloWorld.j ...
- Django学习笔记(二)App创建之Model
通过实例学习, 构建一个投票(Polls)Application, 目标结果包含两个site, 一个site用来显示投票问题以及投票结果(即将展示出来的网站), 另一个site用来管理Poll实例的增 ...
- 用D3js的区域生成器实现简单波浪图
最近做控件遇到含有波浪图的图表,一开始用Echarts虽然很快完成了,但Echarts的波浪图与其他图表的响应式不同步,于是学习了D3js,D3js写起来确实复杂一些,但能够实现的效果也更丰富,做的时 ...
- PL/SQL Developer_如何快速获得表名或全部列名的文本形式
转自:https://blog.csdn.net/xwnxwn/article/details/53388887 操作过程: 例1:以“逗号”格式获取“用户表名”的文本 使用scott登陆到PL/SQ ...
- 对比centos7的systemctl和其他service+chkconfig
syetemctl就是service和chkconfig这两个命令的整合,在CentOS 7就开始被使用了.systemctl 是系统服务管理器命令,它实际上将 service 和 chkconfig ...
- 五、MySQL系列之高级知识(五)
本篇 主要介绍MySQL的高级知识---视图.事件.索引等相关知识: 一.视图 在学习视图时我们需要什么是视图,视图有哪些好处以及视图的相关操作: 1.1 什么是视图? 关于视图通俗来讲就是一条se ...
- 解决npm安装时出现run `npm audit fix` to fix them, or `npm audit` for details 的问题
npm audit fix npm audit fix --force npm audit 按照顺序一一运行亲测完全可用如果还是不行的话,可以把node_modules和package-lock.js ...
- OpenStack中虚拟机获取不到IP地址的解决方法
OpenStack源码交流群: 538850354 系统环境: centos6.5 + icehouse多节点部署 问题描述: 使用测试镜像cirros,虚拟机实例可以正常启动,但是不能从IP池中获取 ...
- sql的时间格式
sql中的时间格式转换主要有:date_format函数,str_to_date函数 1. 首先选择一个数据库 use db_name; 2. 显示当前时区的时间: SELECT NOW(); 3. ...
- 基于Keras实现mnist-官方例子理解
前言 久闻keras大名,最近正好实训,借着这个机会好好学一下. 首先推荐一个API,可能稍微有点旧,但是写的是真的好 https://keras-cn.readthedocs.io/en/lates ...