Hadoop+Spark集群搭建

1. Hadoop搭建

  • 环境准备

IP 主机名 CPU 内存
10.0.0.10 master 2C 5G
10.0.0.11 slave01 2C 5G
10.0.0.12 slave02 2C 5G
操作系统 虚拟化工具
ubuntu22.04 VMware15
  • 软件包下载地址

    • 百度网盘
链接:https://pan.baidu.com/s/1_6Ux_WIA3P4esPaOvM1p8A?pwd=6666 
提取码:6666

1.1 时间同步

  • 所有节点
apt -y install ntpdate

ntpdate ntp4.aliyun.com

1.2 创建统一工作目录

  • 所有节点
mkdir -p /export/server/ #软件安装路径

mkdir -p /export/data/ #数据存储路径

mkdir -p /export/software/ #安装包存放路径

1.3. 安装Java

  • 解压(master)
tar zxvf jdk-8u241-linux-x64.tar.gz -C /export/server/
  • 配置环境变量(master)
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

source /etc/profile

# 验证
java -version
  • 其它两个节点不是Java(slave01、slave02)
scp -r /export/server/jdk1.8.0_241/ root@10.0.0.11:/export/server/

scp -r /export/server/jdk1.8.0_241/ root@10.0.0.12:/export/server/

scp /etc/profile root@10.0.0.11:/etc/

scp /etc/profile root@10.0.0.12:/etc/

source /etc/profile

# 验证
java -version

1.4 安装Hadoop

  • 解压(master)
tar -zxvf hadoop-3.3.0-Centos7-64-with-snappy.tar.gz -C /export/server/
  • 配置Hadoop(master)
cd /export/server/hadoop-3.3.0/etc/hadoop/

vim hadoop-env.sh
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
  • 配置核心模块(master)
vim core-site.xml
<!-- 设置默认使用的文件系统 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文件系统模块配置(master)
vim hdfs-site.xml
<!-- 设置SNN进程运行机器位置信息 -->
<property>
    <name>dfs.namenode.secondary.http-address</name>
    <value>slave01:9868</value>
</property>
  • MapReduce模块配置(master)
vim mapred-site.xml
<!-- 设置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模块配置(master)
vim yarn-site.xml
<!-- 设置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(master)
vim workers
master
slave01
slave02
  • 分发同步hadoop安装包(master)
cd /export/server/

scp -r hadoop-3.3.0/ root@10.0.0.11:/export/server/

scp -r hadoop-3.3.0/ root@10.0.0.12:/export/server/
  • 将Hadoop添加到环境变量(所有机器)
vim /etc/profile

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

source /etc/profile

1.5. Hadoop集群启动

  • 格式化操作(master)
    • 首次启动格式化namenode
hdfs namenode -format
  • 启动HDFS集群(master)
start-dfs.sh 
  • 启动YARN集群(master)
start-yarn.sh
  • 集群验证
# master
#] jps
DataNode
ResourceManager
NameNode
Jps
NodeManager

# slave01
#] jps
SecondaryNameNode
NodeManager
DataNode
Jps

# slave02
#] jps
Jps
DataNode
NodeManager
  • 访问页面
# HDFS集群
http://namenode_host:9870

# YARN集群
http://resourcemanager_host:8088

1.6. HDFS操作

  • master节点
# 查看目录
hadoop fs -ls /

# 创建目录
hadoop fs -mkdir /angteacher

# 上传文件
touch xier.txt

hadoop fs -put xier.txt /angteacher

# 计算
cd /export/server/hadoop-3.3.0/share/hadoop/mapreduce

hadoop jar hadoop-mapreduce-examples-3.3.0.jar pi 2 2

2. Spark部署使用

2.1 解压配置

  • 上传解压(master)
tar xvf spark-3.3.0-bin-hadoop3.tgz -C /export/server/
  • 配置workers文件(master)
cd /export/server/spark-3.3.0-bin-hadoop3/conf

cp workers.template workers

vim workers
master
slave01
slave02
  • 配置spark-env.sh环境变量文件(master)
cd /export/server/spark-3.3.0-bin-hadoop3/conf

cp spark-env.sh.template spark-env.sh

vim spark-env.sh
## 设置JAVA安装目录
JAVA_HOME=/export/server/jdk1.8.0_241/

## HADOOP软件配置文件目录,读取HDFS上文件和运行YARN集群
HADOOP_CONF_DIR=/export/server/hadoop-3.3.0/etc/hadoop/
YARN_CONF_DIR=/export/server/hadoop-3.3.0/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"
  • 在HDFS上创建程序运行历史记录存放的文件夹(master)
hadoop fs -mkdir /sparklog
hadoop fs -chmod 777 /sparklog
  • 配置spark-defaults.conf文件(master)
cd /export/server/spark-3.3.0-bin-hadoop3/conf

cp 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
  • 同步spark文件(master)
scp -r /export/server/spark-3.3.0-bin-hadoop3/ root@10.0.0.11:/export/server/

scp -r /export/server/spark-3.3.0-bin-hadoop3/ root@10.0.0.12:/export/server/

2.2 启动spark集群

  • 启动历史服务器(master)
sbin/start-history-server.sh
  • 启动Spark的Master和Worker进程(master)
# 启动全部master和worker
cd /export/server/spark-3.3.0-bin-hadoop3

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

2.3 连接到StandAlone集群

  • master节点
# 访问集群模式
http://master:8080

cd /export/server/spark-3.3.0-bin-hadoop3/bin

# 连接spark集群
./pyspark --master spark://master:7077
# 通过--master选项来连接到 StandAlone集群
# 如果不写--master选项, 默认是local模式运行

2.4 spark项目测试

  • 测试代码计算(master节点)
sc.parallelize([1, 2, 3, 4, 5]).map(lambda x: x * 10).collect()
  • 计算圆周率(master节点)
cd /export/server/spark-3.3.0-bin-hadoop3/bin

./spark-submit --master spark://master:7077 /export/server/spark-3.3.0-bin-hadoop3/examples/src/main/python/pi.py 100
  • 访问历史服务器
http://master:18080/
posted @ 2022-09-17 10:36  A57  阅读(269)  评论(0)    收藏  举报