本博客根据尚硅谷大数据课程(Hadoop)与黑马程序员(Spark)抽取所写,方便查阅。具体详情,请查看尚硅谷大数据与黑马程序员相关课程内容。
安装CentOS基本配置
- 开启网络
- 设置ROOT密码
- 创建用户
虚拟机的环境准备
- 克隆虚拟机
检查vim
- vim编辑器需要安装三个包:
vim-enhanced-7.0.109-7.el5
vim-minimal-7.0.109-7.el5
vim-common-7.0.109-7.el5
- 查看一下你本机已经存在的包,确认一下你的VIM是否已经安装: 输入
rpm -qa|grep vim
- 如果上面三个包一个都没有显示,则直接输入命令
yum -y install vim*
修改主机名
#CentOS 7
vim /etc/hostname
网络修改
关闭防火墙
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动
修改克隆虚拟机的静态IP
vim /etc/sysconfig/network-scripts/ifcfg-ens
BOOTPROTO=static #启用静态IP地址 dhcp 为动态
ONBOOT=yes #开启自动启用网络连接
IPADDR=192.168.244.100 #设置IP地址
GATEWAY=192.168.244.2 #设置网关
DNS1=192.168.244.2 # 设置DNS
NETMASK=255.255.255.0
service network restart #重启网络
网卡ens33 不存在
ifconfig ens33 up
systemctl stop NetworkManager
systemctl disable NetworkManager
ifup ens33
配置myz用户具有root权限
vim /etc/sudoers
使用XShell 连接服务器
获取UUID
uuidgen ens33
查看UUID
nmcli con show
修改计算机名与ip对应
vim /etc/hosts
192.168.116.101 spark101
192.168.116.102 spark102
192.168.116.103 spark103
192.168.116.110 GeoMesa110
192.168.116.111 GeoMesa111
192.168.116.112 GeoMesa112
解决单节点启动——配置SSH
生成公钥和私钥
- 进入到 .ssh 文件夹,隐藏文件夹,需要 ls -al 才能查看
- 生成:
ssh-keygen -t rsa
- 连续三次回车后生成
将公钥拷贝到其他服务器
ssh-copy-id hadoop102
- 第一次需要输入密码
- 然后其他服务器的 .ssh 中就会多出个 authorized_keys
- 这样就完成了免密登录
- 然后还要把秘钥拷贝到100上,以免访问自己也需要访问密码
- 以为在访问时都是方访问 authorized_keys
- 因为母机上有NameNode,负责内容分发,所以要配置自己的ssh
- 注意:也要给ResourceManager 的 myz 账号配置一个ssh
- 注意:也要给主机的root账号创建ssh,使用 su root 切换用户
在/opt 目录下创建文件夹
- module jar 包解压目录
- software 用于存储jar包
- 创建文件夹
sudo mkdir module
sudo mkdir software
# 删除文件夹
rm -rf rh/
- 修改所有者/组
sudo chown myz:myz module/ software/
解压
tar -zxvf xxx.tar.gz -C /opt/module
配置Java的环境变量
vim /etc/profile
# 文章末尾
export JAVA_HOME=/opt/module/jdk1.8.0_241
export PATH=$PATH:$JAVA_HOME/bin
export NODE_HOME=/opt/module/node-v12.18.3-linux-x64
export PATH=$PATH:$NODE_HOME/bin
export NODE_PATH=$NODE_HOME/lib/node_modules
# 添加环境变量后并不能使用,
source /etc/profile
安装Hadoop,配置环境变量
# HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-2.7.7
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
搭建完全分布式
- 准备3台客户机
- 安装JDK
- 配置环境变量
- 安装Hadoop
- 配置环境你变量
- 配置集群
- 单点启动
- 配置ssh
- 群起并测试
编写集群分发脚本
xsync 集群分发脚本
- 循环复制文件到所有节点的相同目录下
- 只要主节点文件发生变化,则其他节点都跟着变化
- 在 /home/myz/bin 目录下创建 xsync
touch xsync
- bash 代码如下:
#!/bin/bash
#1 获取输入参数个数,如果没有参数,直接退出
pcount=$#
if((pcount==0)); then
echo no args;
exit;
fi
#2 获取文件名称
p1=$1
fname=`basename $p1`
echo fname=$fname
#3 获取上级目录到绝对路径
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir
#4 获取当前用户名称
user=`whoami`
#5 循环
for((host=101; host<104; host++)); do
echo ------------------- spark$host --------------
rsync -rvl $pdir/$fname $user@spark$host:$pdir
done
- 为了所有人都可以使用 xsync :
chmod 777 xsync
编写xcall
#! /bin/bash
for i in spark101 spark102 spark103
do
echo --------- $i ----------
ssh $i "$*"
done
编写zookeeper群起脚本
vim zk.sh
GeoMesa110 GeoMesa111 GeoMesa112
#! /bin/bash
case $1 in
"start"){
for i in HBase105 HBase106 HBase107
do
ssh $i "/opt/module/zookeeper-3.4.10/bin/zkServer.sh start"
done
};;
"stop"){
for i in HBase105 HBase106 HBase107
do
ssh $i "/opt/module/zookeeper-3.4.10/bin/zkServer.sh stop"
done
};;
"status"){
for i in HBase105 HBase106 HBase107
do
ssh $i "/opt/module/zookeeper-3.4.10/bin/zkServer.sh status"
done
};;
esac
如果群起脚本不起作用
1)修改/etc/profile文件:用来设置系统环境参数,比如$PATH. 这里面的环境变量是对系统内所有用户生效。使用bash命令,需要source /etc/profile一下。
2)修改~/.bashrc文件:针对某一个特定的用户,环境变量的设置只对该用户自己有效。使用bash命令,只要以该用户身份运行命令行就会读取该文件。
3)把/etc/profile里面的环境变量追加到~/.bashrc目录
cat /etc/profile >> ~/.bashrc
SCP安全拷贝
- 可以实现服务器与服务器之间的数据拷贝
- 将数据推过去基本语法:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ClGhdJ5N-1604018492604)(…/07%20%E5%A4%A7%E6%95%B0%E6%8D%AE/assets/1583324935383.png)]
scp -r module/ root@hadoop102:/opt/module
sudo scp /etc/profile root@hadoop101:/etc
- 将数据拉过来基本语法
sudo scp -r root@192.168.141.101:/opt/module /opt/module
- 将数据拉到其他服务器上
scp -r myz@192.168.141.101:/opt/module root@192.168.141.103:/opt/module
修改拷贝数据用户所有者
sudo chown myz:myz module -R
- 必须要有-R 递归!
rsync
- 主要用于备份和镜像,具有速度快,避免重复相同内容和支持符号链接的优点
- 与scp 不同的是,rsync做文件比scp快,rsync只对差异文件做更新,scp是将所有的文件都复制过去
- 基本语法
集群配置
- 集群部署规划
hadoop101 | hadoop102 | hadoop103 | |
---|---|---|---|
HDFS | NameNode、DataNode | DataNode | SecondaryNameNode、DataNode |
YARN | NodeManager | ResourceManager、NodeManager | NodeManager |
核心配置文件
配置 core-site.xml
vim core-site.xml
- 写入以下配置
<!-- 指定HDFS中NameNode的地址-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://HBase105:9000</value>
</property>
<!-- 指定Hadoop 运行时产生的文件的存储路径-->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-2.7.7/data/tmp</value>
</property>
配置 hadoop-env.sh
- 只要遇到env就更改JAVA_HOME
- 获取JDK的安装路径:
echo $JAVA_HOME
/opt/module/jdk1.8.0_241
hdfs-site.xml
- 可配置也可不配置
- 数据副本数
- 初始值为3,取决于计算机性能,越好值越小,不用太多的副本
<!-- 指定HDFS 副本的数量-->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!-- 指定Hadoop辅助名称节点主机配置-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>HBase107:50090</value>
</property>
配置yarn-env.sh
- 配置JAVA_HOME环境变量
/opt/module/jdk1.8.0_241
配置yarn-site.xml
<!-- Reducer 获取数据的方式-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定YARN的ResourceManager的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>.
<value>HBase106</value>
</property>
MapReduce配置文件
配置mapred-env.sh
- 配置JAVA_HOME环境变量
/opt/module/jdk1.8.0_241
配置mapred-site.xml
- 改名字
cp mapred-site.xml.template mapred-site.xml
vim mapred-site.xml
- 在该文件下增加配置
<!-- 指定MR运行在Yarn上-->
<property>
<name>mapreduce.framework.name</name>.
<value>yarn</value>
</property>
分发
xsync /opt/module/hadoop-2.7.7
Hadoop 各生态端口
集群启动/停止方式
配置slaves
cd /opt/module/hadoop-2.7.7/etc/hadoop/
vim slaves
- 在改文件下增加集群主机名(有几个,添加几个)
hadoop101
hadoop102
hadoop103
spark101
spark102
spark103
HBase105
HBase106
HBase107
geomesa110
geomesa111
geomesa112
- 注意!:改文件中添加的内容结尾不允许有空格,文件中不允许有空行
- 修改后同步所有节点的配置文件
如果集群是第一次启动,需要格式化 NameNode
hadoop namenode -format
各个服务组件逐一启动/停止
( 1)分别启动/停止 hdfs 组件
hadoop-daemon.sh start|stop namenode|datanode|secondarynamenode
( 2)启动/停止 yarn
yarn-daemon.sh start|stop resourcemanager|nodemanager
各个模块分开启动/停止(配置 ssh 是前提) 常用
( 1)整体启动/停止 hdfs
start-dfs.sh
stop-dfs.sh
( 2)整体启动/停止 yarn
start-yarn.sh
stop-yarn.sh
sbin/hadoop-daemon.sh start datanode
nameNode 无法启动
- 需要删除 data/ logs/ 文件夹,并格式化后再次启动
Spark
配置Scala
# scala environment
export SCALA_HOME=/opt/module/scala-2.13.1
export PATH=$PATH:$SCALA_HOME/bin
修改spark-env.sh
文件
export JAVA_HOME=/opt/module/jdk1.8.0_241
export SCALA_HOME=/opt/module/scala-2.13.1
export HADOOP_HOME=/opt/module/hadoop-2.7.7
export HADOOP_CONF_DIR=/opt/module/hadoop-2.7.7/etc/hadoop
export SPARK_MASTER_PORT=7077
修改slaves
mv slaves.template slaves
vim slaves
spark101
spark102
spark103
配置 HistoryServer
- 修改 spark-defaults.conf
mv spark-defaults.conf.template spark-defaults.conf
vim spark-defaults.conf
spark.eventLog.enabled true
spark.eventLog.dir hdfs://spark101:9000/spark_log
spark.eventLog.compress true
- 修改 spark-env.sh
export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=4000 -Dspark.history.retainedApplications=10 -Dspark.history.fs.logDirectory=hdfs://spark101:9000/spark_log"
在HDFS中创建日志目录
hdfs dfs -mkdir -p /spark_log
群起Spark
cd /opt/module/spark-2.4.5-bin-hadoop2.7
sbin/start-all.sh
sbin/start-history-server.sh
高可用配置(Zookeeper)
编辑 spark-env.sh 注释掉SPARK_MASTER_HOST地址,并新增如下配置
export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=spark201:2181,spark202:2181,spark203:2181 -Dspark.deploy.zookeeper.dir=/spark"
测试
bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://spark101:7077 \
--executor-memory 2G \
--total-executor-cores 3 \
/opt/module/spark-2.4.5-bin-hadoop2.7/examples/jars/spark-examples_2.11-2.4.5.jar \
100