赞
踩
部分内容摘自尚硅谷、黑马等等培训资料。
分布式系统基础架构
存储
和海量数据的分析计算
问题Hadoop生态圈
Hadoop 是 Apache Lucene 创始人 Doug Cutting 创建的。最早起源于 Nutch,它是 Lucene 的子项目。Nutch 的设计目标是构建一个大型的全网搜索引擎,包括网页抓取、索引、查询等功能,但随着抓取网页数量的增加,遇到了严重的可扩展性问题:如何解决数十亿网页的存储和索引问题。
2003 年 Google 发表了一篇论文为该问题提供了可行的解决方案。论文中描述的是谷歌的产品架构,该架构称为:谷歌分布式文件系统(GFS)
,可以解决他们在网页爬取和索引过程中产生的超大文件的存储需求。
2004 年 Google 发表论文向全世界介绍了谷歌版的MapReduce系统
。
同时期,以谷歌的论文为基础,Nutch 的开发人员完成了相应的开源实现 HDFS 和 MAPREDUCE,并从 Nutch 中剥离成为独立项目 HADOOP,到 2008 年 1 月,HADOOP 成为 Apache 顶级项目,迎来了它的快速发展期。
2006 年 Google 发表了论文是关于BigTable
的,这促使了后来的 Hbase 的发展。
因此,Hadoop 及其生态圈的发展离不开 Google 的贡献。
Hadoop 三大发行版本:Apache、Cloudera、Hortonworks
Apache
版本是最原始(最基础)的版本,对于入门学习最好——2006年
HDP(ambari)
(Hortonworks 现已被 Cloudera 公司收购,推出新的品牌CDP
)——2011年CDH
——2008年
在 Hadoop1.x 时代,Hadoop 中的 MapReduce 同时处理业务逻辑运算和资源的调度,耦合性较大。
在 Hadoop2.x 时代,增加了 Yarn。Yarn 只负责资源的调度,MapReduce 只负责运算。
Hadoop3.x 在组成上没有变化(3.x 的新特性后面再开新章节单独说)。
Hadoop Distributed File System,简称HDFS
,是一个分布式文件系统,用来解决海量数据存储的问题。
元数据
,如文件名、文件目录结构、文件属性
(生成时间、副本数、文件权限),以及每个文件的块列表
和块所在的DataNode
等。存储文件块数据
,以及块数据的校验
。每隔一段时间对NameNode元数据备份
。 Yet Another Resource Negotiator 简称YARN
,另一种资源协调者,是Hadoop的资源管理器,用来解决资源任务调度的问题。
如内存、CPU、 磁盘、网络等
。 MapReduce 是一个分布式运算编程框架,将计算过程分为两个阶段:Map 和 Reduce,用来解决海量数据计算的问题。
当下的 Hadoop 已经成长为一个庞大的体系,随着生态系统的成长,新出现的项目越来越多,其中不乏一些非 Apache 主管的项目,这些项目对 Hadoop 是很好的补充或者更高层的抽象。比如:
框架 | 用途 |
---|---|
HDFS | 分布式文件系统 |
MapReduce | 分布式运算程序开发框架 |
ZooKeeper | 分布式协调服务基础组件 |
HIVE | 基于HADOOP的分布式数据仓库,提供基于SQL的查询数据操作 |
FLUME | 日志数据采集框架 |
oozie | 工作流调度框架 |
Sqoop | 工作流调度框架 |
Impala | 基于hive的实时sql查询分析 |
Mahout | 基于mapreduce/spark/flink等分布式运算框架的机器学习算法库 |
Hadoop 运行模式包括:本地模式、伪分布式模式以及完全分布式模式。
完全分布式模式部署教程:《Hadoop3.x在centos上的完全分布式部署(包括免密登录、集群测试、历史服务器、日志聚集、常用命令、群起脚本)》
目录 | 说明 |
---|---|
bin | Hadoop最基本的管理脚本和使用脚本的目录,这些脚本是sbin目录下管理脚本的基础实现,用户可以直接使用这些脚本管理和使用Hadoop。 |
etc | Hadoop配置文件所在的目录,包括core-site,xml、hdfs-site.xml、mapred-site.xml等从Hadoop1.0继承而来的配置文件和yarn-site.xml等Hadoop2.0新增的配置文件。 |
include | 对外提供的编程库头文件(具体动态库和静态库在lib目录中),这些头文件均是用C++定义的,通常用于C++程序访问HDFS或者编写MapReduce程序。 |
lib | 该目录包含了Hadoop对外提供的编程动态库和静态库,与include目录中的头文件结合使用。 |
libexec | 各个服务对用的shell配置文件所在的目录,可用于配置日志输出、启动参数(比如JVM参数)等基本信息。 |
sbin | Hadoop管理脚本所在的目录,主要包含HDFS和YARN中各类服务的启动/关闭脚本。 |
share | Hadoop各个模块编译后的jar包所在的目录,官方自带示例。 |
实际生产环境当中,Hadoop 的环境搭建完成之后,第一件事情就是进行压力测试,测试 Hadoop 集群的读取和写入速度,测试网络带宽是否足够等一些基准测试。
向 HDFS 文件系统中写入数据,10 个文件,每个文件 10MB,文件存放到/benchmarks/TestDFSIO
中。
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.3.1-tests.jar TestDFSIO -write -nrFiles 10 -fileSize 10MB
测试 HDFS 的读取文件性能,在 HDFS 文件系统中读入 10 个文件,每个文件 10M。
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.3.1-tests.jar TestDFSIO -read -nrFiles 10 -fileSize 10MB
测试期间,会在 HDFS 集群上创建/benchmarks
目录,测试完毕后,我们可以清理该目录。
hdfs dfs -ls -R /benchmarks
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.3.1-tests.jar TestDFSIO -clean
/benchmarks
目录中内容删除Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。