大数据Hadoop学习一

大数据概述:

分布式技术完成海量数据的处理
核心工作:从海量的高增长、多类别、低信息密度的数据中挖掘出高质量的结果
总结为三点:数据计算 数据存储 数据传输

大数据软件生态:

数据存储:

Apache Hadoop-HDFS(大数据体系中使用最为广泛的分布式存储技术)
Apache HBase(大数据体系中使用非常广泛的NoSQL KV型数据库技术,HBase是基于HDFS之上构建的)
Apache KUDU(使用较多的分布式存储引擎)

数据计算:

Apache Hadoop-MapReduce(最早一代的大数据分布式计算引擎)
Apache Hive(以SQL为要开发语言的分布式计算框架,底层使用了Hadoop的MapReduce技术)
Apache Spark(分布式内存计算引擎)
Apache Flink(分布式内存计算引擎,在实时计算也就是流计算领域,占据大多数国内市场)

数据传输:

Apache Kafka(分布式消息系统,可完成海量规模的数据传输工作)
Apache Pulsar(也是分布式的消息系统)
Apache Flume(流式数据采集工具,可以从众多数据源中完成数据的采集传输的任务)
Apache Sqoop(是一款ETL工具,可协助大数据体系和关系型数据库之间进行数据传输)

Apache Hadoop

可以部署在1台乃至成千上万服务器节点上协同工作
个人或者企业可以借助Hadoop构建大规模服务器集群,完成海量数据的存储和计算
三大功能:
分布式数据存储
分布式数据计算
分布式策源调度
为一体的整体解决方案

三个功能组件:

HDFS组件(分布式存储组件,可以构建分布式文件系统用于数据存储)
MapReduce组件(分布式计算组件,提供编程接口供用户开发分布式计算程序)
YARN组件(分布式资源调度组件 可供用户整体调度大规模集群的资源使用)

Hadoop HDFS分布式文件系统

为什么要使用分布式存储技术

数据量太大,单机存储能力有上限,需要靠数量解决问题,分布式组合在一起可以达到1+1>2的效果
例子:文件太大时,单台服务器无法承担,要靠数量取胜,多台服务器组合,完成存储任务
分布式存储技术不仅仅解决存的问题,多台服务器协同工作带来的是性能的横向拓展
例如:将一个文件分成三份,存入三台服务器,实现三倍的网络传输效率,三倍的磁盘写入效率(取出文件也是这样有三倍的网络传输效率和三倍的磁盘读取效率)

分布式的基础架构分析

分布式的基础架构:

大数据体系中,分布式的调度主要有两类架构模式:
去中心化模式

就是没有明确的中心,众多服务器之间基于特定规则进行同步协调

中心化模式

有明确中心,听一个服务器调度

主从模式

大数据框架中,多数的基础框架上,都是符合中心化模式的,即:有一个中心节点(服务器)来统筹其他的服务器工作,统一指挥,统一调派,避免混乱。
这种模式也称为:一主多从模式,简称主从模式
典型:公司企业管理、组织管理、行政管理
Hadoop是典型的主从模式架构的技术框架

HDFS的基础架构

HDFS以及其和hadoop的关系

HDFS是Hadoop技术栈内提供的分布式数据存储解决方案可以在多台服务器上构建存储集群,存储海量数据

Hadoop HDFS分布式存储系统的基础架构角色

