Hadoop-入门部门知识点总结

嚴華  金牌会员 | 2025-2-19 21:34:24 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 910|帖子 910|积分 2730

目录
数据分析分类
概念
分布式与集群概念
Hadoop组件
HDFS
MapReduce
YARN
集群的启动
Hadoop特性
Hadoop集群概述
HDFS
HDFS设计目标
HDFS的分布式特性
HDFS的存储位置
HDFS的Shell操作
根本操作
文件权限管理
系统管理与监控
HDFS集群角色与职责
NameNode:主角色
DataNode:从角色
SecondaryNode:主角色辅助角色
MapReduce
核心头脑
特点
长处
范围性
架构
作业提交流程
阶段组成
调用实现
实现词频统计
 map实行过程
Reduce实行过程 
shuffle机制
YARN
概述
架构
三大组件
ResourceManager(RM)
NodeManager (NM)
ApplicationMaster(AM)
核心交互流程
团体概述
资源调度器Scheduler
调度器策略
先进先出调度器(FIFO Scheduler)
容量调度器(Capacity Scheduler)
公平调度器(Fair Scheduler)
Hive
概述
内容
题目
利益
关系
组件与实行过程
用户接口(User Interfaces)
元数据存储(Metastore)
驱动(Driver)
实行引擎(Execution Engines)
底层依靠(Hadoop Ecosystem)
使用客户端
概述
HiveServer2服务介绍
基本操作
ZooKeeper
概念
主要功能
配置管理
分布式锁
集群管理
启动zookeeper和客户端
基本操作


原文链接:https://www.datazzh.top/archives/1538/2025/01/25/
个人学习笔记,仅供参考

 
数据分析分类

数据分析在企业日常谋分别析中主要有三个方向


  • 现状分析(分析当下的数据):现阶段的团体情况,各个部门的结构占比、发展变动‘
  • 原因分析(分析过去的数据):某一现状为什么发生,确定原因,做出调整优化;
  • 预测分析(结合数据预测将来):结合已有数据预测将来发展趋势;
离线分析(原因分析):面向过去/历史,分析已有的数据。在时间维度明显成批次性变化。一周一分析(T+7),一天一分析(T+1),所以也叫做批处理
实时分析(现状分析):面向当下,分析实时产生的数据。所谓的实时是指从数据产生到数据分析到数据应用的时间间隔很短,可细分秒级、毫秒级。
预测分析(机器学习):基于历史数据和当下产生的实时数据预测将来发生的事情;侧重于数学算法的运用,如分类、聚类、关联、预测。
概念

分布式与集群概念

分布式:多台机器;每台机器上部署不同组件
分布式由多个节点组成,节点之间互通,共同共同对外提供服务




集群:多台机器;每台机器上部署相同组件
集群是指在几个服务器上部署相同的应用程序来分担客户端的请求
 



 
Hadoop组件

Hadoop是一个由Apache基金会开发的分布式系统根本架构,旨在处理大规模数据的存储和盘算。它的核心组件包括HDFSMapReduceYARN,这些组件共同支持起Hadoop的高效性、可靠性和可扩展性
HDFS

HDFS(分布式文件存储系统):是Hadoop生态系统中的数据存储管理根本。HDFS通过流式数据访问,提供高吞吐量的数据访问功能,适合处理大型数据集。数据以块的形式分布在集群的不同物理机器上,提供了一次写入多次读取的机制。
MapReduce

MapReduce(分布式盘算框架):是一种分布式盘算模子,用于进行大数据量的盘算。它将盘算抽象成map和reduce两部门,其中Map对数据集上的独立元素进行操作,生成键-值对形式的中央结果。Reduce则对中央结果中相同“键”的所有“值”进行规约,以得到最闭幕果。MapReduce非常适合在大量盘算机组成的分布式并行环境里进行数据处理。
YARN

YARN(集群资源管理和任务调度框架):是Hadoop的资源管理和任务调度框架。它将资源管理和作业调度/监视的功能拆分为单独的守护进程,包括ResourceManager和NodeManager。ResourceManager负责整个集群的资源管理和任务调度,而NodeManager负责管理和监控每个节点上的盘算资源。YARN通过资源的同一管理和调度,进步了集群的使用率和数据共享能力。
集群的启动

1.启动HDFS服务
  1. start-dfs.sh
复制代码
2.查询Jps、NameNode、DataNode与SecondaryNameNode共四个进程
  1. jps 
