集群
约 4885 字大约 16 分钟
2026-01-19
部署
配置多台Linux服务器
安装集群化软件,首要条件就是要有多台Linux服务器,每台服务器上安装一个节点。
我们可以使用虚拟机的克隆功能,将我们的虚拟机额外克隆出3台来使用。
- 关闭所有虚拟机;
- 新建文件夹:文件夹起名为虚拟机集群;
- 克隆虚拟机:
- 选中要克隆的虚拟机,点击右键,选择“管理” -> “克隆”;
- 选择“完整克隆”,并指定新虚拟机的名称;
- 重复以上步骤,克隆出3台虚拟机;
- 修改每台虚拟机的主机名和IP地址:
- 分别登录每台虚拟机;
- 修改主机名:
hostnamectl set-hostname 新主机名; - 修改IP地址:编辑
/etc/sysconfig/network-scripts/ifcfg-ens33文件,修改IPADDR为新的IP地址; - 重启网络服务:
systemctl restart network;
- 配置每台虚拟机的hosts文件:
- 编辑
/etc/hosts文件,添加每台虚拟机的IP地址和主机名映射; - 例如:
192.168.1.100 node1; - 重复以上步骤,配置每台虚拟机的hosts文件;
- 编辑
ssh免密登录
为了方便集群节点之间的通信,我们需要配置ssh免密登录。
- 在每台虚拟机上生成ssh密钥对:
- 执行
ssh-keygen -t rsa -b 4096命令; - 重复以上步骤,在每台虚拟机上生成密钥对;
- 执行
- 配置ssh免密登录:
- 执行
ssh-copy-id root@node1命令; - 重复以上步骤,将每台虚拟机的公钥复制到其他节点;
- 执行
- 测试ssh免密登录:
- 执行
ssh root@node2命令; - 如果无需密码即可登录,说明配置成功;
- 执行

Zookeeper
Zookeeper是一个分布式协调服务,用于管理和协调分布式应用程序。它提供了一个高可用的、分布式的、有序的、基于键值对的存储系统。
Zookeeper的主要功能包括:
- 分布式锁:多个节点可以通过Zookeeper协调来实现对共享资源的互斥访问。
- 配置管理:应用程序可以将配置信息存储在Zookeeper中,实现动态配置的更新和管理。
- 命名服务:应用程序可以使用Zookeeper来注册和发现服务实例,实现服务的动态发现和负载均衡。
- 队列服务:应用程序可以使用Zookeeper来实现分布式队列,用于在多个节点之间进行消息传递。
- 域名服务:应用程序可以使用Zookeeper来实现域名解析,将域名映射到对应的IP地址。
安装
- 【node1】下载安装包并解压
wget http://archive.apache.org/dist/zookeeper/zookeeper-3.5.9/apache-zookeeper-3.5.9-bin.tar.gz
tar -zxvf apache-zookeeper-3.5.9-bin.tar.gz -C /software- 【node1】创建软连接
ln -s /software/apache-zookeeper-3.5.9-bin /software/zookeeper修改配置文件
- 【node1】修改配置文件
mv /software/zookeeper/conf/zoo_sample.cfg /software/zookeeper/conf/zoo.cfg
vim /software/zookeeper/conf/zoo.cfg
tickTime=2000
dataDir=/software/zookeeper/data
clientPort=2181
initLimit=5
syncLimit=2
server.1=192.168.133.128:2888:3888
server.2=192.168.133.129:2888:3888
server.3=192.168.133.130:2888:3888- 【node1】配置myid文件
mkdir /software/zookeeper/data
echo 1 > /software/zookeeper/data/myid复制到node2、node3
- 【node2、node3】创建文件夹
mkdir /software- 【node1】将zookeeper复制到node2、node3
cd /software
scp -r apache-zookeeper-3.5.9-bin root@node2:/software
scp -r apache-zookeeper-3.5.9-bin root@node3:/software- 【node2、node3】创建软链接
ln -s /software/apache-zookeeper-3.5.9-bin /software/zookeeper
# 修改myid
echo 2 > /software/zookeeper/data/myid
# node3
echo 3 > /software/zookeeper/data/myid启动Zookeeper
- 【node1、node2、node3】启动zookeeper
# 启动zookeeper
/software/zookeeper/bin/zkServer.sh start
# 关闭zookeeper
/software/zookeeper/bin/zkServer.sh stop
# 状态
/software/zookeeper/bin/zkServer.sh status
# 重启zookeeper
/software/zookeeper/bin/zkServer.sh restart测试Zookeeper集群
/software/zookeeper/bin/zkCli.sh
# 查看节点状态
ls /注意:需要关闭防火墙,否则会导致节点之间无法通信。

