热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Hadoop——实验七:MapReduce编程实践

文章目录一.实验目的二.实验内容三.实验步骤及结果分析 1.基于ubuntukylin14.04(7)版本,安装hadoop-eclipse-kepler-plugi


文章目录

    • 一. 实验目的
    • 二. 实验内容
    • 三. 实验步骤及结果分析
      •  1. 基于ubuntukylin14.04(7)版本,安装hadoop-eclipse-kepler-plugin-2.6.0.jar
        •  1.1 安装hadoop-eclipse-plugin
        •  1.2 配置hadoop-eclipse-plugin
      •  2. 基于ubuntukylin14.04(8)版本,通过eclipse完成MapReduce编程实践
        •  2.1 通过eclipse操作HDFS文件
        •  2.2 通过eclipse创建MapReduce项目
        •  2.3 通过eclipse运行MapReduce


一. 实验目的

  掌握MapReduce编程实践技术。


二. 实验内容

  1) 基于ubuntukylin14.04(7)版本,安装hadoop-eclipse-kepler-plugin-2.6.0.jar,形成ubuntukylin14.04(8)版本。
  2) 基于ubuntukylin14.04(8)版本,通过eclipse完成MapReduce编程实践。
  参考:http://dblab.xmu.edu.cn/blog/hadoop-build-project-using-eclipse/


三. 实验步骤及结果分析


 1. 基于ubuntukylin14.04(7)版本,安装hadoop-eclipse-kepler-plugin-2.6.0.jar

  版本说明:ubuntukylin14.04(7)=hadoop集群(hadoop2.6.0版本)+hbase伪分布式(hbase1.1.2版本)

  注:hadoop-eclipse-plugin下载地址为: https://github.com/winghc/hadoop2x-eclipse-plugin


 1.1 安装hadoop-eclipse-plugin

  首先下载插件,然后输入unzip -qo ~/下载/hadoop2x-eclipse-plugin-master.zip -d ~/下载命令将其解压到下载目录,然后输入sudo cp ~/下载/hadoop2x-eclipse-plugin-master/release/hadoop-eclipse-plugin-2.6.0.jar /opt/eclipse/plugins/命令将hadoop-eclipse-kepler-plugin-2.6.0.jar复制到ecljpse安装目录的plugins文件夹中。然后输入/opt/eclipse/eclipse -clean命令启动eclipse使插件生效。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


 1.2 配置hadoop-eclipse-plugin

  首先输入start-dfs.shstart-yarn.shmr-jobhistory-daemon.sh start historyserver三个命令启动Hadoop集群,然后启动eclipse。
  点击导航栏Windows→Show View→Project Explorer,在左侧就会显示出DFS Locations。
在这里插入图片描述
在这里插入图片描述
  然后点击导航栏Windows→Preferences→左侧Hadoop Map/Reduce→在Hadoop installation directory中填写Hadoop的安装地址/usr/local/hadoop→Apply and Close。
在这里插入图片描述
在这里插入图片描述
  然后点击导航栏Windows→Perspective→Open Perspective→Other→Map/Reduce→Open,就会在控制台下方显示Map/Reduce Locations面板。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
  在Map/Reduce Locations面板中右击→New Hadoop location…→Location name自定义→Map/Reduce(V2)Master的Host为K1、Port默认→DFS Master的Port为9000→User name默认→Finish。其中,因为我的Hadoop是集群式,设置的fs.defaultFS为hdfs://K1:9000,所以DFS Maser要与其对应。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


 2. 基于ubuntukylin14.04(8)版本,通过eclipse完成MapReduce编程实践

  版本说明:ubuntukylin14.04(8) =hadoop集群(hadoop2.6.0版本)+hbase伪分布式(hbase1.1.2版本)+安装好hadoop-eclipse-kepler-plugin-2.6.0.jar


 2.1 通过eclipse操作HDFS文件

  确保已经启动了Hadoop集群,然后打开eclipse,此时展开左侧DFS Locations就可以查看HDFS中的文件,然后可以通过右键进行上传、下载、删除等操作,不用再通过繁琐的hdfs dfs -ls等命令进行操作。
