通过多年信息化建设,咱们已经进入一个神奇的“大数据”时代,不管是在通信社交过程当中使用的微信、QQ、电话、短信,仍是吃喝玩乐时的用到的团购、电商、移动支付,都不断产生海量信息数据,数据和咱们的工做生活密不可分、须臾难离。
什么是大数据
什么是大数据,多大算大,100G算大么?若是是用来存储1080P的高清电影,也就是几部影片的容量。可是若是100G都是文本数据,好比云智慧透视宝后端kafka里的数据,抽取一条mobileTopic的数据以下:【107,5505323054626937,局域网,局域网,unknown,0,0,09f26f4fd5c9d757b9a3095607f8e1a27fe421c9,1468900733003】,这种数据100G能有多少条,咱们可想而知。java
数据之因此为大,不可是由于数据量的巨大,同时各类渠道产生的数据既有IT系统生成的标准数据,还有大量多媒体类的非标准数据,数据类型多种多样,并且大量无用数据充斥其间,给数据的真实性带来很大影响,此外不少数据必须实时处理才最有价值。
通常数据量大(多)或者业务复杂的时候,常规技术没法及时、高效处理如此大量的数据,这时候可使用Hadoop,它是由Apache基金会所开发的分布式系统基础架构,用户能够在不了解分布式底层细节的状况下,编写和运行分布式应用充分利用集群处理大规模数据。Hadoop能够构建在廉价的机器上,好比咱们淘汰的PC Server或者租用的云主机均可以拿来用。
今天,云智慧的李林同窗就为你们介绍一下Hadoop生态圈一些经常使用的组件。
Gartner的一项研究代表,2015年,65%的分析应用程序和先进分析工具都将基于Hadoop平台,做为主流大数据处理技术,Hadoop具备如下特性:
方便:Hadoop运行在由通常商用机器构成的大型集群上,或者云计算服务上
健壮:Hadoop致力于在通常商用硬件上运行,其架构假设硬件会频繁失效,Hadoop能够从容地处理大多数此类故障。
可扩展:Hadoop经过增长集群节点,能够线性地扩展以处理更大的数据集。
目前应用Hadoop最多的领域有:
1) 搜索引擎,Doug Cutting设计Hadoop的初衷,就是为了针对大规模的网页快速创建索引。
2) 大数据存储,利用Hadoop的分布式存储能力,例如数据备份、数据仓库等。
3) 大数据处理,利用Hadoop的分布式处理能力,例如数据挖掘、数据分析等。
Hadoop生态系统与基础组件
Hadoop2.0的时候引入了HA(高可用)与YARN(资源调度),这是与1.0的最大差异。Hadoop主要由3部分组成:Mapreduce编程模型,HDFS分布式文件存储,与YARN。ios
上图是Hadoop的生态系统,最下面一层是做为数据存储的HDFS,其余组件都是在HDFS的基础上组合或者使用的。HDFS具备高容错性、适合批处理、适合大数据处理、可构建在廉价机器上等优势,缺点是低延迟数据访问、小文件存取、并发写入、文件随机修改。
Hadoop MapReduce是一个软件框架,基于该框架可以容易地编写应用程序,这些应用程序可以运行在由上千个商用机器组成的大集群上,并以一种可靠的,具备容错能力的方式并行地处理上TB级别的海量数据集。这个定义里面有几个关键词:软件框架、并行处理、可靠且容错、大规模集群、海量数据集就是MapReduce的特点。nginx
MapReduce经典代码(wordCount)
上面这段代码就是接收一堆文本数据,统计这些文本数据中每一个单词出现的次数。MapReduce也是一个计算模型,当数据量很大时,好比10个G,它能够把这10G的数据分红10块,分发到10个节点去执行,而后再汇总,这就是并行计算,计算速度比你一台机器计算要快的多。
HBase
Hadoop的主要组件介绍完毕,如今看下HBase,它是一个高可靠、高性能、面向列、可伸缩的分布式存储系统,利用Hbase技术可在廉价PC Server上搭建大规模结构化存储集群。HBase 是Google Bigtable 的开源实现,与Google Bigtable 利用GFS做为其文件存储系统相似,HBase 利用Hadoop HDFS 做为其文件存储系统;Google 运行MapReduce 来处理Bigtable中的海量数据, HBase 一样利用Hadoop MapReduce来处理HBase中的海量数据;Google Bigtable 利用Chubby做为协同服务, HBase 利用Zookeeper做为对应。
有人问HBase和HDFS是啥关系,HBase是利用HDFS的存储的,就像MySQL和磁盘, MySQL是应用,磁盘是具体存储介质。HDFS由于自身的特性,不适合随机查找,对更新操做不太友好,好比百度网盘就是拿HDFS构建的,它支持上传和删除,但不会让用户直接在网盘上修改某个文件的内容。
HBase的表有如下特色:
1 ) 大:一个表能够有上亿行,上百万列。
2 ) 面向列:面向列表(簇)的存储和权限控制,列(簇)独立检索。
3 ) 稀疏:对于为空(NULL)的列,并不占用存储空间,所以,表能够设计的很是稀疏。
HBase提供的访问方式有命令行shell方式,java API(最高效和经常使用的),Thrift Gateway 支持C++,PHP,Python等多种语言。
HBase的使用场景:
需对数据进行随机读操做或者随机写操做;
大数据上高并发操做,好比每秒对PB级数据进行上千次操做;
读写访问均是很是简单的操做,好比历史记录,历史订单查询,三大运营商的流量通话清单的查询。算法
HBase在淘宝的应用场景
Hive
以前咱们说了MapReduce计算模型,可是只有懂Java的才能撸代码干这个事,不懂Java的想用Hadoop的计算模型是否是就无法搞了呢?好比HDFS里的海量数据,数据分析师想弄点数据出来,咋办?因此就要用到Hive,它提供了SQL式的访问方式供人使用。
Hive是由Facebook 开源, 最初用于解决海量结构化的日志数据统计问题的ETL(Extraction-Transformation-Loading) 工具,Hive是构建在Hadoop上的数据仓库平台,设计目标是能够用传统SQL操做Hadoop上的数据,让熟悉SQL编程的人员也能拥抱Hadoop(注意。是数据仓库。不是数据库啊。)
使用HQL做为查询接口
使用HDFS做为底层存储
使用MapReduce做为执行层
因此说Hive就是基于Hadoop的一个数据仓库工具,是为简化MapReduce编程而生的,很是适合数据仓库的统计分析,经过解析SQL转化成MapReduce,组成一个DAG(有向无环图)来执行。
Flume
Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、 聚合和传输的系统,Flume支持在日志系统中定制各种数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各类数据接受方(可定制)的能力。
当前Flume有两个版本Flume 0.9X版本的统称Flume-og,Flume1.X版本的统称Flume-ng,因为Flume-ng通过重大重构,与Flume-og有很大不一样,使用时请注意区分。shell
Flume就是一个数据管道,支持不少源(source),sink(目标),和透视宝的suro很像,好比拉取nginx日志能够拿这个工具简单一配就可用。固然每台nginx服务器上都要配置并启动一个flume.
下面给你们看看配置文件(把kafka的数据写入hdfs的配置),配置很简单.彻底免去了本身写一个kafka的consumer再调用hdfs的API写数据的工做量.数据库
YARN
YARN是Hadoop 2.0中的资源管理系统,它的基本设计思想是将MRv1中的JobTracker拆分红了两个独立的服务:一个全局的资源调度器ResourceManager和每一个应用程序特有的应用程序管理器ApplicationMaster,该调度器是一个 "纯调度器",再也不参与任何与具体应用程序逻辑相关的工做,而仅根据各个应用程序的资源需求进行分配,资源分配的单位用一个资源抽象概念 "Container" 来表示,Container 封装了内存和 CPU。此外,调度器是一个可插拔的组件,用户可根据本身的需求设计新的调度器,YARN 自身提供了 Fair Scheduler 和 Capacity Scheduler。
应用程序管理器负责管理整个系统中全部应用程序,包括应用程序的提交、与调度器协商资源以启动 ApplicationMaster、监控 ApplicationMaster 运行状态并在失败时从新启动等。
Ambari
Ambari是一个集群的安装和管理工具,云智慧以前用的是Apache的Hadoop,运维同窗用源码包安装,一个个配置文件去改,再分发到各个节点,中间哪一步搞错了,整个集群就启动不起来。因此有几个厂商提供Hadoop的这种安装和管理平台,主要是CDH和HDP,国内的不少人都用CDH的,它是Cloudera公司的,若是用它的管理界面安装,集群节点超过必定数量就要收费了。
Ambari是Apache的顶级开源项目,能够无偿使用,如今用的人也不少。Ambari使用Ganglia收集度量指标,用Nagios支持系统报警,当须要引发管理员的关注时(好比,节点停机或磁盘剩余空间不足等问题),系统将向其发送邮件。
ZooKeeper
随着计算节点的增多,集群成员须要彼此同步并了解去哪里访问服务和如何配置,ZooKeeper正是为此而生的。ZooKeeper 顾名思义就是动物园管理员,它是用来管大象(Hadoop) 、蜜蜂(Hive) 和 小猪(Pig) 的管理员, Apache Hbase和 Apache Solr 以及LinkedIn sensei等项目中都采用到了 Zookeeper。ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,以Fast Paxos算法为基础实现同步服务,配置维护和命名服务等分布式应用。
其余组件
以上介绍的都是Hadoop用来计算和查询的比较经常使用和主流的组件,上面那副生态图中的其余几个组件简单了解一下就好:
Pig是一种编程语言,它简化了Hadoop常见的工做任务,Pig为大型数据集处理提供了更高层次的抽象,与MapReduce相比,Pig提供了更丰富的数据结构,通常都是多值和嵌套的数据结构。
Mahout是Hadoop提供作机器学习用的,支持的算法也比较少,可是一些经常使用的 k-means 聚类、分类仍是有的,他是用MapReduce作的,可是MapReduce不太擅长这个东西,因此Mahout的做者也转投spark ML阵营了。
Sqoop是数据库ETL工具,用于将关系型数据库的数据导入到 Hadoop 及其相关的系统中,如 Hive和HBase。Sqoop 的核心设计思想是利用 MapReduce 加快数据传输速度,也就是说 Sqoop 的导入和导出功能是经过 MapReduce 做业实现的,因此它是一种批处理方式进行数据传输,难以实现实时数据的导入和导出。好比云智慧监控宝之前的业务数据都存在MySQL,随着数据量愈来愈大,要把数据导到Hbase,就能够拿Sqoop直接操做。
本文所介绍的东西都是用于离线计算的,而以前发布的《面临大数据挑战 透视宝如何使用Druid实现数据聚合》则是关于实时计算的框架Druid的。大数据经常使用的流计算框架主要有Storm,Spark Streaming,Flink,Flink虽然是2014年加入Hadoop的,但至今在生产环境上用的人还很少,彷佛你们都持观望态度。
说一下流计算(Druid,Spark Streaming)和批处理(MapReduce,Hive)有啥区别,好比电商网站的个性化广告投放,当咱们访问了亚马逊搜索笔记本电脑以后,他就会给你推荐不少笔记本电脑连接,你的请求和兴趣爱好被亚马逊服务器实时接收,流计算分析以后当时就会推荐给你可能会购买的东西。若是这个东西拿批处理去作,服务端收集完了,过半个小时才算出你可能要买电脑,这时候再给你推荐电脑明显就不合适了,由于这时候你可能在搜索电炒锅……编程
最后再说一下大数据的工做流,好比有两个MapReduce的任务是有依赖的,必须第一个完成了才能执行第二个,这就须要一个调度工具来调度。MapReduce也提供调度的API,可是代码要写不少,上面的代码截图只是一部分,这个依赖我写了大概150行。因此这时候出现了工做流,用工做流来管理咱们的各个job,我目前知道的有oozie和azkaban,oozie的配置比较灵活,推荐你们使用。后端