本文提供学习参考;集群用户密码请不要外泄!

一、环境

1.版本

VMware: 17

Ubuntu: 24

JDK:1.8.0_381

Zookeeper:3.8.0

Hadoop:3.3.4

Hive:3.1.3

Spark:3.3.4

Podman:4.9.3

2.节点

节点

IP

角色

运行服务

用户名

密码

master

10.99.0.10

NameNode, SecondaryNameNode, ResourceManager, Spark Master, HiveServer2, MySQL

namenode, secondarynamenode, resourcemanager, master, hiveserver, mysqld

hadoop

hadoop

node1

10.99.0.11

DataNode, NodeManager, Spark Worker, ZooKeeper

datanode, nodemanager, worker, zookeeper

node2

10.99.0.12

DataNode, NodeManager, Spark Worker, ZooKeeper

datanode, nodemanager, worker, zookeeper

node3

10.99.0.13

DataNode, NodeManager, Spark Worker, ZooKeeper

datanode, nodemanager, worker, zookeeper

二、步骤与详细过程

(一)准备

1.在Ubuntu安装ssh与vim

1.1输入

sudo apt update

1.2输入

sudo apt install openssh-server vim -y

2.宿主机配置静态IP

2.1输入

ip route

获取网关

(下图网关192.168.146.2,每一个网关都不一样,要自己获取)

2.2输入

cd /etc/netplan

输入

ls

2.3输入

sudo vim 50-cloud-init.yaml

修改成以下内容,按下Esc输入:wq保存

ip route

获取到网关为192.168.58.2)

network:

  version: 2

  ethernets:

    ens33:

      dhcp4: no

      addresses:

        - 192.168.58.200/24

      routes:

        - to: default

          via: 192.168.58.2  

      nameservers:

        addresses: [202.120.224.26]

注意:

网关地址不一定都一样,需要通过ip route获得;

手动配置IP需要在一定范围内,例如,查到的网关是192.168.146.2,IP可以设定在192.168.146.1-192.168.146.254之间但不能与网关相同;

如果出现无法SSH连接,或无法连接互联网,查看网关是否改变,如改变需重新分配IP;

/etc/netplan里的文件不一定叫50-cloud-init.yaml,根据ls的结果进行vim修改


2.4重启网络配置

2.4.1输入

sudo netplan apply

2.4.2输入

ip a show ens33

2.5测试连通网关

输入

ping 192.168.58.2 -c 3

2.6测试连通互联网

输入(以ping必应为例)

ping www.bing.com -c 3

3.在Windows系统操作

3.1Win+R输入cmd

3.2输入

ssh hadoop@<自己配置的IP>

3.3弹出询问输入yes

3.4输入hadoop密码

(二)

1.安装Podman

1.1输入

sudo apt-get update

1.2输入

sudo apt-get install -y podman

1.3验证安装。输入

podman version

2.创建Podman网络

2.1输入

podman network create --subnet 10.99.0.0/16 --gateway 10.99.0.1 hadoop-cluster

2.2输入,查看是否创建成功

podman network inspect hadoop-cluster

3.创建持久化数据卷

3.1创建卷,输入

podman volume create hadoop-all-data

3.2创建卷,输入

podman volume create hadoop-all-data-1

3.3创建卷,输入

podman volume create hadoop-all-data-2

3.4创建卷,输入

podman volume create hadoop-all-data-3

3.5输入

podman volume create mysql-data

3.6输入

podman volume ls

4.创建Dockerfile

——安装openssh-server, openjdk-8-jdk, wget, vim, net-tools, iputils-ping, zookeeper, hadoop, hive, spark, Scala, SSH, Java等必要软件

——包括创建用户,设置机器名,ssh免密,环境变量,更换APT源为国内镜像。

4.1输入

mkdir -p ~/hadoop-cluster/{docker,scripts,data}

4.2输入

cd hadoop-cluster/docker

4.3输入

vim Dockerfile.hadoop-ubuntu16

4.4输入以下内容,按下Esc输入:wq保存
 

FROM registry.cn-hangzhou.aliyuncs.com/acs/ubuntu:16.04

