大数据开发初识Hadoop(第四篇)

198 阅读6分钟

一、什么是Hadoop

Hadoop适合海量数据分布式存储分布式计算

1.1、Hadoop发行版本介绍

目前Hadoop已经演变成为大数据的代名词,形成了一套完善的大数据生态系统,所以针对Hadoop就出现了很多发行版

  1. Apache Hadoop:官方版本,开源
  2. Cloudera Hadoop(CDH),商业版本,对官方版本做了一些优化,提供收费技术支持,提供界面操作,方便集群运维管理
  3. HortonWorks(HDP)开源,提供界面操作,方便运维管理。(ps:目前HDP已经被CDH收购,都是属于一个公司的产品)
1.2、Hadoop版本演变历史
  1. Hadoop 1.x

    • MapReduce(分布式计算)
    • HDFS(分布式存储)
  2. Hadoop 2.x

    • HDFS
    • YARN(集群资源的管理和调度)
    • MapReduce
    • Others
  3. Hadoop 3.x

    • HDFS
    • YARN
    • MapReduce
    • Others

Hadoop 3.x的细节优化。支持Java8以上;HDFS支持纠删码;支持多NameNode;MR任务本地优化;多重服务默认端口变更

纠删码:是一种比副本存储更节省存储空间的一个数据持久化方案。相同容错的情况下,可以比之前的副本机制节省一半左右的内存空间

二、Hadoop集群安装部署

  1. Hadoop官网archive.apache.org/dist/hadoop…下载3.3.4版

  2. 需要实现ssh免密码登录。ssh是 Secure Shell 是安全的。通过ssh可以远程登录到其他机器上。启动的时候,我们只要启动一台机器,hadoop可以通过ssh远程登录到其他机器上,然后启动其机器。(不论伪分布、还是集群,都需要ssh)

  3. 生成ssh

    ssh-keygen -t rsa

    一路回车。最终在用户的~/.ssh目录下。/root/.ssh

    cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

  4. 然后登录 ssh bigdata01(机器名称)

2.1、伪分布式集群安装

