Hadoop讲解

Hadoop学习讲义

第一章 环境的安装配置【讲解】



前言

本文档是针对《第一章 环境的安装配置》一文进行讲解,在上一篇文章中主要是针对用户行为日志收集进行配置环境,其中涉及了Hadoop,Zookeeper,Kafka,Flume四个大数据组件,四个服务相互配合,完成了用户行为信息的采集,最后存储到HDFS上,接下来就四个服务进行详细的讲解。


一、什么是大数据?

我们这次的学习是大数据的内容,所以首先我们要了解什么是大数据。

大数据(Big Data)
我们先看看百度百科的介绍

大数据(big data),或称巨量资料,指的是所涉及的资料量规模巨大到无法透过主流软件工具,在合理时间内达到撷取、管理、处理、并整理成为帮助企业经营决策更积极目的的资讯。
在维克托·迈尔-舍恩伯格及肯尼斯·库克耶编写的《大数据时代》 中大数据指不用随机分析法(抽样调查)这样捷径,而采用所有数据进行分析处理。大数据的5V特点(IBM提出):Volume(大量)、Velocity(高速)、Variety(多样)、Value(低价值密度)、Veracity(真实性)。

了解了百度百科的介绍,我们可以看到,大数据就是针对海量数据进行分析处理,由于海量数据的到来,我们之前的技术不能快速安全的处理,就引入了新型的大数据技术,通过分布式等方法对数据进行分析,下面就让我们了解大数据的世界。

1.1 Apache

来到大数据的世界,我们都要知道一个公司——Apache,Apache软件基金会(也就是Apache Software Foundation,简称为ASF),是专门为支持开源软件项目而办的一个非盈利性组织。在它所支持的Apache项目与子项目中,所发行的软件产品都遵循Apache许可证(Apache License)。

apache公司为我们提供了许多的开源软件项目,像我们本次使用的Hadoop,Zookeeper,Kafka,Flume都是apache提供的。另外,像我们熟知的spark,flink这些分布式系统,Hive,HBase等应用都是该公司提供的,所以,这个公司在我们编程的道路上是一个重要的学习对象。在学习的过程中,每个组件的使用在官方都有文档进行讲解,任何的教科书都不如官方的文档讲解的详细,大部分的文档在官方都是有中文版的,对于没有中文版本的文档,大家也可以通过谷歌翻译进行阅读,里面的讲解足以满足大家学习的需求,每一个合格的程序员都要学会阅读官方文档,本次讲解我们也会结合官方文档进行讲解。

1.2 大数据的特点

大数据有五个特点:Volume(容量)、Velocity(高速)、Variety(种类)、Value(低价值密度)、Veracity(真实性)

  • 容量(Volume):大
  • 种类(Variety):数据类型的多样
  • 速度(Velocity):指获得数据的速度快
  • 真实性(Veracity):数据的质量。数据真实性低。
  • 价值(Value):价值密度低

1.3 大数据生态

这里我简单的画了一个大数据的生态系统,将我们可能会用到的系统服务展示了出来。

在这里插入图片描述


二、Hadoop分布式系统基础框架

2.1 什么是Hadoop?

让我们先来看一看Hadoop官方的介绍

Apache Hadoop软件库是一个框架,允许使用简单的编程模型跨计算机集群分布式处理大型数据集。它旨在从单个服务器扩展到数千台机器,每台机器都提供本地计算和存储。库本身不是依赖硬件来提供高可用性,而是旨在检测和处理应用程序层的故障,因此在一组计算机上提供高可用性的服务,每台计算机都可能容易发生故障

简单的来说,Hadoop就是用来解决海量数据存储和计算的生态圈。

2.2 Hadoop组件

  • Hadoop Common:支持其他Hadoop模块的常见实用程序。
  • Hadoop分布式文件系统(HDFSTM):一个提供高吞吐量访问应用程序数据的分布式文件系统。
  • Hadoop YARN:作业调度和集群资源管理的框架。
  • Hadoop MapReduce:一个基于YARN的大型数据集并行处理系统。

Hadoop HDFS