HDFS是一个典型的主从模式架构(中心化模式架构)
HDFS集群:
主角色:NameNode(发布命令)

  • HDFS系统的主角色,是一个独立的进程
  • 负责管理HDFS整个文件系统
  • 负责管理DataNode 从角色:DataNode(根据NameNode发布的命令执行)
  • 也是一个独立的进程
  • 主要负责数据的存储,即存入数据和取出数据 主角色辅助角色:SecondaryNameNode
  • 也是一个独立进程
  • 主要帮助nameNode完成元数据整理工作(打杂)
    基础架构

    image

    HDFS的集群环境部署

    VMware虚拟机中部署

    官网下载地址:
    https://hadoop.apache.org/releases.html
    集群规划:
    三台虚拟机的硬件配置:

    节点 CPU 内存
    node1 1核心 4GB
    node2 1核心 2GB
    node3 1核心 2GB

    服务规划:

    节点 服务
    node1 NameNode、DataNode、SecondaryNodeNode
    node2 DataNode
    node DateNode
    由此集群由一个主节点带领三个从节点构成
    上传&解压
  • 下面1~4都在node1节点执行,以root身份登录

    1.上传Haddop安装包到node1节点中
    借助FinalShell完成上传(直接将压缩包拖拽到目录中即可)
    image

    2.解压压缩包到/export/server/中

    tar -zxvf hadoop-3.3.4.tar.gz -C/export/server
    

    进行解压缩

    image

    3.构建软链接

    cd /export/server
    ln -s /export/server/hadoop-3.3.4 hadoop
    

    /export/server目录中存在hadoop
    image

    完成软链接构建

    image

    4.进入hadoop安装包内

    cd hadoop
    

    借助命令ls -l(或者ll)查看文件夹内部结构

    image
    以上图片中重要的就是bin、etc(部署阶段重点关注)和sbin

    修改配置文件,应用自定义设置

    配置HDFS集群,涉及以下文件的修改:

  • workers: 配置从节点(DataNode)有哪些
  • hadoop-env.sh:配置Hadoop的相关环境变量
  • core-site.xml:Hadoop核心配置文件
  • hdfs-site.xml:HDFS核心配置文件

    以上文件存在于$HADOOP_HOME/etc/hadoop
    ps:$HADOOP_HOME是后续要设置的环境变量,其代指Hadoop安装文件夹即/export/server/hadoop

    image

  • 配置workers文件
    #进入配置文件目录
    cd etc/hadoop
    #编辑workers文件
    vim workers
    #填入如下内容
    node1
    node2
    node3
    

    填入的node1、node2、node3表明集群记录了三个从节点(DataNode)

    服务规划:

    节点 服务
    node1 NameNode、DataNode、SecondaryNodeNode
    node2 DataNode
    node DateNode

    在以上的服务器划分中三个服务器都划分了DataNode,所以在workers文件中要填入三个node123服务器
    进入workers文件内

    image
    按两下dd删除现有的内容再填入上述内容
    然后点击Esc然后输入:wq保存

    image

  • 配置hadoop-env.sh文件
    #填入如下内容
    #JAVA_HOME指出JDK环境的位置
    export JAVA_HOME=/export/server/jdk
    #HADOOP_HOME指明Hadoop安装位置
    export HADOOP_HOME=/export/server/hadoop
    #HADOOP_CONF_DIR指明Hadoop配置文件目录位置
    export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
    #HADOOP_LOG_DIR指明Hadoop运行日志目录位置
    export HADOOP_LOG_DIR=$HADOOP_HOME/logs
    

    输入vim hadoop-env.sh回车进入
    image
    接着填入上面提到的内容

    image

    通过记录这些环境变量,来指明上述运行的重要信息

  • 配置core-site.xml文件
    #在文件中填入
    <configuration>
      <property>
        <name>fs.defaultFS</name>
        <value>hdfs://node1:8020</value>
      </property>
      <property>
        <name>io.file.buffer.size</name>
        <value>131072</value>
      </property>
    </configuration>
    

    以上代码中

    key:fs.defaultFS
    含义:HDFS文件系统的网络通讯路径、
    值:hdfs://node1:8020

  • 协议为hdfs://
  • namenode为node1
  • namenode通讯端口为8020

    key:io.file.buffer.size
    含义:io操作文件缓冲区大小
    值:131072bit

    hdfs://node1:8020为整个HDFS内部的通讯地址,应用协议为hdfs://(Hadoop内置协议)
    表明DataNode将和node1的8020端口通讯,node1是NameNode所在机器
    此配置固定了node1必须启动NameNode进程

    使用vim core-site.xml打开该文件

    image

    填入内容
    联想截图_20250826110828

  • 配置hdfs-site.xml文件
    #在文件内部填入如下内容\
    <configuration>
      <property>
        <name>dfs.datanode.data.dir.perm</name>
        <value>700</value>
      </property>
      <property>
        <name>dfs.namenode.name.dir</name>
        <value>/data/nn</value>
      </property>
      <property>
        <name>dfs.namenode.hosts</name>
        <value>node1,node2,node3</value>
      </property>
      <property>
        <name>dfs.blocksize</name>
        <value>268435456</value>
      </property>
      <property>
        <name>dfs.namenode.handler.count</name>
        <value>100</value>
      </property>
      <property>
        <name>dfs.datanode.data.dir</name>
        <value>/data/dn</value>
      </property>
    </configuration>
    

    解释:

  • dfs.datanode.data.dir.perm -> 配置datanode的权限
  • 含义:hdfs文件系统,默认创建的文件权限设置(hadoop新建的文件默认权限为700的权限)
    值:700,即:rwx------

  • dfs.namenode.name.dir ->配置namenode的存储
  • 含义:NameNode元数据的存储位置
    值:/data/nn,在node1节点的/data/nn目录下

  • dfs.namenode.hosts ->配置namenode的主机
  • 含义:NameNode允许那几个节点的DataNode连接(即允许加入集群)
    值:node1、node2、node3,这三台服务器被授权(哪几个是被主机认证的)

  • dfs.blocksize -> 配置一个块的大小
  • 含义:hdfs默认块大小
    值:268435456(256MB)

  • dfs.namenode.handler.count -> 配置并发数
  • 含义:namenode处理的并发线程数
    值:100,以100个并行度处理文件系统的管理任务

  • dfs.datanode.data.dir -> 配置datanode的存储目录
  • 含义:从节点DataNode的数据存储目录
    值:/data/dn,即数据存放在node1、node2、node3,三台机器的/data/dn内

    准备数据目录

    根据下述两个配置项:

    <property>
        <name>dfs.namenode.name.dir</name>
        <value>/data/nn</value>
      </property>
    
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>/data/dn</value>
      </property>
    

    namenode数据存放的node1的/data/nn
    datanode数据存放node1、node2、node3的/data/dn
    所以应该在node1节点:

    mkdir -p /data/nn
    mkair /data/dn
    

    在node2和node3节点:

    mkdir -p /data/dn
    

    image

    分发Hadoop文件夹

    到此为止,已经基本完成Hadoop的配置操作,可以从node1将hadoop安装文件夹远程复制到node2、node3

  • 分发
    #在node1执行如下命令
    cd /export/server
    scp -r hadoop-3.3.4 node2:`pwd`/
    scp -r hadoop-3.3.4 node3:`pwd`/
    

    scp操作需要大概五分钟左右

  • 在node2执行,为hadoop配置软链接
    ln -s /export/server/hadoop-3.3.4 /export/server/hadoop
    

    image

  • 在node3执行,为hadoop配置软链接
    ln -s /export/server/hadoop-3.3.4 /export/server/hadoop
    

    image

    配置环境变量

    为了方便,可以将Hadoop的一些脚本、程序配置到PATH中,便于使用
    在Hadoop文件夹中的bin、sbin两个文件夹内有许多的脚本和程序
    1.vim /etc/profile

    #在/etc/profile文件底部追加如下内容
    export HADOOP_HOME=/export/server/hadoop
    export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
    

    使用source /etc/profile刷新配置
    2.在node2和node3配置同样的环境变量

    授权为hadoop用户

    为了安全,hadoop系统不以root用户启动,我们以普通用户hadoop来启动整个hadoop服务
    所以要对文件权限进行授权
    ps:确保已经创建好了hadoop用户,并配置好了hadoop用户之间的免密登录

  • 以root身份,在node1、node2、node3三台服务器上均执行以下命令
    chown -R hadoop:hadoop /data
    chown -R hadoop:hadoop /export
    

    image

    格式化整个文件系统

    前期准备全部完成,现在对整个文件系统执行初始化

  • 格式化namenode
    #确保以hadoop用户执行
    su - hadoop
    #格式化namenode
    hadoop namenode -format
    

    格式化成功验证
    image

  • 启动
    #一键启动hdfs集群
    start-dfs.sh
    #一键关闭hdfs集群
    stop-dfs.sh
    
    #如果遇到命令未找到的操作,表明环境变量未配置好,可以以绝对路径执行
    /export/server/hadoop/sbin/start-dfs.sh
    /export/server/hadoop/sbin/stop-dfs.sh
    

    按照服务规划node1启动结果如下
    image
    node2结果如下:
    image
    node3结果如下:
    image

    查看HDFS WEBUI

    启动完成后,可以在浏览器打开:
    http://node1:9870,即可查看到hdfs文件系统的管理网页
    image
    可以看见整个HDFS文件的详细信息
    image
    关闭集群:

    image

    总结

    遇到的问题:
    如何更换目录返回使用cd命令
    有时候连接会断开,需要重新连接
    image
    之前下载到电脑上的Hadoop压缩包存在问题,在虚拟机解压缩时文件存在损坏,导致hadoop不能使用,之后更换华为云镜像进行重新下载后重新配置了

    wget https://mirrors.huaweicloud.com/apache/hadoop/common/hadoop-3.4.1/hadoop-3.4.1.tar.gz
    
  • posted @ 2025-07-23 21:26  haoyinuo  阅读(12)  评论(0)    收藏  举报