使用一台Linux机器

  1. 解压hadoop

    tar -zxvf hadoop-3.3.4.tar.gz

  2. 配置环境变量

    export JAVA_HOME=/root/software/jdk1.8.0_341
    export HADOOP_HOME=/root/software/hadoop-3.3.4
    export PATH=.:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
    
  3. 修改hadoop配置文件在etc目录下

    • vi hadoop-env.sh

      export JAVA_HOME=/root/software/jdk1.8.0_341
      export HADOOP_LOG_DIR=/data/hadoop_repo/logs/hadoop
      
    • vi core-site.xml

      注意 fs.defaultFS 属性中的主机名需要和你配置的主机名保持一致

      <configuration>
          <property>
              <name>fs.defaultFS</name>
              <value>hdfs://bigdata01:9000</value>
          </property>
          <property>
              <name>hadoop.tmp.dir</name>
              <value>/data/hadoop_repo</value>
          </property>
      </configuration>
      
    • vi hdfs-site.xml

      把hdfs中文件副本的数量设置为1,因为现在伪分布集群只有一个节点

      <configuration>
          <property>
              <name>dfs.replication</name>
              <value>1</value>
          </property>
      </configuration>
      
    • vi mapred-site.xml

      设置mapreduce使用的资源调度框架

      <configuration>
          <property>
              <name>mapreduce.framework.name</name>
              <value>yarn</value>
          </property>
      </configuration>
      
    • vi yarn-site.xml

      设置yarn上支持运行的服务和环境变量白名单

      <configuration>
          <property>
              <name>yarn.nodemanager.aux-services</name>
              <value>mapreduce_shuffle</value>
          </property>
          <property>
              <name>yarn.nodemanager.env-whitelist</name>
              <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASS</value>
          </property>
      </configuration>
      
    • 修改workers,设置集群中从节点的主机名信息,在这里就一台集群,所以就填写bigdata01即可

  4. 格式化HDFS

    配置文件到这就修改好了,但是还不能直接启动,因为Hadoop中的HDFS是一个分布式的文件系统,文

    件系统在使用之前是需要先格式化的,就类似我们买一块新的磁盘,在安装系统之前需要先格式化才可以

    使用。

    cd /root/software/hadoop-3.3.4

    bin/hdfs namenode -format

    image-20220902234939158

  5. 提示:

    如果提示错误,一般都是因为配置文件的问题,当然需要根据具体的报错信息去分析问题。

    注意:格式化操作只能执行一次,如果格式化的时候失败了,可以修改配置文件后再执行格式化,如果格式化成功了就不能再重复执行了,否则集群就会出现问题。

    如果确实需要重复执行,那么需要把/data/hadoop_repo目录中的内容全部删除,再执行格式化。

  6. 启动伪分布式

    sbin/start-all.sh

    此时报很多error

    image-20220902235453557

  7. 解决办法

    • vi start-dfs.sh

      HDFS_DATANODE_USER=root
      HDFS_DATANODE_SECURE_USER=hdfs
      HDFS_NAMENODE_USER=root
      HDFS_SECONDARYNAMENODE_USER=root
      
    • vi stop-dfs.sh

      HDFS_DATANODE_USER=root
      HDFS_DATANODE_SECURE_USER=hdfs
      HDFS_NAMENODE_USER=root
      HDFS_SECONDARYNAMENODE_USER=root
      
    • vi start-yarn.sh

      YARN_RESOURCEMANAGER_USER=root
      HADOOP_SECURE_DN_USER=yarn
      YARN_NODEMANAGER_USER=root
      
    • vi stop-yarn.sh

      YARN_RESOURCEMANAGER_USER=root
      HADOOP_SECURE_DN_USER=yarn
      YARN_NODEMANAGER_USER=root
      
  8. 重新启动

    sbin/start-all.sh

  9. 伪分布集群架构

    伪分布式Hadoop.drawio

  10. 启动后的效果

image-20220903000539756

通过jps命令查看

image-20220903000601665

hadoop 3.x

hdfs的端口号:9870

或者浏览器验证:http://192.168.234.100:9870/dfshealth.html#tab-overview

yarn的端口号:8088

或者浏览器验证:http://192.168.234.100:8088/cluster

停止命令: sbin/stop-all.sh

2.2、分布式集群安装

使用三台Linux机器

分布式集群.drawio

