spark standlone 集群离线安装

环境: centos7

安装计划

为最轻量化实现部署,安装不依赖CDH,只安装大数据以及做大数据处理必须的组件

  • 安装 java
  • 安装 scala
  • 安装 zookeeper
  • 安装 kafka
  • 安装 spark
安装实施
安装java
  • 查看系统架构
sh 复制代码
uname -m
x86_64
  • 根据系统架构下载对应的jdk, 要注意 64位的是下面两个,x86 是 32 位的

  • 放到服务器上,解压并配置

sh 复制代码
# 解压
tar -zxvf jdk-8u441-linux-x64.tar.gz

# 创建软连接,之前有软连接的可以删掉
cd /usr/bin
rm java
ln -s /home/demo/tools/jdk1.8.0_441/bin/java java

# 配置 JAVA_HOME
vim ~/.bashrc
export JAVA_HOME=/home/demo/tools/jdk1.8.0_441
export PATH=$JAVA_HOME/bin:$PATH

source ~/.bashrc

# 验证 
java -version
javac -version
安装 zookeeper
  • 官网下载,注意下二进制包,这样就不用编译了,另外版本需要和kafka的版本匹配,这里下载 apache-zookeeper-3.5.6-bin.tar.gz
  • 配置修改
shell 复制代码
# zookeeper 设置为集群,需要修改的地方: 日志目录、数据目录

# 1.修改解压包名称(直观区分) 
mv apache-zookeeper-3.5.5-bin zk 

# 2.新建data,logs 目录来存放数据和日志 
cd zk 
mkdir data logs 

# 3.进入conf,将zoo_sample.cfg复制重命名zoo.cfg 
cd conf 
cp zoo_sample.cfg zoo.cfg 

# 4.修改conf下zoo.cfg 
# ① 修改:dataDir=/usr/local/zookeeper-cluster/zk/data 
# ② 添加:dataLogDir=/usr/local/zookeeper-cluster/zk/logs 
# ③ clientPort=2181【clientPort是客户端的请求端口】 
# ④ 在zoo.cfg文件末尾追加 server.1=10.1.240.150:2888:3888 server.2=10.1.240.151:2888:3888 server.3=10.1.240.152:2888:3888
vi zoo.cfg  
server.1=10.1.240.150:2888:3888 
server.2=10.1.240.151:2888:3888 
server.3=10.1.240.152:2888:3888

# 5.在zk的data目录下创建一个myid文件,内容为1,每一台的 myid 不一样,可以依次设置为 1, 2, 3
cd ../data/ 
echo 1 > myid
  • 启动及验证
    集群所有配置都修改完后启动
shell 复制代码
# 进入 bin 目录
cd ../zookeeper/bin
./zkServer.sh start

# 查看启动状态
./zkServer.sh status
  • 设置开机启动
sh 复制代码
vim /etc/systemd/system/zookeeper.service

# 加入下面内容
[Unit]
Description=Apache ZooKeeper
After=network.target

[Service]
Type=forking
User=root
Group=root
ExecStart=/home/demo/bigdata/apache-zookeeper-3.5.6-bin/bin/zkServer.sh start
ExecReload=/home/demo/bigdata/apache-zookeeper-3.5.6-bin/bin/zkServer.sh restart
ExecStop=/home/demo/bigdata/apache-zookeeper-3.5.6-bin/bin/zkServer.sh stop
Restart=on-abnormal

[Install]
WantedBy=multi-user.target

# 停止当前的zookeeper
/home/demo/bigdata/apache-zookeeper-3.5.6-bin/bin/zkServer.sh stop

# 使用systemctl启动,并设置开机自启
systemctl start zookeeper
systemctl enable zookeeper
安装kafka
  • 官网下载,注意下二进制包,这样就不用编译了,下载的版本需要和zookeeper匹配,这里下载 kafka_2.12-2.5.1.tgz
  • 配置修改
shell 复制代码
cd /home/demo/bigdata/kafka_2.12-2.5.1/config
vim server.properties