# 设置环境变量
ENV DEBIAN_FRONTEND=noninteractive
ENV JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
ENV BIGDATA_HOME=/home/hadoop/bigdata
ENV HADOOP_HOME=/home/hadoop/bigdata/hadoop-3.3.4
ENV SPARK_HOME=/home/hadoop/bigdata/spark-3.3.4-bin-hadoop3
ENV HIVE_HOME=/home/hadoop/bigdata/apache-hive-3.1.3-bin
ENV ZOOKEEPER_HOME=/home/hadoop/bigdata/apache-zookeeper-3.7.2-bin
ENV SCALA_HOME=/home/hadoop/bigdata/scala-2.12.18
ENV MYSQL_HOME=/var/lib/mysql
ENV DATA_HOME=/home/hadoop/data
ENV PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$SPARK_HOME/bin:$HIVE_HOME/bin:$ZOOKEEPER_HOME/bin:$SCALA_HOME/bin

# 更换APT源为国内镜像(清华大学)
RUN cp /etc/apt/sources.list /etc/apt/sources.list.bak && \
echo "deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main restricted universe multiverse" > /etc/apt/sources.list && \
    echo "deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse" >> /etc/apt/sources.list && \
    echo "deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse" >> /etc/apt/sources.list && \
    echo "deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security main restricted universe multiverse" >> /etc/apt/sources.list