复制代码
3.启动yarn服务、查询ResourceManager与NodeManager两个进程
  1. start-yarn.sh 
  2. jps
复制代码
4.集群web网页(hadoop-2.6.5)
   主机IP地点:50070端口
  主机IP地点:8088端口
   


5.集群关闭
  1. stop-all.sh
复制代码
 
Hadoop特性


  • 扩容能力:Hadoop是在可用的盘算机集群间分配数据并完成盘算任务的,这些集群可方便机动的方式扩展到数以千计的节点。
  • 本钱低:Hadoop集群答应通过部署平常便宜的机器组成集群来处理大数据,以至于本钱很低看重的是集群团体能力。
  • 服从高:通过并发数据,Hadoop可以在节点之间动态并行的移动数据,使得速度非常快。
  • 可靠性:能自动维护数据的多份复制,并且在任务失败后能自动地重新部署(redeploy)盘算任务。
Hadoop集群概述



  • Hadoop集群是由HDFS集群YARN集群组成
  • 两个集群逻辑上分离,通常物理上在一起
  • 两个集群是尺度的主从架构
  • MapReduce是盘算架构、代码层面的组件,无集群一说
HDFS集群内容:

  • NameNode(名称节点):主角色
  • DataNode(数据节点):从角色
  • SecondaryNode(辅助节点):主角色辅助角色
YARN集群内容:

  • ResourceManager(资源管理器):主角色
  • NodeManager(节点管理器):从角色

 
HDFS

HDFS设计目标

故障检测和自动快速规复:


  • 硬件故障(Hardware Failure)是常态, HDFS可能有成百上千的服务器组成,每一个组件都有可能出现故障。因此故障检测和自动快速规复是HDFS的核心架构目标。
高吞吐量:


  • HDFS上的应用主要是以流式读取数据(Streaming Data Access)。HDFS被设计成用于批处理,而不是用户交互式的。相较于数据访问的反应时间,更注重数据访问的高吞吐量
支持大文件:


  • 典范的HDFS文件大小是GB到TB的级别。所以,HDFS被调整成支持大文件(Large Data Sets)。它应该提供很高的聚合数据带宽,一个集群中支持数百个节点,一个集群中还应该支持千万级别的文件。
无需修改:


  • 大部门HDFS应用对文件要求的是一次写入,多次读取(write-one-read-many)访问模子。一个文件一旦创建、写入、关闭之后就不需要修改了。这一假设简化了数据同等性题目,使高吞吐量的数据访问成为可能。
移动盘算代价:


  • 移动盘算的代价比之移动数据的代价低。一个应用请求的盘算,离它操作的数据越近就越高效。将盘算移动到数据附近,比之将数据移动到应用所在显然更好。
平台移植:


  • HDFS被设计为可从一个平台轻松移植到另一个平台。这有助于将HDFS广泛用作大量应用程序的首选平台。
 

 
HDFS的分布式特性

数据跨节点存储:


  • HDFS的数据被分割成多个块(Block,默认128MB或256MB),并分散存储在不同机器的磁盘上。
  • 单机文件系统只能操作单机上的文件,而HDFS需要协调多个节点(DataNode)的读写操作。
  • 单机读写无法感知数据分布,可能导致数据不同等或丢失。
元数据会合管理:


  • HDFS通过NameNode管理文件系统的元数据(如文件路径、块位置、副本信息等)。
  • 本地命令(如cp、mv)无法与NameNode交互,无法获取文件的分布式元数据。
  • HDFS Shell命令会通过NameNode的RPC接口完成元数据操作(如hdfs dfs -ls)。


 
HDFS的存储位置

每一个集群节点的数据存储地点可以在安装Hadoop时配置的hadoop-2.6.5/etc/hadoop/hdfs-site.xml中查询
  1. <property>
  2.     <name>dfs.datanode.data.dir</name>
  3.     <value>file:/opt/software/hadoop-2.6.5/hdfs/data</value>
  4. </property>
复制代码
HDFS的Shell操作

   hadoop fs 和 hdfs dfs 可以替换使用
  根本操作

1..查看文件目录
  1. hdfs dfs -ls /
  2. hdfs dfs -ls -R / # 递归列出子目录
复制代码
2.查看文件内容
  1. hdfs dfs -cat <HDFS文件路径>
  2. hdfs dfs -tail <文件> # 查看文件末尾内容
复制代码
3.创建目录
  1. hdfs dfs -mkdir <目录路径>
  2. hdfs dfs -mkdir -p <多层目录路径>
  3. hadoop fs -mkdir <目录路径>
