您现在的位置是:首页 >技术交流 >Hadoop相关网站首页技术交流

Hadoop相关

小布先生~噫嘘唏 2024-06-10 12:00:02
简介Hadoop相关

1. 大数据相关导论

1.1 什么是数据, 什么是大数据?

 一切皆数据.
 大数据指的是数据的体量比较大, 数据单位从小到大有: 字节(byte), kb, mb, gb, tb, pb, eb, zb, yb, bb, nb, db     # 注意: GB,TB,PB

 # 2020年全球数据总量: 44ZB
        # 原因分析(离线数据, 历史数据),  现状分析(实时数据, 流式数据), 预测性分型(根据数据预测未来的趋势)

1.2 什么是数据分析, 步骤是什么?

概述:

就是从海量的数据中提取出来有价值的信息, 实现数据的商业化, 价值化, 给企业的决策者提供数据支持 或者 可行性分析报告. 

 步骤:

1. 明确数据分析的目的和思路.
                # 5W2H分析法, PEST分析法
            2. 数据采集.
                # 自己编写代码, 采集工具(Sqoop, Flume)
            3. 数据预处理.
                # ETL开发工程师
            4. 数据分析.
                # Hadoop开发工程师, 数据开发(分析)工程师, Spark开发工程师, Flink开发工程师, 实时开发工程师.
            5. 数据展示.
                # 自己写UI(前端工程师, 后台工程师),   第三方软件(FineBI等)
            6. 撰写报告.

1.3 大数据解决了什么问题?

海量数据的存储(HDFS, HBase) 和 海量数据的计算(MapReduce, Tez, Spark, Flink)

1.4 大数据的特点是什么?

大多值快信.    # 简称: 5V

1.5 数据的种类有哪些?

         结构化数据:
            例如: MySQL中的表数据.
        半结构化数据:
            例如: html, json字符串
        非结构化数据:
            例如: 图片, 音频, 视频等.

1.6 大数据的应用场景是什么?

各行各业.

2. Zookeeper介绍 

 概述:    # Zookeeper的底层是Java实现的.

它是大数据分布式协调服务框架, 主要是帮助我们管理大数据集群的, 也被称之为: 动物园管理员.
        例如: 选举机制, 主备切换等.
        除此之外, 它还是1个小型的文件存储系统, 采用Znode节点的形式来存储数据, 每个节点存储数据的上限是 不超过1MB。

特点:

        全局数据一致性.        # 客户端无论连接哪台机器, 得到的结果都是一样的.
        可靠性.
        顺序性.                # 全局有序(A在B前) 和 偏序(B在A后)
        数据更新原子性.        # 过半原则.
        实时性.

框架(角色介绍):

        Leader:
        Follower:
        ObServer:

ZK集群启动和关闭:

        cd /export/server/zookeeper/bin/
        zkServer.sh start|stop|status

ZK的客户端连接:

        方式1: 命令方式.
            cd /export/server/zookeeper/bin
            ./zkCli.sh
            
        方式2: 图形化界面.
            双击 startZk.bat文件即可.

Znode节点划分:

永久节点, 临时节点, 永久有序节点, 临时有序节点.

Zookeeper的Shell操作:

 help                            # 查看Zookeeper的所有Shell命令.
        
        ls path [watch]                 # 查看Znode节点的信息(子节点等), 简单信息
        ls2 path [watch]                # 查看Znode节点的信息(子节点等), 详细信息
        
        create [-s] [-e] path data acl  # 创建Znode节点, -s:有序节点, -e: 临时节点, 什么都不写, 默认是永久节点. 
        delete path [version]           # 删除节点, 前提是: 该节点不能有子节点.
        rmr path                        # 删除节点, 无论是否有子节点.  remove -r 
        get path [watch]                # 查看节点的内容(信息)
        
        set path data [version]         # 修改节点的存储内容信息.
        
        history                         # 查看历史命令
        redo cmdno                      # 根据命令编号, 重新执行该命令.
            
        quit                            # 退出Zookeeper客户端.  

