大数据项目实战二之电信大数据项目

大数据项目实战二之电信大数据项目

1.项目简介

大数据时代的到来,对数据的处理与分析有了很高的要求。本项目以通话数据去展示如何处理并分析大数据,并最终通过图表可视化展示。
本项目主要分成如下几个部分:

  • 生产日志【模拟通话 】
  • => kafka 采集
  • 【=> kafka API 的控制台展示】 =>HBASE(创建命名空间,创建表,rowKey设计,region预分区)
  • =>MapperReduce 分析 HBase 数据
  • =>将分析的数据写入到Mysql
  • => Web Server【使用JSP+Servlet

2. 项目实现

这个项目(Project)由多个模块(Modules)构成的,这些模块之间可以独立运行。所有模块如下:
在这里插入图片描述

  • dataProducer 实现数据的生产
  • ct_consumer 实现数据的消费【写入到HBase
  • ct_analysis 实现数据的分析
  • webDisplay 实现数据的可视化

2.1 MapReduce 中的 Mapper

  • 映射输入的键值对到一组中间状态的键值对。=> 将输入状态的键值对变换成中间状态的键值对。
  • Maps任务各不相同,它们都是将输入的记录转换成中间状态记录。已经转换成功的中间状态记录不需要和输入记录类型相同。一个输入的键值对可能映射到0到多个输出的键值对。

采取使用多个MapReduce分析多个业务指标的方式来进行任务。
业务指标:

  • 用户通话时间统计
  • 用户每月通话记录统计,通话时间统计
  • 用户之间的亲密关系统计(通话次数与通话时间体现用户亲密关系)

2.2 自定义输出格式类

本项目中自定义的三个输出类分别是:

  • Intimacy
    这个 Intimacy 是用于做亲密度展示的
  • MonthStat
    这个MonthStat是用于做每个月每个用户的通话数据展示
  • Statistics
    这个Statistics是用于做每个用户每年的通话数据展示【其实我觉得这个实体类稍显多余,暂且就放在这里】

2.4 mapreduce实现类

分成三个部分,生成这些统计数据,如下

  • teleDuration
    用于计算年通话时长
  • teleIntimacy
    用于计算用户亲密度
  • teleMonthDura
    用于计算用户月通话时长
    在这里插入图片描述
    它们都在analyze.fromHBToMys包下。

2.5 结果存储

将分析的结果存放在mysql中。
使用到的表主要有,(这里简单展示如下):

//0. 电信数据分析数据库
create database mydatabase character set utf8;

//1. 用户基本信息表
create table user(
 teleNumber varchar(12) not null primary key
 ,name varchar(20) not null
);


