Spark应用开发之一:Hadoop分析大数据

要学会和使用一门技术的时候,首先要弄清楚该技术出现的背景和要解决的问题。要说spark首先要了解海量数据的处理和Hadoop技术。

一个系统在运行的过程中都会产生许多的日志数据,这些日志数据包含但不局限我们平常开发中使用log4j或者logback生成的记录系统运行情况的日志。例如对于网络服务提供商,他们的设备可能会记录着用户上下线时间,访问的网页地址,响应时长等数据,这些数据文件里面记录的某些信息经过抽取分析后可以得出许多的指标信息,从而为改善网络结构和提高服务等提供数据依据。但这些数据会很大,使用一般的技术和方案将难以达到分析的目的,于是一种全新的处理海量数据的计算模型和框架的出现变得迫在眉睫。

处理海量数据要解决的第一个问题便是存储。我们需要将收集来的日志文件存放在某个地方便于后面的数据分析。可是一台机器的容量始终十分的有限,随着数据的增涨我们也不可能无限的扩展一台服务器的存储能力,所以我们需要将收集的数据存放在许多的机器上,并通过某种方案进行统一管理。

处理海量数据要解决的第二个问题便是计算。一台服务器的计算能力是有限的,它会直接受限于CPU和内存。随着数据量的增大,我们也不能无限的扩展他们,所以同数据存储一样,我们也需要利用多台机器的计算能力来一起完成运算的工作。每个计算机都是一个独立的个体,他们之间运行的代码本身是无关联关系的,我们也需要某种方案来协调各个计算机的执行,让其成为逻辑上一台超级超级的计算机。

基于GSF(Google的文件系统)的思想也开发了一个Hadoop使用的分布式文件系统HDFS。HDFS是基于计算机本地文件系统的分布式文件系统,也就是说HDFS将文件直接存放于计算机的本地文件系统之上(当然我们是无法直接查看文件里面的内容的)。

HDFS解决了上面提到的数据的存储问题。一般情况每个计算机上只会有一个管理本地数据的DataNode进程(该计算机称为DataNode节点),DataNode进程与主控节点上的NameNode进程通信(该节点称为NameNode节点),以完成数据块状态的报告和发送心跳信号等。NameNode是一个中心服务器,负责管理维护文件系统的名字空间(namespace)以及客户端对文件的访问。

注:名字空间(Namespace)即文件系统文件目录的组织方式,是文件系统的重要组成部分,为用户提供可视化的、可理解的文件系统视图,从而解决或降低人类与计算机之间在数据存储上的语义间隔。目前树状结构的文件系统组织方式与现实世界的组织结构最为相似,被人们所广泛接受。因此绝大多数的文件系统皆以Tree方式来组织文件目录,包括各种磁盘文件系统(EXTx, XFS, JFS, Reiserfs, ZFS, Btrfs, NTFS, FAT32等)、网络文件系统(NFS,AFS, CIFS/SMB等)、集群文件系统(Lustre, PNFS, PVFS, GPFS, PanFS等)、分布式文件系统(GoogleFS,HDFS, MFS, KFS, TaobaoFS, FastDFS等)

接着我们说说用于大数据批处理分析的并行计算框Map/Reduce。该框架把数据的处理分为两个独立的Map和Reduce阶段,并分别对应两个方法map和reduce:


/*

@key  由于框架需要序列化key和根据key来排序,所有该key类型必须实现WritableComparable接口

@value  这就是具体的某行数据,获取前面个map传递过来的value,由于需要序列化所以需要实现Writable接口

@out  将映射后的键值对数据的接口,调用该接口的collect(WritableComparable,Writable)方法分别传入key和value即可

@reporter应用程序可以使用Reporter报告进度,设定应用级别的状态消息,更新Counters(计数器),或者仅是表明自己运行正常

*/

map(WritableComparable key, Writable  value, OutputCollector out , Reporter reporter)

/*

@key 上个阶段(map)输出的key

@values 上个阶段已经排序好的输出(因为不同  mapper 的输出中可能会有相同的 key)

*/

