-
分布式的计算框架 可靠 可扩展
-
可扩展 集群可以上万台,分布式计算 分布式存储
-
可靠high-availability(HA)
-
Hadoop可以做啥:
- 数据仓库
- 数据库一般只保存数据的最新状态,极个别重要的值会保存历史版本
- 数据仓库 会保存所有的历史版本 只记录 很少更新 删除
- PB级数据的存储 处理 分析 统计
- 日志分析
- 数据挖掘
- 商业智能(Business Intelligence,简称:BI)
- 数据仓库
商业智能通常被理解为将企业中现有的数据(订单、库存、交易账目、客户和供应商等数据)转化为知识,帮助企业做出明智的业务经营决策的工具。从技术层面上讲,是数据仓库、数据挖掘等技术的综合运用。
MySQL也可以做集群,但是性能远不如Hadoop 因为mysql是关系型数据库,有事务之类的功能,而数据仓库只记录,很少有更新和删除的 *** 作,不需要事务 *** 作,事务(加锁) *** 作牵扯的表很多,因此性能会有差距
- Hadoop组件
- hadoop common
- 协调其它组件的通用工具
- HDFS
- 分布式文件系统
- 扩展性&容错性&海量数量存储
- 数据切成指定大小的数据块进行存储
- 数据会有冗余(多副本)保存 通过冗余实现容错
- MapReduce 离线计算
- 分布式计算框架
- 数据分布式存储的,需要对分布式存储的数据做分析计算 是移动数据到一个节点 还是 移动计算到每个节点 MapReduce 移动计算
- 扩展性&容错性&海量数据离线处理
- 计算分成两个阶段
- Map 分
- Reduce 合
- YARN
- 资源管理 作业调度
- 多个框架会用到HDFS上的数据,先后问题,需要有框架来协调 YARN起到了协调作用
- 另一种资源协调者 Mesos
- Yarn hadoop 2.0版本才加进来的 hadoop1.* 没有YARN
- 数据冗余 高可用 副本数量也可以指定 3
- 数据拆分 配置文件中可以指定文件块大小 Block size 128MB
- A.log 分3份 block-id 001 002 003 副本数3 datnode 1 datanode 5 datanode 7
- 架构
- NameNode
- 响应客户端请求
- 元数据存储
- DataNode管理
- DataNode
- 数据的存储
- 和客户端之间io *** 作
- 定期向NameNode汇报自身情况
- NameNode
- NameNode高可用
- 3台 1台活着 另外两个备份 zookeeper管理
- hadoop.apache.org
- 作用: 协调多个框架共同访问hdfs集群资源
- 架构:
- ResourceManager: RM 资源管理器
- 响应客户端请求
- 管理NodeManager状态
- 响应ApplicationMaster的请求
- NodeManager: NM 节点管理器
- 管理自身资源
- 启动container 运行task
- 响应ApplicationMaster的请求
- ApplicationMaster: AM
- 作业解析
- 向ResourceManager 请求资源
- 向NodeManager分发task
- Container 容器: 封装了CPU、Memory等资源的一个容器
- Client: 客户端提交作业
- ResourceManager: RM 资源管理器
- 访问 50070 8088端口失败 可能是防火墙的问题
- systemctl stop firewalld
- 如果关闭了防火墙还不行,就是对应组件没启动
-
mapreduce 既是分布式计算框架,也是一个编程模型
-
解决是数据分布式存储带来的分布式计算问题
-
把作业通过map阶段下发到每一个数据所在的节点
-
在reduce阶段汇总map阶段的结果
-
编程时候 要实现map接口和 reduce接口
-
python脚本来写map reduce代码时,是通过hadoop-streaming去实现的 最终还会编译成.jar文件执行
-
hadoop streaming 执行命令
-
STREAM_JAR_PATH="/root/bigdata/hadoop/share/hadoop/tools/lib/hadoop-streaming-2.9.1.jar" # hadoop streaming jar包所在位置 INPUT_FILE_PATH_1="/test.txt" #要进行词频统计的文档在hdfs中的路径 OUTPUT_PATH="/output" #MR作业后结果的存放路径 hadoop fs -rm -r -skipTrash $OUTPUT_PATH # 输出路径如果之前存在 先删掉否则会报错 hadoop jar $STREAM_JAR_PATH \ -input $INPUT_FILE_PATH_1 \ # 指定输入文件位置 -output $OUTPUT_PATH \ #指定输出结果位置 -mapper "python mapper.py" \ #指定mapper执行的程序 -reducer "python reducer.py" \ # 指定reduce阶段执行的程序 -file ./map.py \ # 通过-file 把python源文件分发到集群的每一台机器上 -file ./red.py
-
Mrjob 介绍
- ①写一个类继承MRJob
- ②重写 mapper 和 reducer方法
- ③在main方法中 调用MRJob.run()方法 开启整个流程
-
MrJob提交作业的方式
-
本地测试
-
python mrjob代码.py 要处理的数据所在位置
提交到Hadoop集群处理
python word_count.py -r hadoop hdfs:///要统计的文件在hadoop的位置 -o hdfs:///输出结果保存的位置
-
如果是在虚拟环境下运行mrjob 可能会报错
- python word_count.py -r hadoop hdfs:///test.txt -o hdfs:///output --python-bin /miniconda2/envs/py365/bin/python
-
如果mapreduce有多个步骤 可以通过steps方法指定
实现steps方法用于指定自定义的mapper,comnbiner和reducer方法
def steps(self):
return [
MRStep(mapper=self.mapper,
combiner=self.combiner,
reducer=self.reducer_sum),
MRStep(reducer=self.top_n_reducer)
]
-
Mapreduce 慢的原因
- 数据处理的时候 频繁的在磁盘和内存上进行数据IO 而不是始终在内存总处理 这些I/0 *** 作导致了速度比较慢
- buffer in memory:达到80%数据时,将数据锁在内存上,将这部分输出到磁盘上
-
MapReduce的架构演变
- 1.x的时候
- JobTracker master 计算集群管理
- TaskTracker slave 负责具体任务执行的
- Task Scheduler 作业调度
- 2.X Yarn出现 作业的调度都交给Yarn处理
- MapReduce只是进行具体任务执行
- 1.x的时候
单机程序计算流程
输入数据--->读取数据--->处理数据--->写入数据--->输出数据
Hadoop计算流程
input data:输入数据
InputFormat:对数据进行切分,格式化处理
map:将前面切分的数据做map处理(将数据进行分类,输出(k,v)键值对数据)
shuffle&sort:将相同的数据放在一起,并对数据进行排序处理
reduce:将map输出的数据进行hash计算,对每个map数据进行统计计算
OutputFormat:格式化输出数据
map:将数据进行处理
buffer in memory:达到80%数据时,将数据锁在内存上,将这部分输出到磁盘上
partitions:在磁盘上有很多"小的数据",将这些数据进行归并排序。
merge on disk:将所有的"小的数据"进行合并。
reduce:不同的reduce任务,会从map中对应的任务中copy数据
在reduce中同样要进行merge *** 作
3.5.2 MapReduce架构- MapReduce架构 1.X
- JobTracker:负责接收客户作业提交,负责任务到作业节点上运行,检查作业的状态
- TaskTracker:由JobTracker指派任务,定期向JobTracker汇报状态,在每一个工作节点上永远只会有一个TaskTracker
MapReduce2.X架构
- ResourceManager:负责资源的管理,负责提交任务到NodeManager所在的节点运行,检查节点的状态
- NodeManager:由ResourceManager指派任务,定期向ResourceManager汇报状态
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)