Kafka
Kafka是一个分布式流处理平台,用于构建实时数据管道和流应用程序。它由Apache软件基金会开发和维护,是一个高吞吐量、低延迟的分布式消息队列。
Kafka的主要功能包括:
- 发布和订阅实时流数据:应用程序可以将数据发布到Kafka主题(topic),并从主题订阅数据。
- 存储和处理流数据:Kafka将流数据存储在分布式日志中,确保数据的持久性和可靠性。
- 水平扩展:Kafka可以在多个节点上运行,实现水平扩展,以处理大规模的流数据。
- 低延迟:Kafka的设计目标是提供低延迟的流处理,以满足实时应用程序的需求。
- 高吞吐量:Kafka能够处理大规模的流数据,每秒可以处理 millions of messages。
安装
# 下载安装包
wget http://archive.apache.org/dist/kafka/2.4.1/kafka_2.12-2.4.1.tgz
# 解压
tar -zxvf kafka_2.12-2.4.1.tgz -C /software
# 创建软链接
ln -s /software/kafka_2.12-2.4.1 /software/kafka修改配置文件
vim /software/kafka/config/server.properties
# broker.id 节点id
broker.id=1
# 监听端口
listeners=PLAINTEXT://:9092
# 日志目录
log.dirs=/software/kafka/logs
# zookeeper 连接地址
zookeeper.connect=node1:2181,node2:2181,node3:2181复制到node2、node3
- 【node1】复制kafka到node2、node3
cd /software
scp -r kafka_2.12-2.4.1 root@node2:/software
scp -r kafka_2.12-2.4.1 root@node3:/software
# 创建软链接
ln -s /software/kafka_2.12-2.4.1 /software/kafka- 【node2、node3】修改配置文件
vim /software/kafka/config/server.properties
# broker.id 节点id node2、node3 分别为2、3
broker.id=2
# 监听端口
listeners=PLAINTEXT://:9092
# 日志目录
log.dirs=/software/kafka/logs
# zookeeper 连接地址
zookeeper.connect=node1:2181,node2:2181,node3:2181启动Kafka
# 前台启动kafka
/software/kafka/bin/kafka-server-start.sh /software/kafka/config/server.properties
# 后台启动kafka
nohup /software/kafka/bin/kafka-server-start.sh /software/kafka/config/server.properties 2>&1 >> /software/kafka/logs/kafka.log &
# 关闭kafka
/software/kafka/bin/kafka-server-stop.sh测试Kafka集群
# 创建主题
/software/kafka/bin/kafka-topics.sh --create --zookeeper node1:2181 --replication-factor 1 --partitions 3 --topic test
# 删除主题
/software/kafka/bin/kafka-topics.sh --delete --zookeeper node1:2181 --topic test
# 查看主题
/software/kafka/bin/kafka-topics.sh --list --zookeeper node1:2181
# 打开一个终端页面,启动一个模拟的数据生产者
/software/kafka/bin/kafka-console-producer.sh --broker-list node1:9092 --topic test
# 再打开一个新的终端页面,在启动一个模拟的数据消费者
/software/kafka/bin/kafka-console-consumer.sh --bootstrap-server node1:9092 --topic test --from-beginning
Hadoop
Hadoop是一个开源的分布式计算框架,用于存储和处理大规模数据集。它由Apache软件基金会开发和维护,主要解决海量数据的 存储(HDFS) 、资源管理(YARN) 和 计算(MapReduce) 问题。
Hadoop的主要功能包括:
- 分布式存储:Hadoop使用HDFS(Hadoop Distributed File System)来存储大规模数据集,将数据分布在多个节点上,实现高可靠性和高可扩展性。
- 资源管理:Hadoop使用YARN(Yet Another Resource Negotiator)来管理和调度分布式计算任务,实现资源的动态分配和管理。
- 分布式计算:Hadoop使用MapReduce计算模型来处理大规模数据集,将计算任务分布在多个节点上并行执行,实现高吞吐量和低延迟。
- 高可用性:Hadoop的设计目标是提供高可用性,即使某个节点失败,也不会影响整个系统的运行。
- 可扩展性:Hadoop可以根据需要添加更多的节点来扩展系统的容量和处理能力。
- 批处理和流处理:Hadoop支持批处理和流处理,适用于不同的应用场景。
集群角色
Hadoop生态体系中总共会出现如下进程角色:
- Hadoop HDFS的管理角色:Namenode进程(仅需1个即可(管理者一个就够))
- Hadoop HDFS的数据角色:Datanode进程(多个,越多越好,一个机器启动一个)
- Hadoop YARN的管理角色:ResourceManager进程(仅需1个即可(管理者一个就够))
- Hadoop YARN的数据角色:NodeManager进程(多个,越多越好,一个机器启动一个)
- Hadoop 历史记录服务器角色:HistoryServer进程(仅需1个即可(管理者一个就够))
- Hadoop 代理服务器角色:WebProxyServer进程(仅需1个即可(功能进程无需太多))
- Zookeeper的进程:QuorumPeerMain进程(仅需1个即可(Zookeeper的工作者,越多越好))
角色和节点分配
- node1:Namenode、Datanode、ResourceManager、NodeManager、HistoryServer、WebProxyServer、QuorumPeerMain
- node2:Datanode、NodeManager、QuorumPeerMain
- node3:Datanode、NodeManager、QuorumPeerMain

