本文章讲的是单节点的配置,对于运存小于16GB的电脑建议使用单节点或者双节点不建议更多!!!!

一、系统初始化与基础工具安装

登录虚拟机(建议使用 root 用户),依次执行以下命令块。

1. 设置主机名、关闭防火墙、安装基础工具
# 1. 设置主机名
hostnamectl set-hostname bigdata-node1
echo "127.0.0.1 bigdata-node1" >> /etc/hosts

# 2. 关闭防火墙和 SELinux (开发环境必须,避免端口问题)
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

# 3. 安装基础工具 (wget, vim, net-tools, gcc, make, unzip 等)
yum install -y wget vim net-tools gcc make unzip tar curl ssh openssh-server rsync java-1.8.0-openjdk java-1.8.0-openjdk-devel

# 注意:上面安装了 openjdk 作为备用,但我们会手动安装 Oracle JDK 8 以确保兼容性

二、一键下载所有资源包

用命令下载所有组件。

# 创建目录
mkdir -p /opt/software
mkdir -p /opt/module
cd /opt/software

echo ">>> 开始下载资源包 (可能需要 5-10 分钟,视网速而定)..."

# 1. 下载 JDK 1.8 (华为云镜像)
wget -c https://repo.huaweicloud.com/java/jdk/8u201-b09/jdk-8u201-linux-x64.tar.gz

# 2. 下载 Scala 2.10.7 (适配 Spark 1.6)
wget -c https://downloads.lightbend.com/scala/2.10.7/scala-2.10.7.tgz

# 3. 下载 Hadoop 2.6.4 (Apache 归档)
wget -c https://archive.apache.org/dist/hadoop/common/hadoop-2.6.4/hadoop-2.6.4.tar.gz

# 4. 下载 Spark 1.6.3 (预编译 Hadoop 2.6 版本)
wget -c https://archive.apache.org/dist/spark/spark-1.6.3/spark-1.6.3-bin-hadoop2.6.tgz

# 5. 下载 Hive 1.2.1
wget -c https://archive.apache.org/dist/hive/hive-1.2.1/apache-hive-1.2.1-bin.tar.gz

# 6. 下载 MySQL Connector Java 5.1.47
wget -c https://mirrors.tuna.tsinghua.edu.cn/mysql/Downloads/Connector-J/mysql-connector-java-5.1.47.tar.gz

# 7. 下载 Redis 3.2.12
wget -c https://download.redis.io/releases/redis-3.2.12.tar.gz

# 8. 下载 Kafka 0.10.2.1 (Scala 2.10 版本)
wget -c https://archive.apache.org/dist/kafka/0.10.2.1/kafka_2.10-0.10.2.1.tgz

#9. 下载 ZooKeeper3.4.14
wget https://archive.apache.org/dist/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz

# 10. 下载 Elasticsearch Hadoop Connector 6.3.2 (关键!用于连接 Windows ES)
wget -c https://artifacts.elastic.co/downloads/elasticsearch-hadoop/elasticsearch-hadoop-6.3.2.zip

echo ">>> 所有资源包下载完成!"
ls -lh

三、安装 JDK & Scala & 配置环境变量

# 1. 解压 JDK
tar -zxvf jdk-8u201-linux-x64.tar.gz -C /opt/module/
ln -s /opt/module/jdk1.8.0_201 /opt/module/jdk1.8

# 2. 解压 Scala
tar -zxvf scala-2.10.7.tgz -C /opt/module/
ln -s /opt/module/scala-2.10.7 /opt/module/scala

# 3. 配置全局环境变量
cat >> /etc/profile << 'EOF'
# JAVA & SCALA
export JAVA_HOME=/opt/module/jdk1.8
export SCALA_HOME=/opt/module/scala
export PATH=$PATH:$JAVA_HOME/bin:$SCALA_HOME/bin
EOF
source /etc/profile

# 验证
java -version
scala -version

四、安装与配置 Hadoop 2.6.4