什么是HDFS
HDFS就是Hadoop Distributed File System,我们直译过来就是Hadoop分散的文件系统,官网翻译就是分布式文件系统。它与现有的分布式文件系统有很多相似之处。然而,与其他分布式文件系统的区别很大。HDFS具有高度的容错性,旨在部署在低成本硬件上。HDFS提供对应用程序数据的高吞吐量访问,适用于具有大型数据集的应用程序。HDFS放宽了一些POSIX要求,以便能够流访问文件系统数据。HDFS最初是作为Apache Nutch网络搜索引擎项目的基础设施构建的。HDFS是Apache Hadoop Core项目的一部分。

HDFS的主从架构

  • NameNode和DataNodes
  • HDFS有一个主/从架构。HDFS集群由单个NameNode组成,这是一个主服务器,用于管理文件系统命名空间并规范客户端对文件的访问。
  • 此外,还有一些DataNodes,通常在集群中每个节点一个,用于管理附加到它们运行的节点的存储。
  • HDFS公开文件系统命名空间,并允许将用户数据存储在文件中。在内部,文件被拆分为一个或多个块,这些块存储在一组DataNodes中。
  • NameNode执行文件系统命名空间操作,如打开、关闭和重命名文件和目录。它还决定了块与DataNodes的映射。
  • DataNodes负责服务文件系统客户端的读写请求。DataNodes还根据NameNode的指令执行块创建、删除和复制。

Hadoop YARN

YARN的基本思想是将资源管理和作业调度/监控的功能划分为单独的守护进程。想法是拥有一个全局资源管理器(RM)和每个应用程序应用程序主服务器(AM)。应用程序要么是单个作业,要么是DAG工作。

  • ResourceManager和NodeManager构成了数据计算框架。
  • ResourceManager是系统内所有应用程序之间资源仲裁的最终权限。
  • NodeManager是每台机器的框架代理,负责容器,监控其资源使用情况(cpu、内存、磁盘、网络),并向ResourceManager/Scheduler报告。

Hadoop MapReduce

Hadoop MapReduce是一个易于编写应用程序的软件框架,以可靠、容错的方式在商品硬件的大集群(数千个节点)上并行处理大量数据(多兆字节数据集)。

2.3 集群设置

Hadoop运行环境有三种模式:本地模式,伪分布式模式,完全分布式模式

本地模式(Standalone Operation)

默认情况下,Hadoop配置为在非分布式模式下运行,作为单个Java进程。这对调试很有用。

伪分布式模式(Pseudo-Distributed Operation)

Hadoop也可以在伪分布式模式下在单个节点上运行,其中每个Hadoop守护进程都在单独的Java进程中运行。

完全分布式模式(Cluster Mode)

Hadoop运行在呦多台主机搭建的集群上,是真正的生产环境。
Hadoop的Java配置由两种类型的重要配置文件驱动:

  • 只读默认配置-core-default.xml,hdfs-default.xml, yarn-default.xml和mapred-default.xml。
  • 特定于站点的配置-等/hadoop/core-site.xml等/hadoop/hdfs-site.xml等/hadoop/yarn-site.xml and etc/hadoop/mapred-site.xml。

配置文件介绍
看过我们的安装文档的同学应该都知道,我们主要配置了5个文档,core-site.xml hdfs-site.xml yarn-site.xml mapred-site.xml workers。官方文档对该部分的讲解非常详细,我们这里就不进行细说,需要配置的时候可以自己查看官方文档,根据需求配置。

1.core-site.xml

2.hdfs-site.xml

3.yarn-site.xml

4.mapred-site.xml

5.workers

在workers文件当中原本应该有内容“localhost”,我们将其删去,并写入我们的集群每个节点的名字。
配置该内容是为了让我们的start-dfs.sh,start-yarn.sh脚本可以使用,但需要我们每个节点都配置了SSH免密。

2.4 启动

第一次打开 HDFS 时,必须对其进行格式化。将新的分布式文件系统格式化。
[hdfs]$ $HADOOP_HOME/bin/hdfs namenode -format <cluster_name>
如果配置了etc/hadoop/worker和 ssh 可信访问,则可以使用实用程序脚本启动所有 HDFS 进程。作为hdfs:
[hdfs]$ $HADOOP_HOME/sbin/start-dfs.sh
如果配置了etc/hadoop/worker和 ssh 可信访问,则可以使用实用程序脚本启动所有 YARN 进程。作为yarn:
[yarn]$ $HADOOP_HOME/sbin/start-yarn.sh

2.5 关闭

