Hadoop概述及入门

1,144 阅读6分钟

Hadoop概述

什么是Hadoop

  1. Hadoop是由Apache基金会所开发的分布式系统基础架构
  2. 主要解决的是海量数据的存储和分析计算问题
  3. Hadoop通常是指Hadoop生态圈,包括Hive、Hbase等大数据技术

Hadoop三大发行版本

Apache :最原始版本

Cloudera :互联网企业中使用较多,现在收费

Hortonworks : 开源,使用较少

Hadoop优势

  1. 高可靠性:Hadoop底层维护多个数据副本,即使Hadoop某个计算元素或存储出现故障,也不会导致数据的丢失

  2. 高扩展性:在集群间分配任务数据,可方便的扩展数以千计的节点

  3. 高效性:在MapReduce的思想下,Hadoop是并行工作的,以加快任务处理速度

  4. 高容错性:能够自动将失败的任务重新分配

    Hadoop组成

    image-20200906233543732
    image-20200906233543732

    Hadoop3新特性

    支持的最低Java版本 Hadoop 2.x - java的最低支持版本是java 7 Hadoop 3.x - java的最低支持版本是java 8

    容错 Hadoop 2.x - 可以通过复制(浪费空间)来处理容错。 Hadoop 3.x - 可以通过Erasure编码处理容错。

    数据平衡 Hadoop 2.x - 对于数据平衡使用HDFS平衡器。 Hadoop 3.x - 对于数据平衡使用Intra-data节点平衡器,该平衡器通过HDFS磁盘平衡器CLI调用。

    存储Scheme Hadoop 2.x - 使用3X副本Scheme Hadoop 3.x - 支持HDFS中的擦除编码。

    存储开销 Hadoop 2.x - HDFS在存储空间中有200%的开销。 Hadoop 3.x - 存储开销仅为50%。

    存储开销示例 Hadoop 2.x - 如果有6个块,那么由于副本方案(Scheme),将有18个块占用空间。 Hadoop 3.x - 如果有6个块,那么空间9个块,中6块空间,3块用于奇偶校验。

    YARN时间线服务 Hadoop 2.x - 使用具有可伸缩性问题的旧时间轴服务。 Hadoop 3.x - 改进时间线服务v2并提高时间线服务的可扩展性和可靠性。

    默认端口范围 Hadoop 2.x - 在Hadoop 2.0中,一些默认端口是Linux临时端口范围。所以在启动时,他们将无法绑定。 Hadoop 3.x - 但是在Hadoop 3.0中,这些端口已经移出了短暂的范围。

    工具 Hadoop 2.x - 使用Hive,pig,Tez,Hama,Giraph和其他Hadoop工具。 Hadoop 3.x - 可以使用Hive,pig,Tez,Hama,Giraph和其他Hadoop工具。

    兼容的文件系统 Hadoop 2.x - HDFS(默认FS),FTP文件系统:它将所有数据存储在可远程访问的FTP服务器上。 Amazon S3(简单存储服务)文件系统Windows Azure存储Blob(WASB)文件系统。 Hadoop 3.x - 它支持所有前面以及Microsoft Azure Data Lake文件系统。

    Datanode资源 Hadoop 2.x - Datanode资源不专用于MapReduce,我们可以将它用于其他应用程序。 Hadoop 3.x - 此处数据节点资源也可用于其他应用程序。

    MR API兼容性 Hadoop 2.x - 与Hadoop 1.x程序兼容的MR API,可在Hadoop 2.X上执行 Hadoop 3.x - 此处,MR API与运行Hadoop 1.x程序兼容,以便在Hadoop 3.X上执行

    支持Microsoft Windows Hadoop 2.x - 它可以部署在Windows上。 Hadoop 3.x - 它也支持Windows。

    2.15插槽/容器 Hadoop 2.x - Hadoop 1适用于插槽的概念,但Hadoop 2.X适用于容器的概念。通过容器,我们可以运行通用任务。 Hadoop 3.x - 它也适用于容器的概念。

    单点故障 Hadoop 2.x - 具有SPOF的功能,因此只要Namenode失败,它就会自动恢复。 Hadoop 3.x - 具有SPOF的功能,因此只要Namenode失败,它就会自动恢复,无需人工干预就可以克服它。

    HDFS联盟 Hadoop 2.x - 在Hadoop 1.0中,只有一个NameNode来管理所有Namespace,但在Hadoop 2.0中,多个NameNode用于多个Namespace。 Hadoop 3.x - Hadoop 3.x还有多个名称空间用于多个名称空间。

    可扩展性 Hadoop 2.x - 我们可以扩展到每个群集10,000个节点。 Hadoop 3.x - 更好的可扩展性。 我们可以为每个群集扩展超过10,000个节点。

    更快地访问数据 Hadoop 2.x - 由于数据节点缓存,我们可以快速访问数据。 Hadoop 3.x - 这里也通过Datanode缓存我们可以快速访问数据。

    HDFS快照 Hadoop 2.x - Hadoop 2增加了对快照的支持。 它为用户错误提供灾难恢复和保护。 Hadoop 3.x - Hadoop 2也支持快照功能。

    平台 Hadoop 2.x - 可以作为各种数据分析的平台,可以运行事件处理,流媒体和实时操作。 Hadoop 3.x - 这里也可以在YARN的顶部运行事件处理,流媒体和实时操作。

    群集资源管理 Hadoop 2.x - 对于群集资源管理,它使用YARN。 它提高了可扩展性,高可用性,多租户。 Hadoop 3.x - 对于集群,资源管理使用具有所有功能的YARN。

