为了账号安全,请及时绑定邮箱和手机立即绑定

大数据介绍(一)

标签:
大数据

这是个人整理的一些关于大数据的知识,总分为三个方面,第一方面主要在于理论和理解,后面的方面在于操作和补充;希望对想学大数据的你有点帮助

第一方面:

大数据离线分析

一般处理T+1数据
Hadoop 2.X:(common、HDFS、MapReduce、YARN)
 Hadoop并不是什么数据库,也不是程序库,甚至不是一个独立产品。实际上,Hadoop是一些独立模块的组合,包括一个分布式文件系统HDFS、一个分布式数据库HBase、
 一个大型分布式数据处理库MapReduce,等等等等。做一个类比的话,就好像是Microsoft Office,其实我们并没有一个叫做Office的应用,Office实际上指的是Word、Excel等一系列桌面应用的组合。
环境搭建,处理数据的思想
Hadoop是一个由Apache基金会所开发的分布式系统基础架构。
Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。
HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,
适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。
                Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算。
优点:Hadoop是一个能够对大量数据进行分布式处理的软件框架。它以一种可靠、高效、可伸缩(能够处理PB级数据)的方式进行数据处理。
同时Hadoop是一个能够让用户轻松架构合适用的分布式计算机平台,用户还可以轻松地在Hadoop上开发和运行处理海量级的数据的应用程序。主要有以下优点:
高可靠性、高扩展性、高效性、高容错性、低成本
核心架构:底层是Hadoop Distributed File System(HDFS),它存储Hadoop集群中所有存储节点上的文件。
HDFS(对于本文)的上一层是MapReduce 引擎,该引擎由 JobTrackers 和 TaskTrackers 组成。通过对Hadoop分布式计算平台最核心的分布式文件系统HDFS、
MapReduce处理过程,以及数据仓库工具Hive和分布式数据库Hbase
Hadoop的框架最核心的设计就是HDFS,MapReduce和YARN为海量的数据提供了存储和计算
common支持其他Hadoop模块的通用工具;
HDFS主要是Hadoop的存储,用于海量的数据的存储;
MapReduce主要用于分布式计算;
YARN是Hadoop中的资源管理系统

HDFS(心跳机制)是一个分布式文件系统,具有高容错的特点,它可以部署在廉价的通用硬件上,提供高吞吐率的数据访问,适合那些需要处理海量数据集的应用程序。
     主要特性
    支持超大文件
    一般是几百MB,GB甚至是TB的文件
    监测和快读应对硬件故障
    HDFS的检测和冗余机制很好地克服了大量硬件平台上硬件故障的问题
     流式数据访问,
HDFS处理的数据规模都很大,应用一次需要访问大量数据,同时,这些应用一般是批量处理,而不是用户交互式处理,HDFS使用户能够以流的形式访问数据集,注重的是数据的吞吐;
简化一致性模型
大部分的HDFS程序操作文件时,需要一次写入,多次读取,在HDFS中,一个文件一旦经过创建写入,关闭后一般不需要修改,这样简单的一致性模型有利于提高吞吐量。
            HDFS不支持的场景: 