安装
# 下载安装包
wget http://archive.apache.org/dist/hadoop/common/hadoop-3.3.0/hadoop-3.3.0.tar.gz
# 解压
tar -zxvf hadoop-3.3.0.tar.gz -C /software
# 创建软链接
ln -s /software/hadoop-3.3.0 /software/hadoop修改配置文件
- 修改配置文件:
/software/hadoop/etc/hadoop/hadoop-env.sh
此文件是配置一些Hadoop用到的环境变量,这些知识临时变量,在Hadoop运行时有用,如果想永久生效,需要添加到/etc/profile文件中。
# 配置Java安装路径
export JAVA_HOME=/software/jdk
# 配置Hadoop安装路径
export HADOOP_HOME=/software/hadoop
# Hadoop hdfs配置文件路径
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
# Hadoop YARN配置文件路径
export HADOOP_YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop
# Hadoop YARN 日志文件夹
export HADOOP_YARN_LOG_DIR=$HADOOP_HOME/logs/yarn
# Hadoop hdfs 日志文件夹
export HADOOP_LOG_DIR=$HADOOP_HOME/logs/hdfs
# Hadoop的使用启动用户配置
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
export YARN_PROXYSERVER_USER=root- 修改配置文件:
/software/hadoop/etc/hadoop/core-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. See accompanying LICENSE file.
-->
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://node1:8020</value>
<description></description>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
<description></description>
</property>
</configuration>- 修改配置文件:
/software/hadoop/etc/hadoop/hdfs-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. See accompanying LICENSE file.
-->
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>dfs.datanode.data.dir.perm</name>
<value>700</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/data/nn</value>
<description>Path on the local filesystem where the NameNode stores the namespace and transactions logs persistently.</description>
</property>
<property>
<name>dfs.namenode.hosts</name>
<value>node1,node2,node3</value>
<description>List of permitted DataNodes.</description>
</property>
<property>
<name>dfs.blocksize</name>
<value>268435456</value>
<description></description>
</property>
<property>
<name>dfs.namenode.handler.count</name>
<value>100</value>
<description></description>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/data/dn</value>
</property>
</configuration>- 修改配置文件:
/software/hadoop/etc/hadoop/mapred-env.sh
export JAVA_HOME=/software/jdk
export HADOOP_JOB_HISTORYSERVER_HEAPSIZE=1000
export HADOOP_MAPRED_ROOT_LOGGER=INFO,RFA- 修改配置文件:
/software/hadoop/etc/hadoop/mapred-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. See accompanying LICENSE file.
-->
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
<description></description>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>node1:10020</value>
<description></description>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>node1:19888</value>
<description></description>
</property>
<property>
<name>mapreduce.jobhistory.intermediate-done-dir</name>
<value>/data/mr-history/tmp</value>
<description></description>
</property>
<property>
<name>mapreduce.jobhistory.done-dir</name>
<value>/data/mr-history/done</value>
<description></description>
</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>
</configuration>- 修改配置文件:
/software/hadoop/etc/hadoop/yarn-site.xml
<?xml version="1.0"?>
<!--
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. See accompanying LICENSE file.
-->
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.log.server.url</name>
<value>http://node1:19888/jobhistory/logs</value>
<description></description>
</property>
<property>
<name>yarn.web-proxy.address</name>
<value>node1:8089</value>
<description>proxy server hostname and port</description>
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
<description>Configuration to enable or disable log aggregation</description>
</property>
<property>
<name>yarn.nodemanager.remote-app-log-dir</name>
<value>/tmp/logs</value>
<description>Configuration to enable or disable log aggregation</description>
</property>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>node1</value>
<description></description>
</property>
<property>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
<description></description>
</property>
<property>
<name>yarn.nodemanager.local-dirs</name>
<value>/data/nm-local</value>
<description>Comma-separated list of paths on the local filesystem where intermediate data is written.</description>
</property>
<property>
<name>yarn.nodemanager.log-dirs</name>
<value>/data/nm-log</value>
<description>Comma-separated list of paths on the local filesystem where logs are written.</description>
</property>
<property>
<name>yarn.nodemanager.log.retain-seconds</name>
<value>10800</value>
<description>Default time (in seconds) to retain log files on the NodeManager Only applicable if log-aggregation is disabled.</description>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
<description>Shuffle service that needs to be set for Map Reduce applications.</description>
</property>
</configuration>- 修改配置文件:
/software/hadoop/etc/hadoop/yarn-env.sh
export JAVA_HOME=/software/jdk
export HADOOP_HOME=/software/hadoop
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop
export YARN_LOG_DIR=$HADOOP_HOME/logs/yarn
export HADOOP_LOG_DIR=$HADOOP_HOME/logs/hdfs- 修改workers文件:
/software/hadoop/etc/hadoop/workers
node1
node2
node3复制到node2、node3
cd /software
scp -r hadoop-3.3.0 root@node2:/software
scp -r hadoop-3.3.0 root@node3:/software
# 创建软链接
ln -s /software/hadoop-3.3.0 /software/hadoop创建所需目录
# node1
mkdir -p /data/nn
mkdir -p /data/dn
mkdir -p /data/nm-local
mkdir -p /data/nm-log
# node2
mkdir -p /data/dn
mkdir -p /data/nm-local
mkdir -p /data/nm-log
# node3
mkdir -p /data/dn
mkdir -p /data/nm-local
mkdir -p /data/nm-log配置环境变量
配置环境变量:/etc/profile
# 在node1、node2、node3配置环境变量
export HADOOP_HOME=/software/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin执行source /etc/profile生效
启动Hadoop
- 格式化namenode, 仅需在node1执行
hadoop namenode -formathadoop这个命令来自于:$HADOOP_HOME/bin中的程序
- 启动hdfs集群,仅需在node1执行
# 启动hadoop集群
start-dfs.sh
# 停止hadoop集群
stop-dfs.sh- 启动yarn集群,仅需在node1执行
# 启动yarn集群
start-yarn.sh
# 停止yarn集群
stop-yarn.sh- 启动历史记录服务器,仅需在node1执行
# 启动历史记录服务器
mapred --daemon start historyserver
# 停止历史记录服务器
mapred --daemon stop historyserver- 启动代理服务器,仅需在node1执行
# 启动代理服务器
yarn --daemon start proxyserver
# 停止代理服务器
yarn --daemon stop proxyserver测试Hadoop集群
- 在node1、node2、node3上通过jps验证进程是否都启动成功

