大数据实战——WordCount案例实践

本文涉及的产品
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: 大数据实战——WordCount案例实践

一.过程分析(截图)

1.确定Hadoop处于启动状态

图1:打开hdfs

在终端输入./sbin/start-dfs.sh启动hdfs。

图2:确定Hadoop处于启动状态

通过输入jps确定Hadoop处于启动状态。

2.在/usr/local/filecotent下新建hellodemo文件,并写入以下内容

图3:新建filecotent文件夹

cd进入/usr/local,通过sudo mkdir filecotent新建filecotent文件夹。

图4:新建hellodemo文件

在终端输入sudo vi hellodemo新建hellodemo文件,并写入以下内容:

hello you

Hello me

图5:进入hellodemo文件

图6:写好内容进hellodemo文件

图7:按 ESC 保存,然后 shift+:wq

3.hdfs中创建data目录

图8:hdfs中创建data目录

在终端进入hadoop文件夹后输入bin/hdfs dfs -mkdir data创建data目录。

4.将/usr/local/filecontent/hellodemo 上传到hdfs的data目录中

图9:上传到hdfs的data目录

5.查看data目录下的内容

图10:查看data目录下的内容

在终端输入命令:bin/hdfs dfs -ls data查看data目录下的内容,可以看到我们已经成功将刚刚写的hellodemo文件上传到hdfs的data目录下。

图11:查看hellodemo文件内容

在终端输入命令:bin/hdfs dfs -text data/hellodemo查看hellodemo文件内容。

6.编写WordCountTest.java并运行文件

6.1进入eclipse

图12:启动eclipse

在终端输入启动命令:./eclipse启动eclipse。

6.2默认workspace(这里必须是Hadoop用户下,如果是个人用户名下,就代表前面错误,你不是在Hadoop下完成的操作,会显示没有java路径)

图13:默认workspace

默认workspace点击launch进入下一步。

6.3新建Mapreduce包和class

图14:新建Mapreduce包

图15:给新建class起名WordCountTest

6.4点击libraries,添加jar包,添加完成后点击finish

图16:添加mapreduce的jar包

图17:添加mapreduce的里面lib的jar包

图18:添加yarn的jar包

图19:添加yarn的里面lib的jar包

6.5编写WordCountTest.java

图20:编写WordCountTest.java

图21:注意要把位置写对

图23:运行成功

7.打成jar包并指定主类,在linux中运行

图24:创建myapp

在终端输入命令:mkdir myapp创建myapp目录。

图25:选择“export”

在Eclipse工作界面左侧的“Package Explorer”面板中,在工程名称“WordCount”上点击鼠标右键,在弹出的菜单中选择“Export”。

图26:选择“Runnable JAR file”

在该界面中,选择“Runnable JAR file”,然后,点击“Next>”按钮。

图27:WordCountTest工程打包生成WordCountTest.jar

在该界面中,“Launch configuration”用于设置生成的JAR包被部署启动时运行的主类,需要在下拉列表中选择刚才配置的类“WordCount”。在“Export destination”中需要设置JAR包要输出保存到哪个目录,这里设置为“/usr/local/hadoop/myapp/WordCountTest.jar”。在“Library handling”下面选择“Extract required libraries into generated JAR”。然后,点击“Finish”按钮完成打包。

图28:查看是否打包成功

在进入myapp目录下终端输入命令:ls,可以看到,“/usr/local/hadoop/myapp”目录下已经存在一个WordCount.jar文件。

8.查看输出文件内容

图29:使用hadoop jar命令运行程序

在终端输入命令:./bin/hadoop jar ./myapp/WordCount.jar运行打包的程序。

图30:运行结果

词频统计结果已经被写入了HDFS的“/user/hadoop/out1”目录中。

图31:查看输出文件内容