低延迟数据访问
大量的小文件
多用户写入文件,修改文件
Hadoop MapReduce是一个软件框架,它可以轻松地编写应用程序,在一个可靠的、容错的方式中,以可靠的、容错的方式处理大量的数据(数千个节点)
MapReduce是由Google公司研究提出的一种面向大规模数据处理的并行计算模型和方法,是Hadoop面向大数据并行处理的计算模型、框架和平台
MapReduce(MR)是一个用来编写处理并行分布式数据程序的框架或库。同 HDFS 一样,它的架构也是基于主/从模式。“主机”是一个特殊的节点,负责协调多个工作节点之间的活动
MapReduce是处理大量半结构化数据集合的编程模型。编程模型是一种处理并结构化特定问题的方式。例如,在一个关系数据库中,使用一种集合语言执行查询,如SQL。告诉语言想要的结果,并将它提交给系统来计算出如何产生计算。还可以用更传统的语言(C++,Java),一步步地来解决问题。这是两种不同的编程模型,MapReduce就是另外一种。
MapReduce和Hadoop是相互独立的,实际上又能相互配合工作得很好。
最简单的 MapReduce应用程序至少包含 3 个部分:一个 Map 函数、一个 Reduce 函数和一个 main 函数。main 函数将作业控制和文件输入/输出结合起来。在这点上,Hadoop 提供了大量的接口和抽象类,从而为 Hadoop应用程序开发人员提供许多工具,可用于调试和性能度量等。
MapReduce 本身就是用于并行处理大数据集的软件框架。MapReduce 的根源是函数性编程中的 map 和 reduce 函数。它由两个可能包含有许多实例(许多 Map 和 Reduce)的操作组成。Map 函数接受一组数据并将其转换为一个键/值对列表,输入域中的每个元素对应一个键/值对。Reduce 函数接受 Map 函数生成的列表,
然后根据它们的键(为每个键生成一个键/值对)缩小键/值对列表。
YARN
YARN的基本思想是将资源管理和作业调度/监视的功能划分为单独的守护进程,其思想是拥有一个全局组员管理器(RM)和每个应用程序主(AM)。
资源者和NodeManager构成数据计算框架。资源管理器是在系统中的所有应用程序之间仲裁资源的最终权威。NodeManager是负责容器、监视它们的资源使用(cpu、内存、磁盘、网络)并将其报告给ResourceManager/调度器的每个机器框架代理。
实际上,每个应用程序的ApplicationMaster是一个特定于框架的库,它的任务是与来自ResourceManager的资源进行协商,并与NodeManager(s)一起工作,以执行和监视任务。
ResourceManager有两个主要组件:调度器和ApplicationsManager。
调度器负责根据熟悉的容量、队列等约束将资源分配给正在运行的应用程序。调度器是纯粹的调度器,因为它不为应用程序执行监视或跟踪状态。此外,它也不能保证由于应用程序失败或硬件故障而重新启动失败的任务。调度程序根据应用程序的资源需求执行调度功能;它是基于资源容器的抽象概念实现的,资源容器包含内存、cpu、磁盘、网络等元素。
调度器有一个可插拔的策略,它负责将群集资源分配到各种队列、应用程序等中。
ApplicationsManager负责接受作业提交,协商第一个容器来执行特定于应用程序的ApplicationMaster,并在失败时提供重新启动ApplicationMaster容器的服务。每个应用程序的应用程序管理员有责任从调度程序中协商适当的资源容器,跟踪它们的状态并监视进度
YARN支持通过储备系统进行资源保留的概念,该组件允许用户指定资源超时和时间限制的概要(例如,截止日期),并保留资源以确保重要任务的可预测执行。预订系统跟踪资源超时,执行预订控制,并动态地指示底层调度程序以确保预订已满
为了使YARN的规模超过几千个节点,YARN通过YARN联合会的特性来支持联合会的概念。联邦允许透明地将多个YARN(子)簇连接在一起,并使它们作为单个的大型簇出现。这可以用于实现更大的规模,并/或允许多个独立集群一起用于非常大的工作,或用于跨所有工作能力的租户。

ARN是Hadoop 2.0的资源管理器。它是一个通用的资源管理系统,可为上层应用提供统一的资源管理和调度,它的引入为集群在利用率、资源统一管理和数据共享等方面带来了巨大好处