- 验证HDFS,浏览器访问:http://node1:9870

hadoop fs -put test.txt /test.txt
hadoop fs -cat /test.txt
- 验证YARN,浏览器访问:http://node1:8088

# 创建文件words.txt,填入如下内容
hello world
hello hadoop
hello world
# 将文件上传到HDFS中
hadoop fs -put words.txt /words.txt
# 执行如下命令验证YARN是否正常
hadoop jar /software/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.0.jar wordcount -Dmapred.job.queue.name=root.root /words.txt /output
HBase
HBase是一个分布式的、面向列的数据库,构建在Hadoop之上。它提供了高可靠性、高可扩展性和高吞吐量的存储和处理能力,适用于存储和处理大规模的结构化数据。
HBase的主要功能包括:
- 分布式存储:HBase将数据分布在多个节点上,实现高可靠性和高可扩展性。
- 面向列的存储:HBase以列族(Column Family)为单位存储数据,每个列族可以包含多个列(Column)。
- 高吞吐量:HBase能够处理大规模的读写操作,每秒可以处理 millions of requests。
- 低延迟:HBase的设计目标是提供低延迟的读写操作,适用于实时应用程序。
- 高可用性:HBase的设计目标是提供高可用性,即使某个节点失败,也不会影响整个系统的运行。
- 可扩展性:HBase可以根据需要添加更多的节点来扩展系统的容量和处理能力。
安装
wget http://archive.apache.org/dist/hbase/2.1.0/hbase-2.1.0-bin.tar.gz
tar -zxvf hbase-2.1.0-bin.tar.gz -C /software
ln -s /software/hbase-2.1.0 /software/hbase修改配置文件
- 【node1】修改配置文件:
/software/hbase/conf/hbase-env.sh
export JAVA_HOME=/software/jdk
# 意思表示,不使用HBase自带的Zookeeper,而是用独立Zookeeper
export HBASE_MANAGES_ZK=false
export HBASE_DISABLE_HADOOP_CLASSPATH_LOOKUP="true"- 【node1】修改配置文件:
/software/hbase/conf/hbase-site.xml
# 将文件的全部内容替换成如下内容:
<configuration>
<!-- HBase数据在HDFS中的存放的路径 -->
<property>
<name>hbase.rootdir</name>
<value>hdfs://node1:8020/hbase</value>
</property>
<!-- Hbase的运行模式。false是单机模式,true是分布式模式。若为false,Hbase和Zookeeper会运行在同一个JVM里面 -->
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<!-- ZooKeeper的地址 -->
<property>
<name>hbase.zookeeper.quorum</name>
<value>node1,node2,node3</value>
</property>
<!-- ZooKeeper快照的存储位置 -->
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/export/server/apache-zookeeper-3.6.0-bin/data</value>
</property>
<!-- V2.1版本,在分布式情况下, 设置为false -->
<property>
<name>hbase.unsafe.stream.capability.enforce</name>
<value>false</value>
</property>
</configuration>- 【node1】修改配置文件:
/software/hbase/conf/regionservers
node1
node2
node3复制到node2、node3
cd /software
scp -r hbase-2.1.0 root@node2:/software
scp -r hbase-2.1.0 root@node3:/software
# 创建软链接
ln -s /software/hbase-2.1.0 /software/hbase配置环境变量
【node1、node2、node3】配置环境变量
# 在node1、node2、node3配置环境变量
export HBASE_HOME=/software/hbase
export PATH=$HBASE_HOME/bin:$PATH
source /etc/profile启动HBase
请确保:Hadoop HDFS、Zookeeper是已经启动了的
# 启动hbase
start-hbase.sh
# 关闭hbase
stop-hbase.sh测试HBase集群
- 浏览器打开:http://node1:16010,即可看到HBase的WEB UI页面