3. Hadoop相关

概述:

广义上:
            指的是Hadoop生态圈, 即: 和Hadoop相关的所有周边产品(技术), 包括但不局限于: 存储, 采集, 分析, 计算, 挖掘, 可视化等...


        狭义上:
            指的就是Apache提供的一款软件, 由 HDFS(存), MapReduce(计算), Yarn(资源调度)三部分组成.
            HDFS: Hadoop Distributed FileSystem, hadoop的分布式存储文件系统, 实现海量数据存储的.
            MapReduce: 分布式计算框架, 采用分而治之思想实现. 
            Yarn: 统一资源管理和任务调度器, 主要是用于任务调度 及 分配资源的.

Hadoop集群搭建:

 如何下载官方的原版Hadoop(编译前):
            https://archive.apache.org/dist/hadoop/common/hadoop-3.3.0/
            # 扩展, 我们常用的Apache的软件都在这里: https://archive.apache.org/dist/
            
        为什么要手动为官方提供的Hadoop进行编译, 什么是编译?
            编译: # 因为Hadoop底层是用Java写的, 所以这个编译指的是Java语言的编译.
                源代码文件(*.java) =>  字节码文件(*.class) => 打成 *.jar包       # 把源码最终打成jar包,可以直接运行的那种.
            为什么要手动为官方提供的Hadoop进行编译?
                因为Hadoop官方提供的版本是兼容"大环境"的, 但是不一定兼容本地环境, 例如: Snappy协议, C端口等默认都不支持.
            怎么编译?
                # 详见文档  Hadoop3.3.0Linux编译安装.md, 但是不推荐你做, 99.99%会失败.
                
        Hadoop集群搭建规划, 即: 3台虚拟机上, 最终装什么:
                    #  HDFS集群                                   Yarn集群
            node1:  namenode, datanode                  ResourceManager, nodemanager
            node2:  SecondaryNameNode, datanode         nodemanager
            node3:  datanode                            nodemanager
            
        具体的搭建动作:
            1. 上传, 解压.  
                上传到: /export/software
                解压到: /export/server
            2. 修改配置文件.      # 6个.
                # 配置文件路径: /export/server/hadoop-3.3.0/etc/hadoop
                hadoop-env.sh     # Hadoop的基础服务
                
                core-site.xml     # 核心配置, 适用于: HDFS, Yarn, MapReduce
                hdfs-site.xml     # hdfs的配置
                mapred-site.xml   # mapreduce的配置
                yarn-site.xml     # yarn的配置
                
                works             # 配置从节点信息的.
            3. 配置path环境变量.  # 记得 source刷新.
            4. 分发给node2, node3 # 记得去node2, node3也配置path并刷新.
            5. 初始化hadoop集群.  # 注意: 只能初始化一次, 如果重复做, 会出现元数据丢失的问题, 相当于: 删除了图书馆所有图书的位置信息.
                hadoop namenode -format         # 只在node1上做一次就行了. 

启动:

        单个启动:
                HDFS集群:
                    #hadoop2.x版本命令
                    hadoop-daemon.sh start|stop  namenode|datanode|secondarynamenode

                    #hadoop3.x版本命令
                    hdfs --daemon start|stop namenode|datanode|secondarynamenode
                Yarn集群:
                    #hadoop2.x版本命令
                    yarn-daemon.sh start|stop resourcemanager|nodemanager

                    #hadoop3.x版本命令
                    yarn --daemon start|stop resourcemanager|nodemanager
            逐集群启动:
                start-dfs.sh
                start-yarn.sh
            一键启动:       # 学习中, 用的最多.
                start-all.sh
                stop-all.sh

关于HDFS和Yarn的 WebUI地址:

  HDFS: node1:9870        # 注意: hadoop3.X的端口是9870, Hadoop2.X及其以前是 50070
            Yarn: node1:8088        # 记录执行过的计算任务信息的, 只记录: 本次Hadoop集群启动后的信息。