# 1. 解压
tar -zxvf hadoop-2.6.4.tar.gz -C /opt/module/
ln -s /opt/module/hadoop-2.6.4 /opt/module/hadoop

# 2. 配置 core-site.xml
cat > /opt/module/hadoop/etc/hadoop/core-site.xml << 'EOF'
<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://bigdata-node1:9000</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/module/hadoop/tmp</value>
    </property>
</configuration>
EOF

# 3. 配置 hdfs-site.xml
cat > /opt/module/hadoop/etc/hadoop/hdfs-site.xml << 'EOF'
<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
</configuration>
EOF

# 4. 配置 mapred-site.xml
cp /opt/module/hadoop/etc/hadoop/mapred-site.xml.template /opt/module/hadoop/etc/hadoop/mapred-site.xml
cat > /opt/module/hadoop/etc/hadoop/mapred-site.xml << 'EOF'
<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>
EOF

# 5. 配置 yarn-site.xml
cat > /opt/module/hadoop/etc/hadoop/yarn-site.xml << 'EOF'
<configuration>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>bigdata-node1</value>
    </property>
</configuration>
EOF

# 6. 配置 hadoop-env.sh (指定 JAVA_HOME)
echo "export JAVA_HOME=/opt/module/jdk1.8" >> /opt/module/hadoop/etc/hadoop/hadoop-env.sh
如果没有hadoop-env.sh 查找是否有hadoop-env.sh.template 
使用以下命令创建对于文件:
cp /opt/module/hadoop/etc/hadoop/hadoop-env.sh.template /opt/module/hadoop/etc/hadoop/hadoop-env.sh

#7.配置 Hadoop 环境变量
vi /etc/profile
export HADOOP_HOME=/usr/local/hadoop-2.7.7
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
source /etc/profile


# 8. 格式化 NameNode 并启动
hdfs namenode -format
start-dfs.sh
start-yarn.sh

echo ">>> Hadoop 启动完成。请在浏览器访问 http://bigdata-node1:50070 检查"
jps

出现

26/03/31 09:08:29 INFO namenode.NNConf: ACLs enabled? false
26/03/31 09:08:29 INFO namenode.NNConf: XAttrs enabled? true
26/03/31 09:08:29 INFO namenode.NNConf: Maximum size of an xattr: 16384
26/03/31 09:08:29 INFO namenode.FSImage: Allocated new BlockPoolId: BP-1729424953-192.168.30.101-1774919309038
26/03/31 09:08:29 INFO common.Storage: Storage directory /opt/module/hadoop/tmp/dfs/name has been successfully formatted.
26/03/31 09:08:30 INFO namenode.NNStorageRetentionManager: Going to retain 1 images with txid >= 0
26/03/31 09:08:30 INFO util.ExitUtil: Exiting with status 0
26/03/31 09:08:30 INFO namenode.NameNode: SHUTDOWN_MSG: 
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at node0/192.168.30.101
************************************************************/
 

说明启动成功!


五、安装与配置 Spark 1.6.3

# 1. 解压
tar -zxvf spark-1.6.3-bin-hadoop2.6.tgz -C /opt/module/
ln -s /opt/module/spark-1.6.3-bin-hadoop2.6 /opt/module/spark

# 2. 配置 spark-env.sh
cat > /opt/module/spark/conf/spark-env.sh << 'EOF'
export JAVA_HOME=/opt/module/jdk1.8
export SCALA_HOME=/opt/module/scala
export HADOOP_CONF_DIR=/opt/module/hadoop/etc/hadoop
export SPARK_MASTER_HOST=bigdata-node1
EOF

# 3. 配置 slaves
echo "bigdata-node1" > /opt/module/spark/conf/slaves

# 4. 配置 spark 环境变量
vi /etc/profile
export SPARK_HOME=/usr/local/spark-1.6.3-bin-hadoop2.6
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
source /etc/profile

# 5. 启动 Spark
start-master.sh
start-worker.sh spark://bigdata-node1:7077
注意:旧版 Spark(1.x/2.x),命令名不一样,worker 在旧版里叫 slave。
start-slave.sh spark://node0:7077