- 测试HBase
# 进入hbase shell
hbase shell
# 创建表
create 'test', 'cf'
# 插入数据
put 'test', 'row1', 'cf:col1', 'value1'
# 查询数据
get 'test', 'row1'
# 扫描表
scan 'test'
# 删除表
disable 'test'
drop 'test'
Spark
Spark是一个快速、通用的集群计算系统,用于大规模数据处理。它提供了一个简单而强大的编程模型,用于处理分布式数据集。
Spark的主要功能包括:
- 分布式数据处理:Spark可以将数据分布在多个节点上进行处理,实现并行计算,提高处理速度。
- 内存计算:Spark将数据存储在内存中,避免了磁盘IO的延迟,提高了计算效率。
- 弹性分布式数据集(RDD):Spark使用RDD作为其核心数据结构,提供了高度抽象的编程模型,方便开发者进行数据处理。
- 多种计算模型:Spark支持批处理、流处理、机器学习等多种计算模型,满足不同场景的需求。
- 高度可扩展:Spark可以在集群上运行,并且可以根据需要动态调整资源,实现高度可扩展的计算能力。
安装
wget https://archive.apache.org/dist/spark/spark-2.4.5/spark-2.4.5-bin-hadoop2.7.tgz
# 解压
tar -zxvf spark-2.4.5-bin-hadoop2.7.tgz -C /software
# 软链接
ln -s /software/spark-2.4.5-bin-hadoop2.7 /software/spark修改配置
- 【node1】修改配置文件名称
# 改名
cd /software/spark/conf
mv spark-env.sh.template spark-env.sh
mv slaves.template slaves- 【node1】修改配置文件:
spark-env.sh
export JAVA_HOME=/software/jdk
## HADOOP软件配置文件目录,读取HDFS上文件和运行YARN集群
HADOOP_CONF_DIR=/software/hadoop/etc/hadoop
YARN_CONF_DIR=/software/hadoop/etc/hadoop
## 指定spark老大Master的IP和提交任务的通信端口
export SPARK_MASTER_HOST=node1
export SPARK_MASTER_PORT=7077
SPARK_MASTER_WEBUI_PORT=8080
SPARK_WORKER_CORES=1
SPARK_WORKER_MEMORY=1g- 【node1】修改配置文件:
slaves
node1
node2
node3复制到node2、node3
scp -r /software/spark-2.4.5-bin-hadoop2.7 root@node2:`pwd`/
scp -r /software/spark/spark-2.4.5-bin-hadoop2.7 root@node3:`pwd`/
# 软连接
ln -s /software/spark-2.4.5-bin-hadoop2.7 /software/spark启动Spark
# 启动spark集群
start-all.sh
# 关闭spark集群
stop-all.sh测试Spark集群
- 打开Spark监控页面,浏览器打开:http://node1:8081

