本文为大数据集群服务的部署文档
包括zookeeper服务部署,Hadoop服务部署,Spark服务部署,Kafka服务部署,Hbase服务部署,Hive服务部署
文档写于2022年初作为学习笔记使用。

系统版本:CentOS Linux release 7.9.2009 (Core)
内核版本:3.10.0-1160.el7.x86_64
内存:4GB
处理器数量(p):2
每个处理器的内核数量(c):2
硬盘:30GB

前置:主机相关配置

HostnameIPADDRNETMASKGATWAYDNS1ROLEUSRPASSWORD
master192.168.88.135255.255.255.0192.168.88.28.8.8.8NN DN RM NMrootCcu2021@
slave1192.168.88.136255.255.255.0192.168.88.28.8.8.8SNN DN NMrootCcu2021@
slave2192.168.88.137255.255.255.0192.168.88.28.8.8.8DN NMrootCcu2021@

规划:所有组件包均在 /export/server 文件目录下

组件版本启动命令WebUI
zookeeperzookeeper-3.4.10 后期改为zookeeper-3.7.0zkServer-all.sh start暂无
hadoophadoop-3.3.0start-all.shhttp://master:9870/ http://master:8088/
sparkspark-3.2.0cd /export/server/spark/bin ./pysparkhttp://master:4040/
spark-history同spark版本cd /export/server/spark/sbin ./start-history-server.shhttp://master:18080/
hbasehbase-1.2.4cd /export/server/hbase/bin ./start-hbase.shhttp://master:16010/master-status
MysqlMySQL5.7启动:/etc/init.d/mysqld start 登录:mysql -u root -p暂无
jdkjdk_1.8.0_241暂无暂无
kafkakafka_2.11-2.0.0kafka-all.sh start暂无
hadoop-history同hadoop版本cd /export/server/hadoop-3.3.0/sbin ./mr-jobhistory-daemon.sh start historyserverhttp://master:19888/
pythonpython-3.8.8python暂无
hivehive-3.0.0hive暂无

网络环境配置

  • 更改三台主机的主机名

    1
    2
    3
    4
    5
    6
    7
    8
    # master
    echo "master" >/etc/hostname

    # slave1
    echo "slave1" >/etc/hostname

    # slave2
    echo "slave2" >/etc/hostname
  • 更改网络配置(注:三台主机都需要做)

    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
    # 进入路径 /etc/sysconfig/network-scripts 编辑ifcfg-ens33文件
    vim /etc/sysconfig/network-scripts/ifcfg-ens33

    # 配置ONBOOT=yes:表示启动这块网卡
    # 配置BOOTPROTO=static:表示静态路由协议,可以保持IP固定
    # 配置IPADDR:表示虚拟机的IP地址,这里设置的IP地址要与前面IP映射配置时的IP地址一致,否则无法通过主机名找到对应IP;
    # 配置GATEWAY:表示虚拟机网关,通常都是将IP地址最后一个位数变为2;
    # 配置NETMASK:表示虚拟机子网掩码,通常都是255.255.255.0;
    # 配置DNS1:表示域名解析器,此处采用Google提供的免费DNS服务器88.8.8(也可以设置为PC端电脑对应的DNS)。

    # master
    IPADDR=192.168.88.135
    NETMASK=255.255.255.0
    GATEWAY=192.168.88.2
    DNS1=8.8.8.8

    # slave1
    IPADDR=192.168.88.135
    NETMASK=255.255.255.0
    GATEWAY=192.168.88.2
    DNS1=8.8.8.8

    # slave2
    IPADDR=192.168.88.135
    NETMASK=255.255.255.0
    GATEWAY=192.168.88.2
    DNS1=8.8.8.8
  • 前两步骤做完后三台主机进行重启

    1
    shutdown -r 0
  • 测试(注:三台主机都做ping,看是否ping通外网)

    1
    ping www.baidu.com -c5

hosts映射

打开一个hosts映射文件,为了保证后续相互关联的虚拟机能够通过主机名进行访问,根据实际需求配置对应的IP和主机名映射,分别将主机名master、slave1、slave2 与IP地址 192.168.88.134、192.168.88.135 和192.168.88.136进行了匹配映射(这里通常要根据实际需要,将要搭建的集群主机都配置主机名和IP映射)。

  • 编辑 /etc/hosts 文件

    1
    vim /etc/hosts
  • 内容修改为(注:三台主机内容一样)

    1
    2
    3
    4
    5
    6
    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

    192.168.88.135 master
    192.168.88.136 slave1
    192.168.88.137 slave2

集群配置时间同步

定义:网络时间服务协议(Network Time Protocol, NTP),是用来使计算机时间同步化的一种协议,它可以使计算机对其服务器做时间同步化。

原因:时间同步服务器,顾名思义就是来同步时间的。在集群中同步时间有着十分重要的作用,负载均衡集群或高可用集群如果时间不一致,在服务器之间的数据误差就会很大,寻找数据便会成为一件棘手的事情。若是时间无法同步,那么就算是备份了数据,你也可能无法在正确的时间将正确的数据备份。那损失可就大了。

  • yum 安装 ntp (注:三台主机做同样操作)

    1
    yum install ntp -y
  • 开机自启动ntp

    1
    systemctl enable ntpd  && systemctl start ntpd
    1
    2
    3
    结果显示:
    [root@master ~]# systemctl enable ntpd && systemctl start ntpd
    Created symlink from /etc/systemd/system/multi-user.target.wants/ntpd.service to /usr/lib/systemd/system/ntpd.service.
  • 授权 192.168.88.0-192.168.10.255 网段上的所有机器可以从这台机器上查询和同步时间

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    # 查看ntp配置文件
    ls -al /etc | grep 'ntp'
    # 显示内容
    [root@master etc]# ls -al /etc | grep 'ntp'
    drwxr-xr-x 3 root root 52 310 18:25 ntp
    -rw-r--r-- 1 root root 2041 310 20:03 ntp.conf

    # 编辑内容添加 restrict 192.168.88.0 mask 255.255.255.0 (注:在17行左右)
    vim /etc/ntp.conf

    16 # Hosts on local network are less restricted.
    17 restrict 192.168.88.0 mask 255.255.255.0
  • 集群在局域网中,不使用其他互联网上的时间

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    # 修改 /etc/ntpd.conf 内容
    vim /etc/ntp.conf

    # 将21-24行内容注释掉(注:原来未注释)
    21 #server 0.centos.pool.ntp.org iburst
    22 #server 1.centos.pool.ntp.org iburst
    23 #server 2.centos.pool.ntp.org iburst
    24 #server 3.centos.pool.ntp.org iburst

    # 在25行添加 server masterIP 即为:
    server 192.168.88.135
    server 127.127.1.0 iburst
  • slave1 和 slave2 相同操作

  • 三台主机同时执行

    1
    systemctl enable ntpd  && systemctl start ntpd
  • 查看ntp端口

    1
    2
    3
    4
    5
    6
    7
    [root@master etc]# ss -tupln | grep '123'
    udp UNCONN 0 0 192.168.88.135:123 *:* users:(("ntpd",pid=54823,fd=19))
    udp UNCONN 0 0 127.0.0.1:123 *:* users:(("ntpd",pid=54823,fd=18))
    udp UNCONN 0 0 *:123 *:* users:(("ntpd",pid=54823,fd=16))
    udp UNCONN 0 0 [fe80::2832:5f98:5bc0:e621]%ens33:123 [::]:* users:(("ntpd",pid=54823,fd=23))
    udp UNCONN 0 0 [::1]:123 [::]:* users:(("ntpd",pid=54823,fd=20))
    udp UNCONN 0 0 [::]:123 [::]:* users:(("ntpd",pid=54823,fd=17))
  • 配置完成后三台主机都需要重启

    1
    shutdown -r 0
  • 三台主机同时执行(注:此过程需要5分钟左右)

    1
    ntpstat

ssh免密钥登陆

​ SSH免密钥登陆可以更加方便的实现不同计算机之间的连接和切换

  • master 生成公钥私钥 (一路回车)

    1
    ssh-keygen  
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    #结果显示:
    [root@master .ssh]# ssh-keygen
    Generating public/private rsa key pair.
    Enter file in which to save the key (/root/.ssh/id_rsa):
    Enter passphrase (empty for no passphrase):
    Enter same passphrase again:
    Your identification has been saved in /root/.ssh/id_rsa.
    Your public key has been saved in /root/.ssh/id_rsa.pub.
    The key fingerprint is:
    SHA256:QUAgFH5KBc/Erlf1JWSBbKeEepPJqMBqpWbc02/uFj8 root@master
    The key's randomart image is:
    +---[RSA 2048]----+
    | .=++oo+.o+. |
    | . *. ..*.o . |
    |. o.++ *.+ o |
    |.o ++ B ... |
    |o.=o.o .S |
    |.*oo.. . |
    |+ .. . o |
    | + E |
    | =o . |
    +----[SHA256]-----+
  • 查看隐藏的 .ssh 文件

    1
    la -al .ssh
    1
    2
    3
    4
    5
    6
    7
    8
    9
    # 结果显示
    [root@master ~]# ls -al .ssh/
    总用量 16
    drwx------ 2 root root 80 310 21:52 .
    dr-xr-x---. 4 root root 175 310 21:45 ..
    -rw------- 1 root root 393 310 21:52 authorized_keys
    -rw------- 1 root root 1675 310 21:48 id_rsa
    -rw-r--r-- 1 root root 393 310 21:48 id_rsa.pub
    -rw-r--r-- 1 root root 366 310 21:54 known_hosts
  • master 配置免密登录到master slave1 slave2

    1
    2
    3
    ssh-copy-id master
    ssh-copy-id slave1
    ssh-copy-id slave2

