环境: 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 上
- 配置主机域名解析[示例]
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
- 设置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"
- 解压安装,配置环境变量
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
- 组件配置
组件配置文件目录: /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/
- 所有节点创建数据目录和日志目录
shell
mkdir /home/demo/logs/hadoop
mkdir /home/demo/data/hadoop
cd /home/demo/data/hadoop
mkdir datanode namenode tmp
- 格式化 hdfs
namenode 上执行
shell
# hadoop 用户执行
sudo -u hadoop hdfs namenode -format
# root用户直接执行
hdfs namenode -format
- 启动集群
shell
start-dfs.sh
- 集群验证
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