现在的社会是一个高速发展的社会,科技发达,信息流通,人们之间的交流越来越密切,生活也越来越方便,大数据就是这个高科技时代的产物。
文章目录
一、大数据概论
1.1 大数据概念
大数据(Big Data): 指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样性的信息资产。节选自《百度百科》
主要解决: 海量数据的存储、海量数据的分析计算、统一资源管理调度
1.2 大数据特点
1.Volume(大量)
截至目前,典型个人计算机硬盘的容量为TB量级,而一些大企业的数据量已经接近EB量级。
2. Velocity(高速)
这是大数据区分于传统数据挖掘的最显著的特征。在如此海量的数据面前,处理数据的效率就是企业的生命。
3. Variety(多样)
这种类型的多样性也让数据被分为结构化数据和非结构化数据。相对于以往便于存储的以数据库/文本为主的结构化数据,非结构化数据越来越多,包括网络日志、日志、视频、图片、地理位置信息等,这些多类型的数据对数据的处理能力提出了更高要求。
4. Value(低价值密度)
价值密度的高低于数据总量的大小成反比。比如,公司旗下有海量的股票信息,我们只需要股票涨幅最大的前20支股票信息。如何快速对有价值数据"提纯"成为目前大数据背景下待解决的难题
1.3 大数据应用场景
1.物流仓库: 大数据分析系统助力商家精细化运营、提高销量、节约成本。
2.零售: 分析用户消费习惯,为用户购买商品提供方便,从而提升商品销量。
3.旅游: 深度结合大数据能力与旅游行业需求,共建旅游产业智慧管理、智慧服务和智慧营销的未来。
4.商品广告推荐: 给用户推荐可能喜欢的商品。
5.保险: 海量数据挖掘及风险预测,助力保险行业精准营销,提升精细化定价能力。
6.金融: 多维度体验用户特征,帮助金融机构推荐优质客户,防欺诈风险。
7.房产: 大数据全面助力房地产行业,打造精准投策与营销,选出更合适的地,建造更合适的楼,卖给更合适的人。
8.人工智能
1.4 大数据部门业务流程分析
1.5 大数据部门组织结构(重点)
二、从hadoop框架讨论大数据生态
2.1 hadoop是什么
1.hadoop是一个由Apache基金会所开发的分布式系统基础架构
2.主要解决,海量数据的存储和海量数据的分析计算问题
3.广义来讲,hadoop通常是指一个更广泛的概念——hadoop生态圈
Hadoop是由java语言编写的,在分布式服务器集群上存储海量数据并运行分布式分析应用的开源框架,其核心部件是HDFS与MapReduce。
HDFS是一个分布式文件系统:引入存放文件元数据信息的服务器Namenode和实际存放数据的服务器Datanode,对数据进行分布式储存和读取。
MapReduce是一个分布式计算框架:MapReduce的核心思想是把计算任务分配给集群内的服务器里执行。通过对计算任务的拆分(Map计算/Reduce计算)再根据任务调度器(JobTracker)对任务进行分布式计算。
2.2 hadoop发展历史
1.Lucene框架是道格·卡丁(Doug Cutting)开创的开源软件,用Java书写代码,实现与Google类似的全文搜索功能,它提供了全文检索引擎的架构,包括完整的查询引擎和索引引擎。
2. 2001年底Lucene成为Apache基金会的一个子项目。
3. 对于海量数据的场景,Lucene面对与Google同样的困难,存储数据困难,检索速度慢。
4. 学习和模仿Google解决这些问题的方法: 微型版Nutch。
5. 可以说Google是hadoop的思想之源(Google在大数据方面的三篇论文)
GFS—>HDFS
Map-Reduce—>MR
BigTable—>HBase
6. 2003-2004年,Google公开了部分GFS和MapRedece思想的细节,以此为基础Doug Cutting等人用了两年业余时间实现了DFS和MapReduce机制,使Nutch性能飙升。
7. 2005年hadoop作为Lucene的子项目Nutch的一部分正式引入Apache基金会。
8. 2006年3月份,Map-Reduce和Nutch Distributed File System(NDFS)分别被纳入到hadoop项目中,hadoop就此正式诞生,标志着大数据时代来临。
9. 名字来源于Doug Cutting儿子的玩具大象。
2.3 hadoop三大发行版本
hadoop三大发行版本: Apache、Cloudera、Hortonworks。
Apache版本最原始(最基础)的版本,对于入门学习最好。
Cloudera在大型互联网企业中使用较多。
Hortonworks文档较好。
1.Apache hadoop
官方地址: http://hadoop.apache.org/releases.html
下载地址: https://archive.apache.org/dist/hadoop/common/
2. Cloudera hadoop
官网地址: https://www.cloudera.com/downloads/cdh/5-10-0.html
下载地址(网盘): https://pan.baidu.com/s/17arJEc2VuopiIPwQZQ1c4g
提取码:c631
(1) 2008年成立的Cloudera是最早将hadoop商用的公司,为合作伙伴提供hadoop的商用解决方案,主要是包括支持、咨询服务、培训。
(2) 2009年hadoop的创始人Doug Cutting也加盟Cloudera公司。Cloudera产品主要为CDH,Cloudera Manager,Cloudera Support。
(3) CDH是Cloudera的hadoop发行版,完全开源,比Apache hadoop兼容行、安全行、稳定性上有所增强。
(4) Cloudera Manager是集群的软件分发及管理监控平台,可以在几个小时内部署好一个hadoop集群,并对集群的节点及服务进行实时监控。Cloudera Support即是对hadoop的技术支持。
(5) Cloudera的标价为每年每个节点4000美元。Cloudera开发并贡献了可实时处理大数据的Impala项目。
3. Hortonworks hadoop
官方地址: https://hortonworks.com/products/data-center/hdp/
下载地址: https://hortonworks.com/downloads/#data-platform
(1) 2011年成立的Hortonworks是雅虎与硅谷风投公司Benchmark Capital合资组建。
(2) 公司成立之初就吸纳了大约25名至30名专门研究hadoop的雅虎工程师,上述工程师均在2005年开始协助雅虎开发hadoop,贡献了hadoop 80%的代码。
(3) 雅虎工程副总裁、雅虎hadoop开发团队负责人Eric Baldeschwieler出任Hortonworks的首席执行官。
(4) Hortonworks的主打产品是Hortonworks Data Platform(HDP),也同样是100%开源的产品,HDP除常见的项目外还包括了Ambari,一款开源的安装和管理系统。
(5) HCatalog,一个元数据管理系统,HCatalog现已集成到Facebook开源的Hive中。Hortonworks的Stinger开创性的极大的优化了Hive项目。Hortonworks为入门提供了一个非常好的,易于使用的沙盒。
(6) Hortonworks开发了很多增强特性并提交至核心主干,这使得Apache Hadoop能够在包括Window Server和Windows Azure在内的Microsoft Windows平台上本地运行。定价以集群为基础,每10个节点每年为12500美元。
2.4 hadoop的优势(重点)
1.高可靠性: hadoop底层维护多个数据副本,所以即使hadoop某个计算元素或存储出现故障,也不会导致数据的丢失。
2. 高扩展性: 在集群间分配任务数据,可方便的扩展数以千计的节点。
3. 高效性: 在MapReduce的思想下,hadoop是并行工作的,以加快任务处理速度。
4. 高容错性: 能够自动将失败的任务重新分配。
2.5 hadoop组成(重点)
1.1.x和2.x区别:
从HDFS角度来看:
(1) hadoop2.0新增了HDFS HA机制,HA增加了standbynamenode进行热备份,解决了1.0的单点故障问题。
(2) hadoop2.0新增了HDFS federation,解决了HDFS水平可扩展能力。
从mapreduce角度来看:
2.0相比于1.0新增了YARN框架,Mapreduce的运行环境发生了变化。
(1) 在1.0中: 由一个JobTracker和若干个TaskTracker两类服务组成,其中JobTracker负责资源管理和所有作业的控制,TaskTracker负责接收来自JobTracker的命令并执行它。所以MapReduce即是任务调度框架又是计算框架,1.0中会出现JobTracker大包大揽任务过重,而且存在单点故障问题,并且容易出现OOM问题,资源分配不合理等问题。
(2) 在2.0中:MASTER端由ResourceManager进行资源管理调度,有ApplicationMaster进行任务管理和任务监控。SLAVE端由NodeManager替代TaskTracker进行具体任务的执行,所以MapReduce2.0只是一个计算框架,具体资源调度全部交给Yarn框架。
2. 2.x和3.x最主要的区别:
(1) Java运行环境升级为1.8。
(2) HDFS支持纠删码(Erasure Code): 通过利用纠删码算法将原始的数据进行编码得到校验,并将数据和校验一并存储起来,以达到容错的目的。
首先可以解决的就是目前分布式系统,云计算中采用副本来防止数据的丢失。副本机制确实可以解决数据丢失的问题,但是翻倍的数据存储空间也必然要被消耗,这一点却是非常致命的。EC技术的运用就可以直接解决这个问题。
(3) YARN时间线服务。
(4) 支持多余2个以上的NameNodes: 3.0支持单active namenode+多standby namenode部署方式进一步提升了可用性。
(5) MapReduce本地优化,性能提升了30%。
2.5.1 hdfs架构概述
HDFS即hadoop分布式文件系统,有以下特点:
1. 高容错性的分布式文件系统。
2. 可构建在廉价机器上,通过多副本机制提高可靠性。
3. 易扩展、为用户提供性能不错的文件存储服务。
缺点:
1. 不适合低延时数据访问,比如毫秒级的存储数据,是做不到的。
2. 无法高效的对大量小文件进行存储。
3. 不支持并发写入,不支持文件的随机修改(仅支持append)
这种架构主要由四个部分组成,分别为HDFS Client、NameNode、DataNode和Secondary NameNode。其中Rack代表机架。
1.Client: 客户端
(1) 文件切分。文件上传HDFS的时候,Client将文件切分成一个一个的Block,然后进行存储。
(2) 与NameNode交互,获取文件的元数据信息。
(3) 与DataNode交互,读取或者写入数据。
(4) Client提供一些命令来管理HDFS,比如启动、关闭、访问HDFS
2. NameNode: NN
(1) 管理文件系统的命名空间(namespace),以及客户端对文件的访问。
(2) 管理每个文件的块列表以及块所在的DataNode。
(3) 文件操作,NameNode 负责文件元数据的操作,DataNode负责处理文件内容的读写请求。
3. DataNode: DN
(1) 存储,一个是数据本身,一个是元数据(数据块的长度、校验和、时间戳)
(2) 每隔3秒发送一次心跳。如果超过10分钟没有收到某个DataNode 的心跳,则认为该节点不可用。
(3) 执行数据块的读/写操作。
4. Secondary NameNode: SNN
(1) 辅助NameNode,分担其工作量。
(2) 定期合并Fsimage和Edits为新的fsimage文件,并推送给NameNode。
(3) 紧急情况下,可辅助恢复NameNode。辅助NameNode并不是替换。
2.5.2 yarn架构概述
1.ResourceManager: RM
(1) 处理客户端请求
(2) 监控NodeManager
(3) 启动或监控ApplicationMaster
(4) 资源的分配和调度
2. NodeManager: NM
(1) 管理单个节点上的资源
(2) 处理来自ResourceManager的命令
(3) 处理来自ApplicationMaster的命令
3. ApplicationMaster: AM
(1) 负责数据的切分
(2) 为应用程序申请资源并分配给内部的任务
(3) 任务的监控与容错
4. Container
Container是YARN中的资源抽象,它封装了某个节点上的多维度资源,如内存、CPU、磁盘、网络等。
2.5.3 mapreduce架构概述
MapReduce包含四个组成部分,分别为Client,JobTracker,TaskTracker,Task。
1.client客户端
每一个Job都会在用户端通过Client类将应用程序以及参数配置Configuration打包成Jar文件存储在HDFS,并把路径提交到JobTracker的master服务,然后由master创建每一个Task(即MapTask和ReduceTask),将它们分发到各个TaskTracker服务中去执行。
2. JobTracker
JobTracker负责资源监控和作业调度。JobTracker监控所有的TaskTracker与job的健康状况,一旦发现失败,就将相应的任务转移到其它节点;同时JobTracker会跟踪任务的执行进度,资源使用量等信息,并将这些信息告诉任务调度器,而调度器会在资源出现空闲时,选择合适的任务使用这些资源。在Hadoop中,任务调度器是一个可插拔的模块,用于可以根据自己的需要设计相应的调度器。
3. TaskTracker
TaskTracker会周期性地通过HeartBeat将本节点上资源的使用情况和任务的运行进度汇报给JobTracker,同时执行JobTracker发送过来的命令 并执行相应的操作(如启动新任务,杀死任务等)。TaskTracker使用“slot”等量划分本节点上的资源量。“slot”代表计算资源(cpu,内存等) 。一个Task获取到一个slot之后才有机会运行,而Hadoop调度器的作用就是将各个TaskTracker上的空闲slot分配给Task使用。slot分为MapSlot和ReduceSlot两种,分别提供MapTask和ReduceTask使用。TaskTracker通过slot数目(可配置参数)限定Task的并发度。
4. Task
Task分为MapTask和Reduce Task两种,均由TaskTracker启动。HDFS以固定大小的block为基本单位存储数据,而对于MapReduce而言,其处理单位是split。split是一个逻辑概念,它只包含一些元数据信息,比如数据起始位置、数据长度、数据所在节点等。它的划分方法完全由用户自己决定。但需要注意的是,split的多少决定了MapTask的数目,因为每一个split只会交给一个MapTask处理。
MR的执行流程会在后面的文章中说到
2.6 大数据技术生态体系
图中涉及的技术名词解释如下
1. Sqoop:Sqoop是一款开源的工具,主要用于在Hadoop、Hive与传统的数据库(MySql)间进行数据的传递,可以将一个关系型数据库(例如 :MySQL,Oracle 等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。
2. Flume:Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。
3. Kafka:Kafka是一种高吞吐量的分布式发布订阅消息系统,有如下特性:
(1) 通过O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能。
(2) 高吞吐量:即使是非常普通的硬件Kafka也可以支持每秒数百万的消息。
(3) 支持通过Kafka服务器和消费机集群来分区消息。
(4) 支持Hadoop并行数据加载。
4. Storm:Storm用于“连续计算”,对数据流做连续查询,在计算时就将结果以流的形式输出给用户。
5. Spark:Spark是当前最流行的开源大数据内存计算框架。可以基于Hadoop上存储的大数据进行计算。
6. Oozie:Oozie是一个管理Hadoop作业(job)的工作流程调度管理系统。
7. Hbase:HBase是一个分布式的、面向列的开源数据库。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。
8. Hive:Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的SQL查询功能,可以将SQL语句转换为MapReduce任务进行运行。 其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。
9. R语言:R是用于统计分析、绘图的语言和操作环境。R是属于GNU系统的一个自由、免费、源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具。
10. Mahout:Apache Mahout是个可扩展的机器学习和数据挖掘库。
11. ZooKeeper:Zookeeper是Google的Chubby一个开源的实现。它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护、名字服务、 分布式同步、组服务等。ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。