大数据开发实战系列之电信客服(1)

大数据实战开发系列,以实战为主,辅以一些基础知识,关于电信客服,在网上也有很多的资料,这里我自然会去参考网上的资料,程序的整体设计是在今天开始的,老夫尽量在本周末钱结束这个电信客服的程序编写。因为我也是一个学习者,所以在程序编写过程中难免会存在问题,有问题还请大家指出,有则改之,无则加勉。大家共同进步。本教程适合接触大数据开发不久或者还没接触大数据开发,或者小萌新。老鸟就多提意见吧,我改。

博客原文地址:大数据开发实战系列之电信客服(1)

项目背景

关于项目背景,我就照搬网上的了。通信运营商每时每刻会产生大量的通信数据,例如通话记录,短信记录,彩信记录,第三方服务资费等等繁多信息。数据量如此巨大,除了要满足用户的实时查询和展示之外,还需要定时定期的对已有数据进行离线的分析处理。例如,当日话单,月度话单,季度话单,年度话单,通话详情,通话记录等等+。我们以此为背景,寻找一个切入点,学习其中的方法论。当前我们的需求是:统计每天、每月以及每年的每个人的通话次数及时长。

项目架构

关于这个项目架构,网上的是用的 MapReduce , 老夫最近在看 Flink , 因此,我们把这个计算引擎换成 Flink 引擎。先看一下原来的系统架构:

再来看看我这边修改后的:

那我们现在就根据这个流程一步一步来走。

项目实现

项目平台搭建

关于大数据的一个平台搭建,我在这里就不做介绍,目前老夫的所有的博客涉及到大数据平台搭建的还是比较少的,我这里贴几个我写过的涉及到平台搭建的几篇博客,是老夫之前写过的:

忘记说了,这里老夫使用的是 Flume 里面的 TailDirSource , 但是在我们设计的时候,使用的是 MemoryChannel , 这个对我们项目本身的测试而言,影响不大。关于 Flume里面的几个 sink , source ,后期我会继续向大家做一个具体的介绍。这里就先留一个疑问,就是TailDirSource和 MemoryChannel 怎么做选择?

数据生产

这里我们的数据格式,需要确定下:
| 列名 | 解释 | 举例 |
| ------------ | ---------------------------- | -------------- |
| call1 | 第一个手机号码 | 15369468720 |
| call1_name | 第一个手机号码人姓名(非必须) | 李雁 |
| call2 | 第二个手机号码 | 19920860202 |
| call2_name | 第二个手机号码人姓名(非必须) | 卫艺 |
| date_time | 建立通话的时间 | 20171017081520 |
| date_time_ts | 建立通话的时间(时间戳形式) | |
| duration | 通话持续时间(秒) | 0600 |

这是我们的数据格式。
怎么去设计我们的这个数据生产?下面是一个思路,

a).创建Java集合类存放模拟的电话号码和联系人

b).随机选取两个手机号码当作“主叫”与“被叫”(注意判断两个手机号不能重复),产出call1与call2字段数据

c).创建随机生成通话建立时间的方法,可指定随机范围,最后生成通话建立时间,产出date_time字段数据;

d).随机一个通话时长,单位:秒,产出duration字段数据;

e).将产出的一条数据拼接封装到一个字符串中;

f).使用IO操作将产出的一条通话数据写入到本地文件中.

这里,我就不贴程序了,具体的程序可以参考电信客服数据生产

数据采集

数据采集模块,我们这里采用的是 linux -> flume -> kafka -> flink
数据在我们的本地 Linux系统中生产,由Flume将数据送到 Kafka , Flink再从我们的Kafka中拿取数据。
这里,安装配置就不多说了,我们启动Kafka前,先启动zookeeper,kafka正常启动后就不用管它了,他只是一个消费通道。现在数据采集的核心是怎么去采集,我们采用的是 Flume , Flume这里也只是需要配置一下,就可以完成我们采集任务:

a1.sources=r1
a1.channels=c1

# configure source
a1.sources.r1.type = TAILDIR
a1.sources.r1.positionFile = /opt/datas/CI123/cidata/flink-telecom-customer-service-posiotion.json
a1.sources.r1.filegroups = f1
a1.sources.r1.filegroups.f1 = /opt/datas/CI123/cidata/flink-telecom-customer-service.log
a1.sources.r1.fileHeader = true
a1.sources.r1.channels = c1

# configure channel
a1.channels.c1.type = org.apache.flume.channel.kafka.KafkaChannel
a1.channels.c1.kafka.bootstrap.servers = hadoop101:9092,hadoop102:9092,hadoop103:9092
a1.channels.c1.kafka.topic = flink-telecom-customer-service
a1.channels.c1.parseAsFlumeEvent = false
a1.channels.c1.kafka.consumer.group.id = flume-consumer

我不知道这里的配置要不要讲,简单的讲一下。首先,我们这里只有一个 source和一个channel , 如果有多个就写多个。在我们的source中,他的类型是 TAILDIR ,这个source源有个特点就是支持断点续传,这个断电续传的实现是因为它在做传输的时候,会有一个记录文件,叫做 *.json的位置文件,这个文件是你自己配置的,建议你自己配置好,否则默认文件不知道在哪个旮旯里面。这个 json文件里面记录的就是 flume采集失败的时候最近的那次采集的位置,下次恢复后,再从那个地方采集。接下来就是配置文件位置了,如果我们吧配置了多个源,这里就会有多个文件,最后配置当前的 source 使用的是那个 channel 进行传输。
在 channel 里面,我们使用的是 KafkaChannel ,这个 channel 可以直接把数据送入 kafka 的 topic 里面。所以呢,我们需要配置好 kafka地址,topic 名以及我们的消费者组。这些概念可以参考我上面提供的 Kafka 的入门博文。

数据清洗(ELK)

关于数据的清洗,目前程序还在编写中,暂时留在下一集我们在聊吧。有喜欢的朋友可以关注我,以后也会不定期的去更新一些内容,也包括自己的一些感受,踩得坑啥的。

原文地址:https://www.cnblogs.com/sun-iot/p/12095705.html

时间: 2024-10-22 19:33:38

大数据开发实战系列之电信客服(1)的相关文章

程序员入门必备的大数据开发实战系列丛书

想要入行大数据却不知从哪里开始?作为入行十年的码农为大家推荐一套"一站式实战型大数据应用开发学习指导"丛书,帮助读者踏上由开发入门到大数据实战的"互联网+大数据"开发之旅! 此套丛书以实用性.案例丰富见长.由国内知名的IT教育机构课工场创始人肖睿主编,人民邮电出版社出版.编撰此书时为满足企业对人才的技能需求,课工场大数据开发教研团队,通过对数百位BAT一线技术专家进行访谈.上千家企业人力资源情况进行调研.上万上企业招聘岗位进行需求分析,在此基础上,整合了大量案例说明

大数据开发实战:Hive优化实战3-大表join大表优化

5.大表join大表优化 如果Hive优化实战2中mapjoin中小表dim_seller很大呢?比如超过了1GB大小?这种就是大表join大表的问题.首先引入一个具体的问题场景,然后基于此介绍各自优化方案. 5.1.问题场景 问题场景如下: A表为一个汇总表,汇总的是卖家买家最近N天交易汇总信息,即对于每个卖家最近N天,其每个买家共成交了多少单,总金额是多少,假设N取90天,汇总值仅取成交单数.A表的字段有:buyer_id. seller_id.pay_cnt_90day. B表为卖家基本信

离线和实时大数据开发实战