复制代码
4.上传文件到HDFS
  1. hdfs dfs -put <本地文件> <HDFS目标路径>
  2. hdfs dfs -copyFromLocal <本地文件> <HDFS路径> # 功能同put,生产环境更习惯用put
  3. hdfs dfs -moveFromLocal <本地文件> <HDFS路径> # 从本地剪切粘贴到HDFS
  4. hdfs dfs -appendToFile <本地文件> <HDFS路径> # 追加到文件末尾
  5. hadoop fs [-put][-copyFromLocal][-moveFromLocal][-appendToFile] <本地文件> <HDFS路径>
复制代码
5.下载文件到本地
  1. hadoop fs -copyToLocal <HDFS目标路径> <本地文件>
  2. hadoop fs -get <HDFS目标路径> <本地文件>
复制代码
6.删除文件和文件夹
  1. hadoop fs -rm -r <路径>
  2. hdfs dfs -rm <路径>
  3. hdfs dfs -rm -skipTrash <文件> # 直接删除(绕过回收站)
复制代码
7.移动/重命名文件
  1. hdfs dfs -mv <源路径> <目标路径>
复制代码
8.复制文件
  1. hdfs dfs -cp <源路径> <目标路径>
复制代码
文件权限管理

1.修改文件/目录权限
  1. hdfs dfs -chmod <权限模式> <路径> # 示例:-chmod 755 /data
  2. hdfs dfs -chmod -R <权限模式> <目录> # 递归修改
复制代码
2.修改文件所有者
  1. hdfs dfs -chown <用户:组> <路径> # 示例:-chown hadoop:users /data
  2. hdfs dfs -chown -R <用户:组> <目录> # 递归修改
复制代码
3.修改文件所属组
  1. hdfs dfs -chgrp <组名> <路径>
复制代码
系统管理与监控

1.查看HDFS磁盘使用情况
  1. hdfs dfs -df -h # 显示可读的磁盘空间统计
复制代码
2.查看文件/目录大小
  1. hdfs dfs -du -h <路径> # 显示文件大小(-h为易读格式)
  2. hdfs dfs -du -s -h <目录> # 汇总目录总大小
复制代码
HDFS集群角色与职责



 
NameNode:主角色



  • NameNode是Hadoop分布式文件系统的核心,架构中的主角色
  • NameNode维护和管理文件系统元数据,包括名称空间目录树结构、文件和块的位置信息、访问权限等信息。
  • 是访问HDFS的唯一入口
  • NameNode内部通过内存磁盘文件两种方式管理元数据。
  • 其中磁盘上的元数据文件包括Fsimage内存元数据镜像文件和editslog(Journal)编辑日志。
职责


  • NameNode仅存储HDFS的元数据:文件系统中所有文件的目录树,并跟踪整个集群中的文件,不存储实际数据
  • NameNode知道HDFS中任何给定文件的块列表及其位置。使用此信息NameNode知道如何从块中构建文件。
  • NameNode不持久化存储每个文件中各个块所在的datanode的位置信息,这些信息会在系统启动时从DataNode重建
  • NameNode是Hadoop集群中的单点故障
  • NameNode所在机器通常会配置有大量内存(RAM)
DataNode:从角色



  • DataNode是Hadoop HDFS中的从角色,负责具体的数据块存储
  • DataNode的数目决定了HDFS集群的团体数据存储能力。通过和NameNode共同维护着数据块。
职责


  • DataNode负责终极数据块block的存储。是集群的从角色,也称为Slave。
  • DataNode启动时,会将自己注册到NameNode并汇报自己负责持有的块列表。
  • 当某个DataNode关闭时,不会影响数据的可用性。 NameNode将安排由其他DataNode管理的块进行副本复制。
  • DataNode所在机器通常配置有大量的硬盘空间,因为实际数据存储在DataNode中。
SecondaryNode:主角色辅助角色



  • 充当NameNode的辅助节点,但不能替换NameNode。
  • 主要是帮助主角色进行元数据文件的归并动作
MapReduce

核心头脑

1.  分而治之(Divide and Conquer)


  • 将大数据集拆分为多个小数据集(Input Splits),彼此之间几乎没有依靠关系,分布式处理。
  • Map阶段:并行处理每个分片,生成中央结果(键值对)。
  • Reduce阶段:汇总中央结果,生成终极输出。
2. 移动盘算而非数据


  • 将盘算逻辑(Map/Reduce代码)分发到数据所在的节点,淘汰网络传输开销。