安装配置 jdk

  • 编译环境软件安装目录

    1
    mkdir -p /export/server
  • JDK 1.8安装 上传 jdk-8u241-linux-x64.tar.gz到/export/server/目录下 并解压文件

    1
    tar -zxvf jdk-8u241-linux-x64.tar.gz
  • 配置环境变量

    1
    2
    3
    4
    5
    vim /etc/profile

    export JAVA_HOME=/export/server/jdk1.8.0_241
    export PATH=$PATH:$JAVA_HOME/bin
    export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
  • 重新加载环境变量文件

    1
    source /etc/profile
  • 查看 java 版本号

    1
    java -version
    1
    2
    3
    4
    5
    结果显示:
    [root@master jdk1.8.0_241]# java -version
    java version "1.8.0_241"
    Java(TM) SE Runtime Environment (build 1.8.0_241-b07)
    Java HotSpot(TM) 64-Bit Server VM (build 25.241-b07, mixed mode)
  • master 节点将 java 传输到 slave1 和 slave2

    1
    2
    scp -r /export/server/jdk1.8.0_241/ root@slave1:/export/server/
    scp -r /export/server/jdk1.8.0_241/ root@slave2:/export/server/
  • 配置 slave1 和 slave2 的 jdk 环境变量(注:和上方 master 的配置方法一样)

  • 在 master slave1 和slave2 创建软连接

    1
    2
    3
    cd /export/server

    ln -s jdk1.8.0_241/ jdk
  • 重新加载环境变量文件

    1
    source /etc/profile