reduce(WritableComparable key, Iterator  values, OutputCollector out, Reporter report)

在Map阶段,Hadoop框架首先从HDFS上指定路径下获取要处理的文件,然后对该文件进行分片处理(InputSplit),然后每个分片使用一个Map task来处理。Hadoop框架在调用map方法前,会使用InputFormat类型的对象来处理数据的分片操作,针对每个分片(InputSplit)会创建一个RecordReader类型的对象来读取每个分片的内容从而调用map方法来处理数据。

InputFormat类型将文件从逻辑上切分为片,每个片记录了数据的偏移量和大小等信息,但分片操作会把本是一行的数据切分到两个甚至多个片中,这么一来后面处理的数据就是错误的。这是RecordReader需要解决的问题,以LineRecordReader为例,如果某个分片是文件的第一个分片,那么从第一个字节开始读取,否则从分片的第二行开始读取;如果某个分片是文件的最后一个分片,那么读完本分片的数据即可,否则获取下一个分片的第一行数据结束。这么一来,对于以行分割的数据就可以保证每次读取的行都是完整的。

以LineRecordReader为例,LineRecordReader读取分片中的每行数据,然后以键值序列对(key-value)的形式来调用map函数,此时的key为该行数据的偏移量,value为该行数据。

Hadoop框架将每次执行map函数的返回值先放入一个缓冲区,当缓存区的使用量达到指定的阈值后,开使用一个线程来将这部分数据溢出到一个临时文件当中。在溢出前会对这些要溢出的数据先做几个操作:

1,  通过partitioner操作根据key来进行分区,确定某个数据归属于哪个reducer来处理

2,  对数据根据key来排序

3,  根据key对数据进行合并(用户根据需要指定)

以上步骤完成后将数据溢出到一个临时文件。当处理完某个分片后,可能会生成许多个这样的溢出文件,接着需要对溢出文件进行合并生成一个完整的文件(该完整指的是该分片要处理的那部分数据)。在合并的时候也需要对数据进行排序和合并操作,由于文件可能很大,不能一次载入到内存进行排序操作,所以这里用到了外排序。但最终生成的文件里面的数据是经过分区分组,排序后的。

到此Map阶段结束,接着要进入的是Reduce阶段。在真正调用reduce方法之前,有一个shuffle阶段需要预处理。在每个map task结束后,Reduce task都会得到通知,并将自己要处理的数据的位置信息保存到mapLocations中,然后对数据经过过滤去重后保存在scheduledCopies中,接着由几个线程并行的拷贝数据,并进行排序合并操作。

最后就是通过调用reduce方法来处理合并的数据,并将结果输出到HDFS即可。

时间: 2024-08-05 16:42:22

Spark应用开发之一:Hadoop分析大数据的相关文章

Spark大型项目实战:电商用户行为分析大数据平台

本项目主要讲解了一套应用于互联网电商企业中,使用Java.Spark等技术开发的大数据统计分析平台,对电商网站的各种用户行为(访问行为.页面跳转行为.购物行为.广告点击行为等)进行复杂的分析.用统计分析出来的数据,辅助公司中的PM(产品经理).数据分析师以及管理人员分析现有产品的情况,并根据用户行为分析结果持续改进产品的设计,以及调整公司的战略和业务.最终达到用大数据技术来帮助提升公司的业绩.营业额以及市场占有率的目标. 1.课程研发环境 开发工具: Eclipse Linux:CentOS 6

中华石杉 Spark大型项目实战:电商用户行为分析大数据平台138讲视频教程(项目实战)

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

Hadoop! | 大数据百科 | 数据观 | 中国大数据产业观察_大数据门户

你正在使用过时的浏览器,Amaze UI 暂不支持. 请 升级浏览器 以获得更好的体验! 深度好文丨读完此文,就知道Hadoop了! 来源:BiThink 时间:2016-04-12 15:14:39 作者:陈飚 “昔我十年前,与君始相识.” 一瞬间Hadoop也到了要初中择校的年龄了. 十年前还没有Hadoop,几年前国内IT圈里还不知道什么是Hadoop,而现在几乎所有大型企业的IT系统中有已经有了Hadoop的集群在运行了各式各样的任务. 2006年项目成立的一开始,“Hadoop”这个单