# 修改必须处理的配置
broker.id=1 # 设置 broker.id 每个节点不一样,按顺序来就可以
listeners=PLAINTEXT://172.16.150.154:9092 # 修改为本机地址 每个节点不一样
log.dirs=/Data/kafka-logs # 数据目录,kafka-logs会自动采集 
zookeeper.connect=172.16.150.154:2181,172.16.150.155:2181,172.16.150.156:2181  # zokeeper集群地址,以","为分割其他的不用改

# 其它的配置根据需要调整
  • 启动及验证
shell 复制代码
# 启动 后台运行
./kafka-server-start.sh -daemon ../config/server.properties

# 创建一个测试 topic,验证是否搭建成功
./kafka-topics.sh --create --topic test-tpc --partitions 3 --replication-factor 2 --bootstrap-server 192.168.12.113:9092
# 查看主题详情
./kafka-topics.sh --describe --topic test-tpc --bootstrap-server 192.168.12.113:9092
  • 创建快捷方式

  • 设置开机启动

shell 复制代码
vim /etc/systemd/system/kafka.service

# 加入下面的内容
[Unit]
Description=Apache Kafka
After=network.target zookeeper.service

[Service]
Type=simple
User=root
Group=root
ExecStart=/home/demo/bigdata/kafka_2.12-2.5.1/bin/kafka-server-start.sh /home/demo/bigdata/kafka_2.12-2.5.1/config/server.properties 
ExecStop=/home/demo/bigdata/kafka_2.12-2.5.1/bin/kafka-server-stop.sh
Restart=on-failure

[Install]
WantedBy=multi-user.target

# 关闭当前kafka
/home/demo/bigdata/kafka_2.12-2.5.1/bin/kafka-server-stop.sh

# 使用systemctl启动,并设置开机自启
systemctl start kafka
systemctl enable kafka
部署spark

采用 standlone 模式部署,因当前部署了zookeeper,使用高可用模式来部署

  • 下载spark

    到 spark 官网,下载带 hadoop 的spark,这样依赖不会有问题

    暂时不配置高可用,启动的时候,启动一个master,三个worker

  • 配置处理

sh 复制代码
# 解压到本地
cd /home/demo/bigdata
tar -zxvf spark-3.3.4-bin-hadoop3.tgz

# 处理配置
cd spark-3.3.4-bin-hadoop3/conf
# 1. 处理worker
cp workers.template workers
# 添加记录,需要哪些worker节点:
vim workers
demo-113.com.cn
demo-114.com.cn
demo-115.com.cn

# 2. 处理env
cp spark-env.sh.template spark-env.sh
# 根据处理环境配置 最好加上 SPARK_HOME 和 JAVA_HOME
export SPARK_LOCAL_IP=192.168.12.115 # 本地IP
export SPARK_LOCAL_DIRS=/home/demo/data/spark # 日志目录
export SPARK_MASTER_HOST=demo-115.com.cn # master 主机名
export SPARK_MASTER_PORT=19090 # 注解监听端口,用来和worker通信
# 资源限制根据 CPU 内存 来定 free -h, lscpu
export SPARK_WORKER_MEMORY=48g # worker进程 最大申请内存数量,standlone的时候这个最好设置下,避免超过
export SPARK_WORKER_CORES=12 # 每个 Worker进程 可用的 CPU 核心数(默认:所有可用核心)
# export SPARK_WORKER_INSTANCES=1  # 每个worker节点上的worker进程数量 默认 1
export SPARK_LOG_DIR=/home/demo/logs/spark # 日志路径
export JAVA_HOME=/home/demo/tools/jdk1.8.0_441
export SPARK_MASTER_WEBUI_PORT=19081 # web 端口,用于界面查看

