0


Hadoop(一) 原理简介、基本构建

一、Hadoop简介

1.1 什么是Hadoop

    Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群实现高速运算和存储。

    Hadoop实现了一个分布式文件系统( Distributed File System),其中一个组件是HDFS(Hadoop Distributed File System)。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。

1.2 Hadoop 优势

    Hadoop主要是针对大数据所设计的分布式文件存储工具,所以它有一下特点:

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

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

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

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

1.3 Hadoop的主要模块

    hadoop Common: 包括Hadoop常用的工具类,主要包括系统配置工具Configuration、远程过程调用RPC、序列化机制和Hadoop抽象文件系统FileSystem等。

    Hadoop Distributed File System (HDFS): 分布式文件系统,提供对应用程序数据的高吞吐量,高伸缩性,高容错性的访问。

    Hadoop YARN: 任务调度和集群资源管理。

    Hadoop MapReduce: 基于YARN的大型数据集并行处理系统。是一种计算模型,用以进行大数据量的计算。

在大数据的计算中,迁移计算往往比迁移数据更有效。

1.4 架构描述

1.4.1 HDFS架构

    该架构主要分为3个模块:NameNode、DataNode、Secondary NameNode

    NameNode(NN):存储文件的元数据,如文件名,文件目录结构,文件属性(生成时间、副本数、文件权限),以及每个文件的块列表和块所在的DataNode等。

    DataNode(DN):在本地文件系统存储文件块数据,以及块数据的校验和。

   Secondary NameNode(2NN):每隔一段时间对NameNode元数据备份。

1.4.2 YARN架构

    该架构主要分为4个模块:ResourceManager、NodeManager、ApplicationMaster、Container;

    ResourceManager(RM):整个集群资源(内存、CPU等)的管理者;

    NodeManager(NM):单个节点服务器资源的管理者;

    ApplicationMaster(AM):单个任务运行的管理者;

    Container:容器,相当于一台独立的服务器,里面封装了任务运行所需要的资源,如内存、CPU、磁盘、网络等。


图 1 YARN架构

1.4.3 MapReduce架构

     该架构主要分为2个阶段:Map阶段、 Reduce 阶段

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


图 2 MapReduce架构

1.4.4 三者关系


图3 三者关系

1.5 大数据的生态模型


图4 大数据资源模型

名词解释:

    Sqoop:Sqoop 是一款开源的工具,主要用于在Hadoop、Hive 与传统的数据库(MySQL)间进行数据的传递,可以将一个关系型数据库(例如 :MySQL,Oracle 等)中的数据导进到Hadoop 的HDFS 中,也可以将HDFS 的数据导进到关系型数据库中。

    Flume:Flume 是一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume 支持在日志系统中定制各类数据发送方,用于收集数据。

    Kafka:Kafka 是一种高吞吐量的分布式发布订阅消息系统。

    Spark:Spark 是当前最流行的开源大数据内存计算框架。可以基于Hadoop 上存储的大数据进行计算。

    Flink:Flink 是当前最流行的开源大数据内存计算框架。用于实时计算的场景较多。

    Oozie:Oozie 是一个管理Hadoop 作业(job)的工作流程调度管理系统。

    Hbase:HBase 是一个分布式的、面向列的开源数据库。HBase 不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。

    Hive:Hive 是基于Hadoop 的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的SQL 查询功能,可以将SQL 语句转换为MapReduce 任务进行运行。其优点是学习成本低,可以通过类SQL 语句快速实现简单的MapReduce 统计,不必开发专门的MapReduce 应用,十分适合数据仓库的统计分析。

    ZooKeeper:它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护、名字服务、分布式同步、组服务等。

二、Hadoop的安装和调试

    官网:https://hadoop.apache.org

    官方文档:https://hadoop.apache.org/docs

    下载连接:https://hadoop.apache.org/releases.html

本文实验所需要的安装包:

    jdk-18_linux-x64_bin.tar   hadoop-3.2.1.tar

常用端口说明:

2.1 安装

###在对应的网站下载相应的包

##创建指定的hadoop用户进行操作
useradd hadoop
echo hadoop | passwd --stdin hadoop
mv * /home/hadoop/
su - hadoop    

##对数据包进行解压
tar zxf jdk-8u181-linux-x64.tar.gz
tar zxf hadoop-3.2.1.tar.gz

##设置相应的软连接
ln -s jdk1.8.0_181/ java
ln -s hadoop-3.2.1/ hadoop

##修改环境变量,指定Java和Hadoop的路径
vim hadoop-env.sh
    -export JAVA_HOME= /home/hadoop/java
    -export JAVA_HOME= /home/hadoop/hadoop

【注】创建软连接是为了更好的在版本升级时的切换。

2.2 Hadoop的运行

    Hadoop运行模式分为3种:本地模式 、伪分布式模式以及完全分布式模式

    本地模式:单机运行,演示官方案例,生产环境一般不使用;

    伪分布式模式:单机运行,具备 Hadoop集群的所有功能。一台服务器模拟一个分布式的环境 。可内部测试使用,生产环境不用。

    完全分布式模式: 多台服务器组成分布式环境。 生产环境使用。

