简介

Hadoop是一款开源软件,允许用户使用简单的编程模型实现跨机器集群对海量数据进行分布式计算处理。

核心组件:

  • Hadoop HDFS(分布式文件存储系统):解决海量数据存储
  • Hadoop YARN(集群资源管理和任务调度框架):解决资源任务调度
  • Hadoop MapReduce(分布式计算框架):解决海量数据计算

现状:

  • HDFS作为分布式文件存储系统,处在生态圈的底层与核心地位;
  • YARN作为分布式通用的集群资源管理系统和任务调度平台,支撑各种计算引擎运行,保证了Hadoop地位;
  • MapReduce作为大数据生态圈第一代分布式计算引擎,由于自身设计的模型所产生的弊端,导致企业一线几乎不再直接使用MapReduce进行编程处理,但是很多软件的底层依然在使用MapReduce引擎来处理数据。

发行版本:

Hadoop集群搭建

概述

  • Hadoop集群包括两个集群:HDFS集群、YARN集群
  • 两个集群逻辑上分离、通常物理上在一起
  • 两个集群都是标准的主从架构集群

0.jpg

启动

  • 在主机上执行start-all.sh,并用jps查看java进程

0.jpg

Hadoop体验

  • shell命令
    • hadoop fs -mkdir /itcast:创建文件夹
    • hadoop fs -put zookeeper.out /itcast :上传文件
  • UI页面

0.jpg

HDFS

简介

  • HDFS,意为:Hadoop分布式文件系统;
  • HDFS主要是解决大数据如何存储问题的。分布式意味着是HDFS是横跨在多台计算机上的存储系统;
  • 高度容错,非常适于存储大型数据(比如TB 和PB)
  • HDFS使用多台计算机存储文件, 并且提供统一的访问接口, 像是访问一个普通文件系统一样使用分布式文件系统

设计目标

  • 硬件故障是常态,HDFS可能有成百上千的服务器组成,每一个组件都有可能出现故障。因此故障检测和自动快速恢复是HDFS的核心架构目标
  • HDFS上的应用主要是以流式读取数据。HDFS被设计成用于批处理,而不是用户交互式的。相较于数据访问的反应时间,更注重数据访问的高吞吐量
  • 支持大文件
  • 大部分文件:一个文件一旦创建、写入、关闭之后就不需要修改
  • 可从一个平台轻松移植到另一个平台
  • 应用场景:大文件、数据流式访问、一次写入多次读取、低成本
  • 不适用场景:小文件、频繁任意修改、数据交互式访问

结构

  • HDFS集群是标准的master/slave主从架构集群
  • 一般一个HDFS集群是有一个Namenode和一定数目的Datanode组成
  • Namenode是HDFS主节点,Datanode是HDFS从节点,两种角色各司其职,共同协调完成分布式的文件存储服务
  • HDFS中的文件在物理上是分块存储的,默认大小是128M,不足128M则本身就是一块
  • 文件的所有块都会有副本,默认值是3份(包括自身)
  • 元数据管理
    • Namenode管理的元数据具有两种类型:
      • 文件自身属性信息:文件名称、权限,修改时间,文件大小,复制因子,数据块大小
      • 文件块位置映射信息:记录文件块和DataNode之间的映射信息,即哪个块位于哪个节点上

常用操作

一般可用UI界面和shell命令操作HDFS,常用命令如下:

  • hadoop fs -mkdir /name:创建目录
  • hadoop fs -put ...:上传文件
  • hadoop fs -get ...:下载文件

角色及职责

  • NameNode
    • 是Hadoop分布式文件系统的核心,架构中的主角色
    • NameNode维护和管理文件系统元数据,包括名称空间目录树结构、文件和块的位置信息、访问权限等信息
    • NameNode成为了访问HDFS的唯一入口
    • 仅存储HDFS的元数据,不存储实际数据
    • 不持久化存储每个文件中各个块所在的datanode的位置信息。开机时从datenode重建
  • DataNode
    • 是Hadoop HDFS中的从角色,负责具体的数据块存储
    • DataNode的数量决定了HDFS集群的整体数据存储能力。通过和NameNode配合维护着数据块
    • 启动时,会将自己注册到NameNode并汇报自己负责持有的块列表
  • secondarynamenode
    • 主角色辅助角色
    • 主要是帮助主角色进行元数据文件的合并动作

YARN

简介

  • 是一个通用资源管理系统和调度平台,可为上层应用提供统一的资源管理和调度

  • 功能:

    • 资源管理系统:集群的硬件资源,和程序运行相关,比如内存、CPU等
    • 调度平台:多个程序同时申请计算资源如何分配,调度的规则
    • 理论上支持各种计算程序
  • 可以把Hadoop YARN理解为相当于一个分布式的操作系统平台,而MapReduce等计算程序则相当于运行于操作系统之上的应用程序,YARN为这些程序提供运算所需的资源