3. 面向批处理


  • 适合离线、大规模数据的高吞吐量处理,不适合低延迟场景。
4. 键值对处理


  • MapReduce处理的数据范例是<key,value>键值对
特点

长处

高容错性


  • Hiadoop集群是分布式搭建和部署得,任何单一机器节点宕机了,它可以把上面的盘算任务转移到另一个节点上运行,不影响整个作业任务得完成,过程完全是由Hadoop内部完成的。
适合海量数据的离线处理


  • 可以处理GB、TB和PB级别得数据量
范围性

实时盘算性能差


  • MapReduce主要应用于离线作业,无法作到秒级大概是亚秒级得数据相应
不能进行流式盘算


  • 流式盘算特点是数据是源源不断得盘算,并且数据是动态的;而MapReduce作为一个离线盘算框架,主要是针对静态数据集得,数据是不能动态变化得。
架构



  • ResourceManager (RM)

    • 全局资源管理,负责集群资源分配。

  • NodeManager (NM)

    • 单个节点上的资源管理和任务实行。

  • ApplicationMaster (AM)

    • 每个作业的协调者,负责与RM协商资源,监控任务实行。

  • Container

    • 资源抽象单位(CPU、内存等)。

作业提交流程



  • Client(客户)提交作业到RM → RM分配Container启动AM → AM向RM申请资源 → NM启动Task(任务)。
阶段组成



  • 一个MapReduce编程模子中,只能包罗一个Map阶段和一个Reduce阶段,大概只有Map阶段
  • 不能出现多个Map阶段或Reduce阶段
  • 当业务逻辑复杂,就只能多个MapReduce程序串行运行


 
调用实现

MapReduce提供的盘算服务jar包生存在 Hadoop安装路径下的 /share/hadoop/mapreduce


 
实现词频统计



  • shuffle阶段核心:颠末MR程序内部自带默认的排序分组等功能,把key相同的单词会作为一组数据构成新的<key,value>对
  • reduce阶段核心:处理shuffle完的一组数据,进行算数运算或其他操作(此处为累加求和)

  1. #创建文件夹
  2. hdfs dfs -mkdir /wordcount
  3. hdfs dfs -mkdir /wordcount/input
  4. hdfs dfs -mkdir /wordcount/output
  5. #上传文件
  6. hdfs dfs -put /demo/hello.txt /wordcount/input
  7. #提交计算任务
  8. cd /share/hadoop/mapreduce
  9. hadoop jar hadoop-mapreduce-examples-2.6.5.jar wordcount /wordcount/input /wordcount/output
  10. #查询计算结果
  11. hdfs dfs -cat /wordcount/output/part-r-00000
复制代码
   输出目录必须不存在
   Web端可查询进程任务

 map实行过程

 

 
第一阶段


  • 把输入目录下的文件,按照一定尺度,逐个进行逻辑切片,形成切片规划。
  • 默认Split size = Block size(块大小 128M),每一个切片由MapTask处理
第二阶段


  • 对切片中的数据,按照一定的规则,读取解析返回键值对
  • 默认为按行读取数据。Key为每一行的起始位置偏移量,Value为文本内容
第三阶段


  • 调用Mapper类中的map方法处理数据
  • 每读取解析出来一个键值对,调用一次map方法
第四阶段


  • 按照一定规则,对Map的输出键值对进行分区partition。
  • 默认不分区,因为只有一个reducetask。分区数目就是reducetask的数目
第五阶段


  • Map输出数据写入内存缓存区,到达比例溢出到磁盘上
  • 溢出spill的时候根据key,进行排序sort。
  • 默认根据key字典序排序
第六阶段


  • 对所有的溢出文件进行终极的merge归并,成为一个文件。
Reduce实行过程 



第一阶段


  • ReduceTask自动从MapTask,复制拉取属于需要自己处理的数据
第二阶段


  • 把拉取的数据,全部进行归并merge,即把分散的数据归并成为一个大的数据。再对归并后的数据排序
第三阶段


  • 对排序后的键值对,调用Reduce方法。键相称的键值对调用一次reduce方法。末了把这些输出的键值对写入到HDFS文件中。
shuffle机制

MR程序的核心与精华。
概念


  • Shuffle的本意是洗牌、混洗的意思,把一组有规则的数据尽量打乱成无规则的数据。
  • 而在MapReduce中,Shuffle更像是洗牌的逆过程,指的是将map端的无规则输出按指定的规则“打乱”成具有一定规则的数据,以便reduce端接收处理
  • 一般把从Map产生输出开始到Reduce取得数据作为输入之前的过程称作shuffle。
