hadoop3.x搭建学习
Hadoop概述
什么是hadoop?
1)Hadoop是一个由Apache基金会所开发的分布式系统基础架构。
2)主要解决,海量数据的存储和海量数据的分析计算问题。
3)广义上来说,Hadoop通常是指一个更广泛的概念——Hadoop生态圈。
Hadoop四大特点
1)高可靠性:Hadoop底层维护多个数据副本,所以即使Hadoop某个计算元
素或存储出现故障,也不会导致数据的丢失。
2)高扩展性:在集群间分配任务数据,可方便的扩展数以千计的节点。
3)高效性:在MapReduce的思想下,Hadoop是并行工作的,以加快任务处
理速度。
4)高容错性:能够自动将失败的任务重新分配。
虚拟机IP和主机配置
配置网络和ip
vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE="Ethernet" PROXY_METHOD="none" BROWSER_ONLY="no" BOOTPROTO="static" #修改静态ip DEFROUTE="yes" IPV4_FAILURE_FATAL="no" IPV6INIT="yes" IPV6_AUTOCONF="yes" IPV6_DEFROUTE="yes" IPV6_FAILURE_FATAL="no" IPV6_ADDR_GEN_MODE="stable-privacy" NAME="ens33" UUID="c162952f-1144-46a7-9f1d-f095cf01c0e2" DEVICE="ens33" ONBOOT="yes" IPADDR=192.168.10.100 #添加ip地址 GATEWAY=192.168.10.2 #添加网关 DNS1=192.168.10.2 #域名解析器
配置主机名称
vim /etc/hostname
hadoop100
配置主机名称映射
vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.10.100 hadoop100 192.168.10.101 hadoop101 192.168.10.102 hadoop102 192.168.10.103 hadoop103 192.168.10.104 hadoop104 192.168.10.105 hadoop105 192.168.10.106 hadoop106 192.168.10.107 hadoop107 192.168.10.108 hadoop108
安装 epel-release
注:Extra Packages for Enterprise Linux 是为“红帽系”的操作系统提供额外的软件包,适用于 RHEL、CentOS 和 Scientific Linux。相当于是一个软件仓库,大多数 rpm 包在官方repository 中是找不到的)
yum install -y epel-release
关闭防火墙,关闭防火墙开机自启
systemctl stop firewalld systemctl disable firewalld.service
创建yu用户,并修改用户密码
useradd yu passwd yu
配置 yu用户具有 root 权限,方便后期加 sudo 执行 root 权限的命令
vim /etc/sudoers
## Allows people in group wheel to run all commands %wheel ALL=(ALL) ALL yu ALL=(ALL) NOPASSWD: ALL #在此处添加yu用户配置
卸载虚拟机自带的jdk
rpm -qa | grep -i java | xargs -n1 rpm -e --nodeps
1.rpm -qa:查询所安装的所有 rpm 软件包
2.grep -i:忽略大小写
3.xargs -n1:表示每次只传递一个参数
4.rpm -e –nodeps:强制卸载软件
克隆三台虚拟机搭建集群
1.修改ip
vim /etc/sysconfig/network-scripts/ifcfg-ens33 #IPADDR=192.168.10.104
2.修改主机名称
vim /etc/hostname #hadoop104
解决不显示ens33问题
1.执行下面的命令,ifconfig出现ens33,但没有ip地址
ifconfig ens33 up
2.执行下面的命令,此时应该就出现ip了
systemctl stop NetworkManager ifup ens33
3.重启网络
systemctl restart network.service
4.执行ifconfig检测是否ens33是否已获取到ip地址
5.最后一步:永久关闭NetworkManager,保证下次开机ens33会自启动
systemctl disable NetworkManager
安装jdk
1.解压jdk压缩包
tar -zxvf jdk-8u212-linux-x64.tar.gz -C /opt/module/
2.配置 JDK 环境变量
创建my_env.sh文件
sudo vim /etc/profile.d/my_env.sh
#JAVA_HOME export JAVA_HOME=/opt/module/jdk1.8.0_212 export PATH=$PATH:$JAVA_HOME/bin
- 1
安装hadoop
1.解压hadoop压缩包
tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/
2.配置 HADOOP环境变量
#HADOOP_HOME export HADOOP_HOME=/opt/module/hadoop-3.1.3 export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
本地运行模式
计算wordcount案例
hadoop jar hadoop-mapreduce-examples-3.1.3.jar wordcount /root/test /root/re
完全分布式运行模式
集群分发脚本编写
#!/bin/bash #验证参数 if(($#!=1)) then echo 请输入要分发的文件! exit; fi #获取分发文件的绝对路径 dirpath=$(cd -P `dirname $1`;pwd) filename=$(basename $1) echo "您要分发的文件路径是:$dirpath/$filename" user=$(whoami) for((i=102;i<=104;i++)) do echo ----------------------hadoop$i----------------------- rsync -rvlt $dirpath/$filename $user@hadoop$i:$dirpath done
集群 执行命令脚本
#!/bin/bash if(($#==0)) then echo 请输入要执行的命令! exit; fi echo "要执行的命令是:$*" #执行命令 for((i=102;i<=104;i++)) do echo ------------------hadoop$i------------------ ssh hadoop$i $* done
免密登录配置
(1)生成密钥
ssh-keygen -t rsa
(2) 分发密钥
ssh-copy-id hadoop101#地址
配置core-site.xml
<!-- 指定 NameNode 的地址 --> <property> <name>fs.defaultFS</name> <value>hdfs://hadoop102:8020</value> </property> <!-- 指定 hadoop 数据的存储目录 --> <property> <name>hadoop.tmp.dir</name> <value>/opt/module/hadoop-3.1.3/data</value> </property> <!-- 配置 HDFS 网页登录使用的静态用户为 atguigu --> <property> <name>hadoop.http.staticuser.user</name> <value>atguigu</value> </property>
配置hdfs.xml
<!-- nn web 端访问地址--> <property> <name>dfs.namenode.http-address</name> <value>hadoop102:9870</value> </property> <!-- 2nn web 端访问地址--> <property> <name>dfs.namenode.secondary.http-address</name> <value>hadoop104:9868</value> </property>
配置yarn-site.xml
<!-- 指定 MR 走 shuffle --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!-- 指定 ResourceManager 的地址--> <property> <name>yarn.resourcemanager.hostname</name> <value>hadoop103</value> </property> <!-- 环境变量的继承 --> <property> <name>yarn.nodemanager.env-whitelist</name> <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CO NF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAP RED_HOME</value> </property>
配置mapred-site.xml
<!--<!-- 指定 MapReduce 程序运行在 Yarn 上 --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property>
配置 workers
hadoop102 hadoop103 hadoop104
启动集群
(1)如果集群是第一次启动,需要在 hadoop102 节点格式化 NameNode(注意:格式化 NameNode,会产生新的集群 id,导致 NameNode 和 DataNode 的集群 id 不一致,集群找不到已往数据。如果集群在运行过程中报错,需要重新格式化 NameNode 的话,一定要先停 止 namenode 和 datanode 进程,并且要删除所有机器的 data 和 logs 目录,然后再进行格式化。)
hadoop namenode -format start-dfs.sh start-yarn.sh
Web 端查看 HDFS 的 NameNode
(a)浏览器中输入:http://hadoop102:9870
(b)查看 HDFS 上存储的数据信息
Web 端查看 YARN 的 ResourceManager
(a)浏览器中输入:http://hadoop103:8088
(b)查看 YARN 上运行的 Job 信息
集群崩溃处理方法
1.停止集群
stop-dfs.sh stop-yarn.sh
2.删除三台集群下data和logs目录
cd /opt/module/hadoop-3.1.3/data/ /opt/module/hadoop-3.1.3/logs/
3.重新格式化namenode
hadoop namenode -format
配置历史服务器
1.配置mapred-site.xml
<!-- 历史服务器端地址 --> <property> <name>mapreduce.jobhistory.address</name> <value>hadoop102:10020</value> </property> <!-- 历史服务器 web 端地址 --> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>hadoop102:19888</value> </property>
2.分发配置
xsync /opt/module/hadoop-3.1.3/etc/hadoop/mapred-site.xml
3.在hadoop102上启动历史服务器(需要重启mapreduce)
mapred --daemon start historyserver
若果报Could not find or load main class org.apache.hadoop.mapreduce.v2.app.MRAppMaster错误配置mapred-site.xml文件
<property> <name>yarn.app.mapreduce.am.env</name> <value>HADOOP_MAPRED_HOME=/opt/module/hadoop-3.1.3</value> </property> <property> <name>mapreduce.map.env</name> <value>HADOOP_MAPRED_HOME=/opt/module/hadoop-3.1.3</value> </property> <property> <name>mapreduce.reduce.env</name> <value>HADOOP_MAPRED_HOME=/opt/module/hadoop-3.1.3</value> </property>
配置日志的聚集
注意:开启日志聚集功能,需要重新启动 NodeManager 、ResourceManager 和HistoryServer。
1.编辑yarn-site.xml
<!-- 开启日志聚集功能 --> <property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property> <!-- 设置日志聚集服务器地址 --> <property> <name>yarn.log.server.url</name> <value>http://hadoop102:19888/jobhistory/logs</value> </property> <!-- 设置日志保留时间为 7 天 --> <property> <name>yarn.log-aggregation.retain-seconds</name> <value>604800</value> </property>
2.分发配置
xsync $HADOOP_HOME/etc/hadoop/yarnsite.xml
3.关闭 NodeManager 、ResourceManager 和 HistoryServer
stop-yarn.sh mapred --daemon stop historyserver
4.启动 NodeManager 、ResourceManage 和 HistoryServer
start-yarn.sh mapred --daemon start historyserver
5.执行 WordCount 程序
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output
6.查看日志
Hadoop 集群启停脚本
#!/bin/bash if [ $# == 0 ] then echo '请输入参数!' exit; fi case $1 in "start") echo ---------------启动hadoop集群----------------- echo --------------- 启动hdfs ---------------- ssh hadoop102 start-dfs.sh echo --------------- 启动yarn ---------------- ssh hadoop103 start-yarn.sh echo ---------------启动历史服务器---------------- ssh hadoop102 mapred --daemon start historyserver ;; "stop") echo ---------------关闭hadoop集群----------------- echo --------------- 关闭hdfs ---------------- ssh hadoop102 stop-dfs.sh echo --------------- 关闭yarn ---------------- ssh hadoop103 stop-yarn.sh echo ---------------关闭历史服务器---------------- ssh hadoop102 mapred --daemon stop historyserver ;; *) echo "参数输入错误" ;; esac
集群时间同步
(1)查看所有节点 ntpd 服务状态和开机自启动状态
sudo systemctl status ntpd sudo systemctl start ntpd sudo systemctl is-enabled ntpd
(2)修改 hadoop102 的 ntp.conf 配置文件
修改 1(授权 192.168.10.0-192.168.10.255 网段上的所有机器可以从这台机器上查询和同步时间)
sudo vim /etc/ntp.conf #修改#restrict 192.168.10.0 mask 255.255.255.0 nomodify notrap为 restrict 192.168.10.0 mask 255.255.255.0 nomodify notrap
(3)注释以下字段并添加
#server 0.centos.pool.ntp.org iburst #server 1.centos.pool.ntp.org iburst #server 2.centos.pool.ntp.org iburst #server 3.centos.pool.ntp.org iburst server 127.127.1.0 fudge 127.127.1.0 stratum 10
(4)修改 hadoop102 的/etc/sysconfig/ntpd 文件
SYNC_HWCLOCK=yes • 1
(5)重新启动 ntpd 服务并设置开机启动
sudo systemctl start ntpd sudo systemctl enable ntpd
大数据之hadoop3入门到精通(二):https://developer.aliyun.com/article/1535226