1、如何对大数据进行存储与分析呢?
-
系统瓶颈:存储容量、读写速率、计算效率。。。无法满足用户需求;
针对以上,Google提出三大关键技术解决大规模数据的存储和处理:MapReduce、BigTable、GFS; -
革命性的变化1:成本降低、能用PC机、就不用大型机和高端存储;(当时对于谷歌来说,数据都是网页数据,不同于银行都是真金白银的数据,所以他的目的在于成本降低。能用PC机就不用大型机和高端机存储。)
-
革命性的变化2:软件容错硬件故障视为常态,通过软件保证可靠性。(谷歌的方案里,硬件故障视为常态;普通PC机硬件故障是常态,所以需要通过软件方面来保证高可靠性)
-
革命性的变化3:简化并行分布式计算,无需控制节点同步和数据交换;(谷歌的MapReduce使分布式通信变得非常的简单,只需要一个Map和Reduce任务即可)
但是Google并没有开源以上的技术。
一个模仿Google大数据技术的开源实现来了 -- Hadoop
Hadoop的功能和优势
1、Hadoop包括两个核心组成:
- HDFS:分布式文件系统,存储海量的数据;
- MapReduce:并行处理框架,实现任务分解和调度。
2、Hadoop可以用来做什么
- 搭建大型数据仓库,PB级数据的存储、处理、分析、统计等业务。(搜索引擎,网页数据处理,商业智能,日志分析,数据挖掘)
3、Hadoop优势
- 高扩展:理论上可以做到无限,可以通过他的设计框架下增加一些硬件使得性能和容量提升;
- 低成本:Hadoop借助Google的思想,不依赖高端硬件,只需要普通的PC机堆叠我们的系统;
- 成熟的生态圈:Hive,Hbase为Hadoop用的更加高效与方便的小工具;
Hadoop生态系统与版本
1、HDFS、MapReduce、开源工具
- Hive - 轻盈,不需要编写复杂的Hadoop任务程序,只需要学一个SQL语句,Hive就会把你的SQL语句转换成一个Hadoop任务去执行,最大作用是降低使用Hadoop的门槛;
- Hbase - 存储结构化数据的分布式数据库,和传统的关系型数据库不同,Hbase放弃事务特性,追求更高的扩展。与HDFS不同,Hbase提供了数据的随机读写和实时访问,实现对表数据的读写功能。
- zookeeper - 监控Hadoop集群里每个节点的状态,管理整个集群的配置,维护节点与节点之间的数据一致性。
HDFS - 文件系统
HDFS的设计架构
1、基本概念
- 块(Block):固定大小的逻辑单元,HDFS所有文件在存储的时候都是把文件切分成相同大小的块,默认是64MB,块是文件存储处理的逻辑单元,做文件的备份和查找都是块进行处理。
- NameNode:管理节点,存放文件的元数据,一、文件与数据块的映射表;二、数据块与数据节点的映射表。
- DataNode:
图解:
- NameNode是唯一的管理节点,该节点保存大量的元数据,客户查询访问请求,会向NameNode查下元数据,返回的结果就知道这块文件存放在哪一些节点上。于是向这些节点去拿数据块。拿到数据块之后在进行组装拼接之前想要的文件。
- HDFS中数据管理与容错(数据存放有一定的策略,比如说为了保证硬件的容错,数据不能丢失,对于任何一个数据块都是存储三份,三份中两份在同一个机架上,还有一份在另外一个机架上。)
- 心跳检测:NameNode和DataNode之间有一个心跳协议,每隔多少秒钟DataNode定期向NameNode发送心跳消息。是不是属于一个Active状态。
- 二级NameNode(Secondary NameNode),如果NameNode发生故障,整个元数据就会丢失,为了保证NameNode和元数据不会被丢失,做了一个备份,元数据定期同步到Secondary NameNode上,如果NameNode正常,Secondary NameNode不会接受请求;一旦NameNode发生故障,Secondary NameNode会进行同步,然后进行替换,变成NameNode,保证NameNode的高可用性。
HDFS读取文件流程
- 1、客户端向NameNode读写请求,把文件名和路径告诉NameNode;
- 2、NameNode查询元数据,根据元数据返回客户端;客户端则知道这些文件包含哪些块,以及这些块分别会在哪些DataNode里面能够找到;
- 3、客户端找到这些DataNode读取Blocks,下载下来之后再进行组装。
写文件:
- 1、将文件拆分成64MB的块,通知NameNode;NameNode找到磁盘空间可用的DataNode返回,根据返回的DataNode,客户端对块进行写入;写入第一个块之后通过复制管道进行流水线复制,复制完成后更新元数据。
HDFS特点
- 1、数据做了大量冗余,硬件容错;
- 2、流式数据访问:一次写入多次读取,且写入之后不可修改;
- 3、适合存储大文件;如果是大量小文件,NameNode压力会非常大;
- 4、适合数据批量读写,吞吐量高;不适合交互式应用,低延迟很难满- 足。
- 5、适合一次写入多次读取,顺序读写;不支持多个用户并发写相同文件。
HDFS命令行操作
打印当前HDFS的文件夹:hadoop fs -ls /
启动之前格式化操作:hadoop namenode -format
创建input文件夹:hadoop fs -mkdir input(会在/user/root目录下)
将本地文件提交到HDFS里面:hadoop fs -put hadoop-env.sh input/
打印文件夹内容:hadoop fs -ls /user/root/input/
查看文件内容:hadoop fs -cat input/hadoop-env.sh
下载文件:hadoop fs -get input/hadoop-env.sh hadoop-env2.sh
查看文件系统所有信息:hadoop dfsadmin -report
删除:hadoop fs -rm input/hadoop-env.sh
MapReduce - 并行计算框架
- 1、MapReduce原理:分而治之,一个大任务分成多个小的任务(map),并行执行后,合并结果(reduce);
MapReduce的运行流程
1、基本概念
- Job & Task :一个Job会被拆分成多个Task,一个Task中又分为MapTask和ReduceTask
- JobTracker :Master管理节点,作业调度,分配任务、监控任务执行进度,监控TaskTracker的状态
- TaskTracker:执行任务,向JobTracker汇报任务状态
Hadoop-7.png客户端提交任务Job,JobTracker把它放到候选队列中去,在适当的时候,来进行调度选择一个Job出来,将此Job拆分成多个Map任务和Reduce任务,Map任务分发给下面TaskTracker来做。(部署时TaskTracker和HDFS的DataNode是同一组物理机里的,这样保证计算跟着数据走,比如一个任务分到这里刚好所需要的数据就是在本机的DataNode里面,这样的话保证读取数据的开销最小,最快的读到我的数据)
MapReduce作业执行过程
Hadoop-8.png2、MapReduce的容错机制
- 重复执行:默认4次,之后放弃;
- 推测执行:Map端算完,Reduce才开始;某个节点特别慢,推测出现问题,该计算仍然继续,再找一个TaskTracker和它做同样的事情,谁先算完终止对方,避免执行效率低;
网友评论