机制弊端


  • 相较于Spark,Flink盘算引擎慢
  • 频繁涉及到数据在内存、磁盘之间的多次来回
 
YARN

概述



  • Apache Hadoop YARN(Yet Another Resource Negotiator,另一种资源协调者)是一种新的Hadoop资源管理器
  • YARN是一个通用资源管理系统和调度平台,可为上层应用提供同一的资源管理和调度。
  • 它的引入为集群在使用率、资源同一管理和数据共享等方面带来了巨大利益。



  • 资源管理系统:集群的硬件资源,和程序运行相关,好比内存、CPU
  • 调度平台:多个程序同时申请盘算资源如何分配,调度的规则(算法)。
  • 通用:不仅仅支持MapReduce程序,理论上支持各种盘算程序。YARN不关心你干什么,只关心你要资源,在有的情况下给你,用完之后还我。
架构



  • ResourceManager
  • NodeManager
  • ApplicationMaster
  • Client客户端
  • Container容器(资源的抽象、隔离)
三大组件

ResourceManager(RM)



  • YARN集群中的主角色决定系统中所有应用程序之间资源分配的终极权限,即终极仲裁者。
  • 接收用户的作业提交,并通过MM分配、管理各个机器上的盘算资源
NodeManager (NM)



  • YARN中的从角色,一台机器上一个,负责管理本机器上的盘算资源。
  • 根据RM命令,启动Container容器、监视容器的资源使用情况。并且向RM主角色汇报资源使用情况。
ApplicationMaster(AM)



  • 用户提交的每个应用程序均包罗一个AM。
  • 应用程序内的“老大”,负责程序内部各阶段的资源申请,监督程序的实行情况。
核心交互流程



  • MR作业提交:Client-->RM
  • 资源的申请:MRAppMaster-->RM
  • MR作业状态汇报:Container(MapReduce Task)-->Container( MRAppMaster )
  • 节点的状态汇报:NM-->RM
团体概述

当用户向 YARN 中提交一个应用程序后,YARN将分两个阶段运行该应用程序
第一个阶段是客户端申请资源启动运行本次程序的ApplicationMaster ;
第二个阶段是由ApplicationMaster根据本次程序内部具体情况,为它申请资源,并监控它的整个运行过程,直到运行完成。



  • 用户通过客户端向YARN中ResourceManager提交应用程序(好比hadoop jar提交MR程序);
  • ResourceManager为该应用程序分配第一个Container(容器),并与对应的NodeManager通信,要求它在这个Container中启动这个应用程序的ApplicationMaster;
  • ApplicationMaster启动成功之后,首先向ResourceMlanager注册并保持通信,这样用户可以直接通过ResourceManage查看应用程序的运行状态(处理了百分之几);
  • AM为本次程序内部的各个Task任务向RM申请资源,并监控它的运行状态;
  • 一旦 ApplicationMaster 申请到资源后,便与对应的 NodeManager 通信,要求它启动任务;
  • NodeManager 为任务设置好运行环境后,将任务启动命令写到一个脚本中,并通过运行该脚本启动任务
 
资源调度器Scheduler



  • 在抱负情况下,应用程序提出的请求将立刻得到YARN答应。
  • 但是实际中,资源是有限的,并且在繁忙的集群上,应用程序通常将需要等候其某些请求得到满足。
  • YARN调度程序的工作是根据一些界说的策略为应用程序分配资源
  • 在YARN中,负责给应用分配资源的就是Scheduler,它是Resourcellanager的核心组件之一。Scheduler完全专用于调度作业,它无法跟踪应用程序的状态。
调度器策略

   Apache版本YARN默认使用容量调度器
  使用其他调度器,可以在yarn-site.xml中的yarn.resourcemanager.scheduler.class进行配置
  先进先出调度器(FIFO Scheduler)



  • FIFO Scheduler是一个先进先出的头脑,即先提交的应用先运行。调度工作不考虑优先级和范围,适用于负载较低的小规模集群。当使用大型共享集群时,它的服从较低且会导致一些题目。