2.2.1 本地模式(Standalone Operation)

    创建input目录,将默认配置文件目录中以xml文件为后缀的拷贝到input目录,使用jar命令过滤input目录文件中以dfs开头的内容,并且自动创建output目录
##在Hadoop目录下完成

##创建目录
mkdir input

##目录里输入内容
cp etc/hadoop/*.xml input

##进行目标查找
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.1.jar grep input output 'dfs[a-z.]+'

##查看结果
cat output/*

2.2.2 伪分布式(Pseudo-Distributed Operation)

    在单个节点上运行,其中每个Hadoop守护进程在单独的Java进程中运行

配置:

##查看本机的workers
cat etc/hadoop/workers

##修改配置文件,设置本机为master
vim etc/hadoop/core-site.xml
-----------------------------
<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9000</value>
    </property>
</configuration>
----------------------------

##设置副本数为1
vim etc/hadoop/hdfs-site.xml
-----------------------------
<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
</configuration>
-----------------------------

##检查ssh的免密登录
ssh-keygen
ssh-copy-id localhost  #密码则为用户hadoop的密码
ssh localhost          #如果不需要密码,则免密登陆成功
exit                #使用exit退出ssh,否则会叠加shell,引起错乱

##初始化化文件系统--初始化后的文件都在tmp中,可以进行查看
bin/hdfs namenode -format

##启动NameNode守护程序和DataNode守护程序
sbin/start-dfs.sh

##使用jps查看当前进程---->jps是jdk提供的一个查看当前java进程的小工具(在java/bin)
##我们可以直接写入环境变量中
vim ~/.bash_profile
-----------------------
PATH=$HOME/java/bin

##创建分布式用户目录/user/hadoop(该子目录的名字hadoop必须与操作用户hadoop一致)
bin/hdfs dfs -mkdir /user/hadoop    ---->创建完成后即可查看

##使用浏览器打开节点--->图形界面查看信息
172.25.21.1:9870

##使用命令行查看信息
bin/hdfs dfsadmin -report

使用:

##在分布式文件系统中创建input目录,输入数据
bin/hdfs dfs -mkdir input
bin/hdfs dfs -put etc/hadoop/*.xml input

##查看文件内容---web页面也可以查看
bin/hdfs dfs -ls
bin/hdfs dfs -ls input/

##测试--使用Hadoop自测的包,统计里面的数字并输出到相应的文件中
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.1.jar wordcount input output
bin/hdfs dfs -ls
bin/hdfs dfs -cat output/*   -----此时生成的ouput目录在分布式文件系统中,与本地的output无关

master的端口为:9000

datanode的端口为:9866

【注】在文件输出时,目标文件不能存在

输入文件在web界面查看:

2.2.3 完全分布式(Fully-Distributed Operation)

    将NN和DN分开
##停止之前的hdfs
--sbin/stop-dfs.sh

##workers文件中指定数据节点--这里要提前做好解析
server2
server3

##server1中修改etc/hadoop/core-site.xml 文件,由于是完全分布式,必须指定ip
----------------------
<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://172.25.21.1:9000</value>
    </property>
</configuration>
----------------------

##修改hdfs etc/hadoop/hdfs-site.xml -----设置由两个数据节点
----------------------
<configuration>
    <property>
        <name>dfs.replication</name>
        <value>2</value>
    </property>
</configuration>
----------------------

##安装nfs,设置开机启动--->使配置文件共享
yum install nfs-utils -y
systemctl enable --now  nfs

##sever2\3创建相应的hadoop用户,使ID保持一致
useradd hadoop
id hadoop

##server1配置网络共享/home/hadoop,让hadoop用户有权力可读可写,并重启nfs服务
vim/etc/exports
--------
/home/hadoop    *(rw,anonuid=1000,anongid=1000)
--------
systemctl restart  nfs
showmount -e        #查看文件挂载的目录

##server2 server3 分别挂载网络文件
mount 172.25.21.1:/home/hadoop/ /home/hadoop/
su - hadoop
ls

##配置完成后进入server1 初始化配置
bin/hdfs namenode -format

##开启server1上的namenode

##开启后发现server2和server3上的datenode也被打开,使用jps查看进程
jps        #每个节点分别查看,可以看到相应的节点身份

##网页中也可以查看
172.25.21.1:9870(nn端)

2.2.4 节点扩容

##设置新加入节点的最基本信息
yum install  -y nfs-utils.x86_64    #安装nfs
useradd hadoop                        ##创建hadoop用户
id hadoop                           #确保uid和gid都是1000
mount 172.25.21.1:/home/hadoop/ /home/hadoop/  ##挂载网络文件目录
df                ##查看挂载

##配置server1中的worker文件,设置工作节点为3个

##在新加入的节点中,启动相应的数据节点
bin/hdfs --daemon start datanode
jps  ##查询java进程

##在网络端查看即可

参考文档:大数据技术之Hadoop(入门)概述、运行环境搭建、运行模式_@从一到无穷大的博客-CSDN博客

标签: hadoop 大数据 hdfs

本文转载自: https://blog.csdn.net/qq_41056224/article/details/126487785
版权归原作者 Hemi Fate 所有, 如有侵权,请联系我们删除。

“Hadoop(一) 原理简介、基本构建”的评论:

还没有评论