echo ">>> Spark 启动完成。请在浏览器访问 http://bigdata-node1:8080 检查"
jps

六、安装数据库 (MariaDB) & Hive 1.2.1

# 1. 安装并启动 MariaDB
yum install -y mariadb-server mariadb
systemctl start mariadb
systemctl enable mariadb

# 2. 初始化数据库密码 (设为 root123) 并创建 Hive 库
mysql -e "CREATE DATABASE IF NOT EXISTS hive DEFAULT CHARSET utf8;"
mysql -e "GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root123';"
mysql -e "FLUSH PRIVILEGES;"

# 3. 解压 Hive
tar -zxvf apache-hive-1.2.1-bin.tar.gz -C /opt/module/
ln -s /opt/module/apache-hive-1.2.1-bin /opt/module/hive

# 4. 放入 MySQL 驱动
tar -zxvf mysql-connector-java-5.1.47.tar.gz
cp mysql-connector-java-5.1.47/mysql-connector-java-5.1.47-bin.jar /opt/module/hive/lib/

# 5. 配置 hive-site.xml
cat > /opt/module/hive/conf/hive-site.xml << 'EOF'
<configuration>
    <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://node0:3306/hive?createDatabaseIfNotExist=true&amp;useSSL=false&amp;allowPublicKeyRetrieval=true</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionDriverName</name>
        <value>com.mysql.jdbc.Driver</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionUserName</name>
        <value>root</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>123456</value>
    </property>
    <property>
        <name>hive.metastore.warehouse.dir</name>
        <value>/user/hive/warehouse</value>
    </property>
    <property>
        <name>hive.server2.thrift.bind.host</name>
        <value>0.0.0.0</value>
    </property>
    <property>
        <name>hive.metastore.schema.verification</name>
        <value>false</value>
    </property>
</configuration>
EOF

# 6.配置 hive 环境变量
vi /etc/profile
export HIVE_HOME=/usr/local/apache-hive-1.2.1-bin
export PATH=$PATH:$HIVE_HOME/bin
source /etc/profile

# 7.创建 hive 库
mysql -uroot -p123456
CREATE DATABASE IF NOT EXISTS hive;
DROP DATABASE IF EXISTS hive;
CREATE DATABASE hive;
quit;

# 8. 初始化 Hive 元数据
schematool -dbType mysql -initSchema

# 9. 后台启动 Hive 服务
nohup hive --service metastore > /opt/module/hive/logs/metastore.log 2>&1 &
nohup hive --service hiveserver2 > /opt/module/hive/logs/hiveserver2.log 2>&1 &

echo ">>> Hive 启动完成"

如果想用mysql可以查看https://blog.csdn.net/2301_82235031/article/details/159420463?spm=1001.2014.3001.5502

在使用MySQL的过程中会出现初始化失败的问题,

如果初始化失败是mysql没有授权,执行以下代码查看是否报错,如果报错

mysql -h node0 -P 3306 -uroot -p123456

运行以下命令授权

mysql -uroot -p123456
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY '123456' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'node0' IDENTIFIED BY '123456' WITH GRANT OPTION;
FLUSH PRIVILEGES;
quit;

如果出现


SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/opt/module/hadoop-2.6.4/share/hadoop/common/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/opt/module/spark-1.6.3-bin-hadoop2.6/lib/spark-assembly-1.6.3-hadoop2.6.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]
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/opt/module/hadoop-2.6.4/share/hadoop/common/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/opt/module/spark-1.6.3-bin-hadoop2.6/lib/spark-assembly-1.6.3-hadoop2.6.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]
Metastore connection URL:        jdbc:mysql://node0:3306/hive?createDatabaseIfNotExist=true&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC
Metastore Connection Driver :    com.mysql.jdbc.Driver
Metastore connection User:       root
Starting metastore schema initialization to 1.2.0
Initialization script hive-schema-1.2.0.mysql.sql
[ERROR] Terminal initialization failed; falling back to unsupported
java.lang.IncompatibleClassChangeError: Found class jline.Terminal, but interface was expected
        at jline.TerminalFactory.create(TerminalFactory.java:101)
        at jline.TerminalFactory.get(TerminalFactory.java:158)
        at org.apache.hive.beeline.BeeLineOpts.<init>(BeeLineOpts.java:74)
        at org.apache.hive.beeline.BeeLine.<init>(BeeLine.java:117)
        at org.apache.hive.beeline.HiveSchemaTool.runBeeLine(HiveSchemaTool.java:346)
        at org.apache.hive.beeline.HiveSchemaTool.runBeeLine(HiveSchemaTool.java:326)
        at org.apache.hive.beeline.HiveSchemaTool.doInit(HiveSchemaTool.java:266)
        at org.apache.hive.beeline.HiveSchemaTool.doInit(HiveSchemaTool.java:243)
        at org.apache.hive.beeline.HiveSchemaTool.main(HiveSchemaTool.java:473)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.apache.hadoop.util.RunJar.run(RunJar.java:221)
        at org.apache.hadoop.util.RunJar.main(RunJar.java:136)

Exception in thread "main" java.lang.IncompatibleClassChangeError: Found class jline.Terminal, but interface was expected
        at org.apache.hive.beeline.BeeLineOpts.<init>(BeeLineOpts.java:102)
        at org.apache.hive.beeline.BeeLine.<init>(BeeLine.java:117)
        at org.apache.hive.beeline.HiveSchemaTool.runBeeLine(HiveSchemaTool.java:346)
        at org.apache.hive.beeline.HiveSchemaTool.runBeeLine(HiveSchemaTool.java:326)
        at org.apache.hive.beeline.HiveSchemaTool.doInit(HiveSchemaTool.java:266)
        at org.apache.hive.beeline.HiveSchemaTool.doInit(HiveSchemaTool.java:243)
        at org.apache.hive.beeline.HiveSchemaTool.main(HiveSchemaTool.java:473)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.apache.hadoop.util.RunJar.run(RunJar.java:221)
        at org.apache.hadoop.util.RunJar.main(RunJar.java:136)

问题是 Hive + Hadoop + Spark 的 jline 冲突,只需要删除 Hadoop 的 jline 就彻底解决!


rm -f /opt/module/hadoop-2.6.4/share/hadoop/common/lib/jline-*.jar

然后再执行初始化


schematool -dbType mysql -initSchema


如果没有解决,说明环境仍然是污染的,使用以下命令解决问题


HADOOP_USER_CLASSPATH_FIRST=true schematool -dbType mysql -initSchema


使用上述命令优先使用hive自己的配置
成功后你会看到


Initialization script completed
schemaTool completed


如果你使用了

HADOOP_USER_CLASSPATH_FIRST=true schematool -dbType mysql -initSchema
创建 Hive 启动配置


vi /opt/module/hive/conf/hive-env.sh


加入下面这一行


export HADOOP_USER_CLASSPATH_FIRST=true


否则还会出现冲突问题

注意:如果文件不存在使用

cp /opt/module/hadoop/etc/hadoop/mapred-site.xml.template /opt/module/hadoop/etc/hadoop/mapred-site.xml

创建文件,当然要用你不存在的文件名,上述命令是一个实例。


七、安装 Redis & Kafka & zookeeper

# --- Redis ---
tar -zxvf redis-3.2.12.tar.gz
cd redis-3.2.12
make && make install
cd ..

# 配置 Redis (允许远程访问,后台运行)
sed -i 's/bind 127.0.0.1/bind 0.0.0.0/' redis-3.2.12/redis.conf
sed -i 's/protected-mode yes/protected-mode no/' redis-3.2.12/redis.conf
sed -i 's/daemonize no/daemonize yes/' redis-3.2.12/redis.conf

# 启动 Redis
redis-3.2.12/src/redis-server redis-3.2.12/redis.conf