# 处理历史记录
cp spark-defaults.conf.template spark-defaults.conf
vim spark-defaults.conf
spark.eventLog.dir               /home/demo/data/sparkevent
vim spark-env.sh
export SPARK_HISTORY_OPTS=" -Dspark.history.ui.port=19091  -Dspark.history.fs.logDirectory=/home/demo/data/spark/history  -Dspark.history.retainedApplications=10"

# 处理执行程序产生的日志
vim spark-defaults.conf # 添加下面的信息
# 启用 Worker 清理机制
spark.worker.cleanup.enabled          true
# 清理周期(单位:秒,默认86400=1天)
spark.worker.cleanup.interval         86400
# 数据保留时间(单位:秒,默认7天=604800)
spark.worker.cleanup.appDataTtl       259200
  • 启动及验证
shell 复制代码
# 启动master
./start-master.sh
# 查看日志,进web界面看是否成功
cd /home/demo/logs/spark
cat spark-root-org.apache.spark.deploy.master.Master-1-demo-115.com.cn.out
http://demo-115.com.cn:19081

# 启动worker
./start-worker.sh spark://demo-115.com.cn:19090

# 停止worker
./stop-worker.sh

# 停止master
./stop-master.sh

# 验证
./spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://demo-115.com.cn:19090 \
--deploy-mode client \
--driver-memory 1G \
--executor-memory 1G \
--total-executor-cores 2 \
--executor-cores 1 \
/home/demo/bigdata/spark-3.3.4-bin-hadoop3/examples/jars/spark-examples_2.12-3.3.4.jar 10
  • 创建快捷方式
shell 复制代码
vim ~/.bashrc

export SPARK_HOME=/home/demo/bigdata/spark-3.3.4-bin-hadoop3
export PATH=$SPARK_HOME/sbin:$PATH
export PATH=$SPARK_HOME/bin:$PATH

source ~./bashrc
  • master和worker设置开机自启动
shell 复制代码
# master设置开机自启
vim /etc/systemd/system/spark-master.service

# 加入如下内容
[Unit]
Description=Apache Spark Master
After=network.target

[Service]
Type=forking
User=root
Group=root
ExecStart=/home/demo/bigdata/spark-3.3.4-bin-hadoop3/sbin/start-master.sh
ExecStop=/home/demo/bigdata/spark-3.3.4-bin-hadoop3/sbin/stop-master.sh
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target

# 启动并设置开机自启
# 先停止正在运行的master
/home/demo/bigdata/spark-3.3.4-bin-hadoop3/sbin/stop-master.sh
sudo systemctl daemon-reload
sudo systemctl enable spark-master
sudo systemctl start spark-master


# worker 设置开机自启
vim /etc/systemd/system/spark-worker.service

# 加入以下内容
[Unit]
Description=Apache Spark Worker
After=network.target

[Service]
Type=forking
User=root
Group=root
ExecStart=/home/demo/bigdata/spark-3.3.4-bin-hadoop3/sbin/start-worker.sh spark://demo-115.com.cn:19090
ExecStop=/home/demo/bigdata/spark-3.3.4-bin-hadoop3/sbin/stop-worker.sh
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target

# 启动并设置开机自启
# 先停止正在运行的worker
/home/demo/bigdata/spark-3.3.4-bin-hadoop3/sbin/stop-worker.sh
sudo systemctl daemon-reload
sudo systemctl enable spark-worker
sudo systemctl start spark-worker
部署hadoop

hadoop 采用一个master,两个worker的模式安装,master 放在 144 上

  1. 配置主机域名解析[示例]
shell 复制代码
# 在每台机器上执行(替换对应IP和主机名)
sudo tee -a /etc/hosts <<EOF
192.168.10.11 namenode
192.168.10.12 datanode1
192.168.10.13 datanode2
EOF

# 设置本机主机名(分别在每台机器执行)
# 在192.168.10.11执行:
sudo hostnamectl set-hostname namenode

# 在192.168.10.12执行:
sudo hostnamectl set-hostname datanode1

# 在192.168.10.13执行:
sudo hostnamectl set-hostname datanode2
  1. 设置master节点免密登录其它worker节点