Hadoop集群初体验:

HDFS(大数据分布式存储框架):   # 体验一下上传文件.
                hadoop fs -mkdir -p hdfs的目录地址       # 在HDFS上创建目录
            
                hadoop fs -put Linux的文件路径 hdfs的文件路径(必须是绝对路径)        # hadoop fs 更通用, 能操作任意的文件系统.
                hdfs dfs -put Linux的文件路径 hdfs的文件路径(必须是绝对路径)         # hdfs dfs 主要是操作 HDFS文件系统的.
                
                hadoop fs -cat HDFS文件路径         # 查看文件内容.
                
            Yarn(统一资源管理和任务调度器), MapReduce(大数据分布式计算框架):
                # 用MR来实现计算圆周率, 该MR计算任务交由Yarn做调度, 底层用的是: 蒙特卡洛算法.
                # MR是代码级别的, 即: 通过Python, Java, Scala都可以编写MR任务, 但是这些语言我们一个都没学呢, 怎么办呢? 
                # Hadoop自带有1个测试包, 供初学者进行测试, 在 /export/server/hadoop-3.3.0/share/hadoop/mapreduce
                
                # 2表示线程数, 1000表示投点数(越多, 数字越精准), 这个是MR计算圆周率, 底层用的是 蒙特卡洛算法.
                hadoop jar hadoop-mapreduce-examples-3.3.0.jar pi 2 1000        

MR程序的历史服务:

# 修改 mapred-site.xml, 如果是word拷贝要修改, 如果是typora拷贝不用修改(已经改过了)
            # 开启历史服务
            mr-jobhistory-daemon.sh start historyserver     # 旧命令
            mapred --daemon start historyserver             # 新命令
            
            # WebUI地址
            node1:19888

垃圾桶机制:

            # 目前我们从HDFS上删除文件, 是直接删除的, 不走垃圾桶(类似于windows回收站), 这样做比较危险, 我们可以配置下垃圾桶.
            # 实现删除的时候, 自动放到垃圾桶中, 并设置默认保存7天.
            # 修改 core-site.xml文件, 然后分发给 node2, node3
            # 再次删除则会默认进垃圾桶, 如果要跳过垃圾桶, 直接删除, 命令如下:
            hadoop fs -rm -skipTrash /hg/aa/绕口令.txt

4. HDFS相关

HDFS的shell操作:

        格式:
            hadoop fs 命令名 参数1 参数2       # 更通用, 适用于不同的文件系统.
            hdfs dfs 命令名 参数1 参数2        # 主要是针对HDFS来讲的.
        常用的命令:
            ls      # 查看目录信息, 只查看本级.
            lsr     # 推荐使用 ls -R, 同上, 只不过包括目录的子级.
            mkdir   # 创建目录
            touch   # 创建文件
            put     # 上传文件
            get     # 下载文件
            getmerge    # 合并下载
            mv      # 剪切, 适合 HDFS 和 HDFS文件的操作.
            cp      # 拷贝, 适合 HDFS 和 HDFS文件的操作.
            cat     # 查看文件内容.
            rmr     # -rm -r, 删除
            chown   # 改变拥有者, owner
            chgrp   # 改变属组, group
            chmod   # 更改权限
            copyToLocal     # 从HDFS拷贝到本地, 适用于代码级操作, 效果等价于: get
            copyFromLocal   # 从本地拷贝到HDFS, 适用于代码级操作, 类似于put
            movetoLocal     # 剪切, 暂不支持这个命令, 还在研发中.
            moveFromLocal   # 剪切
            setrep          # 设置副本数
            help            # 查看帮助
            appendToFile    # 是HDFS众多命令中 唯一一个可以修改HDFS文件内容的指令, 是把某个文件中的数据 追加到 HDFS文件中.