这三台机器的ip、hostname、firewalld、ssh免密码登录、JDK这些基础环境已经配置ok。

  1. 配置/etc/hosts

    因为需要在主节点远程连接两个从节点,所以需要让主节点能够识别从节点的主机名,使用主机名远程访问,默认情况下只能使用ip远程访问,想要使用主机名远程访问的话需要在节点的/etc/hosts文件中配置

    对应机器的ip和主机名信息。

    vi /etc/hosts

    192.168.234.101 bigdata02
    192.168.234.102 bigdata03
    192.168.234.103 bigdata04
    
  2. 集群节点之间时间同步

    集群只要涉及到多个节点的就需要对这些节点做时间同步,如果节点之间时间不同步相差太多,会应该集群的稳定性,甚至导致集群出问题。

    使用ntpdate -u ntp.sjtu.edu.cn实现时间同步,但是执行的时候提示找不到ntpdata命令

    yum install -y ntpdate

    然后手动执行 ntpdate -u ntp.sjtu.edu.cn 确认是否可以正常执行

    image-20220903083838024

    建议把这个同步时间的操作添加到linux的crontab定时器中,每分钟执行一次

    vi /etc/crontab

    查找ntpdate的位置 which ntpdate

    * * * * * root /usr/sbin/ntpdate -u ntp.sjtu.edu.cn
    
  3. SSH免密码登录完善

    注意:针对免密码登录,目前只实现了自己免密码登录自己,最终需要实现主机点可以免密码登录到所有节点,所以还需要完善免密码登录操作

    scp /.ssh/authorized_keys bigdata03:/

    scp /.ssh/authorized_keys bigdata04:/

    然后分别在bigdata03、bigdata04这两个机器上把密钥追加到/authorized_keys

    cat ~/authorized_keys >> ~/.ssh/authorized_keys

    验证一下效果,在bigdata02节点上使用ssh远程连接两个从节点,如果不需要输入密码就表示是成功的,此时主机点可以免密码登录到所有节点。

    ssh bigdata03

    image-20220903085511410

  4. 安装hadoop

    1. 上传hadoop到对应的服务器上

    2. 解压hadoop

      tar -zxvf hadoop-3.3.4.tar.gz

    3. 修改hadoop相关配置

      cd hadoop-3.3.4/etc/hadoop/

      首先修改hadoop-env.sh文件,在文件末尾增加环境变量信息

      • vi hadoop-env.sh

        export JAVA_HOME=/root/software/jdk1.8.0_341
        export HADOOP_LOG_DIR=/data/hadoop_repo/logs/hadoop
        
      • vi core-site.xml

        这边配置的主节点的地址

        <configuration>
            <property>
                <name>fs.defaultFS</name>
                <value>hdfs://bigdata02:9000</value>
            </property>
            <property>
                <name>hadoop.tmp.dir</name>
                <value>/data/hadoop_repo</value>
            </property>
        </configuration>
        
      • vi hdfs-site.xml

        把hdfs中文件副本的数量设置为2,最多为2,因为现在集群中有两个从节点。还有secondaryNamenode进程所在的节点信息

        <configuration>
            <property>
                <name>dfs.replication</name>
                <value>2</value>
            </property>
            <property>
                <name>dfs.namenode.secondary.http-address</name>
                <value>bigdata02:50090</value>
            </property>
        </configuration>
        
      • vi mapred-site.xml

        设置mapreduce使用的资源调度框架

        <configuration>
            <property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
            </property>
        </configuration>
        
      • vi yarn-site.xml

        设置yarn上支持运行的服务和环境变量白名单

        <configuration>
            <property>
                <name>yarn.nodemanager.aux-services</name>
                <value>mapreduce_shuffle</value>
            </property>
            <property>
                <name>yarn.nodemanager.env-whitelist</name>
                <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR, 
                <property>
                    <name>yarn.resourcemanager.hostname</name>
                    <value>bigdata02</value>
                </property></value>
            </property>
        </configuration>
        
      • vi workers(重点

        设置works,设置从节点信息

        bigdata03
        bigdata04
        
    4. 修改启动脚本

      cd hadoop-3.3.4/sbin

      • vi start-dfs.sh

        HDFS_DATANODE_USER=root
        HDFS_DATANODE_SECURE_USER=hdfs
        HDFS_NAMENODE_USER=root
        HDFS_SECONDARYNAMENODE_USER=root
        
      • vi stop-dfs.sh

        HDFS_DATANODE_USER=root
        HDFS_DATANODE_SECURE_USER=hdfs
        HDFS_NAMENODE_USER=root
        HDFS_SECONDARYNAMENODE_USER=root
        
      • vi start-yarn.sh

        YARN_RESOURCEMANAGER_USER=root
        HADOOP_SECURE_DN_USER=yarn
        YARN_NODEMANAGER_USER=root
        
      • vi stop-dfs.sh

        HDFS_DATANODE_USER=root
        HDFS_DATANODE_SECURE_USER=hdfs
        HDFS_NAMENODE_USER=root
        HDFS_SECONDARYNAMENODE_USER=root
        
    5. 把bigdata02节点上将修改好配置的安装包拷贝到其他两个从节点

      cd /root/software

      scp -rq hadoop-3.3.4 bigdata03:/root/software

      scp -rq hadoop-3.3.4 bigdata04:/root/software

    6. 在bigdata02节点上格式化HDFS

      cd /root/software/hadoop-3.3.4

      bin/hdfs namenode -format

    7. 启动验证下

      http://192.168.234.101:9870/dfshealth.html#tab-datanode

      image-20220903094054039