Hadoop的完全分布式部署
一. 全分布式安装基本过程
准备3台以上客户机(关闭防火墙,配置静态ip,主机名称)
安装JDK,配置环境变量
安装hadoop,配置环境变量
配置集群
单点启动
配置ssh
群起并测试集群
集群时间同步
# 上一节错误纠正,命令都是小写。不能大写yarn-daemon.sh stop nodemanageryarn-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));thenecho 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++));doecho --------------hadoop$host-----------------rsync -rvi $pdir/$fname $user@hadoop0$host:$pdirdone# 赋予执行权限chmod 777 /usr/local/bin/xsync# 调用测试:将同步脚本分发到各个服务器# 同步一个文件xsync /usr/local/bin/xsyncll /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.shexport 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.shvi yarn-env.shexport 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.shexport JAVA_HOME=/opt/soft/JDK8_64#7. 配置:mapred-site.xmlcp mapred-site.xml.template mapred-site.xmlvi 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 和datanodehadoop-daemon.sh start namenodehadoop-daemon.sh start datanode# 群起sbin/start-dfs.shsbin/stop-dfs.sh # 停止namenode和datanode
hadoop03 单机启动
hdfs namenode -formathadoop-daemon.sh start datanode
hadoop04 单机启动
hdfs namenode -formathadoop-daemon.sh start datanode
免密登录配置:方便namenode管理其他节点
# hadoop02 上进行密钥对生成# 1.检查是否为免密登录 需要配置cdh 和root两个账号的免密登录。ssh localhostssh hadoop01# 如若是涉密登录,则进行如下配置ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsassh-copy-id hadoop02 -- 自己也需要配置一下,否则也需要输入密码。ssh-copy-id hadoop03ssh-copy-id hadoop04# hadoop03 由于负责resourcemanager 故也需要配置免密登录ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsassh-copy-id hadoop02ssh-copy-id hadoop03 -- 自己也需要配置一下,否则也需要输入密码。ssh-copy-id hadoop04
群起集群
# 配置集群节点,不允许空格,空行cat /opt/module/hadoop/etc/hadoop/slaveshadoop02hadoop03hadoop04# 同步到其他节点xsync slaves# 关闭所有节点上的进程jps查询无进程。hadoop-daemon.sh stop namenodehadoop-daemon.sh stop datanode# 群起namenode 和datanodestart-dfs.sh# 群起yarn :由于resourcemanager是在hadoop03 上,所以必须到03上才能启动。start-yarn.sh
群起dfs节点
群起yarn
集群测试
hdfs dfs -mkdir /wgwhdfs dfs -mkdir /wgw/testhdfs dfs -mkdir /sp/hdfs dfs -mkdir /sp/test# 上传一个小文件hdfs dfs -put wc.input /sp/testhdfs dfs -ls /sp/test# 上传一个大文件,超过128MBhdfs 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 statusRedirecting to /bin/systemctl status crond.service● crond.service - Command SchedulerLoaded: 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 agoMain PID: 693 (crond)CGroup: /system.slice/crond.service└─693 /usr/sbin/crond -n
集群时间同步
# 在hadoop2 上配置ntpserver# 1. 检查是否安装了ntprpm -aq|grep ntpntpdate-4.2.6p5-25.el7_3.2.x86_64fontpackages-filesystem-1.44-8.el7.noarch/bin/systemctl status ntpd.serviceservice ntpd status# 安装ntp服务yum install ntp/bin/systemctl start ntpd.servicevi /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.0fudge 127.127.1.0 stratum 10# 使得硬件时间相同步。cat /etc/sysconfig/ntpd# Command line options for ntpdOPTIONS="-g"SYNC_HWCLOCK=yes# 重启ntp服务systemctl stop ntpdsystemctl 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