- 提交测试任务
# 提交一个简单的Spark任务
/software/spark/bin/spark-submit --class org.apache.spark.examples.SparkPi --master spark://node1:7077 --executor-memory 1g --total-executor-cores 2 /software/spark/examples/jars/spark-examples_2.11-2.4.5.jar 1000

Flink
Flink是一个流处理框架,用于处理实时数据。它提供了低延迟、高吞吐量的流处理能力,适用于需要实时分析和处理的场景。
安装
wget https://archive.apache.org/dist/flink/flink-1.10.0/flink-1.10.0-bin-scala_2.11.tgz
# 解压
tar -zxvf flink-1.10.0-bin-scala_2.11.tgz -C /software
# 软链接
ln -s /software/flink-1.10.0 /software/flink修改配置
- 【node1】修改配置文件:
flink-conf.yaml
# jobManager 的IP地址
jobmanager.rpc.address: node1
# JobManager 的端口号
jobmanager.rpc.port: 6123
# JobManager JVM heap 内存大小
jobmanager.heap.size: 1024m
# TaskManager JVM heap 内存大小
taskmanager.heap.size: 1024m
# 每个 TaskManager 提供的任务 slots 数量大小
taskmanager.numberOfTaskSlots: 2
#是否进行预分配内存,默认不进行预分配,这样在我们不使用flink集群时候不会占用集群资源
taskmanager.memory.preallocate: false
# 程序默认并行计算的个数
parallelism.default: 1
#JobManager的Web界面的端口(默认:8081)
jobmanager.web.port: 8081- 【node1】修改配置文件:
slaves
node1
node2
node3复制到node2、node3
scp -r /software/flink-1.10.0 root@node2:`pwd`/
scp -r /software/flink-1.10.0 root@node3:`pwd`/
# 软链接
ln -s /software/flink-1.10.0 /software/flink启动Flink
# 启动flink集群
/software/flink/bin/start-cluster.sh
# 关闭flink集群
/software/flink/bin/stop-cluster.sh测试Flink集群
- 打开Flink监控页面,浏览器打开:http://node1:8081

- 提交测试任务
# 提交一个简单的Flink任务
/software/flink/bin/flink run /software/flink/examples/batch/WordCount.jar