# --- Kafka ---
tar -zxvf kafka_2.10-0.10.2.1.tgz -C /opt/module/
ln -s /opt/module/kafka_2.10-0.10.2.1 /opt/module/kafka

# 配置 Kafka
sed -i "s/#advertised.listeners=PLAINTEXT:\/\/your.host.name/advertised.listeners=PLAINTEXT:\/\/bigdata-node1:9092/" /opt/module/kafka/config/server.properties
sed -i "s|log.dirs=/tmp/kafka-logs|log.dirs=/opt/module/kafka/logs|" /opt/module/kafka/config/server.properties
mkdir -p /opt/module/kafka/logs

# 启动 Zookeeper 和 Kafka
/opt/module/kafka/bin/zookeeper-server-start.sh -daemon /opt/module/kafka/config/zookeeper.properties
sleep 5
/opt/module/kafka/bin/kafka-server-start.sh -daemon /opt/module/kafka/config/server.properties

echo ">>> Redis & Kafka 启动完成"
jps

八、准备 ES 连接器 (用于 Spark 连接 Windows)

# 解压 ES Hadoop 连接器
unzip elasticsearch-hadoop-6.3.2.zip -d /opt/module/es-connector

echo ">>> ES 连接器已就绪:"
ls /opt/module/es-connector/elasticsearch-hadoop-6.3.2/dist/*.jar

九、logstash 和 xxl-job配置

Logstash 用于收集、处理和转发日志。我们将安装一个与你的 Elasticsearch 6.3.2 版本兼容的 Logstash。

1. 添加 Elastic 官方 Yum 源

首先,创建一个仓库配置文件,以便通过 yum 安装 Logstash。

sudo vi /etc/yum.repos.d/elasticsearch.repo

在打开的编辑器中,粘贴以下内容并保存退出:

[elasticsearch-6.x]
name=Elasticsearch repository for 6.x packages
baseurl=https://artifacts.elastic.co/packages/6.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
2. 安装 Logstash

使用 yum 命令安装 Logstash,它会自动处理依赖。

sudo yum install logstash-6.3.2 -y

如果你只是使用文件直接读取而不是使用Beats的话

3. 配置 Logstash 管道

我们将创建一个简单的配置文件,让它从系统日志文件 /var/log/messages 读取数据,并输出到 Elasticsearch。

sudo vi /etc/logstash/conf.d/logstash.conf

在编辑器中,粘贴以下配置并保存退出:

input {
  file {
    path => "/var/log/messages"
    start_position => "beginning"
  }
}

filter {
  # 这里可以添加 grok 等过滤器来解析日志
  # 为了简化,我们暂时留空
}

output {
  elasticsearch {
    hosts => ["localhost:9200"]
    index => "logstash-messages"
  }
  # stdout { codec => rubydebug } # 调试时可以取消注释,将日志输出到控制台
}

如果用beats请接续之前的步骤,在虚拟机中执行以下命令:

1. 安装 Filebeat

我们继续使用 Elastic 的官方源(如果你之前没配过,参考 Logstash 部分配置 yum 源)。

sudo yum install filebeat-6.3.2 -y
2. 修改 Filebeat 配置

我们要让 Filebeat 把采集到的数据发给 Logstash,而不是直接发给 Elasticsearch。

打开配置文件:

sudo vi /etc/filebeat/filebeat.yml

修改以下部分(注释掉 Elasticsearch 输出,开启 Logstash 输出):

  1. 找到 output.elasticsearch,在前面加 # 把它注释掉。
  2. 找到 output.logstash,取消注释,并修改如下:
output.logstash:
  # Logstash 的 IP 和端口 (默认 5044)
  hosts: ["127.0.0.1:5044"]
  1. 确保输入配置正确(向下滚动找到 filebeat.inputs):
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/messages
    # 你也可以添加其他日志,比如 secure
    # - /var/log/secure

保存并退出。

3. 修改 Logstash 配置以接收 Beats

之前我们配置 Logstash 是直接读取文件 (input { file { ... } }),现在要改成接收 Beats 的输入。

打开 Logstash 配置:

sudo vi /etc/logstash/conf.d/logstash.conf

将内容修改为:

input {
  beats {
    port => 5044
  }
}

filter {
  # 这里可以添加 grok 过滤器
  # 例如解析系统日志
}

output {
  elasticsearch {
    hosts => ["localhost:9200"]
    # 索引名称通常会带上 beat 的前缀
    index => "filebeat-%{+YYYY.MM.dd}"
  }
  # stdout { codec => rubydebug } # 调试用
}
4. 重启服务

先重启 Logstash 确保它开始监听 5044 端口,再启动 Filebeat。


# 启动 Filebeat
sudo systemctl start filebeat
sudo systemctl enable filebeat
5. 调整目录权限

确保 Logstash 用户有权限读取配置文件和写入数据。

sudo chown -R logstash:logstash /etc/logstash
sudo chown -R logstash:logstash /var/lib/logstash
sudo chown -R logstash:logstash /var/log/logstash
6. 启动并设置开机自启

现在启动 Logstash 服务,并设置为开机自动运行。

sudo systemctl start logstash
sudo systemctl enable logstash
7. 验证

你可以通过以下命令检查 Logstash 是否正在运行:

sudo systemctl status logstash

稍等片刻后,你可以在 Windows 的浏览器中访问 http://192.168.30.101:9200/_cat/indices?v,应该会看到一个名为 logstash-messages 的新索引,这表明 Logstash 正在正常工作。


安装与配置 XXL-JOB

XXL-JOB 是一个分布式任务调度平台。它的核心是“调度中心”和“执行器”。这里我们部署调度中心。

4. 准备 MySQL 数据库

XXL-JOB 需要 MySQL 来存储任务信息。

  1. 登录 MySQL (假设你的 root 密码是 password):
    mysql -u root -p
  2. 在 MySQL 命令行中执行
    -- 创建数据库
    CREATE DATABASE xxl_job DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
    
    -- 退出 MySQL
    EXIT;
  3. 下载并导入 SQL 脚本
    # 下载 XXL-JOB 源码包
    wget https://github.com/xuxueli/xxl-job/archive/refs/tags/2.3.1.tar.gz
    
    # 解压
    tar -xvf 2.3.1.tar.gz
    
    # 导入建表脚本
    mysql -u root -p xxl_job < xxl-job-2.3.1/doc/db/tables_xxl_job.sql
    执行后会提示输入 MySQL 密码。
5. 下载并配置 XXL-JOB 调度中心

由于war包下载源失效,我使用在windows上下载gz包解压并用maven打包的jar包来运行xxl-job,因为maven打包后内涵自带服务器,只需要含有java环境运行jar包即可。

直接浏览器打开下载:

1.解压 tar.gz 包
tar -zxvf xxl-job-2.3.1.tar.gz -C /tmp/

当然,如果你找到的安装包中含有war包文件可以不使用maven

  • 找到 admin 模块的 war 包解压后路径:/tmp/xxl-job-2.3.1/xxl-job-admin/target/xxl-job-admin-2.3.1.war这个 war 包和你之前要下载的完全一致,直接用 Tomcat 部署即可
  • 部署命令
    #下载tomcat
    sudo yum install tomcat -y
    # 复制到Tomcat的webapps目录
    cp /tmp/xxl-job-2.3.1/xxl-job-admin/target/xxl-job-admin-2.3.1.war /usr/local/tomcat/webapps/xxl-job-admin.war
    # 重启Tomcat生效
    systemctl restart tomcat
2.用 Maven 编译:
#安装maven
yum install -y maven
#验证安装
mvn -v
#修改xxl-job数据库配置
vi /tmp/xxl-job-2.3.1/xxl-job-admin/src/main/resources/application.properties
#修改以下内容
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=这里改成你的MySQL root密码
# 进入解压后的项目根目录
cd /tmp/xxl-job-2.3.1/
# 执行Maven编译
mvn clean package -DskipTests
#进入目录
cd /tmp/xxl-job-2.3.1/xxl-job-admin/target
#使用java启动
java -jar xxl-job-admin-2.3.1.jar

然后,你可以在 Windows 的浏览器中访问:

http://192.168.30.101:8080/xxl-job-admin

默认的登录账号和密码是:

  • 账号admin
  • 密码123456

成功登录后,你就可以在 Web 界面上配置和管理定时任务了。


十、Windows 端快速部署

虚拟机部分已完成!现在请回到你的 Windows 电脑 进行最后一步配置,以便 Linux 能连上它。

  1. 下载并解压 (如果还没做):

  2. 修改配置文件 (在 Windows 上):

    • 编辑 D:\es-6.3.2\config\elasticsearch.yml
      network.host: 0.0.0.0
      http.port: 9200
      discovery.type: single-node
      xpack.security.enabled: false
    • 编辑 D:\kibana-6.3.2\config\kibana.yml
      server.host: "0.0.0.0"
      elasticsearch.url: "http://localhost:9200"
  3. 开放防火墙 (以管理员身份运行 PowerShell):

    New-NetFirewallRule -DisplayName "ES9200" -Direction Inbound -LocalPort 9200 -Protocol TCP -Action Allow
    New-NetFirewallRule -DisplayName "Kibana5601" -Direction Inbound -LocalPort 5601 -Protocol TCP -Action Allow
  4. 启动服务

    • 双击运行 D:\es-6.3.2\bin\elasticsearch.bat
    • 双击运行 D:\kibana-6.3.2\bin\kibana.bat
    • 等待控制台显示 "started"。

十一、最终联调测试

回到 Linux 虚拟机,执行以下测试,验证整个链路是否打通。

  1. 获取 Windows IP
    假设你的 Windows IP 是 192.168.1.10 (请替换为你实际的 IP)。

    # 测试网络连通性
    curl http://192.168.1.10:9200

    如果返回 JSON 信息(包含 "number" : "6.3.2"),说明网络通了!

  2. 运行 Spark 写入测试
    复制以下命令(记得替换 <YOUR_WINDOWS_IP> 为你的实际 IP):

    
    
    # 启动 spark-shell 并加载 ES 连接器,运行 Spark 写入测试
    spark-shell \
    --jars /opt/module/es-connector/elasticsearch-hadoop-6.3.2/dist/elasticsearch-hadoop-6.3.2.jar,/opt/module/es-connector/elasticsearch-hadoop-6.3.2/dist/elasticsearch-spark-20_2.11-6.3.2.jar \
    --conf "spark.es.nodes=192.168.54.24(你的ip)" \
    --conf "spark.es.port=9200" \
    --conf "spark.es.resource=test-index/doc"
  3. 在 Spark Shell 中输入以下 Scala 代码

    // 准备数据
    val data = sc.parallelize(Seq(
      """{"user":"alice", "age":25, "city":"Beijing", "timestamp":"2026-03-25"}""",
      """{"user":"bob", "age":30, "city":"Shanghai", "timestamp":"2026-03-25"}"""
    ))
    
    
    // 写入 ES
    println(s"正在写入数据到 Windows 的 Elasticsearch...")
    data.saveToEs("test-index/doc")
    
    
    println("✅ 写入成功!请去 Windows 的 Kibana 查看。")
    :quit
    
  4. 验证结果

    • 打开 Windows 浏览器:http://localhost:5601
    • 进入 Management -> Index Patterns -> Create index pattern
    • 输入 test-index,点击创建。
    • 进入 Discover,选择 test-index
    • 你应该能看到 Alice 和 Bob 的数据!

总结:

你现在通过纯命令行在虚拟机中从零搭建了一个包含 Hadoop, Spark, Hive, Kafka, Redis 的大数据集群,并成功将其与 Windows 上的 Elasticsearch/Kibana 联通。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