Hive:
大数据数据仓库
通过写SQL对数据进行操作,类似于mysql数据库中的sql
补充;
Hive是Hadoop的一个组价,作为数据库,Hive的数据是储存在Hadoop的文件系统中,Hive为Hadoop提供sql语句,是Hadoop可以通过sql语句操作文件系统中的数据。Hive是依赖于Hadoop而存在的
hive是建立在hadoop之上的一个工具,用于简化一些BI统计。Hive能够帮助用户屏蔽掉复杂的mapreduce逻辑,而只需用户使用简单sql即可完成一定的查询功能
Hive可以帮助开发者从现有的数据基础架构转移到Hadoop上,而这个基础架构是基于传统关系型数据库和SQL的。Hive提供了Hive查询语言,即HQL,它可以使用SQL方言查询存储在hadoop中的数据。
执行原理:
Hive本身不会生成java的mapreduce程序,而是通过XML文件 驱动执行内置的、原生的Mapper和Reducer。
使用场景:
Hive适合做:数据仓库、应用程序、可以维护海量数据、对数据进行挖掘、形成意见和报表
Hive数据仓库软件便于使用sql在分布式储存中读写和管理大型数据。结构可以投影到存储中的数据上,提供命令工具和驱动程序JDBC将用户连接到Hive
缺点:
不支持记录级别的更新、插入或者删除;
查询延迟比较严重
不支持事务
如果想要基于SQL还想具有上面的特性,可以直接使用hadoop提供的nosql数据库——HBase
HBase
基于HDFS的NOSQL数据库
面向列的存储
补充:Hbase是一个分布式的、面向列的开源数据库
HBase – Hadoop Database,是一个高可靠性(多备份,分布式)、高性能(比MapReduce的性能高出许多)、面向列(存储模式是列族和列的存储模型)、可伸缩(集群可伸缩性)的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。
大数据为什么选择Hbase而不选择传统的数据库?
Hbase性能非常高。HBase中存储了一套HDFS的索引,通过表名->行健->列族->列限定符->时间版本这一套索引来定位数据的位置。正是因为HBase为每一列数据维护了一套索引规则,对于具体某一具体条数据的查询可以非常快速的通过B+树定位数据存储位置并将其取出。
HBase通常以集群部署,数据被分散到多个节点存储,当客户端发起查询请求的时候,集群里面多个节点并行执行查询操作,最后将不同节点的查询结果进行合并返回给客户端。
HBase运行在高可用环境中。HBase集群中任意一个节点宕机都不会导致集群瘫痪。这取决于两方面原因,第一方面,ZooKeeper解决了HBase中心化问题。第二方面,HBase将数据存放在HDFS上面,HDFS的数据冗余存放在不同节点,一个节点瘫痪可从其他节点取得数据,保证了HBase的高可用。
Hbase适合存储大数据HBase默认一个列族可以存放64M或更大的数据。HBase可以通过配置文件对存储的列族大小进行设置
Hbase是一个无模式的数据库。HBase不同于传统的关系型数据库,使用HBase不需要预先定义表中有多少列,也不需要定义每一列存储的数据类型,HBase在需要的时候可以动态增加列和指定存储数据类型。对于从不同数据源爬取的数据不一致,可以动态的新增列而不需要预先就设计好存储的表结构,以应对数据结构多种多样的情况

协作框架:
sqoop(桥梁:HDFS 《==》RDBMS)

sqoop是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql、postgresql...)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。
特征:
Sqoop是一个用来将Hadoop和关系型数据库中的数据相互转移的工具,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。
对于某些NoSQL数据库它也提供了连接器。Sqoop,类似于其他ETL工具,使用元数据模型来判断数据类型并在数据从数据源转移到Hadoop时确保类型安全的数据处理。Sqoop专为大数据批量传输设计,能够分割数据集并创建Hadoop任务来处理每个区块。
Sqoop允许从结构化数据存储(如关系数据库、企业数据仓库和NoSQL系统)轻松导入和导出数据。使用Sqoop,您可以在HDFS上从外部系统提供数据,并在Hive和HBase中填充表。Sqoop集成了Oozie,允许您调度和自动化导入和导出任务。Sqoop使用基于连接器的体系结构,该体系结构支持向新的外部系统提供连接的插件。
当您运行Sqoop时,在幕后发生的事情是非常简单的。被传输的数据集被分割成不同的分区,一个只支持地图的作业由负责传输数据集的每个映射器启动。数据的每个记录都以类型安全的方式处理,因为Sqoop使用数据库元数据推断数据类型
Sqoop还支持不同的数据格式来导入数据。例如,您可以通过简单地指定一个选项——使用import命令的-avrodatafile来轻松导入Avro数据格式的数据