三大组件

  • ResourceManager(RM)
    • YARN集群中的主角色,决定系统中所有应用程序之间资源分配的最终权限,即最终仲裁者
    • 接收用户的作业提交,并通过NM分配、管理各个机器上的计算资源
  • NodeManager(NM)
    • YARN中的从角色,一台机器上一个,负责管理本机器上的计算资源
    • 根据RM命令,启动Container容器、监视容器的资源使用情况。并且向RM主角色汇报资源使用情况
  • ApplicationMaster(AM)
    • 用户提交的每个应用程序均包含一个AM
    • 负责程序内部各阶段的资源申请,监督程序的执行情况

整体流程

  • 第一个阶段是客户端申请资源启动运行本次程序的ApplicationMaster
  • 第二个阶段是由ApplicationMaster根据本次程序内部具体情况,为它申请资源,并监控它的整个运行过程,直到运行完成。

调度器策略

  • FIFO Scheduler(先进先出调度器)
  • Capacity Scheduler(容量调度器,Apache版本YARN默认使用该策略):可以理解成一个个的资源队列,这个资源队列是用户自己去分配的。队列内部又可以垂直划分,这样一个组织内部的多个成员就可以共享这个队列资源了,在一个队列内部,资源的调度是采用的是先进先出(FIFO)策略。简单通俗点来说,就是一个个队列有独立的资源,队列的结构和资源是可以进行配置的。
  • Fair Scheduler(公平调度器):为所有的应用分配公平的资源

数据仓库

概念

  • 是一个用于存储、分析、报告的数据系统
  • 目的是构建面向分析的集成化数据环境,分析结果为企业提供决策支持
  • 数据仓库本身并不“生产”任何数据,其数据来源于不同外部系统
  • 数据仓库自身也不需要“消费”任何的数据,其结果开放给各个外部应用使用
  • 为了分析数据而来,分析结果给企业决策提供支撑
  • 特征:
    • 面向主题、集成性、非易失性、时变性

Apache Hive

概念

Apache Hive是一款建立在Hadoop之上的开源数据仓库系统,可以将存储在Hadoop文件中的结构化、半结构化数据文件映射为一张数据库表,基于表提供了一种类似SQL的查询模型,称为Hive查询语言(HQL),用于访问和分析存储在Hadoop文件中的大型数据集。

Hive核心是将HQL转换为MapReduce程序,然后将程序提交到Hadoop群集执行。

  • Hive利用HDFS存储数据,利用MapReduce查询分析数据。
  • Hive的最大的魅力在于用户专注于编写HQL,Hive帮您转换成为MapReduce程序完成对数据的分析
  • 在hive中能够写sql处理的前提是针对表,而不是针对文件,因此需要将文件和表之间的对应关系描述记录清楚。映射信息专业的叫法称之为元数据信息

0.jpg

使用

元数据,又称中介数据、中继数据,为描述数据的数据,主要是描述数据属性的信息,用来支持如指示存储位置、历史数据、资源查找、文件记录等功能。元数据存储在关系型数据库中。

Hive Metastore

  • Metastore即元数据服务。Metastore服务的作用是管理metadata元数据,对外暴露服务地址,让各种客户端通过连接metastore服务,由metastore再去连接MySQL数据库来存取元数据。且不需要知道数据库的密码等信息,更安全。

  • 前台启动:[root@node1 ~]# /export/server/apache-hive-3.1.2-bin/bin/hive --service hiveserver2

  • 后台启动:[root@node1 ~]# nohup /export/server/apache-hive-3.1.2-bin/bin/hive --service metastore &

  • 客户端,两种,推荐第二代

bin/beeline客户端使用

  • 启动第二代客户端
1
2
nohup /export/server/apache-hive-3.1.2-bin/bin/hive --service metastore &
nohup /export/server/apache-hive-3.1.2-bin/bin/hive --service hiveserver2 &
  • 拷贝node1安装包到beeline客户端机器上(node3):scp -r /export/server/apache-hive-3.1.2-bin/ node3:/export/server/
  • 在node3启动客户端:[root@node3 server]# /export/server/apache-hive-3.1.2-bin/bin/beeline
1
2
3
4
5
6
7
8
beeline> ! connect jdbc:hive2://node1:10000
Connecting to jdbc:hive2://node1:10000
Enter username for jdbc:hive2://node1:10000: root
Enter password for jdbc:hive2://node1:10000:
Connected to: Apache Hive (version 3.1.2)
Driver: Hive JDBC (version 3.1.2)
Transaction isolation: TRANSACTION_REPEATABLE_READ
0: jdbc:hive2://node1:10000>
  • 一般可使用DataGrip连接hive

语法

  • 默认分隔符:’\001’

  • row format delimited fields terminated by 指定字段之间的分隔符

  • 在Hive中,默认的数据库叫做default,存储数据位置位于HDFS的/user/hive/warehouse下

  • 用户自己创建的数据库存储位置是/user/hive/warehouse/database_name.db下

  • 只有把数据文件移动到对应的表文件夹下面,Hive才能映射解析成功;