之前我们讲过伪分布式Hadoop集群安装,但其实这种是单节点集群,并不是真正的分布式集群,只能用来学习和开发测试使用。今天我们从零开始搭建一个完全分布式Hadoop集群,包含了最关键的配置参数,可以直接用于生产环境。企业生产环境也仅仅是在我们今天讲的基础之上,加入了更多的安全性参数和性能调优参数而已。
环境准备
三台centos7.6虚拟机,配置2C4G 50G磁盘
根据实际IP和主机名,在所有机器上都配置好/etc/hosts
vi /etc/hosts
10.0.2.40 centos1
10.0.2.41 centos2
10.0.2.42 centos3
安装JDK
首先需要安装JDK
下载安装包
目前hadoop3.2最新发布的版本是hadoop-3.2.2,清华大学的镜像下载地址:
https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-3.2.2/hadoop-3.2.2.tar.gz
下载后校验一下安装包的完整性,可以与官网sha512值比对。
[root@centos1 ~]# sha512sum hadoop-3.2.2.tar.gz
054753301927d31a69b80be3e754fd330312f0b1047bcfa4ab978cdce18319ed912983e6022744d8f0c8765b98c87256eb1c3017979db1341d583d2cee22d029 hadoop-3.2.2.tar.gz
配置ssh免密
在centos1主机上生成公私钥对。
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 0600 ~/.ssh/authorized_keys
将公私钥拷贝到centos2和centos3上。执行这一步操作,需要输入centos2和centos3上root用户登录的密码。
# 复制公钥
ssh-copy-id root@centos2
ssh-copy-id root@centos3
# 复制私钥
scp ~/.ssh/id_rsa root@centos2:~/.ssh
scp ~/.ssh/id_rsa root@centos3:~/.ssh
安装配置Hadoop
安装Hadoop
在centos1, centos2, centos3上执行。
tar -zxf hadoop-3.2.2.tar.gz -C /opt
chown -R root:root /opt/hadoop-3.2.2
ln -s /opt/hadoop-3.2.2 /opt/hadoop
配置环境变量
在centos1, centos2, centos3上执行。
如果能配置一下系统环境变量的话,在使用HDFS命令行时会更方便。
vi /etc/profile
# Hadoop
export HADOOP_HOME=/opt/hadoop
export PATH=$PATH:$HADOOP_HOME/bin
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
source /etc/profile
配置HDFS
在centos1上执行。只需要在一台机器上配置好,其他两台的配置可以直接scp过去。
cd /opt/hadoop
vi etc/hadoop/hadoop-env.sh
# 在hadoop-env.sh文件中添加以下环境变量
export JAVA_HOME=/usr/java/latest
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
vi etc/hadoop/core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://centos1:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/data/dfs/tmp</value>
</property>
</configuration>
vi etc/hadoop/hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.http-address</name>
<value>centos1:9870</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>centos2:9868</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/data/dfs/nn</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/data/dfs/dn</value>
</property>
<property>
<name>dfs.namenode.checkpoint.dir</name>
<value>file:/data/dfs/snn</value>
</property>
</configuration>
配置workers文件,因为刚才已经配了ssh免密,后面就可以通过一个总控脚本很方便地启动HDFS和YARN。
vi etc/hadoop/workers
centos1
centos2
centos3
配置YARN
通过YARN来运行MapReduce jobs。
vi etc/hadoop/mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.application.classpath</name>
<value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*</value>
</property>
</configuration>
vi etc/hadoop/yarn-site.xml
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
<property>
<property>
<name>yarn.nodemanager.address</name>
<value>0.0.0.0:8041</value>
</property>
<name>yarn.resourcemanager.hostname</name>
<value>centos1</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>2048</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>2048</value>
</property>
<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>2</value>
</property>
<property>
<name>yarn.nodemanager.local-dirs</name>
<value>/data/yarn/nm</value>
</property>
<property>
<name>yarn.nodemanager.log-dirs</name>
<value>/data/yarn/container-logs</value>
</property>
</configuration>
拷贝配置文件
将centos1上修改过的配置文件scp到centos2, cento3上。
scp /opt/hadoop/etc/hadoop/hadoop-env.sh root@centos2:/opt/hadoop/etc/hadoop
scp /opt/hadoop/etc/hadoop/core-site.xml root@centos2:/opt/hadoop/etc/hadoop
scp /opt/hadoop/etc/hadoop/hdfs-site.xml root@centos2:/opt/hadoop/etc/hadoop
scp /opt/hadoop/etc/hadoop/workers root@centos2:/opt/hadoop/etc/hadoop
scp /opt/hadoop/etc/hadoop/mapred-site.xml root@centos2:/opt/hadoop/etc/hadoop
scp /opt/hadoop/etc/hadoop/yarn-site.xml root@centos2:/opt/hadoop/etc/hadoop
scp /opt/hadoop/etc/hadoop/hadoop-env.sh root@centos3:/opt/hadoop/etc/hadoop
scp /opt/hadoop/etc/hadoop/core-site.xml root@centos3:/opt/hadoop/etc/hadoop
scp /opt/hadoop/etc/hadoop/hdfs-site.xml root@centos3:/opt/hadoop/etc/hadoop
scp /opt/hadoop/etc/hadoop/workers root@centos3:/opt/hadoop/etc/hadoop
scp /opt/hadoop/etc/hadoop/mapred-site.xml root@centos3:/opt/hadoop/etc/hadoop
scp /opt/hadoop/etc/hadoop/yarn-site.xml root@centos3:/opt/hadoop/etc/hadoop
启动Hadoop
格式化HDFS文件系统。
bin/hdfs namenode -format
启动HDFS和YARN(两种方式均可启动)
方法一:
sbin/start-all.sh
方法二:
sbin/start-dfs.sh
sbin/start-yarn.sh
浏览器打开 http://centos1:9870,这是HDFS NameNode的Web Console。
浏览器打开 http://centos1:8088,这是ResourceManager的Web Console。在Nodes标签页可以看到YARN集群的节点情况。
测试验证
测试借助于YARN运行MapReduce jobs的情况下。
bin/hdfs dfs -mkdir /user
bin/hdfs dfs -mkdir /user/root
bin/hdfs dfs -mkdir input
bin/hdfs dfs -put etc/hadoop/*.xml input
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.2.jar grep input output 'dfs[a-z.]+'
bin/hdfs dfs -cat output/*
在ResourceManager的Web Console里也能看到运行的YARN任务。
通过命令行查看HDFS的结果输出目录。
查询三个节点上启动的进程,可以更直观地感受Hadoop集群的节点分布情况。
欢迎关注我的公众号“九万里大数据”,原创技术文章第一时间推送。
欢迎访问原创技术博客网站 jwldata.com,排版更清晰,阅读更爽快。