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

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

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

项目背景

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

项目架构

关于这个项目架构,网上的是用的 MapReduce , 老夫最近在看 Flink , 因此,我们把这个计算引擎换成 Flink 引擎。先看一下原来的系统架构:
telecom-customer-service-1
再来看看我这边修改后的:
telecom-customer-service-1
那我们现在就根据这个流程一步一步来走。

项目实现

项目平台搭建

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

忘记说了,这里老夫使用的是 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)

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

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 大数据开发工程师系列是指专门从事大数据开发的一类职业。Hadoop和Spark是大数据领域中最受欢迎的两个开源框架。 Hadoop是一个分布式计算框架,用于处理大规模数据集的分布式存储和计算。Hadoop的核心是Hadoop分布式文件系统(HDFS)和MapReduce计算模型。HDFS将数据分布存储在集群的多个节点上,MapReduce可以并行处理这些分布式数据。Hadoop具有高可靠性、高扩展性和高容错性的特点,并且还提供了许多其他工具和库,如Hive、Pig和HBase等。 Spark是一个快速、通用的大数据处理引擎,可以在多种数据源上进行高效的分布式计算。相比于Hadoop的MapReduce,Spark具有更快的数据处理速度和更强的扩展性。Spark提供了一个称为弹性分布式数据集(RDD)的抽象,可以在内存中高效地处理大规模数据集。此外,Spark还提供了许多高级组件和库,如Spark SQL、Spark Streaming和MLlib等,用于处理结构化数据、流式数据和机器学习。 作为大数据开发工程师,掌握Hadoop和Spark是非常重要的。使用Hadoop可以处理海量数据,并且具有高可靠性和容错性。而Spark则能够快速高效地处理大规模数据,并提供了更多的数据处理和分析功能。 大数据开发工程师需要熟悉Hadoop和Spark的使用和调优技巧,以及相关的编程语言和工具,如Java、Scala和Python。他们需要了解数据处理的算法和模型,并能够设计和实现高效的分布式计算方案。此外,大数据开发工程师还需要具备良好的沟通能力和团队合作能力,能够与数据科学家和业务团队紧密合作,共同解决实际问题。 总之,大数据开发工程师系列是一个专门从事大数据开发的职业群体。而Hadoop和Spark则是这个职业群体中最重要的两个工具,他们分别用于大规模数据处理和分布式计算。掌握Hadoop和Spark的使用和优化技巧,是成为一名优秀的大数据开发工程师的关键能力。 ### 回答2: 大数据开发工程师系列主要涉及到两个重要的技术:Hadoop和Spark。 Hadoop是一个开源的分布式计算框架,主要用于存储和处理大规模数据集。它通过将数据分散存储在集群中的多个节点上,并在节点之间进行数据通信和计算,实现了数据的并行处理和高可靠性。Hadoop的核心工具是HDFS(Hadoop分布式文件系统)和MapReduce(一种用于分布式计算的编程模型)。HDFS用于将数据分布式存储在集群中,而MapReduce则是用于分布式计算的框架,通过将计算任务分解成多个小任务并在各个节点上并行执行,大大提高了数据处理的效率和性能。 Spark是当前最受欢迎的大数据计算框架之一,也是一个开源项目。与Hadoop相比,Spark具有更快的数据处理速度和更强大的功能。Spark提供了一个可扩展的分布式数据处理框架,支持数据处理、机器学习、图计算等多种大数据应用场景。与传统的基于磁盘的计算框架相比,Spark利用内存计算的优势,可以快速地对大规模数据进行处理和分析。此外,Spark还提供了丰富的API和开发工具,使开发人员可以更轻松地构建和调试大数据应用程序。 作为大数据开发工程师,掌握Hadoop和Spark是必不可少的。熟悉Hadoop的使用和原理,能够有效地存储和处理大规模数据集。而对于Spark的掌握,则可以提高数据处理的速度和效率,使得大数据分析和挖掘更加容易实现。因此,大数据开发工程师需要具备对Hadoop和Spark的深入理解和熟练应用,同时还需要具备数据分析、算法和编程等多方面的技能,以应对复杂的大数据挑战。 ### 回答3: 大数据开发工程师是一个专注于处理大数据的职位,主要负责使用各种工具和技术来处理和分析大规模的数据集。 Hadoop和Spark是目前在大数据处理领域中非常流行的两个开源工具。Hadoop是一个分布式系统基础架构,可以在集群中存储和处理大规模数据。它的核心是Hadoop分布式文件系统(HDFS)和MapReduce计算模型。HDFS将数据分散存储在集群的不同节点上,而MapReduce模型则提供了一种并行处理数据的方式。大数据开发工程师需要熟悉Hadoop的架构和命令行工具,能够编写MapReduce程序来处理数据。 Spark是一个快速和通用的大数据处理引擎,可以在大规模集群上执行数据处理任务。它拥有比Hadoop更高的性能和更丰富的功能。Spark提供了强大的机器学习、图计算和流处理等功能。大数据开发工程师需要熟悉Spark的API和编程模型,能够使用Spark的各种组建和工具进行数据处理和分析。 作为大数据开发工程师,掌握Hadoop和Spark是非常重要的。使用Hadoop和Spark可以有效地处理大规模数据,提取有价值的信息。大数据开发工程师通过编写和优化MapReduce程序来实现数据处理的需求,同时也能利用Spark提供的机器学习和流处理等功能来进行更复杂的数据分析。通过合理地使用Hadoop和Spark,大数据开发工程师可以减少数据处理的时间和成本,提高数据处理的效率和准确性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值