flume:收集日志文件中信息

Flume是Cloudera提供的日志收集系统,具有分布式、高可靠、高可用性等特点,对海量日志采集、聚合和传输,Flume支持在日志系统中制定各类数据发送,同时,Flume提供对数据进行简单处理,并写到各种数接受方的能力。其设计的原理也是基于将数据流,如日志数据从各种网站服务器上汇集起来存储到HDFS,HBase等集中存储器中。
特征:
可靠性、可扩展性、可管理性
Flume的核心是把数据从数据源收集过来,在送到目的地,为了保证输送一定成功,在送到目的地之前,会先缓存数据,待数据真正到达目的地后,删除自己缓存的数据
Flume传输的数据基本单位是Event,如果是文本文件,通常是一行记录,这也是事务的基本单位。Event从Source,流向Channel,再到Sink,本身为一个byte数组,并可携带headers信息。Event代表着一个数据流的最小完整单元,从外部数据源来,向外部的目的地去
Flume运行的核心是Agent。它是一个完整的数据收集工具,含有三个核心组件,分别是source、channel、sink。通过这些组件,Event可以从一个地方流向另外一个地方。
Flume NG架构的优势:
NG在核心组件上进行了大规模的调整
大大降低了对用户的要求,如用户无需搭建ZooKeeper集群
有利于 Flume 和其他技术、hadoop 周边组件的整合
在功能上更加强大、可扩展性更高
Flume架构核心组件:
    source:source负责接收event或通过特殊机制产生event,并将events批量的放到一个或多个channel,source必须至少和一个channel关联
    不同类型的source:与系统集成的source: Syslog, Netcat;直接读取文件的 source: ExecSource、SpoolSource;用于Agent和Agent之间通信的IPC Source: Avro、Thrift
    channel:channel位于source和sink之间,用于缓存进来的event。当Sink成功的将event发送到下一跳的channel或最终目的时候,event从Channel移除。
    几种channel类型:MemoryChannel 可以实现高速的吞吐,但是无法保证数据的完整性;FileChannel(磁盘channel)保证数据的完整性与一致性。在具体配置FileChannel时,建议FileChannel设置的目录和程序日志文件保存的目录设成不同的磁盘,以便提高效率
    sink:Sink负责将event传输到下一跳或最终目的;sink在设置存储数据时,可以向文件系统、数据库、Hadoop存数据,在日志数据较少时,可以将数据存储在文件系统中,并且设定一定的时间间隔保存数据。在日志数据较多时,可以将相应的日志数据存储到hadoop中,便于日后进行相应的数据分析。必须作用于一个确切的channel
    调度框架anzkaban,了解:crontab(Linux自带)、zeus(Alibaba)、Oozie(cloudera)
anzkaban:
Azkaban是一套简单的任务调度服务,整体包括三部分webserver、dbserver、executorserver。
  是linkin的开源项目,开发语言为Java。
   Azkaban是由Linkedin开源的一个批量工作流任务调度器。用于在一个工作流内以一个特定的顺序运行一组工作和流程。
   Azkaban定义了一种KV文件格式来建立任务之间的依赖关系,并提供一个易于使用的web用户界面维护和跟踪你的工作流。
        crontab(linux系统自带):
    root用户和crontab文件的所有者
            语法:
                   crontab [-e [UserName]|-l [UserName]|-r [UserName]|-v [UserName]|File ]
