大数据技术在企业中的应用

什么是数据?

数据库的ACID特性

  • 原子性(Automicity)
  • 一致性
  • 隔离性
  • 持久性
  • 实时性
  • 业务属性(数据业务属性不同处理方式不同)

什么是大数据?

流程数据再多,也到不了大数据的级别
业务数据?什么类型的业务数据?
从Lucene到Nutch到Hadoop

传统J2EE的瓶颈

数据存储,数据检索,多用户同时访问,关系型数据库

为什么需要大数据技术?大数据的技术体系

分布式,并行计算的出现,使得数据存储与数据计算都发生了本质上的区别
大数据存储与计算是怎样的,有什么不同。

计算机硬盘的发展趋势:寻址时间的提升远远不敌于传输速率的提升。
寻址是将磁头移动到特定硬盘位置进行读/写操作的过程,它是导致硬盘操作延迟的主要原因,而传输速率取决于硬盘的带宽。

如果数据访问模式中包含大量的硬盘寻址,那么读取大量数据集就必然会花更长的时间。
如果数据库系统只更新一小部分记录,那么传统的B树(关系型数据库的数据结构,受限于寻址的速率)就更有优势。但数据库系统如果有大量数据更新时,B树的效率就明显落后于MapReduce。
读时模式与写时模式。
写时模式在写入时格式也要写入?(本人理解的是否到位?)
读时模式在处理数据时才对数据进行解释。
Hadoop非常适合分析各种日志(非规范化数据记录,关系型数据往往是规范的)文件。
MapReduce以及Hadoop中其他的处理模型是可以随着数据规模线性伸缩的。对数据分区后,函数原语(如map和reduce)能够在各个分区上并行工作。这意味着,如果输入的数据量是原来的两倍,那么作业的运行时间也需要两倍。但如果集群规模扩展为原来的两倍,那么作业的运行速度却仍然与原来一样快。SQL查询一般不具备该特性。

与网格计算、高性能计算(HPC)的区别

广义上讲,基于消息传递接口(Message Passing Interface,MPI)的高性能计算采用的方法是将作业分散到集群的各台机器上,这些机器访问存储区域网络(SAN)所组成的共享文件系统。这比较适用于“计算密集型”的作业,但如果节点需要访问的数据量更庞大(高达几百GB),很多计算节点就会因为网络带宽的瓶颈问题而不得不闲下来等数据。
Hadoop尽量在计算节点上存储数据,以实现数据的本地快速访问。“数据本地化(data locality)”特性是Hadoop数据处理的核心,并因此而获得良好的性能。
意识到网络带宽是数据中心环境最珍贵的资源(到处复制数据很容易耗尽网络带宽)之后,Hadoop通过显式网络拓扑结构来保留网络带宽,这种排列方式并没有降低Hadoop对计算密集型数据进行分析的能力。

数据流的显性、隐形

并行存储与数据副本

为什么需要并行存储?
单机读写瓶颈
为什么需要数据副本?
硬件故障问题,如果没有副本,一台机器故障会遗失数据,只能等待机器恢复后,这部分数据才会恢复。

HDFS

带副本的分布式存储文件系统。
超大文件:几百MB,几百GB,甚至几百TB大小的文件。
流式数据访问
商用硬件:普通硬件,故障率高。HDFS被设计成能够继续运行且不让用户察觉到明显的中段。
低时间延迟的数据访问:并不适合在HDFS上运行,HDFS式为高数据吞吐量应用优化的,这可能会以提高时间延迟为代价。对低延迟的访问需求,HBase是更好的选择。
大量的小文件:并不适合大两小文件,会占满namenode的内存。
多用户写入,任意修改文件:并不支持,只支持单个写入者,并且写操作是以append的方式添加的。不支持多个写入者的操作,也不支持在文件任意位置进行修改。

数据块
网络拓扑

同一节点上的进程
同一机架上的不同节点
同一数据中心中不同机架上的节点
不同数据中心中的节点

Hadoop的默认布局策略是在运行客户端的节点上放第1个复本(如果客户端运行在集群之外,就随机选择一个节点,系统会避免挑选那些存储太满或太忙的节点)。第2个复本放在与第一个不同且随机另外选择的某个机架中的节点上。第3个复本与第2个复本放在同一个机架上,且随机选择另一个节点。其他复本放在集群中随机选择的节点上,系统会尽量避免在同一个机架上放太多复本。

数据聚合

分布式存储转换为一个数据集。

MapReduce

每个查询需要处理整个数据集或至少一个数据集的绝大部分。MR并不适合交互式分析,不可能执行一条查询并在几秒内或更短的时间内得到结果。典型情况下, 执行查询需要几分钟或更多时间。因此,MR更适合没有用户现场等待查询结果的离线使用场景。

怎么解决MR的在线访问问题呢?

MapReduce的工作流
目前已经知道了MapReduce的应用开发机制,那么如何将数据处理问题转化成MapReduce模型呢?日常需要处理数据问题的场景都发生在什么时候?
数据入库,数据查询。

如果处理过程更复杂,这种复杂度一般是因为有更多的MapReduce作业,而不是更复杂的map和reduce函数。换言之,通常是增加更多的作业,而不是增加作业的复杂度。对于更复杂的问题,可以(其实是必须)使用比MapReduce更高级的技术,比如Pig,Hive,Cascading,Crunch,Spark。一个直接的好处是,有了它之后,就用不着处理到MapReduce作业的转换,而是集中精力分析正在执行的任务。

关系型数据库的瓶颈?
关系型数据库的索引原理:
B-Tree是最常用的索引数据结构。

JobControl

YARN(Yet Another Resource Negotiator)

Hadoop的集群资源管理系统。YARN被引入Hadoop 2,最初是为了改善MapReduce的实现,但它具有足够的通用性,同样可以支持其他的分布式计算模式。
YARN提供请求和使用集群资源的API,但这些API很少直接用于用户代码。相反,用户代码中用的是分布式计算框架提供的更高层API,这些API建立在YARN之上且向用户隐藏了资源管理细节。
一些分布式计算框架(MapReduce,Spark,Tez)作为YARN应用运行在集群计算层(YARN)和集群存储层(HDFS和HBase)上。
还有一层应用是运行在计算框架之上的处理框架,如Pig,Hive,Crunch等等。

YARN本身不会为应用的各部分(客户端、master和进程)彼此间通信提供任何手段。大多数重要的人YARN应用使用某种形式的远程通信机制(例如Hadoop的RPC层)来向客户端传递状态更新和返回结果,但这些通信机制都是专属于各应用的。

HA(High availability)

YARN中的调度 important!!!!

  • FIFO调度
  • 容量调度
  • 公平调度

Hadoop生态圈

HBase:可以提供在线访问的组件

使用HDFS作为底层存储。提供对单行数据的在线读写访问,还提供对数据块的读写批处理。

YARN

分布式集群资源管理系统,不仅能跑MapReduce,还能跑任何一个分布式程序基于Hadoop集群的数据而运行。

Interactive SQL(交互式SQL)

利用MapReduce进行分发并使用一个分布式查询引擎,使得在Hadoop上获得SQL查询低延迟响应的同时还能保持对大数据集规模的可扩展性。
impala
Hive

Iterative processing(迭代处理)

迭代处理,在内存中保存结果集
Spark

Stream processing(流式处理)

在无边界数据流上运行实时、分布式计算
Storm
Spark Streaming
Samza

Search

Solr(基于Lucene)

Hadoop 的规模分析

根据需要制定多大规模的Hadoop集群?

你可能感兴趣的:(大数据技术在企业中的应用)