Hadoop学习篇(一)——初识Hadoop & Hadoop单机配置

本文介绍了Hadoop的基础知识,包括其在大数据处理中的角色、Linux环境配置、SSH免密登陆设置、Hadoop单机安装步骤、HDFS理论及伪分布式配置。重点讲解了HDFS的主从结构和工作原理,适合Hadoop初学者。
摘要由CSDN通过智能技术生成

Hadoop学习篇(一)

本文档适用于Hadoop开发学习者使用
说明:如涉及到侵权,请及时联系我,并在第一时间删除文章。

Hadoop简介:Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。Hadoop实现了一个分布式文件系统( Distributed File System),其中一个组件是HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,而MapReduce则为海量的数据提供了计算

0. Operating System

Hadoop是Linux平塌下的分布式系统基础架构,本文档会给出Linux、macOS下的环境配置。其中Linux主要会给出CentOS、Ubuntu操作系统下的环境配置。由于Windows需要下载很多插件,且不易操作,所以不建议使用学习

(PS:家境贫寒且想好好学习的,尽量还是使用Free的Linux吧😊)

接下来,言归正传,开始我们本节的介绍。

0.1 Linux

Linux这里主要使用的两个版本是CentOS 7.8和Ubuntu TSL 18.04

如果官网下载比较慢,这里给出163的国内的镜像源地址:

CentOS:http://mirrors.163.com/centos/7/isos/x86_64/

Ubuntu:http://mirrors.163.com/ubuntu-releases/18.04/

(PS:这个上网百度一下应该很快,如果你会科学上网,这里可忽视。)

系统安装就不再介绍,默认看本篇文档的人都会了😁

下面开始介绍系统配置:

0.1.1 CentOS

CentOS是红帽下的一个Linux发布版本,是作为初学者,最简单接受的一款Linux OS。如果你是初学者,亦或是对Linux的命令行操作不是很熟悉的,可以选择这个版本的Linux进行学习。

这里我们主要是用CentOS的yum源进行插件下载。需要下载以下几个插件:

  • openssh

    yum install -y openssh
    
  • openjdk-8-jdk

    yum install -y openjdk-8-jdk
    

这里我们就需要配置一下yum源。(这里是因为CentOS默认yum源是国外服务器,下载起来会很慢,所以这里我们可以修改为国内镜像源)

这里修改为阿里云的镜像源:https://developer.aliyun.com/mirror/centos?spm=a2c6h.13651102.0.0.3e221b11uIjtor

  1. 备份

    mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
    
  2. 下载新的 CentOS-Base.repo 到 /etc/yum.repos.d/

    CentOS 7:

    curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
    

    wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
    
  3. 运行 yum makecache 生成缓存

    yum makecache
    
0.1.2 Ubuntu

相比于CentOS,Ubuntu就很容易了。因为Ubuntu有sudo命令,和apt-get下载。这里我们参照CentOS,需要下载以下几个插件:

(这里使用Ubuntu18.04版)

  • openssh-server

    sudo apt-get install openssh-server
    
  • openssh-client

    sudo apt-get install openssh-client
    
  • openjdk-8-jdk

    sudo apt-get install openjdk-8-jdk
    

0.2 macOS

macOS这里土豪可以来看看,家境贫寒学生党还是绕路而行。。。

插件还是那几个:

  • openssh:macOS自带
  • jdk:Oracle、Openjdk都可以下载

本文档后续实验适用于Ubuntu TSL 18.04操作系统

1. Hadoop Environment Setting

Hadoop环境配置主要是SSH远程登陆、Hadoop单机环境配置、HDFS伪分布式配置、HDFS分布式配置。

本节会围绕以上四个主题展开,同时穿插个人对Hadoop原理的理解

1.1 SSH远程登陆

SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定;SSH 为建立在应用层基础上的安全协议。SSH 是较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。SSH在正确使用时可弥补网络中的漏洞。SSH客户端适用于多种平台。几乎所有UNIX平台—包括HP-UX、Linux、AIX、Solaris、Digital UNIX、Irix,以及其他平台,都可运行SSH。

Hadoop相关实验中,我们需要通过ssh远程登录结点机器,所以需要进行免密登陆和结点登陆设置。

1.1.1 SSH免密登陆设置

进入~/.ssh目录。若没有该目录,则执行一次ssh localhost进入。

输入命令:

ssh-keygen -t rsa

所有提示都按回车键。(因为进行的是无密码登录配置)

最后,将配置信息加入授权。即/.ssh/id_rsa.pub文件内容复制到/.ssh/authorized_pub文件中去。