不只是Hadoop:大数据技术的未来道路

在实时数据的世界当中,我们为什么还要执着于Hadoop这一片森林? 作为一套以批量处理为主要诉求的架构方案,Hadoop仍然堪称大数据技术领域的荣耀长子.然而根据451研究集团的调查数据显示,其实际普及效果仍然不及显赫的声誉. 那些已经率先部署了Hadoop解决方案的企业可能希望稍稍放慢自己的前进脚步.伴随着Apache Spark以及其它一系列技术方案的出台(包括Storm.Kafka等等),我们似乎与Hadoop的批量处理思路渐行渐远.转而踏上了一条真正通往实 时性未来的发展道路. 批量并非

IT视频课程集(包含各类Oracle、DB2、Linux、Mysql、Nosql、Hadoop、BI、云计算、编程开发、网络、大数据、虚拟化

马哥Linux培训视频课程:http://pan.baidu.com/s/1pJwk7dp Oracle.大数据系列课程:http://pan.baidu.com/s/1bnng3yZ 天善智能BI培训视频课程:http://pan.baidu.com/s/1pJ7FPXp 老方块Oracle培训全套课程:http://pan.baidu.com/s/1gdkpHxL Mysql培训课程:http://pan.baidu.com/s/1c0vliMW Oracle数据库性能优化实务课程视频+源码

Hadoop和大数据:60款顶级大数据开源工具

一.Hadoop相关工具 1. Hadoop Apache的Hadoop项目已几乎与大数据划上了等号.它不断壮大起来,已成为一个完整的生态系统,众多开源工具面向高度扩展的分布式计算. 支持的操作系统:Windows.Linux和OS X. 相关链接: http://hadoop.apache.org 2. Ambari 作为Hadoop生态系统的一部分,这个Apache项目提供了基于Web的直观界面,可用于配置.管理和监控Hadoop集群.有些开发人员想把Ambari的功能整合到自己的应用程序当

Hadoop和大数据:60款顶级开源工具

虽然此文尽力做到全面,但难免遗漏,欢迎大家补充,点击文末右下角"写评论",分享你的观点. 说到处理大数据的工具,普通的开源解决方案(尤其是Apache Hadoop)堪称中流砥柱.弗雷斯特调研公司的分析师Mike Gualtieri最近预测,在接下来几年,"100%的大公司"会采用Hadoop.Market Research的一份报告预测,到2011年,Hadoop市场会以58%的年复合增长率(CAGR)高速增长:到2020年,市场产值会超过10亿美元.IBM更是非

【大数据开发】你知道大数据语言的工具与框架吗?

为了解大数据的当前和未来状态,我们采访了来自28个组织的31位IT技术主管.我们问他们,"你在数据提取,分析和报告中使用的最流行的语言,工具和框架是什么?" 以下的文章是他们告诉我们的记录,经过总结如下. Python,Spark,Kafka 随着大数据和对人工智能AL/机器学习 ML 的推动,Scala和Python语言以及Apache Spark中越来越受欢迎. 对OLAP数据仓库的迁移,如果用 Python开发机器学习使用较少的结构.开发者编写Python ML模型非常方便,Py

【大数据干货】基于Hadoop的大数据平台实施——整体架构设计

大数据的热度在持续的升温,继云计算之后大数据成为又一大众所追捧的新星.我们暂不去讨论大数据到底是否适用于您的公司或组织,至少在互联网上已经被吹嘘成无所不能的超级战舰.大数据的热度在持续的升温,继云计算之后大数据成为又一大众所追捧的新星.我们暂不去讨论大数据到底是否适用于您的公司或组织,至少在互联网上已经被吹嘘成无所不能的超级战舰.好像一夜之间我们就从互联网时代跳跃进了大数据时代!关于到底什么是大数据,说真的,到目前为止就和云计算一样,让我总觉得像是在看电影<云图>--云里雾里的感觉.或许那些正