hadoop概述
hadoop是 Doug Cutting 在 Lucene
之后的一个项目
主要用于 计算
是一个 开源,可靠,可扩展 的分布式计算框架
主要有
- hdfs
- 也就是 hadoop 的 dfs(Distributed File System)
- MapReduce
- 也就是核心想法(先Map,再reduce)
- java8 里面也看见对应的方法,感觉如果数据量小,现在用别的也可以实现,只是时间会长很多
- yarn
- 分布式资源调度
当然,hadoop1 和 hadoop2 的一些名词有变化
但是,对应的实现,是没有太大区别的
好处是,可以多台机器同时处理,通过心跳去及时获取计算结果
hadoop的场景
一般可以用于
- 日志分析
- 海量数据的计算
- 复杂算法
- 搜索引擎
- dsp获取的个人数据以及为行为分析提供数据
对应的hadoop生态圈
hadoop生态图
- Zookeeper
- 分布式协作服务
- HBase
- 一个实时的nosql
- sql(关系型数据库) 和 nosql(非关系型数据库)
- mysql, Oracle、SQLServer、DB2 都是关系型数据库(当数据量不是太大的时候,有又是)
- MongoDB(很常见的nosql), Redis(很常见的内存数据库),Vertica(很少人用,原来公司用过,很强大),HBase
- Hive
- 数据仓库
- 存储数据用
- Pig
- 数据流处理
- Mahout
- 数据挖掘库
- 哎,超级难
- 感觉数学要好,算法要好
- MapReduce
- 计算的核心
- HDFS
- hadoop的 dfs(Distributed File System)分布式文件系统
- 感觉记住几个命令就行了
- Flume
- 日志收集
- Sqoop
- 数据库ETL,转换数据(Hive -> HBase, HBase -> Hive 等)
- 没了解过
Hadoop核心
Hadoop Common
- 很多项目都有common模块
- 常用的基础,都放在里面
Hadoop HDFS - hadoop的 dfs(Distributed File System)分布式文件系统
Hadoop MapReduce - 分布式离线并行计算框架
- 也就是核心想法(先Map,再reduce)
Hadoop YARN - 新的MapReduce框架, 任务调度,资源管理
hdfs相关
namenode
- Metadata存储一些信息
- 比如, name名字, replicas备份数,路径等等
- 记得,android的apk也有META-INF, html一般头部也有 meta 信息
- 分开块处理信息
- hadoop2, 默认128m一个块
- hadoop1, 默认64m一个块
datanode
- 存储信息
- namenode分块后,信息分别会存储在datanode中
secondnamenode
- namenode的副手吧
- 最好和namenode不在一个服务器上,当namenode倒掉后,secondnamenode会跟上
yarn Architecture构架图
yarn (Yet Another Resource Negotiator,另一种资源协调者)
整个集群的资源调度,同时监控
比如,一个任务需要的cpu,内存等
这里ResourceManager是总的管理者,所有nodemanager的都由它管理
nodemanager一般都在不同的机器上
一般流程
- client 给 ResourceManager 一个请求
- 会转换成一个Task(上图有, MapTask, ReduceTask,MPI Task)
- Task会交给AppMaster,创建一个进程,获取信息,做对应的操作
- 同时, AppMaster会给 ResourceManager 对应的信息返回,告诉需要的资源
- ResourceManager 会根据对应的情况,分配资源
- 外部所有的Container,由AppMaster统一管理
hadoop核心 MapReduce
Map任务
- 读取输入内存, 解析成 key,value 键值对
- 重写map方法, 编写业务输出的key, value
- 对 key,value 进行分区 (Partitioner类)
- 将键值对排序,分组。相同key放入同一个集合
Reduce任务
- 多个map输入, 按照不同的分区,copy到不同的 reduce节点
- 对多个map任务进行合并,排序。根据逻辑,得到新的 key,value输出
- 把reduce的输出,保存在文件中