容量调度器(Capacity Scheduler)



  • Capacity Scheduler容量调度是Apache lladoop3.x默认调度策略。该策略答应多个组织共享整个集群资源,每个组织可以获得集群的一部门盘算能力。通过为每个组织分配专门的队列,然后再为每个队列分配一定的集群资源,这样整个集群就可以通过设置多个队列的方式给多个组织提供服务了。
  • capacity可以明白成一个个的资源队列,这个资源队列是用户自己去分配的。队列内部又可以垂直分别,这样一个组织内部的多个成员就可以共享这个队列资源了,在一个队列内部,资源的调度是接纳的是先进先出(FIFO)策略。
公平调度器(Fair Scheduler)



  • Fair Scheduler叫做公平调度,提供了YARN应用程序公平地共享大型集群中资源的另一种方式。
  • 使所有应用在匀称情况下随着时间的流逝可以获得相称的资源份额。
  • Fair Scheduler设计目标是为所有的应用分配公平的资源(对公平的界说通过参数来设置)。
  • 公平调度可以在多个队列间工作,答应资源共享和抢占。
   当只有A有任务时,占用集群全部资源
  A、B各有一个任务时,各自占用集群一半资源
  A有1个任务,B有两个任务时,A、B占用集群一半资源,B的2个任务平分1/4的集群资源
  Hive

概述

内容



  • Apache Hive是一款创建在Hadoop之上的开源数据堆栈系统,可以将存储在Hadoop文件中的结构化、半结构化数据文件映射为一张数据库表,基于表提供了一种类似SQL的查询模子,称为Hive查询语言(HQL)用于访问和分析存储在Hadoop文件中的大型数据集。
  • Hive核心是将HQL转换为MapReduce程序,然后将程序提交到Hadoop聚集实行
  • Hive由Facebook实现并开源。
题目

使用Hadoop MapReduce直接处理数据所面对的题目


  • 人员学习本钱太高 需要掌握java
  • MapReduce实现复杂查询逻辑开发难度太大
利益

使用Hive处理数据的利益


  • 操作接口接纳类SQL语法,提供快速开发的能力(简朴、轻易上手)
  • 避免直接写MapReduce,淘汰开发人员的学习本钱
  • 支持自界说函数,功能扩展很方便
  • 背靠Hadoop,擅长存储分析海量数据集
关系

作为数据堆栈软件,Hive具备存储数据和查询分析数据的功能


  • Hive使用HDFS存储数据
  • 使用MapReduce查询分析数据
  • Hive只需要用于专注于编写HQL,帮助用户转换为MapReduce程序完成对数据的分析


 
组件与实行过程



用户接口(User Interfaces)



  • CLI(命令行界面):用户直接输入HQL命令进行交互。
  • HiveServer2(Thrift服务):支持JDBC/ODBC连接,便于远程客户端(如Python、Java)访问。
  • Web UI:通过工具(如Hue)提供可视化界面,用于查询提交和监控。
元数据存储(Metastore)



  • 功能:存储表结构(Schema)、分区信息、数据位置等元数据。
  • 存储后端:通常使用关系型数据库(如MySQL、PostgreSQL),独立于HDFS。
  • Metastore服务:可配置为远程模式,允很多个Hive实例共享元数据。
驱动(Driver)



  • 编译器(Compiler):解析HiveQL,生成逻辑筹划和物理实行筹划。
  • 优化器(Optimizer):对逻辑筹划进行优化(如谓词下推、分区裁剪、Join优化)。
  • 实行引擎(Execution Engine):将优化后的筹划提交到MapReduce、Tez或Spark实行。
实行引擎(Execution Engines)



  • MapReduce:默认引擎,适合批处理,但延迟较高。
  • Tez:基于DAG的任务调度,淘汰中央数据落盘,提升性能。
  • Spark:使用内存盘算加快处理,适合迭代式任务。
底层依靠(Hadoop Ecosystem)



  • HDFS:存储实际数据文件。
  • YARN:管理集群资源调度。
使用客户端

概述



  • Hive发展至今,统共历经了两代客户端工具。
  • 第一代客户端(deprecated不推荐使用)HIVE HOME/bin/hive,是一个 shellUti1。主要功能:一是可用于以交互或批处理模式运行Hive查询;二是用于Hive相关服务的启动,好比metastore服务。
  • 第二代客户端(recommended 推荐使用)HIVE_HOME/bin/beeline,是一个JDBC客户端,是官方猛烈推荐使用的Hive命令行工具,和第一代客户端相比,性能增强安全性进步。
HiveServer2服务介绍



  • 远程模式下beeline通过 Thrift 连接到单独的liveServer2服务上,这也是官方推荐在生产环境中使用的模式。
  • HiveServer2支持多客户端的并发和身份认证,旨在为开放API客户端如JDBC、0DBC提供更好的支持。