zookeeper安装配置

  • 配置主机名和IP的映射关系,修改 /etc/hosts 文件,添加 master.root slave1.root slave2.root

    1
    2
    3
    4
    5
    6
    7
    8
    9
    vim /etc/hosts

    #结果显示
    127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

    192.168.88.135 master master.root
    192.168.88.136 slave1 slave1.root
    192.168.88.137 slave2 slave2.root
  • zookeeper安装 上传 zookeeper-3.4.10.tar.gz到/export/server/目录下 并解压文件

    1
    2
    3
    cd /export/server/

    tar -zxvf zookeeper-3.4.10.tar.gz
  • 在 /export/server 目录下创建软连接

    1
    2
    3
    cd /export/server

    ln -s zookeeper-3.4.10/ zookeeper
  • 进入 /export/server/zookeeper/conf/ 将 zoo_sample.cfg 文件复制为新文件 zoo.cfg

    1
    2
    3
    cd /export/server/zookeeper/conf/ 

    cp zoo_sample.cfg zoo.cfg
  • 接上步给 zoo.cfg 添加内容

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #Zookeeper的数据存放目录

    dataDir=/export/server/zookeeper/zkdatas

    # 保留多少个快照
    autopurge.snapRetainCount=3

    # 日志多少小时清理一次
    autopurge.purgeInterval=1

    # 集群中服务器地址
    server.1=master:2888:3888
    server.2=slave1:2888:3888
    server.3=slave2:2888:3888
  • 进入 /export/server/zookeeper/zkdatas 目录在此目录下创建 myid 文件,将 1 写入进去

    1
    2
    3
    4
    5
    cd /export/server/zookeeper/zkdata

    touch myid

    echo '1' > myid
  • 将 master 节点中 /export/server/zookeeper-3.4.10 路径下内容推送给slave1 和 slave2

    1
    2
    3
    scp -r /export/server/zookeeper-3.4.10/ slave1:$PWD

    scp -r /export/server/zookeeper-3.4.10/ slave2:$PWD
  • 推送成功后,分别在 slave1 和 slave2 上创建软连接

    1
    ln -s zookeeper-3.4.10/ zookeeper
  • 接上步推送完成后将 slave1 和 slave2 的 /export/server/zookeeper/zkdatas/ 文件夹下的 myid 中的内容分别改为 2 和 3

    1
    2
    3
    4
    5
    6
    7
    8
    9
    cd /export/server/zookeeper/zkdatas/
    结果显示:
    [root@slave1 zkdatas]# vim myid
    [root@slave1 zkdatas]# more myid
    2

    [root@slave2 zkdatas]# vim myid
    [root@slave2 zkdatas]# more myid
    3
  • 配置zookeeper的环境变量(注:三台主机都需要配置)

    1
    2
    3
    4
    5
    vim /etc/profile

    # zookeeper 环境变量
    export ZOOKEEPER_HOME=/export/server/zookeeper
    export PATH=$PATH:$ZOOKEEPER_HOME/bin
  • 重新加载环境变量文件

    1
    source /etc/profile
  • 进入 /export/server/zookeeper-3.4.10/bin 目录下启动 zkServer.sh 脚本 (注:三台都需要做)

    1
    2
    3
    cd  /export/server/zookeeper-3.4.10/bin 

    zkServer.sh start
    1
    2
    3
    4
    5
    结果显示:
    [root@master bin]# ./zkServer.sh start
    ZooKeeper JMX enabled by default
    Using config: /export/server/zookeeper-3.4.10/bin/../conf/zoo.cfg
    Starting zookeeper ... STARTED
  • 查看 zookeeper 的状态

    1
    zkServer.sh status
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    结果显示:
    [root@master server]# zkServer.sh status
    ZooKeeper JMX enabled by default
    Using config: /export/server/zookeeper-3.4.10/bin/../conf/zoo.cfg
    Mode: follower

    [root@slave1 server]# zkServer.sh status
    ZooKeeper JMX enabled by default
    Using config: /export/server/zookeeper-3.4.10/bin/../conf/zoo.cfg
    Mode: follower

    [root@slave2 conf]# zkServer.sh status
    ZooKeeper JMX enabled by default
    Using config: /export/server/zookeeper-3.4.10/bin/../conf/zoo.cfg
    Mode: leader
    1
    jps
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    结果显示:
    [root@master server]# jps
    125348 QuorumPeerMain
    16311 Jps

    [root@slave1 server]# jps
    126688 QuorumPeerMain
    17685 Jps

    [root@slave2 conf]# jps
    126733 QuorumPeerMain
    17727 Jps
  • 脚本一键启动

    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
    vim zkServer.sh

    #!/bin/bash
    if [ $# -eq 0 ] ;
    then
    echo "please input param:start stop"
    else
    if [ $1 = start ] ;then
    echo "${1}ing master"
    ssh master "source /etc/profile;/export/server/zookeeper/bin/zkServer.sh start"
    for i in {1..2}
    do
    echo "${1}ping slave${i}"
    ssh slave${i} "source /etc/profile;/export/server/zookeeper/bin/zkServer.sh start"
    done
    fi
    if [ $1 = stop ];then
    echo "${1}ping master "
    ssh master "source /etc/profile;/export/server/zookeeper/bin/zkServer.sh stop"
    for i in {1..2}
    do
    echo "${1}ping slave${i}"
    ssh slave${i} "source /etc/profile;/export/server/zookeeper/bin/zkServer.sh stop"
    done
    fi
    if [ $1 = status ];then
    echo "${1}ing master"
    ssh master "source /etc/profile;/export/server/zookeeper/bin/zkServer.sh status"
    for i in {1..2}
    do
    echo "${1}ping slave${i}"
    ssh slave${i} "source /etc/profile;/export/server/zookeeper/bin/zkServer.sh status"
    done
    fi
    fi
    1
    2
    # 将文件放在 /bin 目录下
    chmod +x zkServer-all.sh && zkServer-all.sh

Hadoop 安装配置

  • 把 hadoop-3.3.0-Centos7-64-with-snappy.tar.gz 上传到 /export/server 并解压文件

    1
    tar -zxvf hadoop-3.3.0-Centos7-64-with-snappy.tar.gz
  • 修改配置文件(进入路径 /export/server/hadoop-3.3.0/etc/hadoop)

    1
    cd /export/server/hadoop-3.3.0/etc/hadoop
    • hadoop-env.sh

      1
      2
      3
      4
      5
      6
      7
      #文件最后添加
      export JAVA_HOME=/export/server/jdk1.8.0_241
      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
  • core-site.xml

    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
    <!-- 设置默认使用的文件系统 Hadoop支持file、HDFS、GFS、ali|Amazon云等文件系统 -->
    <property>
    <name>fs.defaultFS</name>
    <value>hdfs://master:8020</value>
    </property>

    <!-- 设置Hadoop本地保存数据路径 -->
    <property>
    <name>hadoop.tmp.dir</name>
    <value>/export/data/hadoop-3.3.0</value>
    </property>

    <!-- 设置HDFS web UI用户身份 -->
    <property>
    <name>hadoop.http.staticuser.user</name>
    <value>root</value>
    </property>

    <!-- 整合hive 用户代理设置 -->
    <property>
    <name>hadoop.proxyuser.root.hosts</name>
    <value>*</value>
    </property>

    <property>
    <name>hadoop.proxyuser.root.groups</name>
    <value>*</value>
    </property>

    <!-- 文件系统垃圾桶保存时间 -->
    <property>
    <name>fs.trash.interval</name>
    <value>1440</value>
    </property>
  • hdfs-site.xml

    1
    2
    3
    4
    5
    <!-- 设置SNN进程运行机器位置信息 -->
    <property>
    <name>dfs.namenode.secondary.http-address</name>
    <value>slave1:9868</value>
    </property>
  • mapred-site.xml

    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
    <!-- 设置MR程序默认运行模式: yarn集群模式 local本地模式 -->
    <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
    </property>

    <!-- MR程序历史服务地址 -->
    <property>
    <name>mapreduce.jobhistory.address</name>
    <value>master:10020</value>
    </property>

    <!-- MR程序历史服务器web端地址 -->
    <property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>master:19888</value>
    </property>

    <property>
    <name>yarn.app.mapreduce.am.env</name>
    <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
    </property>

    <property>
    <name>mapreduce.map.env</name>
    <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
    </property>

    <property>
    <name>mapreduce.reduce.env</name>
    <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
    </property>
  • yarn-site.xml

    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
    <!-- 设置YARN集群主角色运行机器位置 -->
    <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>master</value>
    </property>

    <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
    </property>

    <!-- 是否将对容器实施物理内存限制 -->
    <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.log-aggregation-enable</name>
    <value>true</value>
    </property>

    <!-- 设置yarn历史服务器地址 -->
    <property>
    <name>yarn.log.server.url</name>
    <value>http://master:19888/jobhistory/logs</value>
    </property>

    <!-- 历史日志保存的时间 7天 -->
    <property>
    <name>yarn.log-aggregation.retain-seconds</name>
    <value>604800</value>
    </property>
  • workers

    1
    2
    3
    master
    slave1
    slave2
  • 分发同步hadoop安装包

    1
    2
    3
    4
    cd /export/server

    scp -r hadoop-3.3.0 root@slave1:$PWD
    scp -r hadoop-3.3.0 root@slave2:$PWD
  • 将hadoop添加到环境变量

    1
    2
    3
    4
    vim /etc/profile

    export HADOOP_HOME=/export/server/hadoop-3.3.0
    export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
  • 重新加载环境变量文件

    1
    source /etc/profile
  • Hadoop集群启动

    • 格式化namenode(只有首次启动需要格式化)

      1
      hdfs namenode -format
    • 脚本一键启动

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      [root@master ~]# start-dfs.sh 
      Starting namenodes on [master]
      上一次登录:五 311 21:27:24 CST 2022pts/0
      Starting datanodes
      上一次登录:五 311 21:27:32 CST 2022pts/0
      Starting secondary namenodes [slave1]
      上一次登录:五 311 21:27:35 CST 2022pts/0

      [root@master ~]# start-yarn.sh
      Starting resourcemanager
      上一次登录:五 311 21:27:41 CST 2022pts/0
      Starting nodemanagers
      上一次登录:五 311 21:27:51 CST 2022pts/0
    • 启动后 输入 jps 查看

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      [root@master ~]# jps
      127729 NameNode
      127937 DataNode
      14105 Jps
      128812 NodeManager
      128591 ResourceManager

      [root@slave1 hadoop]# jps
      121889 NodeManager
      121559 SecondaryNameNode
      7014 Jps
      121369 DataNode

      [root@slave2 hadoop]# jps
      6673 Jps
      121543 NodeManager
      121098 DataNode
    • WEB页面

    • HDFS集群:

      1
      http://master:9870/

      image-20220405131530881

  • YARN集群:

    1
    http://master:8088/

    image-20220405131613474

Spark安装配置

Spark是专为大规模数据处理而设计的快速通用的计算引擎,其提供了一个全面、统一的框架用于管理各种不同性质的数据集和数据源的大数据处理的需求,大数据开发需掌握Spark基础、SparkJob、Spark RDD、spark job部署与资源分配、Spark shuffle、Spark内存管理、Spark广播变量、Spark SQL、Spark Streaming以及Spark ML等相关知识。

Spark-local模式

本地模式(单机) 本地模式就是以一个独立的进程,通过其内部的多个线程来模拟整个Spark运行时环境

  • Anaconda On Linux 安装 (单台服务器脚本安装)

  • 安装上传安装包: 资料中提供的Anaconda3-2021.05-Linux-x86_64.sh文件到Linux服务器上安装位置在 /export/server:

    1
    2
    3
    4
    cd /export/server

    # 运行文件
    sh Anaconda3-2021.05-Linux-x86_64.sh
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    过程显示:
    ...
    # 出现内容选 yes
    Please answer 'yes' or 'no':'
    >>> yes
    ...

    # 出现添加路径:/export/server/anaconda3
    ...
    [/root/anaconda3] >>> /export/server/anaconda3
    PREFIX=/export/server/anaconda3
    ...
  • 安装完成后, 退出终端, 重新进来:

    1
    exit
    1
    2
    3
    4
    结果显示:
    # 看到这个Base开头表明安装好了.base是默认的虚拟环境.
    Last login: Tue Mar 15 15:28:59 2022 from 192.168.88.1
    (base) [root@master ~]#
  • 创建虚拟环境 pyspark 基于 python3.8

    1
    conda create -n pyspark python=3.8 
  • 切换到虚拟环境内

    1
    conda activate pyspark  
    1
    2
    3
    结果显示:
    (base) [root@master ~]# conda activate pyspark
    (pyspark) [root@master ~]#
  • 在虚拟环境内安装包 (有WARNING不用管)

    1
    pip install pyhive pyspark jieba -i https://pypi.tuna.tsinghua.edu.cn/simple
  • spark 安装

  • 将文件上传到 /export/server 里面 ,解压

    1
    2
    3
    4
    cd /export/server

    # 解压
    tar -zxvf spark-3.2.0-bin-hadoop3.2.tgz -C /export/server/
  • 建立软连接

    1
    ln -s /export/server/spark-3.2.0-bin-hadoop3.2 /export/server/spark
  • 添加环境变量
    1
    2
    3
    4
    5
    SPARK_HOME: 表示Spark安装路径在哪里
    PYSPARK_PYTHON: 表示Spark想运行Python程序, 那么去哪里找python执行器
    JAVA_HOME: 告知Spark Java在哪里
    HADOOP_CONF_DIR: 告知Spark Hadoop的配置文件在哪里
    HADOOP_HOME: 告知Spark Hadoop安装在哪里
  • 修改环境变量

    1
    vim /etc/profile
    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
    添加内容:

    .....
    注:此部分之前配置过,此部分不需要在配置
    #JAVA_HOME
    export JAVA_HOME=/export/server/jdk1.8.0_241
    export PATH=$PATH:$JAVA_HOME/bin
    export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

    #HADOOP_HOME
    export HADOOP_HOME=/export/server/hadoop-3.3.0
    export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

    #ZOOKEEPER_HOME
    export ZOOKEEPER_HOME=/export/server/zookeeper
    export PATH=$PATH:$ZOOKEEPER_HOME/bin
    .....
    # 将以下部分添加进去
    #SPARK_HOME
    export SPARK_HOME=/export/server/spark

    #HADOOP_CONF_DIR
    export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop

    #PYSPARK_PYTHON
    export PYSPARK_PYTHON=/export/server/anaconda3/envs/pyspark/bin/python
    1
    vim .bashrc
    1
    2
    3
    4
    5
    内容添加进去:
    #JAVA_HOME
    export JAVA_HOME=/export/server/jdk1.8.0_241
    #PYSPARK_PYTHON
    export PYSPARK_PYTHON=/export/server/anaconda3/envs/pyspark/bin/python
  • 重新加载环境变量文件

  • 进入 /export/server/anaconda3/envs/pyspark/bin/ 文件夹

    1
    cd /export/server/anaconda3/envs/pyspark/bin/
  • 开启

    1
    ./pyspark
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    结果显示:
    (base) [root@master bin]# ./pyspark
    Python 3.8.12 (default, Oct 12 2021, 13:49:34)
    [GCC 7.5.0] :: Anaconda, Inc. on linux
    Type "help", "copyright", "credits" or "license" for more information.
    Setting default log level to "WARN".
    To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
    2022-03-15 20:37:04,612 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
    Welcome to
    ____ __
    / __/__ ___ _____/ /__
    _\ \/ _ \/ _ `/ __/ '_/
    /__ / .__/\_,_/_/ /_/\_\ version 3.2.0
    /_/

    Using Python version 3.8.12 (default, Oct 12 2021 13:49:34)
    Spark context Web UI available at http://master:4040
    Spark context available as 'sc' (master = local[*], app id = local-1647347826262).
    SparkSession available as 'spark'.
    >>>
  • 查看WebUI界面

    1
    2
    3
    浏览器访问:

    http://master:4040/

    image-20220405131946528

  • 退出

    1
    conda deactivate

Spark-Standalone模式

Standalone模式(集群) Spark中的各个角色以独立进程的形式存在,并组成Spark集群环境

  • Anaconda On Linux 安装 (单台服务器脚本安装 注:在 slave1 和 slave2 上部署)

  • 安装上传安装包: 资料中提供的Anaconda3-2021.05-Linux-x86_64.sh文件到Linux服务器上安装位置在 /export/server:

    1
    2
    3
    4
    cd /export/server

    # 运行文件
    sh Anaconda3-2021.05-Linux-x86_64.sh
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    过程显示:
    ...
    # 出现内容选 yes
    Please answer 'yes' or 'no':'
    >>> yes
    ...

    # 出现添加路径:/export/server/anaconda3
    ...
    [/root/anaconda3] >>> /export/server/anaconda3
    PREFIX=/export/server/anaconda3
    ...
  • 安装完成后, 退出终端, 重新进来:

    1
    exit
    1
    2
    3
    4
    结果显示:
    # 看到这个Base开头表明安装好了.base是默认的虚拟环境.
    Last login: Tue Mar 15 15:28:59 2022 from 192.168.88.1
    (base) [root@master ~]#
  • 在 master 节点上把 ./bashrc 和 profile 分发给 slave1 和 slave2

    1
    2
    3
    4
    5
    6
    7
    #分发 .bashrc :
    scp ~/.bashrc root@slave1:~/
    scp ~/.bashrc root@slave2:~/

    #分发 profile :
    scp /etc/profile/ root@slave1:/etc/
    scp /etc/profile/ root@slave2:/etc/
  • 创建虚拟环境 pyspark 基于 python3.8

    1
    conda create -n pyspark python=3.8 
  • 切换到虚拟环境内

    1
    conda activate pyspark  
    1
    2
    3
    结果显示:
    (base) [root@master ~]# conda activate pyspark
    (pyspark) [root@master ~]#
  • 在虚拟环境内安装包 (有WARNING不用管)

    1
    pip install pyhive pyspark jieba -i https://pypi.tuna.tsinghua.edu.cn/simple
  • master 节点节点进入 /export/server/spark/conf 修改以下配置文件

    1
    cd /export/server/spark/conf
  • 将文件 workers.template 改名为 workers,并配置文件内容

    1
    2
    3
    4
    5
    6
    7
    8
    9
    mv workers.template workers

    vim workers

    # localhost删除,内容追加文末:
    master
    slave1
    slave2
    # 功能: 这个文件就是指示了 当前SparkStandAlone环境下, 有哪些worker
  • 将文件 spark-env.sh.template 改名为 spark-env.sh,并配置相关内容

    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
    mv spark-env.sh.template spark-env.sh

    vim spark-env.sh

    文末追加内容:

    ## 设置JAVA安装目录
    JAVA_HOME=/export/server/jdk

    ## HADOOP软件配置文件目录,读取HDFS上文件和运行YARN集群
    HADOOP_CONF_DIR=/export/server/hadoop/etc/hadoop
    YARN_CONF_DIR=/export/server/hadoop/etc/hadoop

    ## 指定spark老大Master的IP和提交任务的通信端口
    # 告知Spark的master运行在哪个机器上
    export SPARK_MASTER_HOST=master
    # 告知sparkmaster的通讯端口
    export SPARK_MASTER_PORT=7077
    # 告知spark master的 webui端口
    SPARK_MASTER_WEBUI_PORT=8080

    # worker cpu可用核数
    SPARK_WORKER_CORES=1
    # worker可用内存
    SPARK_WORKER_MEMORY=1g
    # worker的工作通讯地址
    SPARK_WORKER_PORT=7078
    # worker的 webui地址
    SPARK_WORKER_WEBUI_PORT=8081

    ## 设置历史服务器
    # 配置的意思是 将spark程序运行的历史日志 存到hdfs的/sparklog文件夹中
    SPARK_HISTORY_OPTS="-Dspark.history.fs.logDirectory=hdfs://master:8020/sparklog/ -Dspark.history.fs.cleaner.enabled=true"
  • 开启 hadoop 的 hdfs 和 yarn 集群

    1
    2
    3
    start-dfs.sh

    start-yarn.sh
  • 在HDFS上创建程序运行历史记录存放的文件夹,同样 conf 文件目录下:

    1
    2
    3
    hadoop fs -mkdir /sparklog

    hadoop fs -chmod 777 /sparklog
  • 将 spark-defaults.conf.template 改为 spark-defaults.conf 并做相关配置

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    mv spark-defaults.conf.template spark-defaults.conf

    vim spark-defaults.conf

    文末追加内容为:
    # 开启spark的日期记录功能
    spark.eventLog.enabled true
    # 设置spark日志记录的路径
    spark.eventLog.dir hdfs://master:8020/sparklog/
    # 设置spark日志是否启动压缩
    spark.eventLog.compress true
  • 配置 log4j.properties 文件 将文件第 19 行的 log4j.rootCategory=INFO, console 改为 log4j.rootCategory=WARN, console (即将INFO 改为 WARN 目的:输出日志, 设置级别为WARN 只输出警告和错误日志,INFO 则为输出所有信息,多数为无用信息)

    1
    2
    3
    mv log4j.properties.template log4j.properties

    vim log4j.properties
    1
    2
    3
    4
    5
    结果显示:
    ...
    18 # Set everything to be logged to the console
    19 log4j.rootCategory=WARN, console
    ....
  • master 节点分发 spark 安装文件夹 到 slave1 和 slave2 上

    1
    2
    3
    4
    5
    cd /export/server/

    scp -r /export/server/spark-3.2.0-bin-hadoop3.2/ slave1:$PWD

    scp -r /export/server/spark-3.2.0-bin-hadoop3.2/ slave2:$PWD
  • 在slave1 和 slave2 上做软连接

    1
    ln -s /export/server/spark-3.2.0-bin-hadoop3.2 /export/server/spark
  • 重新加载环境变量

    1
    source /etc/profile
  • 进入 /export/server/spark/sbin 文件目录下 启动 start-history-server.sh

    1
    2
    3
    cd /export/server/spark/sbin 

    ./start-history-server.sh
  • 访问 WebUI 界面

    1
    2
    3
    浏览器访问:

    http://master:18080/

    image-20220405132216135

  • 启动Spark的Master和Worker进程

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    # 启动全部master和worker
    sbin/start-all.sh

    # 或者可以一个个启动:
    # 启动当前机器的master
    sbin/start-master.sh
    # 启动当前机器的worker
    sbin/start-worker.sh

    # 停止全部
    sbin/stop-all.sh

    # 停止当前机器的master
    sbin/stop-master.sh

    # 停止当前机器的worker
    sbin/stop-worker.sh
  • 访问 WebUI界面

    1
    2
    3
    浏览器访问:

    http://master:8080/

    image-20220405132434960

Spark-Standalone-HA模式

Spark Standalone集群是Master-Slaves架构的集群模式,和大部分的Master-Slaves结构集群一样,存在着Master 单点故障(SPOF)的问题。简单理解为,spark-Standalone 模式下为 master 节点控制其他节点,当 master 节点出现故障时,集群就不可用了。 spark-Standalone-HA 模式下 master 节点不固定,当一个宕机时,立即换另一台为 master 保障不出现故障。

  • 此处因为先前配置时的 zookeeper 版本和 spark 版本不太兼容,导致此模式有故障,需要重新下载配置新的版本的 zookeeper

  • 配置之前需要删除三台主机的 旧版 zookeeper 以及 对应的软连接

  • 在 master 节点上重新进行前面配置的 zookeeper 操作

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    1.上传apache-zookeeper-3.7.0-bin.tar.gz 到/export/server/目录下 并解压文件
    2.在 /export/server 目录下创建软连接
    3.进入 /export/server/zookeeper/conf/ 将 zoo_sample.cfg 文件复制为新文件 zoo.cfg
    4.接上步给 zoo.cfg 添加内容
    5.进入 /export/server/zookeeper/zkdatas 目录在此目录下创建 myid 文件,将 1 写入进去
    6.将 master 节点中 /export/server/zookeeper-3.7.0 路径下内容推送给slave1 和 slave2
    7.推送成功后,分别在 slave1 和 slave2 上创建软连接
    8.接上步推送完成后将 slave1 和 slave2 的 /export/server/zookeeper/zkdatas/文件夹下的 myid 中的内容分别改为 23
    配置环境变量:
    因先前配置 zookeeper 时候创建过软连接且以 ’zookeeper‘ 为路径,所以不用配置环境变量,此处也是创建软连接的方便之处.
  • 进入 /export/server/spark/conf 文件夹 修改 spark-env.sh 文件内容

    1
    2
    3
    cd /export/server/spark/conf 

    vim spark-env.sh
    • 为 83 行内容加上注释,此部分原为指定 某台主机 做 master ,加上注释后即为 任何主机都可以做 master

      1
      2
      3
      4
      5
      结果显示:
      ......
      82 # 告知Spark的master运行在哪个机器上
      83 # export SPARK_MASTER_HOST=master
      .........
    • 文末添加内容

      1
      2
      3
      4
      SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=master:2181,slave1:2181,slave2:2181 -Dspark.deploy.zookeeper.dir=/spark-ha"
      # spark.deploy.recoveryMode 指定HA模式 基于Zookeeper实现
      # 指定Zookeeper的连接地址
      # 指定在Zookeeper中注册临时节点的路径
  • 分发 spark-env.sh 到 salve1 和 slave2 上

    1
    2
    3
    scp spark-env.sh slave1:/export/server/spark/conf/

    scp spark-env.sh slave2:/export/server/spark/conf/
  • 启动之前确保 Zookeeper 和 HDFS 均已经启动

  • 启动集群:

    1
    2
    3
    4
    5
    # 在 master 上 启动一个master 和全部worker
    /export/server/spark/sbin/start-all.sh

    # 注意, 下面命令在 slave1 上执行 启动 slave1 上的 master 做备用 master
    /export/server/spark/sbin/start-master.sh
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    结果显示:
    (base) [root@master ~]# jps
    37328 DataNode
    41589 Master
    35798 QuorumPeerMain
    38521 ResourceManager
    46281 Jps
    38907 NodeManager
    41821 Worker
    36958 NameNode

    (base) [root@slave1 sbin]# jps
    36631 DataNode
    48135 Master
    35385 QuorumPeerMain
    37961 NodeManager
    40970 Worker
    48282 Jps
    37276 SecondaryNameNode
  • 访问 WebUI 界面

    1
    http://master:8081/

    image-20220403195207486

    1
    http://slave1:8082/

    image-20220403195512439

  • 此时 kill 掉 master 上的 master 假设 master 主机宕机掉

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    # master主机 master 的进程号
    kill -9 41589

    结果显示:
    (base) [root@master ~]# jps
    37328 DataNode
    90336 Jps
    35798 QuorumPeerMain
    38521 ResourceManager
    38907 NodeManager
    41821 Worker
    36958 NameNode
  • 访问 slave1 的 WebUI

    1
    http://slave1:8082/

    image-20220403203828713

  • 进行主备切换的测试

  • 提交一个 spark 任务到当前 活跃的 master上 :

    1
    /export/server/spark/bin/spark-submit --master spark://master:7077 /export/server/spark/examples/src/main/python/pi.py 1000
  • 复制标签 kill 掉 master 的 进程号

  • 再次访问 master 的 WebUI

    1
    http://master:8081/
    1
    网页访问不了!
  • 再次访问 slave1 的 WebUI

    1
    http://slave1:8082/

    image-20220403204737370

  • 可以看到当前活跃的 master 提示信息

    1
    2
    3
    4
    5
    6
    7
    (base) [root@master ~]# /export/server/spark/bin/spark-submit --master spark://master:7077 /export/server/spark/examples/src/main/python/pi.py 1000
    22/03/29 16:11:15 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
    22/03/29 16:12:16 WARN StandaloneAppClient$ClientEndpoint: Connection to master:7077 failed; waiting for master to reconnect...
    22/03/29 16:12:16 WARN StandaloneSchedulerBackend: Disconnected from Spark cluster! Waiting for reconnection...
    22/03/29 16:12:16 WARN StandaloneAppClient$ClientEndpoint: Connection to master:7077 failed; waiting for master to reconnect...
    Pi is roughly 3.140960
    (base) [root@master ~]#
    1
    同样可以输出结果

    当新的 master 接收集群后, 程序继续运行, 正常得到结果.

结论 HA模式下, 主备切换 不会影响到正在运行的程序.

最大的影响是 会让它中断大约30秒左右.

Spark On YARN模式

在已有YARN集群的前提下在单独准备Spark StandAlone集群,对资源的利用就不高.Spark On YARN, 无需部署Spark集群, 只要找一台服务器, 充当Spark的客户端

  • 保证 HADOOPCONF和 DIR_YARN_CONF_DIR 已经配置在 spark-env.sh 和环境变量中 (注: 前面配置spark-Standlone 时已经配置过此项了)

    1
    2
    3
    4
    5
    6
    7
    spark-env.sh 文件部分显示:
    ....
    77 ## HADOOP软件配置文件目录,读取HDFS上文件和运行YARN集群
    78 HADOOP_CONF_DIR=/export/server/hadoop/etc/hadoop
    79 YARN_CONF_DIR=/export/server/hadoop/etc/hadoop
    ....

  • 链接到 YARN 中(注: 交互式环境 pyspark 和 spark-shell 无法运行 cluster模式)

  • ```powershell
    bin/pyspark —master yarn —deploy-mode client|cluster
    —deploy-mode 选项是指定部署模式, 默认是 客户端模式
    client就是客户端模式
    cluster就是集群模式
    —deploy-mode 仅可以用在YARN模式下

    1
    2
    3

    - ```powershell
    bin/spark-shell --master yarn --deploy-mode client|cluster
  • ```powershell
    bin/spark-submit —master yarn —deploy-mode client|cluster /xxx/xxx/xxx.py 参数

    1
    2
    3

    - spark-submit 和 spark-shell 和 pyspark的相关参数

    • bin/pyspark: pyspark解释器spark环境
    • bin/spark-shell: scala解释器spark环境
    • bin/spark-submit: 提交jar包或Python文件执行的工具
    • bin/spark-sql: sparksql客户端工具
      1

      这4个客户端工具的参数基本通用.以spark-submit 为例:
      bin/spark-submit —master spark://master:7077 xxx.py`
      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
      52
      53
      54
      55
      56
      57
      58
      59
      60
      61
      62
      63
      64
      65
      66
      67
      68
      69
      70
      71
      72
      73
      74
      75
      76

      ```powershell
      Usage: spark-submit [options] <app jar | python file | R file> [app arguments]
      Usage: spark-submit --kill [submission ID] --master [spark://...]
      Usage: spark-submit --status [submission ID] --master [spark://...]
      Usage: spark-submit run-example [options] example-class [example args]

      Options:
      --master MASTER_URL spark://host:port, mesos://host:port, yarn,
      k8s://https://host:port, or local (Default: local[*]).
      --deploy-mode DEPLOY_MODE 部署模式 client 或者 cluster 默认是client
      --class CLASS_NAME 运行java或者scala class(for Java / Scala apps).
      --name NAME 程序的名字
      --jars JARS Comma-separated list of jars to include on the driver
      and executor classpaths.
      --packages Comma-separated list of maven coordinates of jars to include
      on the driver and executor classpaths. Will search the local
      maven repo, then maven central and any additional remote
      repositories given by --repositories. The format for the
      coordinates should be groupId:artifactId:version.
      --exclude-packages Comma-separated list of groupId:artifactId, to exclude while
      resolving the dependencies provided in --packages to avoid
      dependency conflicts.
      --repositories Comma-separated list of additional remote repositories to
      search for the maven coordinates given with --packages.
      --py-files PY_FILES 指定Python程序依赖的其它python文件
      --files FILES Comma-separated list of files to be placed in the working
      directory of each executor. File paths of these files
      in executors can be accessed via SparkFiles.get(fileName).
      --archives ARCHIVES Comma-separated list of archives to be extracted into the
      working directory of each executor.

      --conf, -c PROP=VALUE 手动指定配置
      --properties-file FILE Path to a file from which to load extra properties. If not
      specified, this will look for conf/spark-defaults.conf.

      --driver-memory MEM Driver的可用内存(Default: 1024M).
      --driver-java-options Driver的一些Java选项
      --driver-library-path Extra library path entries to pass to the driver.
      --driver-class-path Extra class path entries to pass to the driver. Note that
      jars added with --jars are automatically included in the
      classpath.

      --executor-memory MEM Executor的内存 (Default: 1G).

      --proxy-user NAME User to impersonate when submitting the application.
      This argument does not work with --principal / --keytab.

      --help, -h 显示帮助文件
      --verbose, -v Print additional debug output.
      --version, 打印版本

      Cluster deploy mode only(集群模式专属):
      --driver-cores NUM Driver可用的的CPU核数(Default: 1).

      Spark standalone or Mesos with cluster deploy mode only:
      --supervise 如果给定, 可以尝试重启Driver

      Spark standalone, Mesos or K8s with cluster deploy mode only:
      --kill SUBMISSION_ID 指定程序ID kill
      --status SUBMISSION_ID 指定程序ID 查看运行状态

      Spark standalone, Mesos and Kubernetes only:
      --total-executor-cores NUM 整个任务可以给Executor多少个CPU核心用

      Spark standalone, YARN and Kubernetes only:
      --executor-cores NUM 单个Executor能使用多少CPU核心

      Spark on YARN and Kubernetes only(YARN模式下):
      --num-executors NUM Executor应该开启几个
      --principal PRINCIPAL Principal to be used to login to KDC.
      --keytab KEYTAB The full path to the file that contains the keytab for the
      principal specified above.

      Spark on YARN only:
      --queue QUEUE_NAME 指定运行的YARN队列(Default: "default").
  • 启动 YARN 的历史服务器

    1
    2
    3
    cd /export/server/hadoop-3.3.0/sbin

    ./mr-jobhistory-daemon.sh start historyserver
  • 访问WebUI界面

    1
    http://master:19888/

    image-20220403213634530

  • client 模式测试

    1
    2
    3
    SPARK_HOME=/export/server/spark 

    ${SPARK_HOME}/bin/spark-submit --master yarn --deploy-mode client --driver-memory 512m --executor-memory 512m --num-executors 1 --total-executor-cores 2 ${SPARK_HOME}/examples/src/main/python/pi.py 3
  • cluster 模式测试

    1
    2
    3
    SPARK_HOME=/export/server/spark 

    ${SPARK_HOME}/bin/spark-submit --master yarn --deploy-mode cluster --driver-memory 512m --executor-memory 512m --num-executors 1 --total-executor-cores 2 --conf "spark.pyspark.driver.python=/root/anaconda3/bin/python3" --conf "spark.pyspark.python=/root/anaconda3/bin/python3" ${SPARK_HOME}/examples/src/main/python/pi.py 3

kafka 安装配置

Kafka是一种高吞吐量的分布式发布订阅消息系统,其在大数据开发应用上的目的是通过 Hadoo的并行加载机制来统一线上和离线的消息处理,也是为了通过集群来提供实时的消息。大数据开发需掌握Kafka架构原理及各组件的作用和使用方法及相关功能的实现。

  • 上传文件包 到/export/server/

  • 解压文件

    1
    tar -zxvf kafka_2.11-2.0.0.tgz
  • 创建软连接

    1
    ln -s kafka_2.11-2.0.0/ kafka
  • 进入 /export/server/kafka/config 修改 配置文件 server.properties

    1
    2
    3
    cd /export/server/kafka/config

    vim server.properties
    • 21 行内容 broker.id=0 为依次增长的:0、1、2、3、4,集群中唯一 id 从0开始,每台不能重复(注:此处不用修改)

      1
      21 broker.id=0
    • 31 行内容 #listeners=PLAINTEXT://:9092 取消注释,内容改为:listeners=PLAINTEXT://master:9092

      PLAINTEXT为通信使用明文(加密ssl)

      1
      31 listeners=PLAINTEXT://master:9092 
    • 59 行内容 log.dirs=/tmp/kafka-logs 为默认日志文件存储的位置,改为 log.dirs=/export/server/data/kafka-logs

      1
      59 log.dirs=/export/data/kafka-logs
    • 63 行内容为 num.partitions=1 是默认分区数

      1
      63 num.partitions=1
    • 76 行部分

      1
      2
      3
      ############################ **Log Flush Policy** ###############################

      数据安全性(持久化之前先放到缓存上,从缓存刷到磁盘上)interval.messages interval.ms
    • 93 行部分

      1
      2
      3
      ########################### **Log Retention Policy** ############################

      数据保留策略 168/24=7,1073741824/1024=1GB,300000ms = 300s = 5min超过了删掉(最后修改时间还是创建时间-->日志段中最晚的一条消息,维护这个最大的时间戳-->用户无法干预
    • 121 行内容 zookeeper.connect=localhost:2181 修改为 zookeeper.connect=master:2181,slave1:2181,slave2:2181

      1
      121 zookeeper.connect=master:2181,slave1:2181,slave2:2181
    • 126 行内容 group.initial.rebalance.delay.ms=0 修改为 group.initial.rebalance.delay.ms=3000

      1
      133 group.initial.rebalance.delay.ms=3000
  • 给 slaves1和 slavs2 scp 分发 kafka

    1
    2
    3
    4
    5
    cd /export/server/

    scp -r /export/server/kafka_2.11-2.0.0/ slave1:$PWD

    scp -r /export/server/kafka_2.11-2.0.0/ slave2:$PWD
  • 创建软连接

    1
    ln -s /export/server/kafka_2.11-2.0.0/ kafka
  • 配置 kafka 环境变量(注:可以一台一台配,也可以在 master 完成后发给 slave1 和slave2)

    1
    2
    3
    4
    5
    vim /etc/profile 

    # kafka 环境变量
    export KAFKA_HOME=/export/server/kafka
    export PATH=$PATH:$KAFKA_HOME/bin
  • 重新加载环境变量

    1
    source /etc/profile
  • 分别在 slave1 和slave2 上修改配置文件 路径:/export/server/kafka/config

    • 将文件 server.properties 的第 21 行的 broker.id=0 修改为 broker.id=1 同理 slave2 同样操作

      1
      21 broker.id=1
    • 将文件 server.properties 的第 31 行的 listeners=PLAINTEXT://master:9092 修改为 listeners=PLAINTEXT://slave1:9092 同理slave2 同样操作

      1
      31 listeners=PLAINTEXT://slave1:9092 
  • 启停 kafka (注:kafka 启动需要在 zookeeper 启动的情况下才可)

    1
    kafka-server-start.sh -daemon /export/server/kafka/config/server.properties
    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
    hadoop,zookeeper,kafka启动
    结果显示:
    (base) [root@master ~]# jps
    11793 NodeManager
    91699 Kafka
    85618 QuorumPeerMain
    10697 NameNode
    10924 DataNode
    11596 ResourceManager
    109852 Jps

    [root@slave1 ~]# jps
    9301 DataNode
    9493 SecondaryNameNode
    95959 Kafka
    102971 Jps
    9855 NodeManager
    89534 QuorumPeerMain

    [root@slave2 ~]# jps
    88660 QuorumPeerMain
    95204 Kafka
    9110 NodeManager
    8616 DataNode
    102104 Jps
  • 关闭 kafka

    1
    kafka-server-stop.sh stop
  • 定制脚本一键启动

  • ```sh
    vim kafka-all.sh

    放入 /bin 路径下

    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

    ```powershell
    #!/bin/bash
    if [ $# -eq 0 ] ;
    then
    echo "please input param:start stop"
    else
    if [ $1 = start ] ;then
    echo "${1}ing master"
    ssh master "source /etc/profile;kafka-server-start.sh -daemon /export/server/kafka/config/server.properties"
    for i in {1..2}
    do
    echo "${1}ing slave${i}"
    ssh slave${i} "source /etc/profile;kafka-server-start.sh -daemon /export/server/kafka/config/server.properties"
    done
    fi
    if [ $1 = stop ];then
    echo "${1}ping master "
    ssh master "source /etc/profile;kafka-server-stop.sh"
    for i in {1..2}
    do
    echo "${1}ping slave${i}"
    ssh slave${i} "source /etc/profile;kafka-server-stop.sh"
    done
    fi
    fi

hbase安装配置

  • 进入 /export/server 将文件 hbase-1.2.4-bin.tar 上传 并解压

    1
    2
    3
    cd /export/server

    tar -zxvf hbase-1.2.4-bin.tar.gz
  • 创建软连接

    1
    ln -s hbase-1.2.4 hbase
  • 进入 /export/server/hbase/conf 修改配置

    • 修改 hbase-env.sh 文件内容 添加

      1
      2
      3
      4
      5
      6
      vim hbase-env.sh

      内容添加末尾:
      export HBASE_MANAGES_ZK=false
      export JAVA_HOME=/export/server/jdk1.8.0_241
      export HBASE_CLASSPATH=/export/server/hadoop-3.3.0/etc/hadoop
    • 修改 hbase-site.xml 文件内容

      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
      vim hbase-site.xml

      # 文末删除 <configuration> </configuration> 添加以下内容
      <configuration>
      <property>
      <name>hbase.rootdir</name>
      <value>hdfs://master:8020/hbase</value>
      </property>
      <property>
      <name>hbase.cluster.distributed</name>
      <value>true</value>
      </property>
      <property>
      <name>hbase.master</name>
      <value>hdfs://master:6000</value>
      </property>
      <property>
      <name>hbase.zookeeper.quorum</name>
      <value>master,slave1,slave2</value>
      </property>
      <property>
      <name>hbase.zookeeper.property.dataDir</name>
      <value>/export/server/ zookeeper</value>
      </property>
      </configuration>
    • 配置 regionservers 添加内容 删除原来的 localhoast

      1
      2
      slave1
      slave2
  • 进入 /export/server/hadoop-3.3.0/etc/hadoop 将文件 hdfs-site.xml 和 core-site.xml 拷贝到 hbase的配置文件夹下

    1
    2
    3
    4
    cd /export/server/hadoop-3.3.0/etc/hadoop

    cp hdfs-site.xml /export/server/hbase/conf/
    cp core-site.xml /export/server/hbase/conf/
  • 向 slave1 和 slave2 分发配置的 hbase

    1
    2
    scp  -r  /export/server/hbase/  root@slave1:/export/server/
    scp -r /export/server/hbase/ root@slave2:/export/server/
  • master slave1 和 slave2三台主机同时配置环境变量

    1
    2
    3
    4
    5
    6
    vim /etc/profile

    # 添加内容
    #HBASE_HOME
    export HBASE_HOME=/export/server/hbase
    export PATH=$PATH:$HBASE_HOME/bin

    重新加载环境变量

    1
    source /etc/profile
  • 启动 hbase(注:启动 hbase 之前需要启动 zookeeper 和 hadoop )

    1
    2
    3
    4
    5
    6
    7
    zkServer-all.sh start

    start-all.sh

    cd /export/server/hbase/bin

    ./start-hbase.sh
  • jps 查看进程

    1
    2
    3
    4
    结果显示:
    (base) [root@master bin]# jps
    24977 Jps
    24534 HMaster
  • 访问 WebUI

    1
    http://master:16010/master-status

    image-20220403171041076

Hive安装配置

规划

序号主机角色
01master
02salve1mysql,hive server服务器端
03slave2作为Client客户端

Hive 部署之本地模式

本地模式部署本质上是将Hive默认的元数据存储介质由内嵌的Derby数据库替换为独立数据库,即MySQL数据库。本地模式部署Hive需要在一台虚拟机上同时安装MySQL和Hive,接下来,我们以虚拟机slave1为例,使用本地模式部署Hive。

  • 安装 Mysql 安装 Mysql 5.7

  • 下载并安装wget工具,wget是Linux中的一个下载文件的工具

    1
    yum install wget -y
  • 下载MySQL 5.7的yum资源库,资源库文件会下载到当前目录下

    1
    2
    3
    cd /export/server

    wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
  • 安装MySQL 5.7的yum资源库

    1
    yum -y install mysql57-community-release-el7-10.noarch.rpm
  • 进入 /etc/yum.repos.d 文件查看 是否有 mysql-community.repo 和从 mysql-community-source.repo

    1
    ls /etc/yum.repos.d | grep 'mysql'
    1
    2
    3
    4
    结果显示:
    (base) [root@slave1~]# ls /etc/yum.repos.d | grep 'mysql'
    mysql-community.repo
    mysql-community-source.repo
  • mysql-community-source.repo 文件内容是 需要的下载的 mysql 组件

  • 清除缓存

    1
    yum clean all && yum makecache fast
  • 安装MySQL 5.7服务

    1
    yum install mysql-community-server --nogpgcheck
  • 启动 mysql 并查看 服务状态

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    systemctl start mysqld.service

    systemctl status mysqld.service

    结果显示:
    (base) [root@slave1 log]# systemctl status mysqld.service

    ● mysqld.service - MySQL Server
    Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
    Active: active (running) since Sat 2022-04-09 17:26:23 CST; 13s ago
    Docs: man:mysqld(8)
    http://dev.mysql.com/doc/refman/en/using-systemd.html
    Process: 1800 ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid $MYSQLD_OPTS (code=exited, status=0/SUCCESS)
    Process: 1751 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
    Main PID: 1803 (mysqld)
    CGroup: /system.slice/mysqld.service
    └─1803 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid

    Apr 09 17:26:16 slave1 systemd[1]: Starting MySQL Server...
    Apr 09 17:26:23 slave1 systemd[1]: Started MySQL Server.
    (base) [root@slave1 log]#
  • MySQL安装完成后需要通过用户名和密码进行登录,MySQL为本地默认用户root自动生成密码,可以在MySQL的日志文件中查看此密码。

    1
    grep "password" /var/log/mysqld.log
    1
    2
    3
    4
    5
    结果显示:
    (base) [root@slave1 log]# grep "password" /var/log/mysqld.log
    2022-04-09T09:26:19.571037Z 1 [Note] A temporary password is generated for root@localhost: /Xb6caelDqqk

    注意:/Xb6caelDqqk 为默认密码
  • 知识点:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    数字权限使用格式
    在这种使用方式中,首先我们需要了解数字如何表示权限。 首先,我们规定 数字 4 、2 和 1表示读、写、执行权限(具体原因可见下节权限详解内容),即 r=4,w=2,x=1 。此时其他的权限组合也可以用其他的八进制数字表示出来,
    如:
    rwx = 4 + 2 + 1 = 7
    rw = 4 + 2 = 6
    rx = 4 +1 = 5

    若要同时设置 rwx (可读写运行) 权限则将该权限位 设置 为 4 + 2 + 1 = 7
    若要同时设置 rw- (可读写不可运行)权限则将该权限位 设置 为 4 + 2 = 6
    若要同时设置 r-x (可读可运行不可写)权限则将该权限位 设置 为 4 +1 = 5
    User-Group-Other--->>U-G-O
    -rw------- (600) 只有拥有者有读写权限。
    -rw-r--r-- (644) 只有拥有者有读写权限;而属组用户和其他用户只有读权限。
    -rwx------ (700) 只有拥有者有读、写、执行权限。
    -rwxr-xr-x (755) 拥有者有读、写、执行权限;而属组用户和其他用户只有读、执行权限。
    -rwx--x--x (711) 拥有者有读、写、执行权限;而属组用户和其他用户只有执行权限。
    -rw-rw-rw- (666) 所有用户都有文件读、写权限。
    -rwxrwxrwx (777) 所有用户都有读、写、执行权限。
  • 登录 mysql 默认密码:/Xb6caelDqqk

    1
    mysql -u root -p
  • 修改密码为 Ccu2021@ ,密码策略规则要求密码必须包含英文大小写、数字以及特殊符号

    1
    ALTER USER 'root'@'localhost' IDENTIFIED BY 'Ccu2021@';
  • 创建数据库

    1
    CREATE DATABASE hive;
  • 刷新MySQL配置,使得配置生效

    1
    FLUSH PRIVILEGES;
  • 注意:

  • 此部分如果是需要远程登陆的话,mysql 需要创建远程登录,mysql本地登录的话,这步非必要选择

  • 创建 用户:

    1
    create  user  'root'@'%'  identified  by  'Ccu2022@';
  • 允许远程连接:

    1
    grant  all  privileges  on  *.*  to  'root'@'%'  with  grant  option;
  • 更新权限:

    1
    flush privileges;
  • 安装HIve

  • 网址(注:hive基于hadoop ,因先前部署hadoop版本3.3.0 所以hive版本必须为3.0以上,否则会有不兼容发生):Index of /dist/hive (apache.org)

  • 上传 Hive 安装包到 /export/server

  • 此处如果使用PowerShell 上传的话

    1
    2
    # 进入文件所在的文件夹 打开PowerShell
    scp -r .\apache-hive-3.0.0-bin.tar.gz root@192.168.88.136:/export/server
  • 解压文件

    1
    tar -zxvf apache-hive-3.0.0-bin.tar.gz
  • 创建软连接

    1
    ln -s apache-hive-3.0.0-bin hive
  • 配置文件

    • 进入Hive安装目录下的conf目录,复制模板文件hive-env.sh.template并重命名为hive-env.sh,文件hive-env.sh用于配置Hive运行环境。

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      cp hive-env.sh.template hive-env.sh

      vim hive-env.sh

      # 文末添加内容

      export HADOOP_HOME=/export/server/hadoop-3.3.0
      export HIVE_CONF_DIR=/export/server/hive/conf
      export HIVE_AUX_JARS_PATH=/export/server/hive/lib
      export JAVA_HOME=/export/server/jdk
    • 进入Hive安装目录下的conf目录,创建文件hive-site.xml用于配置Hive相关参数。或者以模板复制一个

      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
      52
      53
      54
      55
      56
      57
      58
      59
      60
      61
      62
      63
      cp hive-default.xml.template hive-site.xml

      vim hive-site.xml

      # <configuration> 添加内容 </configuration>

      <!-- 配置Hive数据存储在HDFS上的目录 -->
      <property>
      <name>hive.metastore.warehouse.dir</name>
      <value>/user/hive_local/warehouse</value>
      </property>

      <!-- 配置Hive在HDFS上的临时目录 -->
      <property>
      <name>hive.exec.scratchdir</name>
      <value>/tmp_local/hive</value>
      </property>

      <!-- 指定Hive开启本地模式 -->
      <property>
      <name>hive.metastore.local</name>
      <value>true</value>
      </property>

      <!-- 配置JDBC连接地址 -->
      <property>
      <name>javax.jdo.option.ConnectionURL</name>
      <value>jdbc:mysql://localhost:3306/hive?
      createDatabaseIfNotExist=true&amp;usessL=false</value>

      <!-- 如果需要配置mysql的远程,需要在这里改-->
      <!-- <value>jdbc:mysql://slave2:3306/hive?
      createDatabaseIfNotExist=true&amp;usessL=false</value> -->
      </property>

      <!-- 配置JDBC驱动 -->
      <property>
      <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value>
      </property>

      <!-- 配置连接MySQL的用户名 -->
      <property>
      <name>javax.jdo.option.ConnectionUserName</name>
      <value>root</value>
      </property>

      <!-- 配置连接MySQL的密码 -->
      <property>
      <name>javax.jdo.option.ConnectionPassword</name>
      <value>Ccu2021@</value>
      </property>

      <!-- 配置在命令行界面(CLI)中显示表的列名 -->
      <property>
      <name>hive.cli.print.header</name
      <value>true</value>
      </property>

      <!-- 配置在命令行界面(CLI)中显示当前数据库名称 -->
      <property>
      <name>hive.cli.print.current.db</name>
      <value>true</value>
      </property>
  • 上传JDBC 连接MySQL的驱动包,传入 /export/server/hive/lib 文件夹下

  • 注:此部分如需要远程连接 mysql 需要上传MySQL的驱动包 到

    1
    scp -r .\mysql-connector-java-5.1.32.jar root@192.168.88.136:/export/server/hive/lib
  • 添加环境变量

    1
    2
    3
    4
    5
    vim /etc/profile

    # HIVE_PATH
    export HIVE_HOME=/export/server/hive
    export PATH=$PATH:$HIVE_HOME/bin
  • 重新加载环境变量

    1
    source /etc/profile
  • 初始化mysql

    1
    schematool -initSchema -dbType mysql
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    结果显示:
    (base) [root@slave1 conf]# schematool -initSchema -dbType mysql
    Metastore connection URL: jdbc:mysql://localhost:3306/hive?
    createDatabaseIfNotExist=true&usessL=false
    Metastore Connection Driver : com.mysql.jdbc.Driver
    Metastore connection User: root
    Starting metastore schema initialization to 3.0.0
    Initialization script hive-schema-3.0.0.mysql.sql
    Initialization script completed
    schemaTool completed

    注:如果执行有报错看下方报错解决办法!!!!

  • 注:启动 hive 之前必须启动 hadoop 集群

  • 启动Hive

    1
    hive
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    结果显示:
    (base) [root@slave1 conf]# hive
    SLF4J: Class path contains multiple SLF4J bindings.
    SLF4J: Found binding in [jar:file:/export/server/hbase/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
    SLF4J: Found binding in [jar:file:/export/server/apache-hive-3.0.0-bin/lib/log4j-slf4j-impl-2.10.0.jar!/org/slf4j/impl/StaticLoggerBinder.class]
    SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
    SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
    Hive Session ID = a898fd11-e58d-4d25-adf8-21c8077f5a4b

    Logging initialized using configuration in jar:file:/export/server/apache-hive-3.0.0-bin/lib/hive-common-3.0.0.jar!/hive-log4j2.properties Async: true
    Hive-on-MR is deprecated in Hive 2 and may not be available in the future versions. Consider using a different execution engine (i.e. spark, tez) or using Hive 1.X releases.
    hive (default)>

    报错解决办法:

    • 执行 schematool -initSchema -dbType mysql 出现:

    image-20220409224823997

    1
    2
    3
    4
    【解决办法】:此问题由于 hive 和 hadoop 中的 log4j-slf4j-impl-2.10.0.jar包冲突删除一个即可
    hive中的路径: /export/server/hive/lib
    hadoop中的路径: /export/server/hadoop-3.3.0/share/hadoop/common/lib/
    任意删除一个
    • 执行 schematool -initSchema -dbType mysql 出现:

    image-20220409225740771

    1
    2
    3
    4
    【解决办法】:此问题com.google.common.base.Preconditions.checkArgument 这是因为hive内依赖的guava.jar和hadoop内的版本不一致造成的
    hive中的路径: /export/server/hive/lib
    hadoop中的路径: /export/server/hadoop-3.3.0/share/hadoop/common/lib/
    查看guava.jar的版本 。如果两者不一致,删除版本低的,并拷贝高版本的,保证两者的版本一致。

Hive 部署之远程模式

远程模式与本地模式一样,同样是使用独立数据库存储元数据。不同的是,远程模式使用的是远端的独立数据库,而本地模式使用的是本地独立数据库。远程模式主要应用于Hive客户端较多的情况。

  • 启动HiveServer2服务

  • 在虚拟机Node_02中执行“hiveserver2”命令启动HiveServer2服务,HiveServer2服务会进入监听状态

    1
    hiveserver2
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    结果显示:
    (base) [root@slave1 ~]# hiveserver2
    SLF4J: Class path contains multiple SLF4J bindings.
    SLF4J: Found binding in [jar:file:/export/server/hbase/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
    SLF4J: Found binding in [jar:file:/export/server/apache-hive-3.0.0-bin/lib/log4j-slf4j-impl-2.10.0.jar!/org/slf4j/impl/StaticLoggerBinder.class]
    SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
    SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
    2022-04-09 23:48:24: Starting HiveServer2
    Hive Session ID = 09ab8af4-5dbf-473f-9e34-d4b929984b5c
    Hive Session ID = 9f0ed0a4-b8f6-43ca-9430-7527b81543aa
  • 使用后台方式启动HiveServer2服务,则执行“hive —service hiveserver2 &”命令。

    1
    hive --service hiveserver2 &
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    结果显示:
    (base) [root@slave1 ~]# hive --service hiveserver2 &
    [2] 6640
    (base) [root@slave1 ~]# jps
    2304 DataNode
    6800 Jps
    2531 NodeManager
    6340 RunJar
    2421 SecondaryNameNode
    (base) [root@slave1 ~]#
  • 上传 Hive 到 /export/server 文件夹下(注:以下部分在slave2上操作)

  • 此处如果使用PowerShell 上传的话

    1
    2
    # 进入文件所在的文件夹 打开PowerShell
    scp -r .\apache-hive-3.0.0-bin.tar.gz root@192.168.88.137:/export/server
  • 解压文件

    1
    tar -zxvf apache-hive-3.0.0-bin.tar.gz
  • 创建软连接

    1
    ln -s apache-hive-3.0.0-bin hive
  • 配置Hive

  • 虚拟机 slave2 进入Hive安装目录下的conf目录,创建文件hive-site.xml用于配置Hive相关参数。

    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
    cp hive-default.xml.template hive-site.xml

    vim hive-site.xml

    # <configuration> 添加内容 </configuration>

    <!-- 配置Hive数据存储在HDFS上的目录 -->
    <property>
    <name>hive.metastore.warehouse.dir</name>
    <value>/user/hive_local/warehouse</value>
    </property>

    <!-- 配置Hive在HDFS上的临时目录 -->
    <property>
    <name>hive.exec.scratchdir</name>
    <value>/tmp_local/hive</value>
    </property>

    <!-- 指定Hive不开启本地模式 -->
    <property>
    <name>hive.metastore.local</name>
    <value>false</value>
    </property>

    <!-- 指定Metastore服务地址 -->
    <property>
    <name>hive.metastore.uris</name>
    <value>thrift://slave1:9083</value>
    </property>
  • 编辑环境变量

    1
    2
    3
    4
    5
    vim /etc/profile

    # HIVE_HOME
    export HIVE_HOME=/export/server/hive
    export PATH=$PATH:$HIVE_HOME/bin
  • 虚拟机 slave2 执行通过Hive客户端工具Beeline远程连接虚拟机 slave1 的HiveServer2服务。

    1
    beeline -u jdbc:hive2://slave1:10000 -n root -p
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    结果显示:
    (base) [root@slave2 conf]# beeline -u jdbc:hive2://slave1:10000 -n root -p
    SLF4J: Class path contains multiple SLF4J bindings.
    SLF4J: Found binding in [jar:file:/export/server/apache-hive-3.0.0-bin/lib/log4j-slf4j-impl-2.10.0.jar!/org/slf4j/impl/StaticLoggerBinder.class]
    SLF4J: Found binding in [jar:file:/export/server/hadoop-3.3.0/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
    SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
    SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]
    Connecting to jdbc:hive2://slave1:10000/;user=root
    Enter password for jdbc:hive2://slave1:10000/: ********
    Connected to: Apache Hive (version 3.0.0)
    Driver: Hive JDBC (version 3.0.0)
    Transaction isolation: TRANSACTION_REPEATABLE_READ
    Beeline version 3.0.0 by Apache Hive
    0: jdbc:hive2://slave1:10000/>
  • 执行“hive”命令,通过Hive客户端工具HiveCLI操作本地模式下的Hive,在HiveCLI的命令行界面执行“create database test;”命令创建数据库test。然后分别执行“show databases;”命令分别查看 slave1 和 slave2 数据库列表。

    1
    结果显示:

    image-20220410002727118

文档内容来自于网络采集和自己编写,不做任何盈利,仅供学习。如有侵权请及时联系博主,博主会在第一时间进行删改。