1.1.2 SSH结点登陆设置
  • 第一步:使用scp命令,将宿主机上的登陆配置信息上传到结点机器上去。命令为:

    # username	: 用户名
    # node_IP		: 结点IP地址
    # node_path	: 结点存储路径
    scp ~/.ssh/id_rsa.pub username@node_IP:node_path
    
  • 第二步:创建~/.ssh文件夹(若以存在可忽略)。

    进入~/.ssh文件中,将id_rsa.pub文件内容复制到authorized_keys文件。之后,就可以删除id_rsa.pub文件了。

每台结点机器上都执行该步骤。

1.2 Hadoop单机安装

首先先来介绍一下Hadoop是个什么东西。

Hadoop时Apache基金会下的一个开源大数据计算平台。学习这个计算平台,可以让我们快速入门大数据处理,并学习到相关大数据处理的理论知识和实践经验。

1.2.1 Hadoop基本概念

Hadoop:Hadoop是Apache下的一个开源的大数据计算平台。是一种基于Java语言开发,能够为用户提供系统底层细节透明的分布式基础架构。

构成:Hadoop计算平台主要是由两大组件——文件系统和计算模式。

文件系统:分布式文件系统HDFS。

计算模式:MapReduce计算模型。

特性:可靠性高、高效、易扩展、容错率大、成本低、支持语言多。下面做一下解释:

  • 可靠性高、容错率大:因为Hadoop的文件系统HDFS在存储文件时,时需要保留副本的,即使一份文件丢失,我们也可以通过查找副本进行恢复。这里类似于我们现实生活中签订的重要合同,甲方有一份,乙方有一。即使双方中有一方合同丢失,也可以去找另一方进行复印保存。
  • 高效:因为Hadoop采用的是并行分布式处理方式,能够快速地处理海量数据集。
  • 易扩展:因为Hadoop的文件存储系统采用的是HDFS存储,借助计算机集群实现。这里的计算集群好扩展,不需要扩展某一个机器的存储容量,只需要以计算机为单位,添加计算机就行。这样,我们就可以把数据分别存放在计算机集群中的机器上。这里就好比我们收拾东西,买了三个箱子,但是发现东西很多,三个箱子不够用,那么我们只需要再准备一个箱子放东西就行。同时,Hadoop生态系统中,采取的列式数据库HBase存储的数据,我们知道,行数据库在存有大量数据时不宜扩展,因为考虑到其扩展列时数据的增删。但是列数据库可以避免这些困难,具体将在HBase数据库中学习到。
  • 成本低:Hadoop是开源项目,而且,只需要搭建计算机集群就可以使用,所以即使是普通用户使用自己的PC机器,也可以通过开虚拟机的方式进行分布式集群搭建。如果是简单的实验测试,也可以配置成伪分布式。
  • 支持语言多:因为Hadoop是基于Java语言开发的开源项目,并且有很多接口供我们选择,所以使用起来很方便。
  • Hadoop生态系统:由HDFS、MapReduce、HBase、Yarn等分布式数据处理组件组成的一套生态圈,被称为Hadoop生态系统。

示意图如下:
在这里插入图片描述
思维导图如下:

Hadoop理论学习思维导图

1.2.2 Hadoop单机安装

进入下载目录,执行安装命令:

# path : Hadoop安装路径
sudo tar -zxf ./hadoop-2.7.7.tar.gz -C path	

安装完成后,进入安装目录,修改目录所属以及权限。命令如下:

# username : 用户名
# path 		 : Hadoop安装路径
sudo chown -R username path/hadoop

然后,进行Hadoop环境配置。在环境配置文件中添加内容如下:

export HADOOP_HOME=/usr/local/Cellar/hadoop	# Hadoop安装路径
export PATH=${PATH}:$HADOOP_HOME/bin:$PATH
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native

配置文件生效。

检查是否安装成功。命令为:

hadoop version

可以看到结果如图所示,则证明hadoop单机安装成功。

在这里插入图片描述

1.2.3 Hadoop伪分布式配置

这里就要开始介绍一下HDFS是什么了。

1.2.3.1 HDFS理论基础

HDFS指的是Hadoop分布式文件处理系统(Hadoop Distributed File System)。要想总结HDFS理论基础,就要先进行计算机集群的总结。HDFS理论基础将从计算机集群、HDFS基本概念进行总结。

