Apache Hadoop v3.3.6 in action-02-cluster mode 集群部署实战
hadoop 版本
https://cwiki.apache.org/confluence/display/HADOOP/Hadoop+Java+Versions
Supported Java Versions
Apache Hadoop 3.3 and upper supports Java 8 and Java 11 (runtime only)
Please compile Hadoop with Java 8. Compiling Hadoop with Java 11 is not supported: HADOOP-16795 - Java 11 compile support OPEN
Apache Hadoop from 3.0.x to 3.2.x now supports only Java 8
Apache Hadoop from 2.7.x to 2.10.x support both Java 7 and 8
需要 jdk 的环境为 jdk8。
安装实战
节点设计
我们可以选择 3台机器,1台 nameNode(master),2台 dataNode(slave)。
在这里,master充当着NameNode的角色,其他的salve充当着DataNode的角色,并且需要修改这 5 台虚拟机上的hosts文件,配置它们的主机名,以便它们可以通过主机名进行互相的访问。
下载
https://www.oracle.com/java/technologies/downloads/#java8
在 https://dlcdn.apache.org/hadoop/common/hadoop-3.3.6/ 下载
选择:https://www.oracle.com/java/technologies/downloads/#license-lightbox
为什么需要免密登录?
安装hadoop一般有两种方法:
手动安装。手动在多台机器上安装master、slave
通过管理平台安装。通过CDH/HDP安装
手动安装时是需要配置免密登录的。有以下两点原因:
配置免密后,执行ssh或者scp时不需要输密码,方便快捷。这点不是必要的原因。
安装集群完成后,通常在master侧执行start-all.sh脚本来启动整个集群,脚本会ssh到各个slave来执行启动命令。如果没有配置免密,那么启停集群时要手动输入很多密码,这是致命的。
通过cdh安装hadoop集群,这个免密不是必须的。通常配置免密,也是为了便于传输文件和维护集群。启停集群的时候是通过对应的agent去执行的。
Hadoop-3.3.6分布式集群搭建步骤
1.下载JDK8
2.下载Hadoop3.3.6
创建hadoop数据存储的目录
mkdir -p /opt/hadoop/tmp /opt/hadoop/hdfs/data /opt/hadoop/hdfs/name
4.配置hostname和host文件
hostnamectl set-hostname {hostName}
vim /etc/hosts
192.168.58.130 {hostName}
192.168.58.131 {hostName}
192.168.58.132 {hostName}
5.配置集群间免密登录
ssh-keygen -t rsa //生成密钥对
ssh-copy-id 192.168.58.131 //复制 SSH 公钥到远程计算机
6.关闭系统防火墙
sudo ufw enable //开启
sudo ufw disable //关闭
sudo ufw status //查看状态
7.分布式集群搭建
1.集群部署规划
注意:
NameNode和SecondaryNameNode不要安装在用一台服务器上
ResourceManager也很消耗内存,不要和NameNode、SecondaryNameNode配置在同一台服务器上。
Hadoop02(192.168.58.130) Hadoop03(192.168.58.131) Hadoop04(192.168.58.132)
HDFS NameNode、DataNode DataNode SecondaryNameNode、DataNode
YARN NodeManager ResourceManager、NodeManager NodeManager
2.配置文件说明
Hadoop配置文件分两类:默认配置文件和自定义配置文件,只有用户想修改某一默认配置值时,才需要修改自定义配置文件,更改相应属性值。
1.默认配置文件
要获取的默认文件 文件存放在Hadoop的jar包中的位置
core-default.xml hadoop-common-3.3.6.jar/core-default.xml
hdfs-default.xml hadoop-hdfs-3.3.6.jar/hdfs-default.xml
yarn-default.xml hadoop-yarn-common-3.3.6.jar/yarn-default.xml
mapred-default.xml hadoop-mapreduce-client-core-3.3.6.jar/mapred-default.xml
2.自定义配置文件
core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml 四个配置存放在$HADOOP_HOME/etc/hadoop这个路径上,用户可以根据项目需求重新进行修改配置。
1.core-site.xml
fs.defaultFS
hdfs://192.168.58.130:8020
hadoop.tmp.dir
/opt/hadoop/tmp
hadoop.http.staticuser.user
root
2.hdfs-site.xml
说明:如果不修改hosts,而是直接指定 ip 地址。dataNode 注册可能会报错:
hadoop 使用ip配置导致hdfs启动失败 Datanode denied communication with namenode
原因:由于配置hadoop没有使用host+hostName的配置方式,导致了hadoop无法解析DataNode,对DataNode的注册失败。
解决方式:hdfs-site.xml中添加
dfs.namenode.datanode.registration.ip-hostname-check
false
常规配置:
dfs.namenode.http-address
192.168.58.130:9870
dfs.namenode.secondary.http-address
192.168.58.132:9870
dfs.namenode.name.dir
/opt/hadoop/hdfs/name
dfs.datanode.data.dir
/opt/hadoop/hdfs/data
dfs.replication
3
dfs.namenode.checkpoint.period
3600
dfs.namenode.checkpoint.txns
1000000
dfs.namenode.checkpoint.check.period
60
dfs.blockreport.intervalMsec
21600000
dfs.datanode.directoryscan.interval
21600
dfs.namenode.heartbeat.recheck-interval
300000
dfs.heartbeat.interval
3
3.mapred-site.xml
mapreduce.framework.name
yarn
mapreduce.jobhistory.address
192.168.58.130:10020
mapreduce.jobhistory.webapp.address
192.168.58.130:19888
4.yarn-site.xml
yarn.nodemanager.aux-services
mapreduce_shuffle
yarn.resourcemanager.hostname
192.168.58.131
yarn.nodemanager.env-whitelist
JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_HOME,PATH,LANG,TZ,HADOOP_MAPRED_HOME
yarn.log-aggregation-enable
true
yarn.log.server.url
http://192.168.58.130:19888/jobhistory/logs
yarn.log-aggregation.retain-seconds
604800
3.配置workers
位于$HADOOP_HOME/etc/hadoop/workers
192.168.58.130
192.168.58.131
192.168.58.132
4.配置hadoop-env.sh
位于$HADOOP_HOME/etc/hadoop/hadoop-env.sh
添加如下内容
export JAVA_HOME=/usr/java/jdk8u392-b08
export HADOOP_HOME=/usr/hadoop/hadoop-3.3.6
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
4.启动集群
1.初始化NameNode[首次启动]
如果集群是第一次启动,需要在 nameNode 主节点格式化NameNode(在hadoop02节点上配置了NameNode)(注意:格式化NameNode,会产生新的集群id,导致NameNode和DataNode的集群id不一致,集群找不到以往数据。如果集群在运行过程中报错,需要重新格式化NameNode的话,一定要先停止NameNode和DataNode进程,并且要删除所有机器的data和logs目录,然后再进行格式化。)
hdfs namenode -format
2.启动HDFS
位于$HADOOP_HOME/sbin/start-dfs.sh
sbin/start-dfs.sh
日志:
Starting namenodes on [hadoop02]
Starting datanodes
192.168.58.132: WARNING: /usr/hadoop/hadoop-3.3.6/logs does not exist. Creating.
192.168.58.131: WARNING: /usr/hadoop/hadoop-3.3.6/logs does not exist. Creating.
Starting secondary namenodes [hadoop04]
3.查看启动效果
三台机器,分别执行 jps
hadoop02
2112 Jps
1761 NameNode
1866 DataNode
hadoop03
1235 DataNode
1311 Jps
hadoop04
1233 SecondaryNameNode
1173 DataNode
1322 Jps
web端查看HDFS的NameNode
访问:http://192.168.58.130:9870/ 查看效果
4.在配置了ResourceManager的节点(hadoop03)启动YARN
位于 $HADOOP_HOME/sbin/start-yarn.sh
sbin/start-yarn.sh
日志:
Starting resourcemanager
Starting nodemanagers
效果查看
jps
如下:
1873 Jps
1235 DataNode
1428 ResourceManager
1526 NodeManager
参考资料
https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/registry/index.html