离线和实时大数据开发实战 目 录 前言 第一篇 数据大图和数据平台大图 第1章 数据大图 2 1.1 数据流程 2 1.1.1 数据产生 3 1.1.2 数据采集和传输 5 1.1.3 数据存储处理 6 1.1.4 数据应用 7 1.2 数据技术 8 1.2.1 数据采集传输主要技术 9 1.2.2 数据处理主要技术 10 1.2.3 数据存储主要技术 12 1.2.4 数据应用主要技术 13 1.3 数据相关从业者和角色 14 1.3.1 数据平台开发.运维工程师 14 1.3.2 数据开发.

大数据开发实战:数据流图及相关数据技术

1.大数据流程图 2.大数据各个环节主要技术 2.1.数据处理主要技术 Sqoop:(发音:skup)作为一款开源的离线数据传输工具,主要用于Hadoop(Hive) 与传统数据库(MySql,PostgreSQL)间的数据传递.它可以将一个关系数据库中数据导入Hadoop的HDFS中, 也可以将HDFS中的数据导入关系型数据库中. Flume:实时数据采集的一个开源框架,它是Cloudera提供的一个高可用用的.高可靠.分布式的海量日志采集.聚合和传输的系统.目前已经是Apache的顶级子项目

大数据开发实战:Stream SQL实时开发

1.流计算SQL原理和架构 流计算SQL通常是一个类SQL的声明式语言,主要用于对流式数据(Streams)的持续性查询,目的是在常见流计算平台和框架(如Storm.Spark Streaming.Flink.Beam等)的底层API上, 通过使用简易通用的的SQL语言构建SQL抽象层,降低实时开发的门槛. 流计算SQL的原理其实很简单,就是在SQL和底层的流计算引擎之间架起一座桥梁---流计算SQL被用户提交,被SQL引擎层翻译为底层的API并在底层的流计算引擎上执行.比如对Storm 来说,

大数据开发实战:维度建模1-相关概念

1.维度建模相关概念 1.1.度量和环境 维度建模支持对因为过程的支持,这是通过对业务过程度量进行建模来实现的. 那么,什么是度量呢?实际上,通过和业务方.需求方交谈.或者阅读报表.图表等,可以很容易地识别度量. 考虑如下因为需求: a.店铺上个月的销售额如何? b.店铺库存趋势如何? c.店铺的访问情况如何(pv page view 访问量, 即页面浏览量或点击量,衡量网站用户访问的网页数量:在一定统计周期内用户每打开或刷新一个页面就记录1次,多次打开或刷新同一页面则浏览量累计. uv: Un

转:Hadoop大数据开发基础系列:七、Hive基础

https://blog.csdn.net/hehe_soft_engineer/article/details/102820968 原文地址:https://www.cnblogs.com/ambdyx/p/11779609.html

在线客服系统 开发实战系列(一:需求分析及技术方案初步选型)

在这个系列的文章里,我将尝试一步一步开发一套功能完备的在线客服系统,并最终将其开源在 Git 上,欢迎关注. 鉴于水平限制,难免有所疏漏,欢迎批评指正. 文章将分为几个部分 一.需求分析及技术方案初步选型 二.技术方案选型,验证 三.底层框架设计,开发 四.服务器设计开发 五.客户端设计开发 六.Web端设计开发 在这个系列的文章中,您将了解并学习到以下技术知识: MSMQ.YUI.WebSocket.WinForms 如果这些技术对您有用,还请您 推荐 一下本文章,谢谢! 首先我们大概看看什么

Spark2.0从入门到精通:Scala编程、大数据开发、上百个实战案例、内核源码深度剖析视频教程

38套大数据,云计算,架构,数据分析师,Hadoop,Spark,Storm,Kafka,人工智能,机器学习,深度学习,项目实战视频教程 视频课程包含: 38套大数据和人工智能精品高级课包含:大数据,云计算,架构,数据挖掘实战,实时推荐系统实战,电视收视率项目实战,实时流统计项目实战,离线电商分析项目实战,Spark大型项目实战用户分析,智能客户系统项目实战,Linux基础,Hadoop,Spark,Storm,Docker,Mapreduce,Kafka,Flume,OpenStack,Hiv