1.2.3.1.1 计算机集群
  • 计算机集群:计算机集群在学习过程中,我喜欢将计算机集群和分布式文件系统结合起来。因为计算机集群就是机房中交换机与刀片机的集合体。形象一点,这里计算机集群就好比快递仓库。每个刀片机就好比货架,每个交换机就好比仓库的管理部门。
  • 分布式文件系统:这里分布式文件系统,可以是说是客户端+计算机集群结构的组合体。它主要实现逻辑是,由客户端向计算机集群的主机发送请求,集群中主机对接受到的命令作出反应,并映射到对应分机上进行处理。比如:公司内部人员想要访问机房中的某些数据,需要发送请求到机房主机(交换机),然后由主机相应到的存放指定数据的刀片机,读取文件后并返回数据。再具像化一点,就好比我们的快递仓库。这里交换机就好比仓库的总管,在有人来仓库找包裹时,管理员会通过快递件存放的位置,去货架上寻找。找到后,将其交给收件人。

(这里需要注意一点:分布式文件系统结构和计算机集群结构的不同。)

分布式文件系统的结构是【客户端+主节点+数据结点】,即【客户端+计算机集群】。但是主节点和数据结点分别有什么用处呢?为什么要这样做呢?

这里简单总结一下分布式文件系统架构的原理:客户端负责发送数据请求,主结点通过客户端发送的请求,对不同的、需要相应的数据结点进行相应。可以说,主结点只起到了一个桥梁作用,它既不用来存数据,也不用来进行数据的操作。换句话说,主结点就好比整个系统的一个“小BOSS”,数据结点能就好比一个个的部门。“小BOSS”每天只需要记得那个结点干的什么活就成。这边有客户来谈生意,或者来安排任务,“小BOSS”完全不用干,只需要告诉他们去哪个部门处理就行了。

1.2.3.1.2 HDFS基本概念

要想了解HDFS,就必须要了解HDFS的相关基本概念和名词。

  • :在计算机集群架构中,文件并不是以字节为单位进行存储,而是被分成了不同大小的块,分别存储在不同的数据结点中。(这样做的优势在于每次读取文件的时候,没有必要一个字节一个字节对文件进行读取,在获取到文件分成块后所在数据结点的地址后,直接进行调用,从而大大提高了文件的读写速度;将文件切分开存储在不同的机器上,可以达到扩容的效果,可以存储大规模的文件。)在Hadoop2.x的时代,一般情况下,每个块的大小会默认设定为128MB。

  • 主结点:NameNode,又被称为“名称结点”。在HDFS中可以看作是“总管”。它的主要作用就是管理HDFS的命名空间。在我们每一次需要进行文件读写操作时,都需要经过“总管”(NameNode)的许可,才能够去“仓库”(DataNode)去进行文件的读写操作。

    • 在主结点中,主要由FsImage和EditLog组成。

      • 这里FsImage保存的是所有文件在该空间下的位置,相当于该空间下的一个“地图”,通过这个地图,我们可以快速找到该文件被分成了几块,分别存储到了哪些“仓库”中,存储到了“仓库”中的哪个货架上。
      • EditLog可以看作是“记录本”。“总管”每次上班时,会带一个新的“记录本”。每一次我们找“总管”的时候,都应该先制定好任务规划,并且记录到“记录本”。之后“总管”会经过判断,决定是给予我们权限做这项任务。允许之后,我们就可以根据“记录本”上的任务规划进行文件的更新操作,这样可以提高我们的工作效率。(这里引用一个EditLog文件,可以理解为,“总管”管理“仓库”时,因为手下人很多,如果来一个就在地图上标记一下,来一个就标记一下,工作效率会很慢。而且,有的时候,他只是来询问,并不是要真正要做。不如直接设立一个“记录本”,你来一个提需求的,我就在“记录本”上记录一条,不需要“总管”修改地图。第二天“总管”上班时,秘书会提前修改好地图信息,并放在“总管”桌子上。)
    • 所以,每一次NameNode启动时,“地图”信息(FsImage)都会加载到内存中,然后执行“记录本”(EditLog)中的各项操作,使得内存中的数据保持最新。之后,NameNode会创建一个新的FsImage和一个空的EditLog文件,每一次进行HDFS中的更新操作是,都会直接将操作记在“记录本”上,从而增加工作效率。“总管”每天的工作就是,检查“地图”,管理仓库。有人来提需求,我就干活,没人来,我就看好仓库,防止货架倒塌意外的发生(数据结点宕机)。

    • NameNode的工作流程可以总结为:启动NameNode—>加载FsImage内容—>执行EditLog中的操作—>创建新的FsImage和EditLog文件—>更新信息时,直接在EditLog中进行更新。(通俗点讲:“总管”上班了—>拿到“仓库地图”—>有人来提任务?允许你做,记在“记录本”上—>下班了。第二天上班前,秘书负责按照“记录本”上的内容对“查看地图进行更新—>“总管”上班了。依次循环更新。)

  • 数据结点:DataNode。数据结点在HDFS中可以看作是“仓库”。它的主要作用就是存放那些被分成快的文件内容。需要的时候,我们需通过“总管”同意后挪用,进行文件的读写操作。

    • 在计算机集群中,DataNode一般会有多个冗余项存在。其优点在于,我们每次去找这些数据时,可以不用花费在一台机器上,可以在多台机器上进行查找,在哪个地方先找到,就调用哪个DataNode的数据。假设我们有两个“仓库”存放这个文件的原件和复印件的相同数据块,只不过原件在仓库1的最后一个货架上,复印件在仓库2的第一个货架上。我现在需要找第三个数据块的内容,我就让工人从两个“仓库”中同时查找,我先找到了复印件,就直接去读复印件的内容即可,这样也大大提高了数据的传输速度。这里可以总结为“优先原则”。我不管是原件还是复印件,谁能先找到,我就要哪一个。(这也就是数据结点的存取原理,可以加快数据的传输速度、检查数据是否出错、确保数据的真实可靠。)
    • 同时,为了防止读取到的内容在传送过程中出现错误,可以返回到其它DataNode中进行检查,简化了单个DataNode检查的程度。意思是,我这边找到了复印件1,其他货架上的工人的活不能停,直到他们找到了他们货架的文件,拿过来和我的比对,正确的话,我的就被拿走使用。不对,那我就被淘汰了,“优先原则”看那三个的,然后比对。这里可以总结为“正确原则”。拿的快,好!但要注意正确性。
    • 日常生活中,对于重要的数据或者文件,我们都会对其进行备份。多个DataNode就可以通过备份文件内容,保证数据的可靠性。如果一个“仓库”损坏导致数据丢失,我们的备份文件就可以避免这种危险。
  • 第二名称结点:SecondaryNameNode。我们可以把它看作“副总管”。现实生活中,往往“副总管”权力小、干活多。这里SecondaryNameNode基本上是这样的。和“总管”不同,他不像“总管”那样清闲。他需要时刻关注“总管”动向、身体情况。在“总管”不能来的情况下,“副总管”需要迅速顶替“总管”的位置,确保仓库内工作的有序进行。而且,他还要合并更新“记录本”和“地图”。因为每天上班都会有一个新的“记录本”和“地图”,有的时候,“记录本”根本用不完。为了节省空间,就需要将上边的内容进行合并,这样方便今后工作。即SecondaryNameNode有两个用处:一是NameNode宕机时,SecondaryNameNode会快速顶替NameNode位置,确保集群工作有序进行;二是合并整理EditLog和FsImage,减小其占用空间的大小。

    • 由于Secondary NameNode的特殊性,其始终还是NameNode的一个备份,不能够完全替代NameNode,所以真的在发生NameNode宕机时,现实中还是会造成一定的数据丢失。
    • 这里插一句:在Hadoop2.x时代以前,我们也知道设立备份结点,但其用途主要是在主结点宕机后,关闭整个集群进行恢复。这种“事后弥补”的措施我们称为“冷备份”。而现在的SecondaryNameNode,可以迅速顶替“总管”位置,达到“遇到问题有人顶”的效果。这种我们称为“热结点”。