方法一:使用第一代客户端
  1. [root@hadoop100 hive]# bin/hive
复制代码
方法二: 使用第二代客户端
  1. [root@hadoop100 hive]# nohup /opt/software/hive/bin/hive --service metastore &
  2. [root@hadoop100 hive]# nohup /opt/software/hive/bin/hive --service hiveserver2 &
  3. [root@hadoop100 hive]# bin/beeline
  4. beeline> ! connect jdbc:hive2://192.168.137.128:10000
复制代码
基本操作

1. 创建表,并声明文件分隔符’\t’
  1. hive> create table stu(id int,name sting) row format delimited fields terminated by '\t';
复制代码
2. 创建默认表(默认分隔符为‘\001’,vim中为^A,ctrl V+ctrl A
  1. hive> create table stu(id int,name sting)
复制代码
3. 加载本地文件到数据表中
  1. hive> load data local inpath 'opt/software/datas/stu.txt' into table stu;
复制代码
4. 加载HDFS文件到数据表
  1. hive> load data inpath '/stu.txt' into table stu;
复制代码
5. 增添数据
  1. hive> insert into table stu values(1,'zhangsan');
复制代码
6. 查询结构信息
  1. hive> desc formatted stu;
复制代码
ZooKeeper

概念



  • ZooKeeper是Apache Hadoop 项目下的一个子项目,是一个树形目录服务
  • Zookeeper 翻译过来就是动物园管理员,他是用来管Hadoop(大象)、Hive(蜜蜂)、Pig(小猪)的管理员。简称zk
  • Zookeeper 是一个分布式的,开源的分布式应用程序的协调服务
主要功能

配置管理



  • 题目配景:分布式系统中,多个节点需共享同一配置(如数据库地点、服务开关)。手动维护易出错且低效。
  • 实现机制

    • 会合存储:配置信息存储在持久型ZNode(如/config),各节点读取该节点数据。
    • 动态更新:通过Watch机制监听节点变化。当配置变更时,Zookeeper通知所有监听客户端,触发其拉取新配置。
    • 示例场景:微服务架构中,所有服务实例从/config/db_url获取数据库地点,管理员更新该节点后,服务自动生效。

分布式锁



  • 题目配景:多节点竞争共享资源时(如修改同一数据),需互斥访问以避免冲突。
  • 实现机制

    • 临时次序节点:客户端在锁节点(如/locks/resource1)下创建临时次序子节点(如resource1_00000001)。
    • 最小序号获锁:序号最小的节点持有锁。后续节点监听前一个序号节点,形成等候队列。
    • 开释与容错:客户端自动删除节点开释锁,或会话终止时临时节点自动删除,防止死锁。
    • 示例场景:电商系统中,多个订单服务通过竞争锁确保同一时候仅一个服务处理库存扣减。

集群管理



  • 题目配景:监控集群节点状态(在线/离线),动态选举主节点以协调任务。
  • 实现机制

    • 临时节点注册:节点启动时在/members下创建临时节点(如/members/node1),会话保持则节点存活。
    • 状态感知:其他节点监听/members子节点变化,实时感知节点加入或退出。
    • Leader选举:通过创建临时次序节点,序号最小者成为领导(如/election/leader_00000001)。
    • 示例场景:Hadoop集群中,主NameNode通过Zookeeper选举产生,DataNode通过临时节点注册状态,主节点实时监控工作节点存活

启动zookeeper和客户端

1. 启动、(停止、重启)服务
  1. [root@hadoop100 zookeeper-3.4.10]$ bin/zkServer.sh start [stop/restart]
  2. [root@hadoop101 zookeeper-3.4.10]$ bin/zkServer.sh start
  3. [root@hadoop102 zookeeper-3.4.10]$ bin/zkServer.sh start
复制代码
2. 查看服务状态
  1. [root@hadoop100 zookeeper-3.4.10]$ bin/zkServer.sh status
  2. ZooKeeper JMX enabled by default
  3. Using config: /opt/software/zookeeper-3.4.10/bin/../conf/zoo.cfg
  4. Mode: follower
复制代码
3. 启动本机客户端
  1. [root @hadoop100 zookeeper-3.4.10]$ bin/zkCli.sh
复制代码
4. 启动其他机器的客户端
  1. [root @hadoop100 zookeeper-3.4.10]$ bin/zkCli.sh -server ip地址:端口
复制代码
基本操作

命令基本语法
功能描述
help
显示所有操作命令
ls path [watch]
使用 ls 命令来查看当前znode中所包罗的内容
ls2 path [watch]
查看当前节点数据并能看到更新次数等数据
create
平常创建
-s  含有序列
-e  临时(重启大概超时消散)
-es 临时次序
get path [watch]
获得节点的值
set
设置节点的具体值
stat
查看节点状态
delete
删除节点
rmr
递归删除节点
1.  查询当前znode中所包罗的内容
  1. [zk: localhost:2181(CONNECTED) 0] ls /
  2. [zookeeper]
复制代码
2. 查看当前节点具体数据
  1. [zk: localhost:2181(CONNECTED) 1] ls2 /
  2. [zookeeper]
  3. cZxid = 0x0
  4. ctime = Thu Jan 01 08:00:00 CST 1970
  5. mZxid = 0x0
  6. mtime = Thu Jan 01 08:00:00 CST 1970
  7. pZxid = 0x0
  8. cversion = -1
  9. dataVersion = 0
  10. aclVersion = 0
  11. ephemeralOwner = 0x0
  12. dataLength = 0
  13. numChildren = 1
复制代码
3. 创建平常节点
  1. [zk: localhost:2181(CONNECTED) 3] create /slave "slave online"
  2. Created /slave
  3. [zk: localhost:2181(CONNECTED) 4] create /slave/slave01 "slave01 online"
  4. Created /slave/slave01
复制代码
4. 获得节点的值
  1. [zk: localhost:2181(CONNECTED) 6] get /slave/slave01
  2. slave01 online
  3. cZxid = 0x100000004
  4. ctime = Wed Aug 29 00:04:35 CST 2018
  5. mZxid = 0x100000004
  6. mtime = Wed Aug 29 00:04:35 CST 2018
  7. pZxid = 0x100000004
  8. cversion = 0
  9. dataVersion = 0
  10. aclVersion = 0
  11. ephemeralOwner = 0x0
  12. dataLength = 6
  13. numChildren = 0
复制代码
5. 创建临时节点(退出客户端或重启后消散)
  1. [zk: localhost:2181(CONNECTED) 7] create -e /slave/slave02 "slave02 online"
  2. Created /slave/slave02
复制代码
6. 创建带序号的节点
  1. [zk: localhost:2181(CONNECTED) 1] create -s /slave/slave01 "online 01"
  2. Created /slave/slave010000000001
  3. [zk: localhost:2181(CONNECTED) 2] create -s /slave/slave01 "online 01"
  4. Created /slave/slave010000000002
  5. [zk: localhost:2181(CONNECTED) 3] create -s /slave/slave01 "online 01"
  6. Created /slave/slave010000000003
  7. [zk: localhost:2181(CONNECTED) 4] create -s /slave/slave01 "online 01"
  8. Created /slave/slave010000000004
复制代码
  假如原来没有序号节点,序号从0开始依次递增。假如原节点下已有2个节点,则再排序时从2开始,以此类推。
  7. 修改节点数据值
  1. [zk: localhost:2181(CONNECTED) 1] set /slave/slave03 "offline"
复制代码
8. 监听节点值变化
    (1) Hadoop101注册监听
  1. [zk: localhost:2181(CONNECTED) 0] get /slave watch
复制代码
    (2)Hadoop102修改节点内容
  1. [zk: localhost:2181(CONNECTED) 0] set /slave "test set"
复制代码
    (3) 返回Hadoop101查看界面变化提示
  1. [zk: localhost:2181(CONNECTED) 1]
  2. WATCHER::
  3. WatchedEvent
  4. state:SyncConnected
  5. type:NodeDataChanged
  6. path:/slave/slave01
复制代码
9. 查看节点状态
  1. [zk: localhost:2181(CONNECTED) 9] stat /slave/slave01
  2. cZxid = 0xa0000002b
  3. ctime = Fri Feb 07 16:48:22 CST 2025
  4. mZxid = 0xa0000002e
  5. mtime = Fri Feb 07 16:50:09 CST 2025
  6. pZxid = 0xa0000002b
  7. cversion = 0
  8. dataVersion = 2
  9. aclVersion = 0
  10. ephemeralOwner = 0x0
  11. dataLength = 13
  12. numChildren = 0
复制代码
10. 删除或递归删除节点
  1. [zk: localhost:2181(CONNECTED) 4] delete /slave/slave01
  2. [zk: localhost:2181(CONNECTED) 4] rmr /slave
复制代码
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

嚴華

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表