shell 复制代码
# 在192.168.10.11(namenode)上操作
su - hadoop
ssh-keygen -t rsa # 没有密码的连续回车三次,中间的确认环节根据需要处理,但不能设置密码
ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa

# 将公钥分发到所有节点(包括自己)
ssh-copy-id hadoop@namenode
ssh-copy-id hadoop@datanode1
ssh-copy-id hadoop@datanode2

# 测试免密登录
ssh datanode1 hostname  # 应返回 "datanode1"
ssh datanode2 hostname  # 应返回 "datanode2"
  1. 解压安装,配置环境变量
sh 复制代码
vim /etc/profile

export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop

source /etc/profile

  1. 组件配置
    组件配置文件目录: /usr/local/hadoop/etc/hadoop/
    配置日志: log4j.properties
sh 复制代码
# 加入内容
hadoop.log.dir=/home/demo/logs/hadoop

配置: config-site.xml

shell 复制代码
<configuration>
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://demo-114.com.cn:29000</value>
  </property>
</configuration>

配置: hdfs-site.xml

shell 复制代码
<configuration>
  <!-- 副本数量 = datanode节点数 -->
  <property>
    <name>dfs.replication</name>
    <value>2</value>
  </property>

  <!-- NameNode 元数据存储路径 -->
  <property>
    <name>dfs.namenode.name.dir</name>
    <value>file:///home/demo/data/hadoop/namenode</value>
  </property>
  
  <!-- DataNode 数据块存储路径 -->
  <property>
    <name>dfs.datanode.data.dir</name>
    <value>file:///home/demo/data/hadoop/datanode</value>
  </property>
  
  <!-- 临时文件目录 -->
  <property>
    <name>hadoop.tmp.dir</name>
    <value>/home/demo/data/hadoop/tmp</value>
  </property>
  
  <!-- NameNode Web UI 地址 -->
  <property>
    <name>dfs.namenode.http-address</name>
    <value>0.0.0.0:29870</value>
  </property>
  
  <!-- DataNode Web UI 地址 -->
  <property>
    <name>dfs.datanode.http.address</name>
    <value>0.0.0.0:29864</value>
  </property>
  
  <!-- 可选的:修改 RPC 地址 -->
  <property>
    <name>dfs.namenode.rpc-address</name>
    <value>demo-114.com.cn:28020</value>
  </property>
  
  <!-- 启用SecondaryNameNode -->
  <property>
    <name>dfs.namenode.secondary.http-address</name>
    <value>demo-114.com.cn:29868</value>
  </property>
</configuration>

配置: hadoop-env.sh

shell 复制代码
export HADOOP_LOG_DIR=/home/demo/logs/hadoop
export HADOOP_MAPRED_LOG_DIR=/home/demo/logs/hadoop/mapred
export JAVA_HOME=/home/demo/tools/jdk1.8.0_441
export HDFS_NAMENODE_USER="root"
export HDFS_DATANODE_USER="root"
export HDFS_SECONDARYNAMENODE_USER="root"

配置: yarn-site.xml

shell 复制代码
<configuration>
  <!-- 资源管理器地址 -->
  <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>demo-114.com.cn</value>
  </property>
  
  <!-- Web UI 地址 -->
  <property>
    <name>yarn.resourcemanager.webapp.address</name>
    <value>0.0.0.0:29088</value>
  </property>
  
  <!-- 日志聚合路径 -->
  <property>
    <name>yarn.nodemanager.remote-app-log-dir</name>
    <value>/home/demo/logs/hadoop/yarn/logs</value>
  </property>
  
  <!-- 根据实际内存调整 -->
  <property>
	<name>yarn.nodemanager.resource.memory-mb</name>
	<value>8192</value> 
  </property>
  <property>
	<name>yarn.scheduler.maximum-allocation-mb</name>
	<value>4096</value>
  </property>
</configuration>

配置: workers

shell 复制代码
demo-113.com.cn
demo-115.com.cn