# 安装必要软件
RUN apt-get update && apt-get install -y \
    openssh-server \
    openjdk-8-jdk \
    wget \
    vim \
    net-tools \
    iputils-ping \
    sudo \
    passwd \
    && rm -rf /var/lib/apt/lists/*

# 配置SSH服务
RUN mkdir /var/run/sshd && \
    ssh-keygen -A && \
    sed -i 's/#PermitRootLogin yes/PermitRootLogin yes/' /etc/ssh/sshd_config && \
    sed -i 's/#PubkeyAuthentication yes/PubkeyAuthentication yes/' /etc/ssh/sshd_config && \
    sed -i 's/#AuthorizedKeysFile/AuthorizedKeysFile/' /etc/ssh/sshd_config

# 创建hadoop用户
RUN useradd -m -s /bin/bash hadoop && \
    echo "hadoop:hadoop" | chpasswd && \
    usermod -aG sudo hadoop

# 在root下创建目录并设置权限(hadoop用户没有chown权限)
RUN mkdir -p /home/hadoop/bigdata && \
    mkdir -p /home/hadoop/data && \
    chown -R hadoop:hadoop /home/hadoop

# 切换到hadoop用户
USER hadoop
WORKDIR /home/hadoop

# 检查目录
RUN ls -la /home/hadoop/ && \
ls -la /home/hadoop/bigdata

# 创建SSH密钥
RUN mkdir -p /home/hadoop/.ssh && \
    ssh-keygen -t rsa -P "" -f /home/hadoop/.ssh/id_rsa && \
    cat /home/hadoop/.ssh/id_rsa.pub > /home/hadoop/.ssh/authorized_keys && \
    chmod 700 /home/hadoop/.ssh && \
    chmod 600 /home/hadoop/.ssh/authorized_keys

# 安装Hadoop
RUN wget https://repo.huaweicloud.com/apache/hadoop/common/hadoop-3.3.4/hadoop-3.3.4.tar.gz && \
    tar -vxzf hadoop-3.3.4.tar.gz -C /home/hadoop/bigdata && \
    rm hadoop-3.3.4.tar.gz

# 安装Spark
RUN wget https://mirrors.huaweicloud.com/apache/spark/spark-3.3.4/spark-3.3.4-bin-hadoop3.tgz && \
    tar -vxzf spark-3.3.4-bin-hadoop3.tgz -C /home/hadoop/bigdata && \
    rm spark-3.3.4-bin-hadoop3.tgz

# 安装Hive
RUN wget https://mirrors.huaweicloud.com/apache/hive/hive-3.1.3/apache-hive-3.1.3-bin.tar.gz && \
    tar -vxzf apache-hive-3.1.3-bin.tar.gz -C /home/hadoop/bigdata && \
    rm apache-hive-3.1.3-bin.tar.gz

# 安装ZooKeeper
RUN wget https://mirrors.aliyun.com/apache/zookeeper/zookeeper-3.7.2/apache-zookeeper-3.7.2-bin.tar.gz && \
    tar -vxzf apache-zookeeper-3.7.2-bin.tar.gz -C /home/hadoop/bigdata && \
    rm apache-zookeeper-3.7.2-bin.tar.gz

# 安装Scala
RUN wget https://downloads.lightbend.com/scala/2.12.18/scala-2.12.18.tgz && \
    tar -vxzf scala-2.12.18.tgz -C /home/hadoop/bigdata && \
    rm scala-2.12.18.tgz

# 切换到root配置后续设置
USER root

# 创建数据目录结构
RUN mkdir -p ${DATA_HOME}/{hadoop/{tmp,hdfs/{name,data}},logs/{hadoop,spark},zookeeper,mysql} && \
    chown -R hadoop:hadoop ${DATA_HOME}

# 配置环境变量到bashrc
RUN echo "export JAVA_HOME=${JAVA_HOME}" >> /etc/profile && \
    echo "export HADOOP_HOME=${HADOOP_HOME}" >> /etc/profile && \
    echo "export PATH=\$PATH:\$HADOOP_HOME/bin:\$HADOOP_HOME/sbin" >> /etc/profile && \
    echo "export SPARK_HOME=${SPARK_HOME}" >> /etc/profile && \
    echo "export PATH=\$PATH:\$SPARK_HOME/bin" >> /etc/profile && \
    echo "export HIVE_HOME=${HIVE_HOME}" >> /etc/profile && \
    echo "export PATH=\$PATH:\$HIVE_HOME/bin" >> /etc/profile && \
    echo "export SCALA_HOME=${SCALA_HOME}" >> /etc/profile && \
    echo "export PATH=\$PATH:\$SCALA_HOME/bin" >> /etc/profile && \
    echo "export ZOOKEEPER_HOME=${ZOOKEEPER_HOME}" >> /etc/profile && \
    echo "export PATH=\$PATH:\$ZOOKEEPER_HOME/bin" >> /etc/profile && \
    echo "export BIGDATA_HOME=${BIGDATA_HOME}" >> /etc/profile && \
    echo "export DATA_HOME=${DATA_HOME}" >> /etc/profile

# 复制环境变量到hadoop用户的bashrc
RUN echo "source /etc/profile" >> /home/hadoop/.bashrc

HEALTHCHECK --interval=30s --timeout=30s --start-period=5s --retries=3 \
    CMD ssh -o ConnectTimeout=5 hadoop@localhost exit 0 || exit 1

# 暴露端口
EXPOSE 22 8020 9870 8088 7077 8080 10000 3306 2181 2888 3888 9000 8030 8031 8032 8033 8040 8042

# 启动SSH服务
CMD ["/usr/sbin/sshd", "-D"]

4.5输入

podman build -t hadoop-cluster:ubuntu16 -f Dockerfile.hadoop-ubuntu16 .

注意:最后面有一个"."


4.6输入

podman images

5.启动容器集群

5.1启动master,输入

podman run -d --name master \

  --network hadoop-cluster \

  --ip 10.99.0.10 \

  --hostname master \

  -p 20010:22 \

  -p 9870:9870 -p 8088:8088 \

  -p 7077:7077 -p 8080:8080 \

  -p 10000:10000 -p 3306:3306 \

  -p 19888:19888 -p 18080:18080 \

  -v hadoop-all-data:/home/hadoop/data \

  -v mysql-data:/var/lib/mysql \

  hadoop-cluster:ubuntu16

5.2启动slave节点

5.2.1输入

podman run -d --name node1 \

  --network hadoop-cluster \

  --ip 10.99.0.11 \

  --hostname node1 \

  -p 20011:22 \

  -v hadoop-all-data-1:/home/hadoop/data \

  hadoop-cluster:ubuntu16

5.2.2输入

podman run -d --name node2 \

  --network hadoop-cluster \

--ip 10.99.0.12 \

  --hostname node2 \

  -p 20012:22 \

  -v hadoop-all-data-2:/home/hadoop/data \

  hadoop-cluster:ubuntu16

5.2.3输入

podman run -d --name node3 \

  --network hadoop-cluster \

  --ip 10.99.0.13 \

  --hostname node3 \

  -p 20013:22 \

  -v hadoop-all-data-3:/home/hadoop/data \

  hadoop-cluster:ubuntu16

5.3验证容器状态,输入

podman ps -a

6.Master节点基础配置

6.1进入master,输入

podman exec -it master bash

6.2进入hadoop账户输入

su - hadoop

6.3输入

sudo vim /etc/hosts

最后一行修改成

10.99.0.10 master

10.99.0.11 node1

10.99.0.12 node2

10.99.0.13 node3

6.4分发hosts到所有Slave节点

6.4.1输入

ssh-copy-id hadoop@node1

6.4.2输入

ssh-copy-id hadoop@node2

6.4.3输入

ssh-copy-id hadoop@node3

6.4.4输入

cp /etc/hosts /tmp/hosts.new

6.4.5免密

6.4.5.1输入

echo "hadoop ALL=(root) NOPASSWD:ALL" > /tmp/hadoop-nopasswd

6.4.5.2输入

for n in node1 node2 node3; do

    scp /tmp/hosts.new hadoop@$n:/tmp/hosts.new

    ssh -t hadoop@$n "

        sudo cp /tmp/hosts.new /etc/hosts &&

        sudo rm -f /etc/sudoers.d/hadoop-nopasswd &&

        sudo install -m 440 -o root -g root /tmp/hadoop-nopasswd /etc/sudoers.d/hadoop-nopasswd"

done

6.4.6验证

分别输入ssh node1, ssh node2, ssh node3

退出输入exit

7.Hadoop集群配置

7.1输入

cd /home/hadoop/bigdata/hadoop-3.3.4/etc/hadoop

7.2输入

vim core-site.xml

7.3在<configuration></configuration>之间输入以下内容,按下Esc输入:wq保存

 <property>
        <name>fs.defaultFS</name>
        <value>hdfs://master:8020</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/home/hadoop/data/hadoop/tmp</value>
    </property>
    <property>
        <name>ha.zookeeper.quorum</name>
        <value>node1:2181,node2:2181,node3:2181</value>
    </property>

7.4输入

vim hdfs-site.xml

7.5在<configuration></configuration>之间输入以下内容,按下Esc输入:wq保存
 

<property>
        <name>dfs.replication</name>
 <value>3</value>
    </property>
    <property>
        <name>dfs.namenode.name.dir</name>
        
        <value>/home/hadoop/data/hadoop/dfs/name</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
       
        <value>/home/hadoop/data/hadoop/dfs/data</value>
    </property>
    <property>
        <name>dfs.namenode.http-address</name>
        <value>master:9870</value>
    </property>
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>master:9868</value>
    </property>
    <property>
        <name>dfs.permissions.enabled</name>
        <value>false</value>
    </property>

7.6输入

vim yarn-site.xml

7.7在<configuration></configuration>之间输入以下内容,按下Esc输入:wq保存

 <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.aux-services.mapreduce.shuffle.class</name>
        <value>org.apache.hadoop.mapred.ShuffleHandler</value>
    </property>
    <property>
        <name>yarn.nodemanager.resource.memory-mb</name>
        <value>4096</value>
    </property>
<property>
        <name>yarn.nodemanager.resource.cpu-vcores</name>
        <value>2</value>
    </property>

7.8输入

vim mapred-site.xml

7.9在<configuration></configuration>之间输入以下内容,按下Esc输入:wq保存

<property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>master:10020</value>
    </property>
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>master:19888</value>
    </property>
<property>
    <name>yarn.app.mapreduce.am.env</name>
    <value>HADOOP_MAPRED_HOME=/home/hadoop/bigdata/hadoop-3.3.4</value>
</property>
<property>
    <name>mapreduce.map.env</name>
    <value>HADOOP_MAPRED_HOME=/home/hadoop/bigdata/hadoop-3.3.4</value>
</property>
<property>
    <name>mapreduce.reduce.env</name>
    <value>HADOOP_MAPRED_HOME=/home/hadoop/bigdata/hadoop-3.3.4</value>
</property>

7.10输入

vim workers

7.11删除localhost输入以下内容,按下Esc输入:wq保存

node1

node2

node3

7.12输入

vim ~/.bashrc

7.13在开头输入以下内容,按下Esc输入:wq保存

export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64

export BIGDATA_HOME=/home/hadoop/bigdata
export HADOOP_HOME=$BIGDATA_HOME/hadoop-3.3.4
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export SPARK_HOME=$BIGDATA_HOME/spark-3.3.4-bin-hadoop3
export HIVE_HOME=$BIGDATA_HOME/apache-hive-3.1.3-bin
export ZOOKEEPER_HOME=$BIGDATA_HOME/apache-zookeeper-3.7.2-bin
export SCALA_HOME=$BIGDATA_HOME/scala-2.12.18

export DATA_HOME=/home/hadoop/data
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$SPARK_HOME/bin:$HIVE_HOME/bin:$ZOOKEEPER_HOME/bin:$SCALA_HOME/bin

7.14输入

source ~/.bashrc

8.分发Hadoop配置

8.1输入

for node in node1 node2 node3; do

  echo "Deploying to $node..."

  scp -r /home/hadoop/bigdata/hadoop-3.3.4 $node:/home/hadoop/bigdata/

  scp ~/.bashrc $node:/home/hadoop/

  ssh $node "source ~/.bashrc"

done

8.2格式化,在master输入

hdfs namenode -format

9.ZooKeeper集群配置

9.1输入

for node in master node1 node2 node3; do

  ssh $node "mkdir -p /home/hadoop/bigdata/apache-zookeeper-3.7.2-bin/{data,logs}"

done

9.2创建myid文件

9.2.1输入

ssh node1 "echo '1' > /home/hadoop/bigdata/apache-zookeeper-3.7.2-bin/data/myid"

9.2.2输入

ssh node2 "echo '2' > /home/hadoop/bigdata/apache-zookeeper-3.7.2-bin/data/myid"

9.2.3输入

ssh node3 "echo '3' > /home/hadoop/bigdata/apache-zookeeper-3.7.2-bin/data/myid"

9.2.4输入

echo '4' > /home/hadoop/bigdata/apache-zookeeper-3.7.2-bin/data/myid

9.3修改zoo.cfg

输入

cat > /home/hadoop/bigdata/apache-zookeeper-3.7.2-bin/conf/zoo.cfg << 'EOF'

tickTime=2000

initLimit=10

syncLimit=5

dataDir=/home/hadoop/data/apache-zookeeper-3.7.2-bin/data

dataLogDir=/home/hadoop/data/apache-zookeeper-3.7.2-bin/logs

clientPort=2181

server.1=node1:2888:3888

server.2=node2:2888:3888

server.3=node3:2888:3888

server.4=master:2888:3888

EOF

9.4分发

9.4.1输入

scp /home/hadoop/bigdata/apache-zookeeper-3.7.2-bin/conf/zoo.cfg node1:/home/hadoop/bigdata/apache-zookeeper-3.7.2-bin/conf/

9.4.2输入

scp /home/hadoop/bigdata/apache-zookeeper-3.7.2-bin/conf/zoo.cfg node2:/home/hadoop/bigdata/apache-zookeeper-3.7.2-bin/conf/

9.4.3输入

scp /home/hadoop/bigdata/apache-zookeeper-3.7.2-bin/conf/zoo.cfg node3:/home/hadoop/bigdata/apache-zookeeper-3.7.2-bin/conf/

9.5启动ZooKeeper集群

9.5.1输入

zkServer.sh start

9.5.2输入

for node in master node1 node2 node3; do

  echo "starting $node ZooKeeper..."

  ssh $node "zkServer.sh start"

done

9.6查看状态,输入

for node in master node1 node2 node3; do

  echo "$node ZooKeeper status"

  ssh $node "zkServer.sh status"

done

10.启动Hadoop集群

10.1启动HDFS,输入

start-dfs.sh

10.2启动YARN,输入

start-yarn.sh

10.3启动JobHistory,输入

mapred --daemon start historyserver

10. 4验证集群状态

10.4.1输入

hdfs dfsadmin -report

10.4.2输入

yarn node -list

11.Hive安装配置

11.1 安装与配置MySQL

11.1.1输入

sudo apt update

11.1.2输入

sudo apt install mysql-server

11.1.3安装时候,设置root的密码root

11.1.4启动MySQL,输入

sudo service mysql start

11.1.5输入

sudo systemctl enable mysql

11.1.6输入

mysql -u root -p

再输入密码root

11.1.7输入

CREATE DATABASE hivemetastore DEFAULT CHARACTER SET utf8;

CREATE USER 'hive'@'%' IDENTIFIED BY 'hive2024';

GRANT ALL PRIVILEGES ON hivemetastore.* TO 'hive'@'%';

FLUSH PRIVILEGES;

EXIT;

11.1.8绑定IP

11.1.8.1输入

sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf

11.1.8.2找到bind-address修改成bind-address = 0.0.0.0,按下Esc输入:wq保存

11.1.8.3输入

sudo -i

11.1.8.4输入

service mysql restart

11.1.8.5输入

su – hadoop

11.2配置Hive

11.2.1输入

cd /home/hadoop/bigdata/apache-hive-3.1.3-bin

11.2.2输入

cd lib

11.2.3输入

wget https://repo1.maven.org/maven2/mysql/mysql-connector-java/5.1.49/mysql-connector-java-5.1.49.jar

11.2.4输入

cd ..

11.2.5输入

cd conf

11.2.6输入

vim hive-site.xml

11.2.7输入以下内容,按下Esc输入:wq保存

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
   
    <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://master:3306/hivemetastore?createDatabaseIfNotExist=true&amp;useSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF-8</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionDriverName</name>
        <value>com.mysql.jdbc.Driver</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionUserName</name>
        <value>hive</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>hive2024</value>
    </property>
    
   
    <property>
        <name>hive.metastore.warehouse.dir</name>
        <value>hdfs://master:8020/user/hive/warehouse</value>
    </property>
    
  
    <property>
        <name>hive.server2.thrift.port</name>
        <value>10000</value>
    </property>
    <property>
        <name>hive.server2.thrift.bind.host</name>
        <value>master</value>
    </property>
    
  
    <property>
 <name>hive.server2.enable.doAs</name>
        <value>false</value>
    </property>
    
  
    <property>
        <name>hive.execution.engine</name>
        <value>mr</value>
    </property>
    
   
    <property>
        <name>hive.metastore.uris</name>
        <value>thrift://master:9083</value>
    </property>
    
   
    <property>
        <name>hive.querylog.location</name>
        <value>/home/hadoop/data/hive/querylog</value>
    </property>
    
   
    <property>
        <name>hive.exec.scratchdir</name>
        <value>/home/hadoop/data/hive/scratchdir</value>
    </property>
    
   
    <property>
        <name>hive.exec.mode.local.auto</name>
        <value>true</value>
    </property>
    
    
    <property>
        <name>hive.log.dir</name>
        <value>/home/hadoop/data/hive/logs</value>
    </property>
</configuration>

11.2.8输入

schematool -initSchema -dbType mysql

12.Spark集群配置

12.1配置Spark

12.1.1输入

cd /home/hadoop/bigdata/spark-3.3.4-bin-hadoop3/conf

12.1.2输入

vim spark-env.sh

12.1.3输入以下内容,按下Esc输入:wq保存

export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64

export HADOOP_HOME=/home/hadoop/bigdata/hadoop-3.3.4

export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop

export SPARK_MASTER_HOST=master

export SPARK_MASTER_PORT=7077

export SPARK_WORKER_MEMORY=2g

export SPARK_WORKER_CORES=2

export SPARK_HISTORY_OPTS="-Dspark.history.fs.logDirectory=hdfs://master:8020/spark-logs"

export SPARK_DIST_CLASSPATH=$(hadoop classpath)

12.1.4输入

vim spark-defaults.conf

12.1.5输入以下内容,按下Esc输入:wq保存

spark.master                     spark://master:7077

spark.eventLog.enabled           true

spark.eventLog.dir               hdfs://master:8020/spark-logs

spark.history.fs.logDirectory    hdfs://master:8020/spark-logs

spark.sql.warehouse.dir          hdfs://master:8020/user/hive/warehouse

spark.yarn.jars                  hdfs://master:8020/spark-jars/*.jar

spark.hadoop.fs.defaultFS        hdfs://master:8020

12.1.6输入

vim workers

12.1.7输入以下内容,按下Esc输入:wq保存

node1

node2

node3

12.2创建HDFS目录

12.2.1输入

hdfs dfs -mkdir -p /spark-logs

12.2.2输入

hdfs dfs -mkdir -p /spark-jars

12.2.3输入

hdfs dfs -put /home/hadoop/bigdata/spark-3.3.4-bin-hadoop3/jars/*.jar /spark-jars/

12.2.4输入

hdfs dfs -chmod -R 777 /spark-logs

12.2.5输入

hdfs dfs -chmod -R 755 /spark-jars

12.2.6输入

hdfs dfs -ls /

12.3分发Spark配置到node

for node in node1 node2 node3; do

  echo "Deploy Spark to $node..."

  scp -r /home/hadoop/bigdata/spark-3.3.4-bin-hadoop3 hadoop@$node:/home/hadoop/bigdata/

done

12.4启动Spark集群

12.4.1输入

$SPARK_HOME/sbin/start-all.sh

12.4.2输入

$SPARK_HOME/sbin/start-history-server.sh

12.4.3输入

jps

14.虚拟机快照

--容器关闭之后或者虚拟机关机之后Podman集群会丢失所有数据,可以使用卷持久化数据,或者使用快照回滚

14.1快照

14.1.1右键虚拟机,找到快照,快照管理器(14.1.1-A),或者点击拍摄快照

14.1.1-A快照管理器,点击拍摄快照,修改名称

14.1.1-B

14.1.1-C点击转到,就可以回到所选的快照状态,恢复集群数据

14.2暂停Podman

--暂停之后重启电脑仍然会丢失集群数据,如果需要关闭虚拟机则需要使用快照

14.2.1输入exit退出

14.2.2输入

podman ps

14.2.3输入

podman pause $(podman ps -q)

输入

podman ps -a

查看状态变成Paused

14.2.4如果想再次启动可以输入

——宿主机没有关机或者重启可以集训运行,若已经关机或重启数据会丢失状态会变成Created

podman unpause master

podman unpause node1

podman unpause node2

podman unpause node3

注意:如果暂停过Podman,需要重新启动集群,才能进行集群验证测试


15.集群验证测试

15.1输入

hdfs dfs -mkdir -p /user/hadoop

15.2输入

hdfs dfs -mkdir test

15.3输入

hdfs dfs -mkdir test/input

15.4输入

hdfs dfs -ls

15.5输入

echo "hello hadoop world" > test.txt

15.6输入

echo "spark is awesome" >> test.txt
cat test.txt

15.7输入

hdfs dfs -put test.txt test/input/

15.8输入

hdfs dfs -cat test/input/test.txt

15.9输入

hadoop jar /home/hadoop/bigdata/hadoop-3.3.4/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.4.jar wordcount test/input test/output

15.10查看结果

15.10.1输入

hdfs dfs -cat test/output/part-r-00000

15.11测试Spark

--运行估算圆周率π

15.11.1输入

spark-submit --master spark://master:7077 --class org.apache.spark.examples.SparkPi /home/hadoop/bigdata/spark-3.3.4-bin-hadoop3/examples/jars/spark-examples_2.12-3.3.4.jar 100

15.11.2查看结果,在输出的日志找到

15.12测试Hive

15.12.1输入

nohup hive --service metastore > hive-metastore.log 2>&1 &

15.12.2输入

jps

15.12.3输入

hive

15.12.4输入

CREATE TABLE test_table (id INT, name STRING);

15.12.5输入

INSERT INTO test_table VALUES (1, 'hadoop'), (2, 'spark');

15.12.6输入

SELECT * FROM test_table;

输入

quit;

退出


三、遇到的问题与解决

1.无法ssh

解决:输入

ssh-keygen -R <自己配置的IP>

2.无法连接

解决:修改 Dockerfile 的第一行

FROM registry.cn-hangzhou.aliyuncs.com/acs/ubuntu:16.04

3.镜像失效

解决:更改镜像,执行

podman rmi $(podman images -f dangling=true -q) 2>/dev/null || true

,再重新构建

4.3306端口被占用

解决:关闭宿主机MySQL

5.

解决:授权

6.Hive初始化失败,MySQL拒绝访问

解决:

vim /etc/mysql/mysql.conf.d/mysqld.cnf

找到bind-address修改成bind-address = 0.0.0.0,按下Esc输入:wq保存

7.Hive创建表失败

解决:

nohup hive --service metastore > hive-metastore.log 2>&1 &

9.MySQL使用systemctl指令无法启动

报错Failed to connect to bus: No such file or directory

解决:使用sudo service mysql start指令启动

10.Spark重启失败,或者使用集群计算失败

解决:在各节点使用以下指令,清除缓存之后再尝试启动Spark

cd /home/hadoop/bigdata/spark-3.3.4-bin-hadoop3
rm -rf /tmp/spark-*
rm -rf /tmp/blockmgr-*
rm -rf /tmp/spark.log

更多推荐