HDFS相关原理

        1. namenode的作用.     # 副本机制, 心跳机制, 负载均衡.
        2. datanode的作用.
        3. namenode是如何管理元数据的.
        4. SecondaryNameNode是如何辅助namenode管理元数据的.
        5. HDFS的写数据的流程.     # 10步
        6. HDFS的读数据的流程.     # 5步

HDFS的适用场景:

        1. 一次写入, 多次读取.
        2. 大量的大文件.
        3. 对数据的时效性要求相对较低的.

HDFS的不适用场景:

        1. 频繁修改的.
        2. 大量的小文件.
        3. 对数据的时效性要求相对较高的.

归档(archive):

 # 问题: 如果HDFS需要存储大量的小文件, 此时就会有大量的元数据信息需要维护,这样做非常消耗namenode资源, 如何解决呢?
        # 答案: 采用 归档 解决.
        
        # 归档解释: 相当于把多个小文件放到一个归档包中, 类似于压缩包, 但是只有压, 没有缩.  多个小文件 => 1个归档包 *.har
        
        # 归档相关的Shell命令
        # 1. 如何创建归档包
        格式:
            hadoop archive -archiveName 归档包名.har -p 被归档的目录 归档包存档的路径(路径存不存在均可)
        示例:
            hadoop archive -archiveName test.har -p /hg/aa/ /outputdir
            
        # 2. 如何查看归档包中的内容.
            hadoop fs -ls /outputdir/test.har           # 这种方式只能看归档后的内容, 看不到归档前的文件信息.   hdfs://node1:8020
            hadoop fs -ls har:/outputdir/test.har       # 查看具体的被归档的文件信息, har表示hadoop的压缩包     har://hdfs-node1:8020
            
            hadoop fs -cat har:/outputdir/test.har/1.txt
            
        # 3. 如何从归档包中提取被归档的文件.
             hadoop fs -cp har:/outputdir/test.har/1.txt /hg/aa     # 提取1个文件
             hadoop fs -cp har:/outputdir/test.har/* /hg/aa         # 提取多个文件
            
        # 4. 如何删除归档包.
            hadoop fs -rmr /outputdir/test.har
        
        # 原理: 底层是MR程序来执行 归档操作的.

如何查看元数据:

 hdfs oev -i edits_0000000000000000081-0000000000000000089 -o edits.xml     # input(输入)   output(输出)
 hdfs oiv -i fsimage_0000000000000000115 -p XML -o fsimage.xml

namenode是如何管理元数据的:

# Edits文件(编辑日志文件), FsImage文件(镜像日志文件)

SecondaryNameNode是如何辅助namenode管理元数据的:

# 最要是对 Edits文件 和 FSImage文件做合并.

安全模式:

         解释:
            1. 安全模式下只能读, 不能写(增改删都不行)
            2. 启动Hadoop集群的时候,会强制进入到安全模式,先进行自检, 没有问题后, 会自动退出安全模式.
            3. 当集群出问题的时候(例如: 只有3台机器, 但是却需要5个副本), 也会强制进入到安全模式.
               # 解决方案: 删除有问题的Block块, 然后手动退出安全模式.
            
        涉及到的命令:
            hdfs dfsadmin -safemode enter       # 进入安全模式
            hdfs dfsadmin -safemode leave       # 离开安全模式
            hdfs dfsadmin -safemode get         # 查看安全模式状态

5. MR相关  

概述:它体现的是分而治之思想, 即: 把大问题拆分成若干个小问题, 小问题解决了, 则对应的大问题也就解决了. 

设计理念:

        1. 如何处理大规模数据: 分而治之.
        2. 提供抽象模型: Map(负责 分) 和 Reduce(负责 合)
        3. 统一架构, 隐藏系统层操作.

6. Yarn相关

 概述:Yarn属于Hadoop集群的1个组件, 是通用的 资源管理 和 任务调度平台, 主要是用于 分配资源 以及 (计算)任务的调度的.

        # 细节: Yarn是用来做(计算)任务调度的, 至于是什么计算任务, Yarn根本不关心, 只要能符合Yarn规范即可.
        # 即: MR任务, Spark任务, Flink任务等都可以通过 Yarn来调度. 

1. 什么是资源?
            CPU, 内存, 磁盘等都是资源.
        2. ResourceManager(主节点)作用是什么?
            # 管理整个Yarn集群的资源, 对外提供统一的访问接口, 负责任务的接收.
        3. nodemanager(从节点)作用是什么?
            # 管理本机的资源, 负责执行Yarn分配过来的 具体的计算任务.
        4. 怎么理解 通用?
            # Yarn是用来做(计算)任务调度的, 至于是什么计算任务, Yarn根本不关心, 只要能符合Yarn规范即可.
            # 即: MR任务, Spark任务, Flink任务等都可以通过 Yarn来调度. 
        5. 怎么理解 任务调度(平台)? 
            就是当系统繁忙的时候, 如果有多个计算任务同时请求执行, 谁先执行, 谁后执行.
            # 权重, 优先级, 调度策略(算法)的问题. 

架构:

        物理级别: ResourceManager(主节点), nodemanager(从节点)
        代码级别: AppMaster(进程), 各种计算任务(例如: MR任务, Spark任务, Flink任务)

调度策略:

        先进先出(FIFO):     # 单车道.
            # 已经舍弃了, 现在基本不用.
            
        容量调度(Capacity): # 多车道.
            最早是雅虎搞出来的, 我们用的 Apache Hadoop(社区版) 用的就是它. 
            
        公平调度(Fair):     # 潮汐车道.
            最早是FaceBook(Meta)搞出来的, 商业版Hadoop(Cloudera Hadoop, CDH) 用的就是它.
    Yarn执行计算任务(例如: MR程序)的原理.
        # 8步

7. 数据仓库:

1. 概述:

背景:

            互联网时代, 各个公司都积累了大量的(业务)数据, 这些数据都是公司运行这么多年积累下来的真实的数据, 
            从这些数据中提取出有效的价值信息, 可以帮助企业更好的做决策和发展, 那么如何从这些数据中分析出有效
            的价值信息呢? 于是, 就有了 数据仓库的 概念.

概述:

            指的是存储数据的仓库, 既不会生产数据, 也不消耗数据, 仅仅是存储数据, 以便将来做 数据分析用.
            数据仓库也叫Data WareHouse, 简称: DW, DWH, 数仓是面向 分析 而生的. 
 

实际开发中, 数据的作用有两个:

            1. 操作性记录的保存.        # 业务数据, 例如: 下单.
            2. 分析性决策的支持.        # 分析数据

总结: 基于业务数据开展数据分析, 基于分析结果给决策提供数据支持, 可以在业务数据库中做分析, 但是没有必要.

2. 特点

        面向主题. 
        集成性.
        非易失性.       # 数仓主要分析的是离线数据, 这些数据一般是 不会变化的.
        时变性.         # 随着时间的推移, 业务, 数据格式等都有可能发生变化, 我们的数仓(数据平台)也要相应的做一些调整

3. 数据库 和 数据仓库的区别

数据库:   # OLTP, Online Transaction Processing, 联机事务处理
            主要是面向业务的, 存储业务系统的各种数据, 且大多数操作都是增, 删, 改, 查.
            对数据的时效性, 安全性, 完整性, 并发数等都有较高的要求, 且处理的数据相对 较少.
            且处理的一般都是 在线(实时)数据.
            # 面向业务, 增删改查, 时效性要求高, 处理数据量低, 实时数据. 
            
 数据仓库:   # OLAP, Online Analytical Processing, 联机分析处理.
            主要是面向主题的, 存储的是各种用于分析的数据源, 且大多数操作都是 查询.
            对数据的时效性要求相对不高, 主要关注 数据量. 
            且处理的一般都是 离线(历史)数据.
            # 面向主题, 查询, 时效性要求相对较低, 处理数据量相对较大, 离线数据.

结语:小编能力有限欢迎大家多多指教

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。