同步配置到所有节点

shell 复制代码
# 在namenode上执行
cd /usr/local/hadoop/etc/
scp -r hadoop root@datanode1:/usr/local/hadoop/etc/
scp -r hadoop root@datanode2:/usr/local/hadoop/etc/
  1. 所有节点创建数据目录和日志目录
shell 复制代码
mkdir /home/demo/logs/hadoop
mkdir /home/demo/data/hadoop
cd /home/demo/data/hadoop
mkdir datanode namenode tmp
  1. 格式化 hdfs
    namenode 上执行
shell 复制代码
# hadoop 用户执行
sudo -u hadoop hdfs namenode -format
# root用户直接执行
hdfs namenode -format
  1. 启动集群
shell 复制代码
start-dfs.sh
  1. 集群验证
shell 复制代码
# 在namenode上执行
hdfs dfsadmin -report
# 应看到2个活动的DataNode
Live datanodes (2):

# web ui 查看 (具体端口根据配置来确定,默认为 9870,这里是 29870)
http://192.168.10.11:29870

# 文件操作测试
# 创建目录
hdfs dfs -mkdir /test
# 上传本地文件
echo "Hello HDFS Cluster" > test.txt
hdfs dfs -put test.txt /test/
# 查看文件
hdfs dfs -cat /test/test.txt
# 检查文件块分布
hdfs fsck /test/test.txt -files -blocks -locations
# 删除测试文件
hdfs dfs -rm -r /test

hdfs 常用管理命令

shell 复制代码
start-dfs.sh  # 启动整个HDFS集群|
stop-dfs.sh  # 停止整个HDFS集群|
hdfs dfsadmin -safemode leave  # 退出安全模式|
hdfs dfsadmin -refreshNodes  # 刷新节点配置|
hdfs dfsadmin -setBalancerBandwidth 10485760  # 设置平衡带宽(10MB/s)|
参考文档

kafka和zookeeper安装: https://metersphere.io/docs/v1.20.x-lts/installation/build_kafka/#14-kafka

jdk官网: https://www.oracle.com/java/technologies/javase/javase8u211-later-archive-downloads.html

zookeeper官网: https://archive.apache.org/dist/zookeeper/

kafka官网: http://kafka.apache.org/downloads

spark官网: https://archive.apache.org/dist/spark/spark-3.3.4/

spark 安装:

https://blog.csdn.net/The_skye/article/details/136295513

https://www.cnblogs.com/liugp/p/16153043.html

hadoop 部署:

https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/ClusterSetup.html

https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/CommandsManual.html

https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/FileSystemShell.html

相关推荐
鸭鸭鸭进京赶烤2 小时前
大学专业科普 | 云计算、大数据
大数据·云计算
G皮T6 小时前
【Elasticsearch】自定义评分检索
大数据·elasticsearch·搜索引擎·查询·检索·自定义评分·_score
掘金-我是哪吒8 小时前
分布式微服务系统架构第156集:JavaPlus技术文档平台日更-Java线程池使用指南
java·分布式·微服务·云原生·架构
亲爱的非洲野猪8 小时前
Kafka消息积压的多维度解决方案:超越简单扩容的完整策略
java·分布式·中间件·kafka
活跃家族8 小时前
分布式压测
分布式
涤生大数据9 小时前
Apache Spark 4.0:将大数据分析提升到新的水平
数据分析·spark·apache·数据开发
搞笑的秀儿9 小时前
信息新技术
大数据·人工智能·物联网·云计算·区块链
SelectDB9 小时前
SelectDB 在 AWS Graviton ARM 架构下相比 x86 实现 36% 性价比提升
大数据·架构·aws
二二孚日9 小时前
自用华为ICT云赛道Big Data第五章知识点-Flume海量日志聚合
大数据·华为
前端世界10 小时前
HarmonyOS开发实战:鸿蒙分布式生态构建与多设备协同发布全流程详解
分布式·华为·harmonyos