• 在centos7上搭建hadoop大数据平台



    首先准备三台装好centos7系统的服务器

    一、安装搭建java环境

    1、安装方法

    CentOS8上使用 yum 直接安装,环境变量自动配置好

    2、查看是否已安装

    看到下面结果,说明已经安装配置 jdk

    [root@localhost ~]# java -version
    openjdk version "1.8.0_222"
    OpenJDK Runtime Environment (build 1.8.0_222-b10)
    OpenJDK 64-Bit Server VM (build 25.222-b10, mixed mode)
    
    • 1
    • 2
    • 3
    • 4

    3、卸载

    查看系统是否自带 jdk

    rpm -qa |grep java
    rpm -qa |grep jdk
    rpm -qa |grep gcj
    
    • 1
    • 2
    • 3

    如果有输出信息,批量卸载系统自带

    rpm -qa | grep java | xargs rpm -e --nodeps
    
    • 1

    如果使用 yum 安装的 jdk,请使用下面命令卸载

    yum -y remove java-1.8.0-openjdk-headless.x86_64

    4、安装

    4.1 检查 yum 中有没有 java1.8 包

    yum list java-1.8*
    
    • 1

    4.2 开始安装

    yum install java-1.8.0-openjdk* -y

    5、验证

    [root@localhost ~]# java -version
    openjdk version "1.8.0_222"
    OpenJDK Runtime Environment (build 1.8.0_222-b10)
    OpenJDK 64-Bit Server VM (build 25.222-b10, mixed mode)
    
    • 1
    • 2
    • 3
    • 4

    二、 Hadoop安装

    1、下载

    要获得发行版,请从Apache 下载镜像之一下载最新的 稳定版本(3.3.3)

    ##下载好上传
    rz -y
    选择文件上传
    ##解压
    tar zxvf hadoop-3.3.3.tar.gz
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2、准备启动 Hadoop 集群

    也可以使用centos7是自带的java环境,不过还是建议大家自己安装java,自带的java环境可以通过下面的方式找到路径。

    使用ls -lrt命令,可以找到自带java的路径向下深入。
     ls -lrt /usr/bin/java
     /usr/bin/java -> /etc/alternatives/java
    
    ##当得到到一个真实的路径,一般就是了。
    ls -lrt /etc/alternatives/java
     /etc/alternatives/java -> /usr/lib/jvm/java-8-openjdk-amd64/jre/bin
     ## 设置为 Java 安装的根目录
    export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/jre
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    2.1配置Hadoop守护进程的环境

    在etc/hadoop/hadoop-env.sh配置中添加PID目录以及日志目录

    export HADOOP_PID_DIR =/home/zxhy/hadoop-3.3.3/pid
    export HADOOP_LOG_DIR =/home/zxhy/hadoop-3.3.3/log
    
    • 1
    • 2

    2.2配置系统环境变量

    在/etc/profile.d中的一个新建一个简单脚本hadoop.sh,内容如下:

    #如果是自己安装的java修改为自己安装的路径
    export JAVA_HOME=/opt/jdk1.8.0_202
    export JRE_HOME=${JAVA_HOME}/jre
    export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
    export PATH=${JAVA_HOME}/bin:$PATH
    
    export HADOOP_HOME=/home/zxhy/hadoop-3.3.3
    export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
    
    export HDFS_NAMENODE_USER=root
    export HDFS_DATANODE_USER=root
    export HDFS_SECONDARYNAMENODE_USER=root
    export YARN_RESOURCEMANAGER_USER=root
    export YARN_NODEMANAGER_USER=root
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    2.3 配置etc/hadoop/core-site.xml文件

    
    
    
    
    
    <configuration>
    
       <property>
       	<name>fs.defaultFSname>
       	<value>hdfs://hadoop01:19000value>
       property>
    
       <property>
       	<name>io.file.buffer.sizename>
       	<value>131072value>
       property>
    
       <property>
        <name>hadoop.http.staticuser.username>
        <value>rootvalue>
       property>
    
       <property>
        <name>hadoop.tmp.dirname>
        <value>/home/zxhy/hadoop-3.3.3/data/tmpvalue>
       property>
       <property>
       	<name>hadoop.proxyuser.root.hostsname>
       	<value>*value>
       property>
       <property>
       	<name>hadoop.proxyuser.root.groupsname>
       	<value>*value>
       property>
    configuration>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47

    2.4配置etc/hadoop/hdfs-site.xml文件

    创建两个目录/home/zxhy/hadoop-3.3.3/data/name、/home/zxhy/hadoop-3.3.3/data/file用于存放日志和文件

    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    <!-- Put site-specific property overrides in this file. -->
    <configuration>
    <!-- NameNode 持久存储命名空间和事务日志的本地文件系统上的路径。 -->
      <property>
      	<name>dfs.namenode.name.dir</name>
      	<value>/home/zxhy/hadoop-3.3.3/data/name</value>
      </property>
    <!-- DataNode的本地文件系统上应存储其块的路径的逗号分隔列表。 -->
      <property>
      	<name>dfs.datanode.data.dir</name>
      	<value>/home/zxhy/hadoop-3.3.3/data/file</value>
      </property>
    </configuration>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    2.5配置etc/hadoop/yarn-site.xml文件

    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    <!-- Put site-specific property overrides in this file. -->
    <configuration>
    <property>
      	<name>yarn.resourcemanager.hostname</name>
      	<value>hadoop01</value>
      </property>
      <property>
      	<name>yarn.nodemanager.aux-services</name>
      	<value>mapreduce_shuffle</value>
      </property>
      <property>
      	<name>yarn.nodemanager.vmem-chech-enabled</name>
      	<value>false</value>
      </property>
      <!-- 关闭yarn对物理内存和虚拟内存的限制检查 -->
      <property>
          <name>yarn.nodemanager.pmem-check-enabled</name>
          <value>false</value>
      </property>
      <property>
          <name>yarn.nodemanager.vmem-check-enabled</name>
          <value>false</value>
      </property>
      <!-- 环境变量的继承 -->
      <property>
          <name>yarn.nodemanager.env-whitelist</name>
          <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
      </property>
      <!-- 启用自动恢复 -->
      <property>
          <name>yarn.resourcemanager.recovery.enabled</name>
          <value>true</value>
      </property>
      <!-- 启用日志聚集功能 -->
      <property>
          <name>yarn.log-aggregation-enabled</name>
          <value>true</value>
      </property>
      <!-- 设置日志聚集服务器地址 -->
      <property>
          <name>yarn.log.server.url</name>
          <value>http://hadoop01:19888?jobhistory/logs</value>
      </property>
      <!-- 设置日志保留时间为7天 -->
      <property>
          <name>yarn.log-aggregation.retain-seconds</name>
          <value>604800</value>
      </property>
    </configuration>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51

    2.6配置etc/hadoop/mapred-site.xml文件

    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    <!-- Put site-specific property overrides in this file. -->
    <configuration>
    	<property>
    		<name>mapreduce.jobhistory.address</name>
    		<value>hadoop01:10020</value>
    	</property>
    	<property>
    		<name>mapreduce.jobhistory.intermediate-done-dir</name>
    		<value>/home/zxhy/hadoop-3.3.3/data/jobhistory/tmp</value>
    	</property>
    	<property>
    		<name>mapreduce.jobhistory.done-dir</name>
    		<value>/home/zxhy/hadoop-3.3.3/data/jobhistory/done</value>
    	</property>
    </configuration>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    3、配置集群设备的ip

    3.1设置无密码 ssh

    为用于运行 Hadoop 的帐户建立 ssh 信任(通过无密码 ssh 或其他方式,例如 Kerberos),在每个节点上执行下面命令

    #现在检查您是否可以在没有密码的情况下 ssh 到 localhost:
    $ ssh localhost
    #如果没有密码就无法 ssh 到 localhost,请执行以下命令:
    
    $ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
    $ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
    $ chmod 0600 ~/.ssh/authorized_keys
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    把id_rsa.pub 文件通过scp复制到hadoop01的.ssh目录下,合并秘钥

    #在第二个节点执行复制命令
    scp /root/.ssh/id_rsa.pub root@hadoop01:$PWD/id_rsa.pub2
     #在第三个节点执行复制命令
    scp /root/.ssh/id_rsa.pub root@hadoop01:$PWD/id_rsa.pub3
     #在第一个节点合并秘钥
    cat id_rsa.pub >> authorized_keys
    cat id_rsa.pub2 >> authorized_keys
    cat id_rsa.pub3 >> authorized_keys
    chmod 0600 ~/.ssh/authorized_keys
    #然后把authorized_keys在复制到hadoop02和hadoop02上
    scp authorized_keys root@hadoop02:$PWD
    scp authorized_keys root@hadoop03:$PWD
    #然后测试下用ssh能无密码连上其他节点不,如果不需要密码则成功。
    ssh hadoop02
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    也可以使用命令直接复制公钥到其他服务器上

    ssh-copy-id hadoop01
    ssh-copy-id hadoop02
    ssh-copy-id hadoop03
    
    • 1
    • 2
    • 3

    同样在其他两个机子上也执行同样的命令,就可以完成公钥的复制,这样其他两个机子就可以无密码访问其他两个服务器。

    3.2设置主机的hostname

    以三个节点为例,分别设置hostname为hadoop01、hadoop02、hadoop03

    #修改每个机器的hostname
    vi /etc/hostname
    #修改为hadoop01
    #修改每个机器的hosts
    vi /etc/hosts
    #修改为下面的ip,ip为每个节点的ip
    192.168.1.251 hadoop01
    192.168.1.250 hadoop02
    192.168.1.249 hadoop03
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    3.3配置集群主机ip

    列出您的etc/hadoop/workers文件中的所有工作人员主机名或 IP 地址,每行一个。帮助程序脚本(如下所述)将使用etc/hadoop/workers文件一次在多个主机上运行命令。它不用于任何基于 Java 的 Hadoop 配置。为了使用此功能,。

    #修改每个机器的hostname
    vi /etc/hadoop/workers
    #修改为下面内容,每一行一个hostname
    hadoop01
    hadoop02
    hadoop03
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    3.4设置同步命令脚本

    在hadoop/bin目录下创建一个下xysnc的文件,编辑文件内容为下面内容,这个是方便服务器之间同步更改后的文件的。
    使用方式是:xsync 文件/文件夹

     #!/bin/bash
    #1 获取输入参数个数,如果没有参数,直接退出
    pcount=$#
    if [ $pcount -lt 1 ]
    then
       echo Not Enough Arguement!
       exit;
    fi
    
    #2. 遍历集群所有机器
    #也可以采用:
    #for host in hadoop{102..104};
    for host in hadoop102 hadoop103 hadoop104
    do
       echo ====================    $host    ====================
       #3. 遍历所有目录,挨个发送
       for file in $@
       do
           #4 判断文件是否存在
           if [ -e $file ]
           then
               #5. 获取父目录
               pdir=$(cd -P $(dirname $file); pwd)
               echo pdir=$pdir
               
               #6. 获取当前文件的名称
               fname=$(basename $file)
               echo fname=$fname
               
               #7. 通过ssh执行命令:在$host主机上递归创建文件夹(如果存在该文件夹)
               ssh $host "mkdir -p $pdir"
               
       		#8. 远程同步文件至$host主机的$USER用户的$pdir文件夹下
               rsync -av $pdir/$fname $USER@$host:$pdir
           else
               echo $file does not exists!
           fi
       done
    done
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39

    4、启动 Hadoop 集群

    要启动 Hadoop 集群,您需要同时启动 HDFS 和 YARN 集群。

    #首次启动 HDFS 时,必须对其进行格式化。将新的分布式文件系统格式化为hdfs:
    [hdfs]$ $HADOOP_HOME/bin/hdfs namenode -format
    在指定节点上使用以下命令启动 HDFS NameNode 作为hdfs:
    [hdfs]$ $HADOOP_HOME/bin/hdfs --daemon start namenode
    #在每个指定节点上使用以下命令启动一个 HDFS DataNode 作为hdfs:
    [hdfs]$ $HADOOP_HOME/bin/hdfs --daemon start datanode
    #使用以下命令启动 YARN,在指定的 ResourceManager 上以yarn运行:
    [yarn]$ $HADOOP_HOME/bin/yarn --daemon start resourcemanager
    #运行脚本以在每个指定主机上启动 NodeManager 作为yarn:
    [yarn]$ $HADOOP_HOME/bin/yarn --daemon start nodemanager
    #启动一个独立的 WebAppProxy 服务器。作为yarn在 WebAppProxy 服务器上运行。如果多个服务器与负载平衡一起使用,则应在每个服务器上运行:
    [yarn]$ $HADOOP_HOME/bin/yarn --daemon start proxyserver
    #使用以下命令启动 MapReduce JobHistory Server,在指定服务器上以mapred身份运行:
    [mapred]$ $HADOOP_HOME/bin/mapred --daemon start historyserver
    
    #前面我们配置了etc/hadoop/workers和 ssh 可信访问,则可以使用实用程序脚本启动所有 HDFS 进程。作为
    [hdfs]$ $HADOOP_HOME/sbin/start-dfs.sh
    [yarn]$ $HADOOP_HOME/sbin/start-yarn.sh
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    5、停止 Hadoop 集群

    使用以下命令停止 NameNode,在指定的 NameNode 上以hdfs运行:
    [hdfs]$ $HADOOP_HOME/bin/hdfs --daemon stop namenode
    #在每个指定节点上使用以下命令停止一个 HDFS DataNode 作为hdfs:
    [hdfs]$ $HADOOP_HOME/bin/hdfs --daemon stop datanode
    #使用以下命令停止 YARN,在指定的 ResourceManager 上以yarn运行:
    [yarn]$ $HADOOP_HOME/bin/yarn --daemon stop resourcemanager
    #运行脚本以在每个指定主机上停止 NodeManager 作为yarn:
    [yarn]$ $HADOOP_HOME/bin/yarn --daemon stop nodemanager
    #停止一个独立的 WebAppProxy 服务器。作为yarn在 WebAppProxy 服务器上运行。如果多个服务器与负载平衡一起使用,则应在每个服务器上运行:
    [yarn]$ $HADOOP_HOME/bin/yarn --daemon stop  proxyserver
    #使用以下命令停止 MapReduce JobHistory Server,在指定服务器上以mapred身份运行:
    [mapred]$ $HADOOP_HOME/bin/mapred --daemon stop historyserver
    
    #前面我们配置了etc/hadoop/workers和 ssh 可信访问,则可以使用实用程序脚本启动所有 HDFS 进程。作为
    [hdfs]$ $HADOOP_HOME/sbin/stop-dfs.sh
    [yarn]$ $HADOOP_HOME/sbin/stop-yarn.sh
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    编写一个一键启动和停止脚本命名为myhadoop.sh,放到hadoop目录的sbin目录下。
    使用方式为

    #启动
    ./myhadoop.sh start
    #停止
    ./myhadoop.sh stop
    
    • 1
    • 2
    • 3
    • 4

    下面为脚本内容

    #!/bin/bash
    
    if [ $# -lt 1 ]
    then
       echo "No Args Input..."
       exit ;
    fi
    
    this="${BASH_SOURCE-$0}"
    bin=$(cd -P -- "$(dirname -- "${this}")" >/dev/null && pwd -P)
    
    if [[ -n "${HADOOP_HOME}" ]]; then
     HADOOP_HOME_DIR="${HADOOP_HOME}"
    else
     HADOOP_HOME_DIR="${bin}/../"
    fi
    
    case $1 in
    "start")
           echo " =================== 启动 hadoop集群 ==================="
    
           echo " --------------- 启动 hdfs ---------------"
           ssh hadoop01 "${HADOOP_HOME_DIR}/sbin/start-dfs.sh"
           echo " --------------- 启动 yarn ---------------"
           ssh hadoop01 "${HADOOP_HOME_DIR}/sbin/start-yarn.sh"
           echo " --------------- 启动 historyserver ---------------"
           ssh hadoop01 "${HADOOP_HOME_DIR}/bin/mapred --daemon start historyserver"
    ;;
    "stop")
           echo " =================== 关闭 hadoop集群 ==================="
    
           echo " --------------- 关闭 historyserver ---------------"
           ssh hadoop01 "${HADOOP_HOME_DIR}/bin/mapred --daemon stop historyserver"
           echo " --------------- 关闭 yarn ---------------"
           ssh hadoop01 "${HADOOP_HOME_DIR}/sbin/stop-yarn.sh"
           echo " --------------- 关闭 hdfs ---------------"
           ssh hadoop01 "${HADOOP_HOME_DIR}/sbin/stop-dfs.sh"
    ;;
    *)
       echo "Input Args Error..."
    ;;
    esac
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42

    jps的集群脚本,用jps脚本查看所有的机器进程是否启动

      #!/bin/bash
    
    for host in hadoop01 hadoop02 hadoop03
    do
    	echo ============= $host =============
    	ssh $host jps
    done
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    因为yarn的启动需要hdfs退出安全模式后才可以,所以我们加入下面脚本到start-yarn.sh的最开始,当hdfs完全启动并且退出安全模式后,再启动yarn

      while true 
    do
    	monitor=`hdfs dfsadmin -safemode get`
    	if [[ $monitor =~ "OFF" ]]
    	then
    		break
    	else
    		echo "hdfs Safe mode is ON ,please wait。"
    	fi
    	sleep 5
    done
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    6、web管理界面

    先把防火墙关闭了,否侧不能访问。

    #关闭防火墙。
    systemctl stop firewalld.service
    #永久关闭防火墙。
    systemctl disable firewalld.service
    
    • 1
    • 2
    • 3
    • 4

    按照之前的设置访问web管理界面
    名称节点
    http://hadoop01:9870/ ,默认 HTTP 端口为 9870。
    资源管理器
    http://hadoop01:8088/ ,默认 HTTP 端口为 8088。
    MapReduce JobHistory 服务器
    http://hadoop01:19888/,默认 HTTP 端口为 19888。

  • 相关阅读:
    【每日练习】倒置字符串
    14李沐动手学深度学习v2/权重衰退简洁实现
    ASPICE是汽车软件开发中的质量保证流程
    Word控件Spire.Doc 【文本】教程(17) ;在Word中设置文本方向
    [C++] 元组(tuple)
    ORB-SLAM3算法学习—Frame构造—基于SAD滑窗的双目特征匹配
    和数集团:游戏与现实生活相结合才是行业发展的正向趋势
    FFplay播放avsync学习
    理解 Paimon changelog producer
    111.(leaflet篇)leaflet椭圆采集
  • 原文地址:https://blog.csdn.net/holybird0213/article/details/125848561