zeus(Alibaba):
Zeus是Alibaba开源的一个完整的Hadoop的作业平台,用于从Hadoop任务的调试运行到生产任务的周期调度。
宙斯支持任务的整个生命周期。从功能上来说,支持:
* Hadoop MapReduce任务的调试运行
* Hive任务的调试运行
* Shell任务的运行
* Hive元数据的可视化查询与数据预览
* Hadoop任务的自动调度
* 完整的文档管理
Zeus是针对Hadoop集群任务定制的,通用性不强。
基于Python的工作流引擎
基于Python的工作流引擎优点是:
The DAG definition is code
因此可维护性,版本管理,可测性和协作性更好。
Oozie(cloudera):
Oozie是一个管理hadoop任务的工作流/协调系统。Oozie工作流中拥有多个Action,如Hadoop Map/Reuce job,Hadoop Pig job等,所有的Action以有向无环图(DAG Direct Acyclic Graph)的模式部署运行。详见:Hadoop工作流调度系统Oozie
Oozie的优点是与Hadoop生态圈结合紧密,比如:
有MapReduce的Action,定义一个mapreduce任务很方便,而且可以直接通过job id关联到hadoop history页面
        Oozie任务的资源文件都必须存放在HDFS上
Action也方便扩展,比如添加自定义的任务类型或者报警方式
缺点是通过XML文件来定义DAG依赖,虽然支持的功能很多,比如分支,ok,failed节点,但是总感觉定义过于复杂,维护成本高。

扩展前沿框架:
kylin、impala、ElasticSearch(ES)
kylin:

特性:
可扩展超快OLAP引擎: Kylin是为减少在Hadoop/Spark上百亿规模数据查询延迟而Hadoop ANSI SQL 接口: Kylin为Hadoop提供标准SQL支持大部分查询功能
交互式查询能力: 通过Kylin,用户可以与Hadoop数据进行亚秒级交互,在同样的数据集上提供比Hive更好的性能
多维立方体(MOLAP Cube): 用户能够在Kylin里为百亿以上数据集定义数据模型并构建立方体
与BI工具无缝整合:Kylin提供与BI工具的整合能力,如Tableau,PowerBI/Excel,MSTR,QlikSense,Hue和SuperSet
其他特性: 
Job管理与监控
压缩与编码
        增量更新
                        利用HBase Coprocessor
基于HyperLogLog的Dinstinc Count近似算法
友好的web界面以管理,监控和使用立方体
项目及表级别的访问控制安全
支持LDAP、SSO
kylin生态圈:
Kylin 核心:
Kylin OLAP引擎基础框架,包括元数据(Metadata)引擎,查询引擎,Job引擎及存储引擎等,同时包括REST服务器以响应客户端请求
扩展:支持额外功能和特性的插件
整合:
用户界面:在Kylin核心之上扩展的第三方用户界面
驱动:ODBC 和 JDBC 驱动以支持不同的工具和产品,比如Tableau
impala:

Impala是开源、原生分析数据库。
        Impala在Hadoop上提供了低延迟和高并发性的BI/解析查询(不是由像Apache Hive这样的批处理框架交付的)。Impala也线性扩展,即使在多租户环境中也是如此。
使用与Hadoop部署相同的文件和数据格式、元数据、安全性和资源管理框架——没有冗余的基础设施或数据转换/复制。
对于Apache Hive用户,Impala使用相同的元数据和ODBC驱动程序。与Hive一样,Impala支持SQL,所以不必担心重新发明实现轮。
Impala集成了本地Hadoop安全性和Kerberos进行身份验证,通过Sentry模块,您可以确保正确的用户和应用程序被授权使用正确的数据。
使用Impala,更多的用户,无论是使用SQL查询还是BI应用程序,都可以通过单一的存储库与更多的数据进行交互,并通过分析从源存储元数据。
ElasticSearch(ES)

ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,
并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

原文出处

点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消