Hadoop概念
- 分布式的计算框架 可靠 可扩展
- 可靠 high-availability(HA)
- 可扩展 集群可以上万台,分布式计算 分布式存储
- Hadoop可以做什么
- 数据仓库
- 数据库 一般只保存数据的最新状态,极个别重要的值会保存历史版本
- 数据仓库 会保存所有的历史版本 只记录 很少更新删除
- PB级数据的存储 处理 分析 统计
- 日志分析
- 数据挖掘
- 商业智能(Business Intelligence,BI)
- 数据仓库
Hadoop组件
- Hadoop common
- 协同其他组件的通用工具
- HDFS
- 分布式文件系统
- 扩展性&容错性&海量数据存储
- 数据切分成制定大小的数据块进行存储
- 数据会有冗余(多副本) 保存 通过冗余实现容错
- MapReduce(离线计算)
- 分布式计算框架
- 移动计算到每个节点 MapReduce 移动计算
- 扩展性&容错性&海量数据离线处理
- 计算分成两个阶段
- Map 分
- Reduce 合
- YARN
- 资源管理 作业调度
- 多个框架会用到HDFS上的数据,先后问题,需要有框架来协调 YARN起到了协调的作用
- 另一种资源协调者 Mesos
- Yarn hadoop 2.0版本才加进来
Hadoop优势
- 高可靠
- 数据存储:数据块多副本
- 数据计算:某个节点崩溃,会自动重新调度作业计算
- 高扩展性
- 存储/计算资源不够时,可以横向的线性扩展机器
- 一个集群中可以包含数以千计的节点
- 集群可以使用廉价机器,成本低
- Hadoop生态系统成熟
HDFS
- 数据冗余 高可用 副本数量也可指定
- 数据拆分 配置文件中指定文件块大小 Block size 128MB
- A.log 分成3份 block-ID 001 002 003 副本数3 datanode1 datanode 5 datanode 7
- 架构
- NameNode
- 响应客户端请求
- 元数据存储
- DataNode管理
- DataNode
- 数据存储
- 和客户端之间io操作
- 定期向NameNode汇报自身情况
- NameNode
- NameNode高可用
- 3台 1台活着 另外两个备份 zookeeper管理(数据一致性、主节点选取)
yarn架构
- 作用:协调多个框架共同访问hdfs集群资源
- 架构:
- ResourceManager: RM资源管理器
- 响应客户端请求
- 管理NodeManger状态
- 响应ApplicaMaster的请求
- NodeManager: NM节点管理器
- 管理自身应用
- 启动container 运行task
- 响应ApplicationMaster的请求
- ApplicationMaster: AM
- 作业解析
- 向ResourceManager 请求资源
- 向NodeManager分发task
- Container容器:封装了CPU、Memory等资源的一个容器
- Client:客户端提交作业
- ResourceManager: RM资源管理器
- 流程
- Client提交作业请求
- ResourceManager 进程和NodeManager进程通信,根据集群资源,为用户程序分配第一个Container(容器),并将ApplicationMaster分发到这个容器上面
- 在启动的Container中创建ApplicationMaster
- ApplicationMaster启动后向ResourceManager注册进程 申请资源
- ApplicationMaster申请到资源后, 向对应的NodeManager申请启动Container将要执行的程序分发到NodeManager上
- Container启动后, 执行对应的任务
- Tast执行完毕之后,向ApplicationMaster返回结果
- ApplicationMaster向ResourceManager汇报任务结束请求kill进程
- 访问50070 8088端口失败 可能是防火墙问题
- systemctl stop firewall
MapReduce
- mapreduce 既是分布式计算框架,也是一个编程模型
- 解决 数据分布式存储带来的分布式计算问题
- 把作业通过map阶段下发到每一个数据所在的节点
- 在reduce阶段汇总map阶段的结果
- 编程时候 要实现map和reduce接口
- python脚步来写map reduce代码时,是通过hadoop-streaming去实现的 最终还是会编译成 .jar 文件执行
- hadoop streaming 执行命令
- STREAM_JAR_PATH="/opt/hadoop/share/hadoop/tools/lib/hadoop-streaming-2.10.0.jar"
- INPUT_FILE_PATH_1="/data.txt"
- OUTPUT_PATH="/output"
- hadoop fs -rm -r -skipTrash $OUTPUT_PATH
- hadoop jar $STREAM_JAR_PATH -input $INPUT_FILE_PATH_1 -output $OUTPUT_PATH -mapper “/usr/local/bin/python3 mapper.py” -reducer “/usr/local/bin/python3 reducer.py” -file ./mapper.py -file ./reducer.py
MRJob
- 写一个类继承MRJob
- 重写mapper和reducer方法
- 在main方法中调用MRJob.run () 方法开启整个过程
- MrJob提交作业的方式
- 本地测试
- python mrjob代码. py要处理的数据所在位置
- 提交到Hadoop集群处理
- python word_ count.py -r hadoop hdfs:///要统计的文件在hadoop的位置-0 hdfs:///输出结果保存的位置
- 本地测试
- 如果是在虚拟环境下运行mrjob可能会报错
- python word_count.py -r hadoop hdfs:///test.txt -0 hdfs:///output --python-bin/miniconda2/envs/py365/bin/python
- 如果mapreduce有多个步骤 可以通过steps方法指定 MRStep
- 数据处理的时候频繁的在磁盘和内存,上进行数据IO而不是始终在内存总处理这些I/0操作导致了速度比较慢
MapReduce架构
- 1.x的时候
- JobTracker master 计算集群管理
- TaskTracker slave 负责具体任务执行的
- Task Scheduler 作业调度
- 2.x Yarn出现作业的调度都交给Yarn处理
- MapReduce只是进行具体任务执行
Hadoop 发型版本选择
- 社区版
- XXXXXX.apache.org 下载
- 可以下载到最新的版本
- 如果涉及到的大数据框架比较多,版本选择不慎可能会有兼容性问题
- CDH版
- 通过统一CDH版本来避免兼容性问题
- hadoop-2.6.0-cdh-5.7.0 和Flume*-cdh5.7.0只要CDH版本一致就不会存在兼容性问题
- 缺点:新版本更新比社区版慢、部分内容没有开源