1)hadoop 生态系统
hdfs:(Hadoop Distributed File System 分布式文件系统)
a) block: hdfs将一个大文件切割成多个小文件,在2.0版本中每个小文件的大小为128MB,这些小文件被称作为块(block)
b) namenode:namenode 是 HDFS 集群主节点,负责维护整个 hdfs 文件系统的目录树,以及每一个路径(文 件)所对应的 block 块信息(block 的 id,及所在的 datanode 服务器)
NameNode 对数据的管理采用了两种存储形式:内存和磁盘
首先是内存中存储了一份完整的元数据,包括目录树结构,以及文件和 数据块与副本存储地 的映射关系;
1) 内存元数据 metadata : metadata (全部存在内存中)
2) 磁盘元数据镜像文件 fsimage:fsimage_0000000000000000555
3) 数据历史操作日志文件 edits:edits_0000000000000000001-0000000000000000018 (可通过日志运算出元数据,全部存在磁盘中)
4) 数据预写操作日志文件 (正在编辑的日志文件)edits_inprogress_0000000000000000556
5) 集群的版本信息: VERSION 存放 hdfs 集群的版本信息
yarn:(Yet Another Resources Negotiator 运算资源调度系统) c) datanode:datanode 是 HDFS 集群从节点,每一个 block 都可以在多个 datanode 上存储多个副本(副本 数量也可以通过参数设置 dfs.replication,默认是 3)
mapReduce:(Map 和 Reduce 分布式运算编程框架)
common:(基础功能组件)(工具包,RPC 框架)JNDI 和 RPC
2)hbase:非关系型数据库
3)hive:Hive 依赖于 HDFS 存储数据,Hive 将 HQL 转换成 MapReduce 执行 所以说 Hive 是基于 Hadoop 的一个数据仓库工具,
实质就是一款基于 HDFS 的 MapReduce 计算框架,对存储在 HDFS 中的数据进行分析和管理
4)Zookeeper:ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务,是 Google 的 Chubby 一个开源的实现。
它提供了简单原始的功能,分布式应用可以基于它实现更高级的服务,比 如分布式同步,配置管理,集群管理,命名管理,队列管理。
它被设计为易于编程,使用文 件系统目录树作为数据模型。服务端跑在 java 上,提供 java 和 C 的客户端 API
5)Flume: Flume 是一个分布式、可靠、高可用的海量日志聚合系统,支持在系统中定制各类数据发送方,
用于收集数据,同时,Flume 提供对数据的简单处理,并写到各种数据接收方的能力。
6)kafka:Kafka 是一个分布式消息队列,在流式计算中,Kafka 一般用来缓存数据(类似大坝,蓄水),Storm 通过消费 Kafka 的数据进行计算。
经典架构:Flume + Kafka + Storm + Redis
Kafka 是一个分布式消息队列:具有生产者、消费者的功能。它提供了类似于 JMS 的特性,
但是在设计实现上完全不同,此外它并不是 JMS 规范的实现。
Kafka 对消息保存时根据 Topic 进行归类,发送消息者称为 Producer,消息接受者称为 Consumer,
此外 Kafka 集群有多个 Kafka 实例组成,每个实例(server)成为 broker。
7)redis:Redis以内存作为数据存储介质,所以读写数据的效率极高,远远超过数据库
REmote DIctionary Server(Redis)是一个由 Salvatore Sanfilippo 写的开源的、高性能的、使用
ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存亦可持久化的日志型、key-value
存储系统,并提供多种语言的 API。和 memcached 类似,Redis 常被称作是一款 key-value 内
存存储系统或者内存数据库,同时由于它支持丰富的数据结构,又被称为一种数据结构服务
器(Data Structure Server)。因为值(value)可以是字符串(String),哈希(Map),列表(list),
集合(sets)和有序集合(sorted sets)等类型。
8)sqoop:数据迁移工具
Sqoop 是 Apache 旗下一款“Hadoop 和关系数据库服务器之间传送数据”的工具。
导入数据:MySQL,Oracle 导入数据到 Hadoop 的 HDFS、HIVE、HBASE 等数据存储系统
导出数据:从 Hadoop 的文件系统中导出数据到关系数据库 MySQL 等
Sqoop 的本质还是一个命令行工具,和 HDFS,Hive 相比,并没有什么高深的理论。
9)azkaban:工作流调度器
对市面上最流行的两种调度器,给出以下详细对比,以供技术选型参考。总体来说,ooize
相比 azkaban 是一个重量级的任务调度系统,功能全面,但配置使用也更复杂。如果可以不
在意某些功能的缺失,轻量级调度器 azkaban 是很不错的候选对象。