Java+大数据开发——Hadoop集群环境搭建(二)
1. MAPREDUCE使用 |
mapreduce是hadoop中的分布式运算编程框架,只要按照其编程规范,只需要编写少量的业务逻辑代码即可实现一个强大的海量数据并发处理程序
2. Demo开发——wordcount |
2.1需求
从大量(比如T级别)文本文件中,统计出每一个单词出现的总次数。
2.2mapreduce 实现思路
Map阶段:
a) 从HDFS的源数据文件中逐行读取数据
b) 将每一行数据切分出单词
c) 为每一个单词构造一个键值对(单词,1)
d) 将键值对发送给reduce
Reduce阶段:
a) 接收map阶段输出的单词键值对
b) 将相同单词的键值对汇聚成一组
c) 对每一组,遍历组中的所有“值”,累加求和,即得到每一个单词的总次数
d) 将(单词,总次数)输出到HDFS的文件中
2.3具体编码实现
(1)定义一个mapper类
//首先要定义四个泛型的类型 //keyin: LongWritable valuein: Text //keyout: Text valueout:IntWritablepublic class WordCountMapper extends Mapper<LongWritable, Text, Text, IntWritable>{//map方法的生命周期: 框架每传一行数据就被调用一次//key : 这一行的起始点在文件中的偏移量//value: 这一行的内容 @Overrideprotected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {//拿到一行数据转换为stringString line = value.toString(); //将这一行切分出各个单词String[] words = line.split(" ");//遍历数组,输出<单词,1>for(String word:words){context.write(new Text(word), new IntWritable(1));}} }
(2)定义一个reducer类
//生命周期:框架每传递进来一个kv 组,reduce方法被调用一次 @Overrideprotected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {//定义一个计数器int count = 0;//遍历这一组kv的所有v,累加到count中for(IntWritable value:values){count += value.get();}context.write(key, new IntWritable(count));} }
(3)定义一个主类,用来描述job并提交job
public class WordCountRunner {//把业务逻辑相关的信息(哪个是mapper,哪个是reducer,要处理的数据在哪里,输出的结果放哪里。。。。。。)描述成一个job对象//把这个描述好的job提交给集群去运行public static void main(String[] args) throws Exception {Configuration conf = new Configuration();Job wcjob = Job.getInstance(conf);//指定我这个job所在的jar包 // wcjob.setJar("/home/hadoop/wordcount.jar");wcjob.setJarByClass(WordCountRunner.class);wcjob.setMapperClass(WordCountMapper.class);wcjob.setReducerClass(WordCountReducer.class);//设置我们的业务逻辑Mapper类的输出key和value的数据类型wcjob.setMapOutputKeyClass(Text.class);wcjob.setMapOutputValueClass(IntWritable.class);//设置我们的业务逻辑Reducer类的输出key和value的数据类型wcjob.setOutputKeyClass(Text.class);wcjob.setOutputValueClass(IntWritable.class); //指定要处理的数据所在的位置FileInputFormat.setInputPaths(wcjob, "hdfs://hdp-server01:9000/wordcount/data/big.txt");//指定处理完成之后的结果所保存的位置FileOutputFormat.setOutputPath(wcjob, new Path("hdfs://hdp-server01:9000/wordcount/output/"));//向yarn集群提交这个jobboolean res = wcjob.waitForCompletion(true);System.exit(res?0:1);}
3.程序打包运行 |
1. 将程序打包
2. 准备输入数据
vi /home/hadoop/test.txt
Hello tom Hello jim Hello ketty Hello world Ketty tom
在hdfs上创建输入数据文件夹:
hadoop fs mkdir -p /wordcount/input
将words.txt上传到hdfs上
hadoop fs –put /home/hadoop/words.txt /wordcount/input
3. 将程序jar包上传到集群的任意一台服务器上
4. 使用命令启动执行wordcount程序jar包
$ hadoop jar wordcount.jar cn.itcast.bigdata.mrsimple.WordCountDriver /wordcount/input /wordcount/out
5. 查看执行结果
$ hadoop fs –cat /wordcount/out/part-r-00000
出处:http://www.cnblogs.com/jerehedu/
版权声明:本文版权归烟台杰瑞教育科技有限公司和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
技术咨询:
Java+大数据开发——Hadoop集群环境搭建(二)相关推荐
- 大数据介绍、集群环境搭建、Hadoop介绍、HDFS入门介绍
大数据介绍.集群环境搭建.Hadoop介绍.HDFS入门介绍 文章目录 大数据介绍.集群环境搭建.Hadoop介绍.HDFS入门介绍 1.课前资料 2.课程整体介绍 3.大数据介绍 3.1 什么是大数 ...
- hadoop集群环境搭建准备工作
一定要注意hadoop和linux系统的位数一定要相同,就是说如果hadoop是32位的,linux系统也一定要安装32位的. 准备工作: 1 首先在VMware中建立6台虚拟机(配置默认即可).这是 ...
- 大数据 -- Hadoop集群环境搭建
首先我们来认识一下HDFS, HDFS(Hadoop Distributed File System )Hadoop分布式文件系统.它其实是将一个大文件分成若干块保存在不同服务器的多个节点中.通过联网 ...
- 大数据:Hadoop集群测试
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 Hadoop集群测试 通过UI界面查看Hadoop运行状态 一.hadoop2和hadoop3端口区别表 2.查看HDFS集群状态 查 ...
- 大数据之Hadoop简介及环境搭建
第1章 大数据概论 1.1 大数据概念 大数据(Big Data):指无法在一定时间范围内用常规软件工具进行捕捉.管理和处理的数据集合,是需要新处理模式才能具有更强的决策力.洞察发现力和流程优化能力的 ...
- hadoop集群环境搭建
参考文章: https://www.linuxidc.com/Linux/2016-02/128149.htm https://blog.csdn.net/circyo/article/details ...
- Hadoop集群环境搭建之伪分布式搭建流程
关防火墙 1.首先关闭window防火墙 service iptables status 查看Linux 防火墙状态 service iptables stop 关闭Linux防火墙 chkconfi ...
- CDH版本Hadoop集群环境搭建详解
CDH版本Hadoop集群搭建 1.CDH版本hadoop重新编译 1.1 为什么要编译? 1.2 编译环境的准备 1.3 进行编译 2.CDH版本的zookeeper环境搭建 2.1 zookeep ...
- Hadoop集群环境搭建(超详细)
目录 1 实验环境 2 实验准备 3 配置SSH免密登录 4 Hadoop安装与配置 1 实验环境 Oracle Linux 7.4 JDK 1.8 Hadoop 2.7.4 2 实验准备 1.实验准 ...
最新文章
- 逻辑回归算法原理简介
- 本科视觉算法实习生面经
- 遇到的Ajax相关问题
- 怎么查看自己安装的python版本_教你如何检查 Python 版本
- 机器学习两种距离——欧式距离和马氏距离
- java 实现 sql join_Sql 数据库 join 连接
- 石油勘探是属于计算机应用中的,计算机在石油勘探开发中的应用论文
- 中关村Win11 32位微软原版ISO V2021.08
- ce修改服务器的数据库,数据库服务器的调优步骤
- window server 2008 R2 启用方法
- 计算机控制实验2,计算机控制系统实验报告 (2)
- 第 72 章 FAQ
- 关于领域驱动设计与面向数据库设计
- 中国无线城市市场发展策略及未来前景规划报告2022年版
- linux vi 文件查找,linux几种常见的文件内容查找和替换命令
- php k线公式源码,发个珍藏了N久的波浪主图公式(公式 指标 源码)(演示图)-其他软件公式 -程序化交易(CXH99.COM)...
- 保健操对颈椎病有辅助治疗。
- kotlin 实战之核心基础特性总结
- c语言gets和puts的区别,C 语言 gets()和puts()
- 计算机教室与黑板距离,教室灯具布置怎么做比较合理?
热门文章
- webkit如何实现JS DOM binding—基于V8分析
- 【Redis】18.缓存预热、缓存雪崩、缓存击穿、缓存穿透、性能指标监控等企业级解决方案
- android:onClick attribute
- shell编程系列26--大型脚本工具开发实战
- 分布式计算—MapReduce、Spark、Storm、Flink分别适用什么场景
- SharePoint Framework 企业向导(九)
- Linux多线程实践(六)使用Posix条件变量解决生产者消费者问题
- VC2010 [转]解决char *无法转换为LPCWSTR问题
- 乙肝疫苗该怎么打(转)
- 快速实现Apache二级域名的方法