有关HDFS,这里还需要注意:HDFS集群中有且只有一个名称结点和第二名称结点,若干个数据结点,每个数据结点会被分为若干个块,该系统下的文件会被分为不同的块,存储在不同的数据结点上。

HDFS示意图如图所示:
在这里插入图片描述

1.2.3.2 Hadoop伪分布式配置

这里需要先配置三个文件的内容:

  • hadoop安装路径/etc/hadoop/core-site.xml

    文件内容为:

    <configuration>
        <property>
            <name>hadoop.tmp.dir</name>
            <value>file:/usr/local/hadoop/tmp</value>
           	<description>Abase for other temporary directories.</description>
        </property>
        <property>
            <name>fs.defaultFS</name>
            <value>hdfs://localhost:9000</value>
        </property>
    </configuration>
    
  • hadoop安装路径/etc/hadoop/hdfs-site.xml

    文件内容为:

    <configuration>
        <property>
            <name>dfs.replication</name>
            <value>1</value>
        </property>
        <property>
            <name>dfs.namenode.name.dir</name>
            <value>file:/usr/local/hadoop/tmp/dfs/name</value>
        </property>
        <property>
            <name>dfs.datanode.data.dir</name>
            <value>file:/usr/local/hadoop/tmp/dfs/data</value>
        </property>
    </configuration>
    
  • hadoop安装路径/etc/hadoop/hadoop-env.sh

    文件内容为:

    export JAVA_HOME=${JAVA_HOME}
    

配置完成后,执行 NameNode 的格式化。执行命令为:

path/bin/hdfs namenode -format

初始化成功的标志是参数为0。否则就存在错误,需重新进行上述步骤进行配置。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值