Hadoop的完全分布式部署
一. 全分布式安装基本过程
准备3台以上客户机(关闭防火墙,配置静态ip,主机名称)
安装JDK,配置环境变量
安装hadoop,配置环境变量
配置集群
单点启动
配置ssh
群起并测试集群
集群时间同步
# 上一节错误纠正,命令都是小写。不能大写
yarn-daemon.sh stop nodemanager
yarn-daemon.sh stop resourcemanager
二.相关快速配置工具
1. sync
# 基本语法:命令 选项参数 要拷贝的文件路径/名称 目的用户@主机:目的路径/名称
# -r:递归 -v:显示复制过程 -l :拷贝符号连接
rsync -rvl $pdir/$fname $user@hadoop$host:$pdir/$fname
# 实例:
rsync -rvl /tmp/test.txt root@hadoop04:/tmp/test.txt
2.分发同步脚本 xsync
# 作用:循环复制文件到所有节点的相同目录下
cat /usr/local/bin/xsync
#1获取输入参数个数,如果没有参数,直接退出。
pcount=$#
if((pcount==0));then
echo no args;
exit;
fi
#2.获取文件名称
p1=$1;
fname=`basename $1`
echo fname=$fname
#3. 获取上级目录的绝对路径
pdir=`cd -P $(dirname $p1);pwd`
echo pdir=$pdir
#4. 获取当前用户名称
user=`whoami`
#5. 循环
for((host=2;host<=4;host++));do
echo --------------hadoop$host-----------------
rsync -rvi $pdir/$fname $user@hadoop0$host:$pdir
done
# 赋予执行权限
chmod 777 /usr/local/bin/xsync
# 调用测试:将同步脚本分发到各个服务器
# 同步一个文件
xsync /usr/local/bin/xsync
ll /usr/local/bin/xsync
# 同步一个目录
xsync /tmp/wgw
# 将目录下的内容均同步过去了
tree /tmp/wgw
/tmp/wgw
└── test
└── p1
└── 20220405.txt
三.安装full模式
集群规划
配置集群
hadoop02 修改,然后分发到其他节点,简单修改就可以完成集群搭建
# 1. 配置:core-site.xml
<configuration>
<!--指定hdfs中的namenode的地址-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop02:9000</value>
</property>
<!--文件存储目录-->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop/data/tmp</value>
</property>
</configuration>
# 2. 修改:hadoop-env.sh
export JAVA_HOME=/opt/soft/JDK8_64
# 3.hdfs-site.xml 副本数为3个,且指定辅助节点。
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!-- 指定hadoop辅助节点主机配置-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop04:50090</value>
</property>
</configuration>
# 4. 配置yarn-env.sh
vi yarn-env.sh
export JAVA_HOME=/opt/soft/JDK8_64
# 5. 配置yarn-site.xml,指定resourcemanager为hadoop03
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!--指定yarn的resourcemanager的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop03</value>
</property>
<!--配置日志聚集功能,单独配置后需要重启nodemanager resourcemanager和historymanager-->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!--日志保留7天-->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
</configuration>
# 6. 修改mapred-env.sh
export JAVA_HOME=/opt/soft/JDK8_64
#7. 配置:mapred-site.xml
cp mapred-site.xml.template mapred-site.xml
vi mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!--历史服务器端地址-->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop02:10020</value>
</property>
<!--历史服务器web端地址-->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop02:19888</value>
</property>
</configuration>
修改的核心配置文件
-rw-r--r--. 1 cdh cdh 1080 Apr 4 19:20 core-site.xml
-rw-r--r--. 1 cdh cdh 4229 Apr 4 19:22 hadoop-env.sh
-rw-r--r--. 1 cdh cdh 1042 Apr 4 19:28 hdfs-site.xml
-rw-r--r--. 1 cdh cdh 4557 Apr 4 19:31 yarn-env.sh
-rw-r--r--. 1 cdh cdh 1349 Apr 4 19:35 yarn-site.xml
-rw-r--r--. 1 cdh cdh 1373 Apr 4 19:38 mapred-env.sh
-rw-r--r--. 1 cdh cdh 1188 Apr 4 19:41 mapred-site.xml
配置文件各节点分发
# 注意分发脚本,本机无需再分发
xsync /opt/module/hadoop
# 建议直接使用真实目录分发,符号连接有问题。
xsync /opt/module/hadoop-2.7.6
如若之前由数据文件目录先删除,否则格式化容易报错
rm -f data logs
# 查看是否有启动的进程。确保无启动进程
jps
hadoop02 单机启动测试
#1 .格式化分布式存储
hdfs namenode -format
# 单节点启动namenode 和datanode
hadoop-daemon.sh start namenode
hadoop-daemon.sh start datanode
# 群起
sbin/start-dfs.sh
sbin/stop-dfs.sh # 停止namenode和datanode
hadoop03 单机启动
hdfs namenode -format
hadoop-daemon.sh start datanode
hadoop04 单机启动
hdfs namenode -format
hadoop-daemon.sh start datanode
免密登录配置:方便namenode管理其他节点
# hadoop02 上进行密钥对生成
# 1.检查是否为免密登录 需要配置cdh 和root两个账号的免密登录。
ssh localhost
ssh hadoop01
# 如若是涉密登录,则进行如下配置
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
ssh-copy-id hadoop02 -- 自己也需要配置一下,否则也需要输入密码。
ssh-copy-id hadoop03
ssh-copy-id hadoop04
# hadoop03 由于负责resourcemanager 故也需要配置免密登录
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
ssh-copy-id hadoop02
ssh-copy-id hadoop03 -- 自己也需要配置一下,否则也需要输入密码。
ssh-copy-id hadoop04
群起集群
# 配置集群节点,不允许空格,空行
cat /opt/module/hadoop/etc/hadoop/slaves
hadoop02
hadoop03
hadoop04
# 同步到其他节点
xsync slaves
# 关闭所有节点上的进程jps查询无进程。
hadoop-daemon.sh stop namenode
hadoop-daemon.sh stop datanode
# 群起namenode 和datanode
start-dfs.sh
# 群起yarn :由于resourcemanager是在hadoop03 上,所以必须到03上才能启动。
start-yarn.sh
群起dfs节点
群起yarn
集群测试
hdfs dfs -mkdir /wgw
hdfs dfs -mkdir /wgw/test
hdfs dfs -mkdir /sp/
hdfs dfs -mkdir /sp/test
# 上传一个小文件
hdfs dfs -put wc.input /sp/test
hdfs dfs -ls /sp/test
# 上传一个大文件,超过128MB
hdfs dfs -put hadoop-2.7.6.tar.gz /sp/test
# 文件真实存储的位置
/opt/module/hadoop/data/tmp/dfs/data/current/BP-249231893-10.0.1.144-1649127407107/current/finalized/subdir0/subdir0
# 统计测试
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.6.jar wordcount /sp/test/wc.input /sp/test/wc.output
# 查看日志
http://10.0.1.144:19888/jobhistory/application_1649130680121_0001
crontab 定时任务调度
# 观察启动状态
service crond status
Redirecting to /bin/systemctl status crond.service
● crond.service - Command Scheduler
Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2022-04-04 19:05:32 PDT; 2h 57min ago
Main PID: 693 (crond)
CGroup: /system.slice/crond.service
└─693 /usr/sbin/crond -n
集群时间同步
# 在hadoop2 上配置ntpserver
# 1. 检查是否安装了ntp
rpm -aq|grep ntp
ntpdate-4.2.6p5-25.el7_3.2.x86_64
fontpackages-filesystem-1.44-8.el7.noarch
/bin/systemctl status ntpd.service
service ntpd status
# 安装ntp服务
yum install ntp
/bin/systemctl start ntpd.service
vi /etc/ntp.conf
# 取消注释,授权10.0.1.0 网段的机器可以从该服务器上获取时间
restrict 10.0.1.0 mask 255.255.255.0 nomodify notrap
# 注释掉互联网上的授时服务器,只从本地获取
#server 0.rhel.pool.ntp.org iburst
#server 1.rhel.pool.ntp.org iburst
#server 2.rhel.pool.ntp.org iburst
#server 3.rhel.pool.ntp.org iburst
# 当该节点丢失网络连接,依然可以采用本地时间作为时间服务器为集群中的其他节点提供时间同步
server 127.127.1.0
fudge 127.127.1.0 stratum 10
# 使得硬件时间相同步。
cat /etc/sysconfig/ntpd
# Command line options for ntpd
OPTIONS="-g"
SYNC_HWCLOCK=yes
# 重启ntp服务
systemctl stop ntpd
systemctl start ntpd
# 其他机器配置定时任务
crontab -l
*/1 * * * * /usr/sbin/ntpdate 10.0.1.144
# 调整时间进行测试
date -s "2022-04-05 13:31:00"
# 调整时区
timedatectl set-timezone Asia/Shanghai