在这里插入图片描述


 2.2 通过eclipse创建MapReduce项目

  点击导航栏File→New→Project…→选中Map/Reduce Project→Next→Project name为mcf14HDFSgzxm→Finish,然后在左侧就能看到创建的项目了。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
  右击mcf14HDFSgzxm项目→New→Class→Package改为org.apache.hadoop.examples→Name为mcf14HDFSgzxm→Finish,就会自动创建mcf14HDFSgzxm.java文件(代码见文末),在其中写入代码。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


 2.3 通过eclipse运行MapReduce

  复制配置文件解决参数设置问题。在终端输入cp /usr/local/hadoop/etc/hadoop/{core-site.xml,hdfs-site.xml,log4j.properties} ~/eclipse-workspace/mcf14HDFSgzxm/src命令将/usr/local/hadoop/etc/hadoop中修改过的三个配置文件core-site.xmlhdfs-site.xmllog4j.properties复制到mcf14HDFSgzxm项目下的src文件夹即~/eclipse-workspace/mcf14HDFSgzxm/src中,然后可输入ls ~/eclipse-workspace/mcf14HDFSgzxm/src命令进行查看。
在这里插入图片描述
  右击mcf14HDFSgzxm项目,点击Refresh进行刷新,会看到复制进去的文件。然后运行代码就会在控制台输出运行结果,在DFS Locations的output中也能查看结果。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


mcf14HDFSgzxm.java代码:

import java.io.IOException;
import java.util.Iterator;
import java.util.StringTokenizer;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.util.GenericOptionsParser;public class mcf14HDFSgzxm {public mcf14HDFSgzxm() {}public static void main(String[] args) throws Exception {Configuration conf &#61; new Configuration();// String[] otherArgs &#61; new GenericOptionsParser(conf, args).getRemainingArgs();/*需要手动设置运行的输入输出参数*/String[] otherArgs&#61;new String[]{"input","output"}; /* 直接设置输入参数 */if(otherArgs.length < 2) {System.err.println("Usage: wordcount [...] ");System.exit(2);}Job job &#61; Job.getInstance(conf, "word count");job.setJarByClass(mcf14HDFSgzxm.class);job.setMapperClass(mcf14HDFSgzxm.TokenizerMapper.class);job.setCombinerClass(mcf14HDFSgzxm.IntSumReducer.class);job.setReducerClass(mcf14HDFSgzxm.IntSumReducer.class);job.setOutputKeyClass(Text.class);job.setOutputValueClass(IntWritable.class);for(int i &#61; 0; i < otherArgs.length - 1; &#43;&#43;i) {FileInputFormat.addInputPath(job, new Path(otherArgs[i]));}FileOutputFormat.setOutputPath(job, new Path(otherArgs[otherArgs.length - 1]));System.exit(job.waitForCompletion(true)?0:1);}public static class IntSumReducer extends Reducer<Text, IntWritable, Text, IntWritable> {private IntWritable result &#61; new IntWritable();public IntSumReducer() {}public void reduce(Text key, Iterable<IntWritable> values, Reducer<Text, IntWritable, Text, IntWritable>.Context context) throws IOException, InterruptedException {int sum &#61; 0;IntWritable val;for(Iterator i$ &#61; values.iterator(); i$.hasNext(); sum &#43;&#61; val.get()) {val &#61; (IntWritable)i$.next();}this.result.set(sum);context.write(key, this.result);}}public static class TokenizerMapper extends Mapper<Object, Text, Text, IntWritable> {private static final IntWritable one &#61; new IntWritable(1);private Text word &#61; new Text();public TokenizerMapper() {}public void map(Object key, Text value, Mapper<Object, Text, Text, IntWritable>.Context context) throws IOException, InterruptedException {StringTokenizer itr &#61; new StringTokenizer(value.toString());while(itr.hasMoreTokens()) {this.word.set(itr.nextToken());context.write(this.word, one);}}}
}

推荐阅读
  • 从0到1搭建大数据平台
    从0到1搭建大数据平台 ... [详细]
  • 深入理解Java SE 8新特性:Lambda表达式与函数式编程
    本文作为‘Java SE 8新特性概览’系列的一部分,将详细探讨Lambda表达式。通过多种示例,我们将展示Lambda表达式的不同应用场景,并解释编译器如何处理这些表达式。 ... [详细]
  • 【小白学习C++ 教程】二十三、如何安装和使用 C++ 标准库
    【小白学习C++ 教程】二十三、如何安装和使用 C++ 标准库 ... [详细]
  • 本文详细介绍如何在华为鲲鹏平台上构建和使用适配ARM架构的Redis Docker镜像,解决常见错误并提供优化建议。 ... [详细]
  • HBase在金融大数据迁移中的应用与挑战
    随着最后一台设备的下线,标志着超过10PB的HBase数据迁移项目顺利完成。目前,新的集群已在新机房稳定运行超过两个月,监控数据显示,新集群的查询响应时间显著降低,系统稳定性大幅提升。此外,数据消费的波动也变得更加平滑,整体性能得到了显著优化。 ... [详细]
  • 实践指南:使用Express、Create React App与MongoDB搭建React开发环境
    本文详细介绍了如何利用Express、Create React App和MongoDB构建一个高效的React应用开发环境,旨在为开发者提供一套完整的解决方案,包括环境搭建、数据模拟及前后端交互。 ... [详细]
  • RTThread线程间通信
    线程中通信在裸机编程中,经常会使用全局变量进行功能间的通信,如某些功能可能由于一些操作而改变全局变量的值,另一个功能对此全局变量进行读取& ... [详细]
  • 尽管Medium是一个优秀的发布平台,但在其之外拥有自己的博客仍然非常重要。这不仅提供了另一个与读者互动的渠道,还能确保您的内容安全。本文将介绍如何使用Bash脚本将Medium文章迁移到个人博客。 ... [详细]
  • 大数据领域的职业路径与角色解析
    本文将深入探讨大数据领域的各种职业和工作角色,帮助读者全面了解大数据行业的需求、市场趋势,以及从入门到高级专业人士的职业发展路径。文章还将详细介绍不同公司对大数据人才的需求,并解析各岗位的具体职责、所需技能和经验。 ... [详细]
  • Presto:高效即席查询引擎的深度解析与应用
    本文深入解析了Presto这一高效的即席查询引擎,详细探讨了其架构设计及其优缺点。Presto通过内存到内存的数据处理方式,显著提升了查询性能,相比传统的MapReduce查询,不仅减少了数据传输的延迟,还提高了查询的准确性和效率。然而,Presto在大规模数据处理和容错机制方面仍存在一定的局限性。本文还介绍了Presto在实际应用中的多种场景,展示了其在大数据分析领域的强大潜力。 ... [详细]
  • 第二章:Kafka基础入门与核心概念解析
    本章节主要介绍了Kafka的基本概念及其核心特性。Kafka是一种分布式消息发布和订阅系统,以其卓越的性能和高吞吐量而著称。最初,Kafka被设计用于LinkedIn的活动流和运营数据处理,旨在高效地管理和传输大规模的数据流。这些数据主要包括用户活动记录、系统日志和其他实时信息。通过深入解析Kafka的设计原理和应用场景,读者将能够更好地理解其在现代大数据架构中的重要地位。 ... [详细]
  • PHP中元素的计量单位是什么? ... [详细]
  • HBase客户端Table类中getRpcTimeout方法的应用与编程实例解析 ... [详细]
  • 本文详细介绍了HDFS的基础知识及其数据读写机制。首先,文章阐述了HDFS的架构,包括其核心组件及其角色和功能。特别地,对NameNode进行了深入解析,指出其主要负责在内存中存储元数据、目录结构以及文件块的映射关系,并通过持久化方案确保数据的可靠性和高可用性。此外,还探讨了DataNode的角色及其在数据存储和读取过程中的关键作用。 ... [详细]
  • NoSQL数据库,即非关系型数据库,有时也被称作Not Only SQL,是一种区别于传统关系型数据库的管理系统。这类数据库设计用于处理大规模、高并发的数据存储与查询需求,特别适用于需要快速读写大量非结构化或半结构化数据的应用场景。NoSQL数据库通过牺牲部分一致性来换取更高的可扩展性和性能,支持分布式部署,能够有效应对互联网时代的海量数据挑战。 ... [详细]
author-avatar
rannman
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有