大数据lambda架构之Hadoop笔记

大数据lambda架构之Hadoop笔记,第1张

Hadoop 概念
  • 分布式的计算框架 可靠 可扩展

  • 可扩展 集群可以上万台,分布式计算 分布式存储

  • 可靠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
HDFS
  • 数据冗余 高可用 副本数量也可以指定 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高可用
    • 3台 1台活着 另外两个备份 zookeeper管理
  • hadoop.apache.org
yarn 架构
  • 作用: 协调多个框架共同访问hdfs集群资源
  • 架构:
    • ResourceManager: RM 资源管理器
      • 响应客户端请求
      • 管理NodeManager状态
      • 响应ApplicationMaster的请求
    • NodeManager: NM 节点管理器
      • 管理自身资源
      • 启动container 运行task
      • 响应ApplicationMaster的请求
    • ApplicationMaster: AM
      • 作业解析
      • 向ResourceManager 请求资源
      • 向NodeManager分发task
    • Container 容器: 封装了CPU、Memory等资源的一个容器
    • Client: 客户端提交作业
  • 访问 50070 8088端口失败 可能是防火墙的问题
    • systemctl stop firewalld
    • 如果关闭了防火墙还不行,就是对应组件没启动

MapReduce
  • 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只是进行具体任务执行

3.5.1MapReduce原理详解

单机程序计算流程

输入数据--->读取数据--->处理数据--->写入数据--->输出数据

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汇报状态

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/715538.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-25
下一篇 2022-04-25

发表评论

登录后才能评论

评论列表(0条)

保存