在终端输入命令:bin/hdfs dfs -cat /out1/*查看输出文件内容,词频统计结果入图31所示,自此词频统计程序顺利运行结束。

二.解题思路

1.MapReduce原理

MapReduce的思想核心是“分而治之”,适用于大量复杂的任务处理场景(大规模数据处理场景)。

Map

Map负责“分”,即把复杂的任务分解为若干个“简单的任务”来并行处理。可以进行拆分的前提是这些小任务可以并行计算,彼此间几乎没有依赖关系。

Reduec

Reduce负责“合”,即对map阶段的结果进行全局汇总。

图32:WordCountTest说明

2. WordCountTest解题思路

要求:在给定的文本文件中统计输出每一个单词出现的总次数。

根据一个完整的MapReduce程序在分布式运行时需要有三类实例进程:

(1)MrAppMaster:负责整个程序的过程调度及状态协调。

(2)MapTask:负责Map阶段的整个数据处理流程。

(3)ReduceTask:负责Reduce阶段的整个数据处理流程。

所以WordCountTest需要有Map类、Reduce类和main主类。

2.1 编写Mapper

(1)自定义的MyMapper要继承自己的父类

(2)Mapper的输入数据是KV对(K:偏移量,类型为LongWritable,V:对应的内容,类型为Text)

(3)Mapper中的业务逻辑写在map()方法中

(4)Mapper的输出数据是KV对的形式

(5)map() 方法对每一个<K,V>调用一次

将传给我们的文本内容转换成String,根据空格将这一行切分成单词,再将单词输出为<单词,1>。

代码:

private static class MyMapper extends Mapper<LongWritable, Text, Text,LongWritable>{
    Text k2 = new Text();
    LongWritable v2 = new LongWritable();
    @Override
    protected void map(LongWritable key, Text value,//三个参数
                       Mapper<LongWritable, Text, Text, LongWritable>.Context context)
            throws IOException, InterruptedException {
        //获取一行
        String line = value.toString();
        //切割
        String[] splited = line.split(" ");//因为split方法属于string字符的方法,首先应该转化为string类型在使用
        //输出
        for (String word : splited) {
            //word表示每一行中每个单词
            //对K2和V2赋值
            k2.set(word);
            v2.set(1L);
            context.write(k2, v2);
        }
    }
}

2.2 编写Reducer阶段

(1)用户自定义的MyReducer要继承自己的父类

(2)Reducer的输入数据类型对应Mapper的输出数据类型,也是KV

也就是说map输出的结果然后放到reduce中处理

(3)Reducer的业务逻辑写在reduce()方法中

(4)对每一组相同k的<k,v>组调用一次reduce()方法

汇总各个key的个数,输出该key的总次数。

代码:

private static class MyReducer extends Reducer<Text, LongWritable, Text, LongWritable> {
    LongWritable v3 = new LongWritable();
    @Override //k2表示单词,v2s表示不同单词出现的次数,需要对v2s进行迭代
    protected void reduce(Text k2, Iterable<LongWritable> v2s,  //三个参数
                          Reducer<Text, LongWritable, Text, LongWritable>.Context context)
            throws IOException, InterruptedException {
        //累加求和
        long sum =0;
        for (LongWritable v2 : v2s) {
            //LongWritable本身是hadoop类型,sum是java类型
            //首先将LongWritable转化为字符串,利用get方法
            sum+=v2.get();
        }
        //输出
        v3.set(sum);
        //将k2,v3写出去
        context.write(k2, v3);
    }
}

2.3 运行分析

图33:运行分析

图34:运行结果


相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps&nbsp;
目录
相关文章
|
11天前
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
13天前
|
存储 SQL 运维
中国联通网络资源湖仓一体应用实践
本文分享了中国联通技术专家李晓昱在Flink Forward Asia 2024上的演讲,介绍如何借助Flink+Paimon湖仓一体架构解决传统数仓处理百亿级数据的瓶颈。内容涵盖网络资源中心概况、现有挑战、新架构设计及实施效果。新方案实现了数据一致性100%,同步延迟从3小时降至3分钟,存储成本降低50%,为通信行业提供了高效的数据管理范例。未来将深化流式数仓与智能运维融合,推动数字化升级。
中国联通网络资源湖仓一体应用实践
|
11天前
|
SQL 分布式计算 大数据
大数据新视界 --大数据大厂之Hive与大数据融合:构建强大数据仓库实战指南
本文深入介绍 Hive 与大数据融合构建强大数据仓库的实战指南。涵盖 Hive 简介、优势、安装配置、数据处理、性能优化及安全管理等内容,并通过互联网广告和物流行业案例分析,展示其实际应用。具有专业性、可操作性和参考价值。
大数据新视界 --大数据大厂之Hive与大数据融合:构建强大数据仓库实战指南
|
2月前
|
SQL 分布式计算 数据挖掘
从湖仓分离到湖仓一体,四川航空基于 SelectDB 的多源数据联邦分析实践
川航选择引入 SelectDB 建设湖仓一体大数据分析引擎,取得了数据导入效率提升 3-6 倍,查询分析性能提升 10-18 倍、实时性提升至 5 秒内等收益。
从湖仓分离到湖仓一体,四川航空基于 SelectDB 的多源数据联邦分析实践
|
23天前
|
关系型数据库 MySQL 大数据
大数据新视界--大数据大厂之MySQL 数据库课程设计:MySQL 数据库 SQL 语句调优的进阶策略与实际案例(2-2)
本文延续前篇,深入探讨 MySQL 数据库 SQL 语句调优进阶策略。包括优化索引使用,介绍多种索引类型及避免索引失效等;调整数据库参数,如缓冲池、连接数和日志参数;还有分区表、垂直拆分等其他优化方法。通过实际案例分析展示调优效果。回顾与数据库课程设计相关文章,强调全面认识 MySQL 数据库重要性。为读者提供综合调优指导,确保数据库高效运行。
|
2月前
|
存储 安全 数据挖掘
天翼云:Apache Doris + Iceberg 超大规模湖仓一体实践
天翼云基于 Apache Doris 成功落地项目已超 20 个,整体集群规模超 50 套,部署节点超 3000 个,存储容量超 15PB
天翼云:Apache Doris + Iceberg 超大规模湖仓一体实践
|
2月前
|
SQL 存储 消息中间件
vivo基于Paimon的湖仓一体落地实践
本文整理自vivo互联网大数据专家徐昱在Flink Forward Asia 2024的分享,基于实际案例探讨了构建现代化数据湖仓的关键决策和技术实践。内容涵盖组件选型、架构设计、离线加速、流批链路统一、消息组件替代、样本拼接、查询提速、元数据监控、数据迁移及未来展望等方面。通过这些探索,展示了如何优化性能、降低成本并提升数据处理效率,为相关领域提供了宝贵的经验和参考。
543 3
vivo基于Paimon的湖仓一体落地实践
|
2月前
|
SQL 分布式计算 运维
StarRocks 在爱奇艺大数据场景的实践
本文介绍了爱奇艺大数据OLAP服务负责人林豪在StarRocks年度峰会上的分享,重点讲述了爱奇艺OLAP引擎的演进及引入StarRocks后的显著效果。在广告业务中,StarRocks替换Impala+Kudu后,接口性能提升400%,P90查询延迟缩短4.6倍;在“魔镜”数据分析平台中,StarRocks替代Spark达67%,P50查询速度提升33倍,P90提升15倍,节省4.6个人天。未来,爱奇艺计划进一步优化存算一体和存算分离架构,提升整体数据处理效率。
StarRocks 在爱奇艺大数据场景的实践
|
2月前
|
数据采集 机器学习/深度学习 数据可视化
探索大数据分析的无限可能:R语言的应用与实践
探索大数据分析的无限可能:R语言的应用与实践
117 9
|
7天前
|
传感器 监控 大数据
别让“数据”白跑!大数据也能拯救地球
别让“数据”白跑!大数据也能拯救地球
44 15

热门文章

最新文章