//2. 通话记录分析表
drop table if exists statistics;
CREATE TABLE statistics (
  telenumber varchar(12) NOT NULL,
  callDuration int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (telenumber)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

//3. 亲密度分析结果表
-- 亲密用户信息表,用于展现call1 的用户在year 年时的亲密用户
drop table if exists intimacy;
create table intimacy(
call1 varchar(12) not null primary key,
call2 varchar(12) not null ,
year varchar(6) not null,
callDuration int not null DEFAULT  0
);
create unique index uidx_call1_call2_year on intimacy(call1,call2,year);

//4. 用户月通话数据统计表
drop table if exists monthStat;
create table monthStat(
teleNumber varchar(12) not null ,
yearMonth varchar(6) not null ,
callDuration int not null DEFAULT  0,
primary key(teleNumber,yearMonth)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

3. 项目代码

项目具体代码详见我的 github。【因为涉及到关键字,项目暂时关闭了,后期开放再更新出来】

4. 运行结果

因为需要展示的内容有很多,这里只截图展示部分内容

  • 如下是将通话记录写入到 Hbase 的表之后,生成的表以及内容;
    在这里插入图片描述

  • Hbase 管理界面上的calllog
    在这里插入图片描述截取其中一个 region 进行查看,如下:
    在这里插入图片描述需要注意的是,这里的分区键。分区键的内容在我博客里有介绍,这里不再赘述。

  • mysql 数据库如下
    在这里插入图片描述

  • 前端界面展示
    程序主页如下:
    在这里插入图片描述
    进入到项目主页,如下:
    在这里插入图片描述
    填好参数,即可运行:
    在这里插入图片描述
    得到的执行结果如下:
    在这里插入图片描述

5. 项目问题

在构建这个项目时,遇到了很多问题。主要有如下几个方面:

5.1 前端方案

因为是一名大数据开发工程师,属于后端领域,对于前端技术是的一点儿都不懂。虽然之前也曾用ASP搭建过网站,但是属于Windows的这个技术实在不适合java。于是自己硬是学习了一遍 JSP+Servlet,虽然这些东西也不是十分友好,但是对于解决页面展示问题还是绰绰有余的。在使用 JSP+Servlet 的过程中,主要遇到的问题有:

5.2 前端页面不会动态刷新

JSP 页面自身没有刷新操作。但是在Ajax中却是可以的。异步刷新指的就是:我在加载了一个index.jsp页面时,即使第一次加载的时候数据还没有准备好,却依然可以通过ajax 将数据加载出来。但是如若通过JSPSession或者Bean方式,就不行。这里记录如下:
下图是在第一次加载 telephone = 14218140347 这个用户产生的页面。
在这里插入图片描述上面这个页面的月通话详情是通过ajax 获取的;而userName,province/city等字段却是通过Bean的方式获取;而 startMonthendMonthuserName则是通过页面值传递获取的。但是我们可以看到通过Bean的方式没有将值获取到。
接着,再次发送一次请求【刷新页面】,如下:
在这里插入图片描述

在这里插入图片描述
接着就看到这个userName字段就获取到了值,为何手动刷新一遍就可以获取到值呢?原因就如上所述:ajax 是异步刷新数据,而这里的userName 则使用Session的方式。从而导致第一遍加载的时候无法出现userName 字段,但是再次刷新的时候,就出现了这个字段。 那么这个问题的解决办法就是:在从callStatistic.jsp 时就加载这个userName,然后让其写入到session中,这样在加载 statisticOne.jsp 时就可以显示出了userName 字段。

5.3 MapReduce 分析过程

HBase读取数据,并将数据写到Mysql这个过程稍有复杂,但是接触之后就会发现其套路大致相同。这里结合我之前的博客内容,给出如下几个较为基础的实战项目背景,结合如下几个简单的MapReduce程序,就可以看懂整个分析过程。

6. 总结

  • 希望更多IT人参与到开源的世界中来,并贡献自己的力量。以天下为己任,做一名真诚,正直,优秀的科技人员。【此项目的代码链接在github地址
  • 有什么问题,尽管在评论区留言,我看到之后会第一时间回复。既然都看到这里了,不妨点赞+关注呗 ^_^
### 回答1: Hadoop大数据开发案例教程与项目实战是一本介绍Hadoop技术的书籍,它包含了多个实际案例和项目实战,帮助读者深入了解Hadoop的应用和开发。这本书的内容涵盖了Hadoop的基础知识、Hadoop生态系统、Hadoop的安装和配置、HadoopMapReduce编程、Hadoop的数据存储和管理、Hadoop的数据分析和挖掘等方面。通过学习这本书,读者可以掌握Hadoop的核心技术和应用,为大数据开发提供有力的支持。 ### 回答2: Hadoop是一个可扩展性强的分布式系统,已成为处理大数据的首选工具之一。Hadoop框架由HDFS和MapReduce两部分组成,分别负责存储和处理大量数据。为了更好地理解Hadoop的工作原理,许多人开始探索hadoop大数据开发案例教程与项目实战Hadoop大数据开发案例教程与项目实战的学习过程是一个渐进的过程,需要先掌握Hadoop的基本概念和框架结构。学习Hadoop,首先需要了解HDFS和MapReduce。 HDFS是Hadoop分布式文件系统的简称,用于存储大量数据,具有高可靠性、高可用性和容错性。MapReduceHadoop分布式计算框架,实现了分布式数据处理和分布式计算的功能,可在多台计算机上并行处理大量数据。 在掌握了Hadoop的基础知识后,需要进行实际的实战操作,利用Hadoop开发项目Hadoop大数据开发案例教程与项目实战主要分为数据准备、数据清洗、数据处理和数据分析四个步骤。 数据准备阶段顾名思义,就是准备大量需要处理的数据。可以使用各种数据源,例如Hive、HBase、NoSQL、RDBMS等数据源。数据准备完成后,需要进行数据清洗,将数据中的垃圾、破损和不规范的数据剔除掉,以确保数据的质量。 数据处理阶段是使用Hadoop的核心工具之一MapReduce来处理数据。MapReduce通常通过将数据分成小块进行并行处理,大大缩短了处理时间。在数据处理过程中,需要将MapReduce分为Map和Reduce两个步骤。Map任务会读取数据,然后将其转换为键值对的形式,Reduce任务负责将键值对进行处理并输出结果。 最后是数据分析阶段,根据收集的数据做出相关的分析和决策。利用Hadoop大数据技术和算法,可以从海量数据中提取有价值的、有意义的、有价值的信息。数据分析结果可以帮助企业做出更明智的决策和战略规划。 总而言之,通过掌握Hadoop的基础知识,应用Hadoop大数据技术进行实战操作,开发大数据项目,可以帮助企业更好地处理和分析海量数据,促进企业业务的增长和发展。 ### 回答3: Hadoop大数据开发案例教程与项目实战是针对大数据领域的一本教程书籍,该书分为两部分,第一部分主要介绍了Hadoop技术体系的基础知识,包括Hadoop核心组件HDFS、MapReduce、YARN、Hive、HBase、ZooKeeper等,还有一些Hadoop大数据领域的相关概念和理论知识。第部分则是实战部分,通过多个实际案例,详细介绍了如何使用Hadoop技术解决大数据领域的实际问题,包括数据清洗与预处理、数据分析与挖掘、数据可视化与报表分析等。 本书指导读者从实战出发,通过多个真实的案例,深入理解Hadoop的技术原理和使用方法。通过实际操作,读者能够快速掌握Hadoop平台下的数据处理、数据分析和数据挖掘技能。书中的案例涵盖了分类和聚类分析、高维数据的处理与优化、大数据实时处理等领域,让读者全面了解大数据领域的应用场景和解决方案。 通过本书的学习,读者可以了解如何基于Hadoop开发大规模数据处理和分析应用,如何使用MapReduce编写复杂的数据处理算法,如何使用HBase和Hive等工具对数据进行存储和查询。同时,本书也对大数据挖掘、机器学习和深度学习等领域的内容进行了涵盖,让读者能够深入了解当下最热门、最前沿的技术和应用。 总的来说,Hadoop大数据开发案例教程与项目实战是一本非常实用的教材,通过对实际案例的讲解,让读者真正地了解到如何在Hadoop平台下开发大数据应用,同时对大数据领域的相关概念和理论也作出了详细的阐述,非常适合大数据开发人员和数据科学家的学习和使用。
评论 30
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

说文科技

看书人不妨赏个酒钱?

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值