如果配置了etc/hadoop/worker和 ssh 可信访问,则可以使用实用程序脚本关闭所有 HDFS 进程。作为hdfs:
[hdfs]$ $HADOOP_HOME/sbin/stop-dfs.sh
如果配置了etc/hadoop/worker和 ssh 可信访问,则可以使用实用程序脚本关闭所有 YARN 进程。作为yarn:
[yarn]$ $HADOOP_HOME/sbin/stop-yarn.sh

2.6 web端口

进程端口号
NameNode9870
ResourceManager8088
MapReduce JobHistory Server19888

三、Zookeeper

1.什么是Zookeeper?

ZooKeeper 是一个集中式服务,用于维护配置信息、命名、提供分布式同步和提供组服务。分布式应用程序以某种形式使用所有这些类型的服务。每次实现它们时,都需要进行大量工作来修复不可避免的错误和竞争条件。由于实现这些服务的难度,应用程序最初通常会吝啬它们,这使得它们在发生变化时变得脆弱且难以管理。即使正确完成,这些服务的不同实现也会导致部署应用程序时的管理复杂性。

2.为什么使用Zookeeper?

Zookeeper是分布式应用程序协调服务,我们可以使用Zookeeper来管理我们的Kafka,因为Kafka在集群当中需要Zookeeper分配管理才能这次使用。


四、Kafka

Kafka——一个高吞吐分布式发布订阅消息系统,由通过高性能TCP 网络协议进行通信的服务器和客户端组成。它可以处理流数据,可以解决Hadoop离线分析系统要求实时处理的问题。


五、Flume

Flume——一种分布式、可靠且可用的服务,用于高效地收集、聚合和移动大量日志数据。它具有基于流数据流的简单灵活的架构。它具有可调整的可靠性机制和许多故障转移和恢复机制,具有健壮性和容错性。它使用一个简单的可扩展数据模型,允许在线分析应用程序。


总结

了解了我们使用的四个服务,我们要总结一下为什么我们使用它们,它们又是怎么联系在一起的。

1.为什么使用Hadoop?

Hadoop是用来解决海量数据存储和计算的生态圈,它可以对海量数据进行计算存储,是目前先进的技术,我们本次的项目就将数据存放到了Hadoop提供的HDFS中。

2.为什么使用Kafka?

Kafka的使用是为了解决Hadoop不能实时处理数据的问题,Hadoop只能进行离线处理,而Kafka是可以处理流数据,将两者结合在一起,就可以实现Hadoop实时服务了。另外,Kafka是一个可持久的分布式消息队列,自带存储,可以将数据缓存,然后通过Flume一点一点存储到HDFS当中。

3.为什么使用Flume?

Flume是可以进行数据迁移,聚合的服务,采用Flume可以高效的将数据进行采集,迁移。

4.Kafka和Flume

Kafka追求的是高吞吐,高负载,同一topic下可以有多个partition,由于是pull模式拉取数据,因此适合多个消费者的场景。而Flume追求的是数据和数据源、数据流向的多样性,适合多个生产者的场景。所以我们采用Flume进行数据日志信息的采集工作,这刚好符合多个生产者,然后将数据迁移到Kafka,Kafka收到了数据,进行整合,再传给HDFS,这里我们又采用Flume进行数据迁移。

5.用户行为日志采集流程

  • 首先用户行为日志产生,Flume(日志采集Flume)进行采集。
  • 然后Flume将文件传给Kafka的Topic下,进行存储
  • Kafka将收到的数据传给Flume(消费Kafka数据Flume)
  • Flume收到消息,根据设置的条件,将收到的数据上传到HDFS中,完成数据的采集存储
    在这里插入图片描述

6.为什么采用这样的流程?

用户行为日志是实时产生的,而Hadoop是进行离线处理的,每次产生数据都请求写入HDFS很浪费资源,效率大打折扣,所以我们采用了Kafka,它作为可以使用流数据处理的服务,可以解决实时问题。 Kafka与Flume的功能有很多重复,那为什么还要使用两个?Flume提供了拦截器实时处理数据。Kafka需要外部的流处理系统才能做到。Kafka和Flume都是可靠的系统,但是,Flume不支持副本事件,当Flume代理的一个节点宕机,Flume就会停止收集直到节点恢复,这就会导致数据的丢失。所以这里将Kafka作为管道,Flume只用作数据迁移。

参考
https://hadoop.apache.org/
文档为个人学习时记录,仅供参考学习,不涉及商业用途,如有侵权,请联系删除如有侵权请联系我删除

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值