什么是大数据
?
关于大数据麦肯锡全球研究所给出的定义是:一种规模大到在获取、存储、管理、分析方面大大超出了传统数据库软件工具能力范围的数据集合,具有海量的数据规模、快速的数据流转、多样的数据类型和价值密度低四大特征。
?
所谓的大数据生态系统简单可以理解成集成了大数据的存储和计算以及分析等常见技能于一身的技术框架,可以简单理解为:存储+计算+任务调度。比如目前主流的 Hadoop 生态系统和 Spark 生态系统。Hadoop 自身提供了 HDFS 用来数据存储,提供了 MapReduce 用来数据处理(离线计算)。而 Spark 提供了各种实时计算,机器学习的计算框架。但是 Spark 没有提供了数据存储的框架,所以还是依赖于第三方的存储框架,比如 Hadoop 的 HDFS,亚马逊的 S3 存储系统。
?
在这里我还是要推荐下我自己建的大数据学习交流裙:667367234,?裙?里都是学大数据开发的,如果你正在学习大数据?,小编欢迎你加入,大家都是软件开发党,不定期分享干货(只有大数据开发相关的),包括我自己整理的一份2018最新的大数据进阶资料和高级开发教程,欢迎进阶中和进想深入大数据的小伙伴
?
01
?
寒武纪大爆发:大数据的技术生态圈
?
?
大数据若干项目提供了一个在廉价服务器集群上分发数据处理任务的开源平台。以下将当前主流的大数据技术进行总体性介绍,后续会对特定技术框架进行详细描述。
?
1.? Hadoop Common: Common是Hadoop体系最底层的一个模块,为Hadoop个子项目提供各种工具,如系统配置工具Configuration、远程调用RPC、序列化机制和日志操作等,是Hadoop其他模块的基础。
?
- HDFS:?Hadoop分布式文件系统,是Hadoop的基石。HDFS是一个具有与高度容错性的文件系统,适合部署在廉价的机器上。HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。
?
- MapReduce:(a)MapReduce将复杂的、运行于大规模集群上的并行计算过程高度地抽象到了两个函数:Map和Reduce;(b)编程容易,不需要掌握分布式并行编程细节,也可以很容易把自己的程序运行在分布式系统上,完成海量数据的计算;(c)MapReduce采用“分而治之”策略,一个存储在分布式文件系统中的大规模数据集,会被切分成许多独立的分片(split),这些分片可以被多个Map任务并行处理;(d)MapReduce设计的一个理念就是“计算向数据靠拢”,而不是“数据向计算靠拢”,因为,移动数据需要大量的网络传输开销;(e)MapReduce框架采用了Master/Slave架构,包括一个Master和若干个Slave。Master上运行JobTracker,Slave上运行TaskTracker;Hadoop框架是用Java实现的,但是,MapReduce应用程序则不一定要用Java来写。
?
- Sqoop:sqoop 是一款开源的工具,主要用于在 Hadoop(Hive)与传统的数据库 (mysql) 间进行数据的传递,可以将一个关系型数据库(例如:MySQL,Oracle 等)中的数据导进到 Hadoop 的 HDFS 中,也可以将 HDFS 的数据导进到关系型数据库中。然而这些工具并不支持实时的数据抽取。
?
- Canal:canal是阿里巴巴旗下的一款开源项目,纯Java开发。基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了MySQL。借助阿里巴巴开源的?Canal?项目,我们能够非常便捷地将 MySQL 中的数据抽取到任意目标存储中。Canal 会将自己伪装成 MySQL 从节点(Slave),并从主节点(Master)获取 Binlog(MySQL Binlog 是一种实时的数据流,用于主从节点之间的数据复制,可以利用它来进行数据抽取),解析和贮存后供下游消费端使用。Canal 包含两个组成部分:服务端和客户端。服务端负责连接至不同的 MySQL 实例,并为每个实例维护一个事件消息队列;客户端则可以订阅这些队列中的数据变更事件,处理并存储到数据仓库中。
?
- Flume:Flume 是 Cloudera 提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume 支持在日志系统中定制各类数据发送方,用于收集数据;Flume 提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。
?
- Logstash:Logstash是一个开源数据搜集引擎,支持实时数据管道功能。Logstash可以动态整合分散的数据源,根据你的选择对数据标准化,并统一输入到指定的且可以是不同目的地。Logstash也是一个数据分析软件,主要目的是分析log日志,常用于ELK套件。ELK套件可以当作一个MVC模型,Logstash是controller层,Elasticsearch是一个model层,kibana是view层。首先将数据传给Logstash,它将数据进行过滤和格式化(转成JSON格式),然后传给Elasticsearch进行存储、建搜索的索引,kibana提供前端的页面再进行搜索和图表可视化,它是调用Elasticsearch的接口返回的数据进行可视化。其中,Logstash和Elasticsearch是用Java实现的,kibana使用node.js框架实现。
?
- rsyslog:rsyslog是Linux日志服务,该服务负责监听Linux下的日志信息,并把日志信息追加到对应的日志文件中,一般在/var/log目录下。它还可以把日志信息通过网络协议发送到另一台Linux服务器上,或者将日志存储在MySQL或Oracle等数据库中。
在这里我还是要推荐下我自己建的大数据学习交流裙:667367234,?裙?里都是学大数据开发的,如果你正在学习大数据?,小编欢迎你加入,大家都是软件开发党,不定期分享干货(只有大数据开发相关的),包括我自己整理的一份2018最新的大数据进阶资料和高级开发教程,欢迎进阶中和进想深入大数据的小伙伴
?
- Kafka:Kafka 是一种高吞吐量的分布式发布订阅消息系统,有如下特性:(a)通过 O(1) 的磁盘数据结构提供消息的持久化,这种结构对于即使数以 TB 的消息存储也能够保持长时间的稳定性能。(b)高吞吐量:即使是非常普通的硬件Kafka也可以支持每秒数百万的消息。(c)支持通过 Kafka 服务器和消费机集群来分区消息。(d)支持 Hadoop 并行数据加载。
?
- Storm:Storm 为分布式实时计算提供了一组通用原语,可被用于“流处理”之中,实时处理消息并更新数据库。这是管理队列及工作者集群的另一种方式。Storm 也可被用于“连续计算”(continuous computation),对数据流做连续查询,在计算时就将结果以流的形式输出给用户。
?
- Spark:Spark 是当前最流行的开源大数据内存计算框架。可以基于 Hadoop 上存储的大数据进行计算。Spark 提供了各种实时计算,机器学习的计算框架。但是 Spark 没有提供了数据存储的框架,所以还是依赖于第三方的存储框架,比如 Hadoop 的 HDFS,比如亚马逊的 S3 存储系统。
?
- Flink:Flink也提供 API来像Spark一样进行批处理,但两者处理的基础是完全不同的。Flink把批处理当作流处理中的一种特殊情况。在Flink中,所有的数据都看作流,是一种很好的抽象,因为这更接近于现实世界。
?
- Oozie:Oozie 是一个管理Hdoop作业(job)的工作流程调度管理系统。Oozie 协调作业就是通过时间(频率)和有效数据触发当前的 Oozie 工作流程。
?
- Hbase:HBase 是一个分布式的、面向列的开源数据库。HBase 不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库
?
- Hive:hive 是基于 Hadoop 的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的 sql 查询功能,可以将 sql 语句转换为 MapReduce任务进行运行。其优点是学习成本低,可以通过类 SQL 语句快速实现简单的 MapReduce 统计,不必开发专门的 MapReduce 应用,十分适合数据仓库的统计分析。也正是由于这种机制导致Hive最大的缺点是慢。Map/reduce调度本身只适合批量,长周期任务,类似查询这种要求短平快的业务,代价太高。
?
- Pig:Pig和Hive类似,也是对大型数据集进行分析和评估的工具,不过与Hive提供SQL接口不同的是,它提供了一种高层的、面向领域的抽象语言:Pig Latin,Pig也可以将Pig Latin脚本转化为MapReduce作业。与SQL相比,Pig Latin更加灵鹤,但是学习成本稍高。
?
- Impala:Impala是Cloudera公司主导开发的实时交互SQL大数据查询工具,它提供SQL语义,能查询存储在Hadoop的HDFS和HBase中的PB级大数据。已有的Hive系统虽然也提供了SQL语义,但由于Hive底层执行使用的是MapReduce引擎,仍然是一个批处理过程,难以满足查询的交互性。相比之下,Impala的最大特点也是最大卖点就是它的快速:Impala没有再使用缓慢的Hive+MapReduce批处理,而是通过使用与商用并行关系数据库中类似的分布式查询引擎(由Query?Planner、Query?Coordinator和Query?Exec?Engine三部分组成),可以直接从HDFS或HBase中用SELECT、JOIN和统计函数查询数据,从而大大降低了延迟。
?
- R 语言:R 是用于统计分析、绘图的语言和操作环境。R 是属于 GNU 系统的一个自由、免费、源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具。
?
- Mahout:?Apache Mahout 是个可扩展的机器学习和数据挖掘库,当前 Mahout 支持主要的 4 个用例:
推荐挖掘:搜集用户动作并以此给用户推荐可能喜欢的事物。
聚集:收集文件并进行相关文件分组。
分类:从现有的分类文档中学习,寻找文档中的相似特征,并为无标签的文档进行正确的归类。
频繁项集挖掘:将一组项分组,并识别哪些个别项会经常一起出现。
?
- TensorFlow:TensorFlow? 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数组,即张量(tensor)。它灵活的架构让你可以在多种平台上展开计算,例如台式计算机中的一个或多个CPU(或GPU),服务器,移动设备等等。TensorFlow 最初由Google大脑小组(隶属于Google机器智能研究机构)的研究员和工程师们开发出来,用于机器学习和深度神经网络方面的研究,但这个系统的通用性使其也可广泛用于其他计算领域。
?
- ZooKeeper:Zookeeper 是 Google 的 Chubby 一个开源的实现。它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护、名字服务、分布式同步服务等。ZooKeeper 的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。
?
- Docker:Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
?
- Kubernetes:简称K8s,是用8代替8个字符“ubernete”而成的缩写。是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效,Kubernetes提供了应用部署,规划,更新,维护的一种机制。
?
- YARN:YARN 是 Hadoop 集群的资源管理系统,是一个普适的、分布式的应用管理框架,用以替代传统的 Apache Hadoop MapReduce 框架。其监控页面可以展示集群的资源占用情况,任务的的执行引擎、进度和分配的节点等信息等。
?
关注微信公众号:程序员交流互动平台!获取资料学习!
原文地址:http://blog.51cto.com/14078334/2324652