HDFS架构概述

image-20200906234434702
image-20200906234434702

YARN架构概述

image-20200906234729854
image-20200906234729854

MapReduce架构概述

MapReduce 将计算过程分为两个阶段: Map 和 Reduce,

  1. Map 阶段并行处理输入数据
  2. Reduce 阶段对 Map 结果进行汇总

Hadoop集群搭建

环境准备

使用centos7+, Hadoop 2.7.2

不对单节点和伪分布式进行演练,只对分布式进行演练

配置详情见 centos 7 常用操作

配置集群

  1. 核心配置文件

配置core-sizt.xml

<!-- 指定 HDFS 中 NameNode 的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop201:9000</value>
</property>
<!-- 指定 Hadoop 运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-2.7.2/data/tmp</value>
</property>
  1. Hdfs配置文件

配置hadoop-env.sh

export JAVA_HOME=/opt/module/jdk1.8.0_144

配置hdfs-site.xml

<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!-- 指定 Hadoop 辅助名称节点主机配置 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop203:50090</value>
</property>
  1. yarn配置文件

配置yarn-env.sh

export JAVA_HOME=/opt/module/jdk1.8.0_144

配置yarn-site.xml

<!-- Reducer 获取数据的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定 YARN 的 ResourceManager 的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop202</value>
</property>
  1. MapReduce配置文件

配置 mapred-env.sh

export JAVA_HOME=/opt/module/jdk1.8.0_144

配置 mapred-site.xml

<!-- 指定 MR 运行在 Yarn 上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
  1. 集群文件分发
xsync /opt/module/hadoop-2.7.2/

集群启动停止

hadoop启动前需要先执行hadoop namenode -format命令进行格式化

配置集群

  1. 配置slaves
# 修改文件/opt/module/hadoop-2.7.2/etc/hadoop/slaves
hadoop201
hadoop202
hadoop203
  1. 分发配置文件
xsync /opt/module

启动方式

  1. 各个服务组件逐一启动/停止 (1) 分别启动/停止 HDFS 组件
hadoop-daemon.sh start / stop namenode / datanode / secondarynamenode

​ (2) 启动/停止 YARN

yarn-daemon.sh start / stop resourcemanager / nodemanager
  1. 各个模块分开启动/停止(配置 ssh 是前提) 常用 (1) 整体启动/停止 HDFS

    start-dfs.sh / stop-dfs.sh
    

    (2) 整体启动/停止 YARN

    start-yarn.sh / stop-yarn.sh  
    

WEB端查看

  1. hdfs文件系统:http://hadoop201:50070/dfshealth.html#tab-overview
  2. yarn:http://hadoop202:8088/cluster
  3. jobhistory:http://hadoop201:19888/jobhistory
  4. 2nn:http://hadoop203:50090/status.html

本文使用 mdnice 排版