之前写过有关Hadoop入门及安装的相关博客,但总觉得缺点什么,这次通过这个博文,再梳理下Hadoop的相关概念及安装方式。
什么是Hadoop
我们生活在一个数据大爆炸的时代,数据飞快的增长,急需解决海量数据的存储和计算问题。
这个时候,Hadoop就应运而生了。
Hadoop是一个适合海量数据的分布式存储和分布式计算的框架。
分布式存储,可以简单理解为存储数据的时候,数据不只存在一台机器上面,它会存在多台机器上面。
分布式计算简单理解,就是由很多台机器并行处理数据,咱们在写java程序的时候,写的一般都是单机的程序,只在一台机器上运行,这样程序的处理能力是有限的。
在这里先这样理解就可以,后面我们会详细分析。
Hadoop的作者是Doug Cutting,他在给这个框架起名字的时候是很偶然的,作者的孩子有一个毛绒象玩具,他孩子总是对着这个玩具叫 Hadoop、Hadoop、所以,作者就以此来命名了。
Hadoop发行版介绍
接下来看一下Hadoop的发行版,什么叫发行版呢?
举一个大家接触比较多的例子,
目前手机操作系统有两大阵营,一个是苹果的IOS,还有一个是谷歌的Android
IOS是闭源的,也就不存在多个发行版了,如果你基于IOS改造一下,弄一个新的手机系统出来,会被苹果告破产的。所以IOS是没有其它发行版的,只有官方这一个版本。
Android是开源的,所以基于这个系统,很多手机厂商都会对它进行封装改造,因为这些手机厂商会感觉原生的Android系统的界面看起来比较low,或者某一些功能不太适合中国人的使用习惯,所以他们就会进行改造,例如国内的魅族、小米、锤子这些手机厂商都基于Android打造了自己的手机操作系统,那这些就是Android系统的一些发行版。
那针对Hadoop也是一样的,目前Hadoop已经演变为大数据的代名词,形成了一套完善的大数据生态系统,并且Hadoop是Apache开源的,它的开源协议决定了任何人都可以对其进行修改,并作为开源或者商业版进行发布/销售。
所以目前Hadoop发行版非常的多,有华为发行版、Intel发行版、Cloudera发行版CDH、Hortonworks发行版HDP,这些发行版都是基于Apache Hadoop衍生出来的。
在这里我们挑几个重点的分析一下:
官方原生版本:Apache Hadoop
Apache是一个IT领域的公益组织,类似于红十字会,Apache这个组织里面的软件都是开源的,我们会学习原生的Hadoop,只要掌握了原生Hadoop使用,后期想要操作其它发行版的Hadoop也是很简单的,其它发行版都是会兼容原生Hadoop的,这一点大家不同担心。
原生Hadoop的缺点是没有技术支持,遇到问题需要自己解决,或者通过官网的社区提问,但是回复一般比较慢,也不保证能解决问题,还有一点就是原生Hadoop搭建集群的时候比较麻烦,需要修改很多配置文件,如果集群机器过多的话,针对运维人员的压力是比较大的,这块等后面我们自己在搭建集群的时候大家就可以感受到了。
Cloudera Hadoop(CDH)
注意了,CDH是一个商业版本,它对官方版本做了一些优化,提供收费技术支持,提供界面操作,方便集群运维管理。
CDH目前在企业中使用的还是比较多的,虽然CDH是收费的,但是CDH中的一些基本功能是不收费的,可以一直使用,高级功能是需要收费才能使用的,如果不想付费,也能凑合着使用。
HortonWorks(HDP)
它呢,是开源的,也提供的有界面操作,方便运维管理,一般互联网公司偏向于使用这个
注意了,再爆一个料,最新消息,目前HDP已经被CDH收购,都是属于一个公司的产品,后期HDP是否会合并到CDH中,还不得而知,具体还要看这个公司的运营策略了。
最终的建议:建议在实际工作中搭建大数据平台时选择 CDH或者HDP,方便运维管理,要不然,管理上千台机器的原生Hadoop集群,运维同学是会哭的。
Hadoop版本演变历史
目前Hadoop经历了三个大的版本
从1.x到2.x再到3.x
每一个大版本的升级都带来了一些质的提升,下面我们先从架构层面分析一下这三大版本的变更:
hadoop1.x:HDFS+MapReduce
hadoop2.x:HDFS+YARN+MapReduce
hadoop3.x:HDFS+YARN+MapReduce
Hadoop3.x的细节优化
1:最低Java版本要求从Java7变为Java8
2:在Hadoop 3中,HDFS支持纠删码,纠删码是一种比副本存储更节省存储空间的数据持久化存储方法,使用这种方法,相同容错的情况下可以比之前节省一半的存储空间
详细介绍在这里:
hadoop.apache.org/docs/r3.0.0…
3: Hadoop 2中的HDFS最多支持两个NameNode,一主一备,而Hadoop 3中的HDFS支持多个NameNode,一主多备
详细介绍在这里:
hadoop.apache.org/docs/r3.0.0…
4:MapReduce任务级本地优化,MapReduce添加了映射输出收集器的本地化实现的支持。对于密集型的洗牌操作(shuffle-intensive)jobs,可以带来30%的性能提升,
详细介绍在这里:
issues.apache.org/jira/browse…
5:修改了多重服务的默认端口,Hadoop2中一些服务的端口和Hadoop3中是不一样的
总结:
Hadoop 3和2之间的主要区别在于新版本提供了更好的优化和可用性
详细的优化点也可以参考官网内容:
hadoop.apache.org/docs/r3.0.0…
Hadoop三大核心组件介绍
Hadoop主要包含三大组件:HDFS+MapReduce+YARN
HDFS负责海量数据的分布式存储
MapReduce是一个计算模型,负责海量数据的分布式计算
YARN主要负责集群资源的管理和调度
伪分布集群安装
接下来首先看一下伪分布集群的安装,看一下这张图
这张图代表是一台Linux机器,也可以称为是一个节点,上面安装的有JDK环境
最上面的是Hadoop集群会启动的进程,其中NameNode、SecondaryNameNode、DataNode是HDFS服务的进程,ResourceManager、NodeManager是YARN服务的进程,MapRedcue在这里没有进程,因为它是一个计算框架,等Hadoop集群安装好了以后MapReduce程序可以在上面执行。
在安装集群之前需要先下载Hadoop的安装包,在这里我们使用hadoop3.2.0这个版本。
那我们来看一下,在Hadoop官网有一个download按钮,进去之后找到Apache release archive 链接,点击进去就可以找到各种版本的安装包了。
注意:如果发现这个国外的地址下载比较慢,可以使用国内的镜像地址下载,但是这些国内的镜像地址中提供的安装包版本可能不全,如果没有找到我们需要的版本,那还是要老老实实到官网下载。
这些国内的镜像地址里面不仅仅有Hadoop的安装包,里面包含了大部分Apache组织中的软件安装包
地址1:
mirror.bit.edu.cn/apache/
地址2:
mirrors.tuna.tsinghua.edu.cn/apache
安装包下载好了以后,我们就开始安装伪分布集群了。
在这里使用bigdata01这台机器
首先配置基础环境
ip、hostname、firewalld、ssh免密码登录、JDK
- ip:设置静态ip
[root@bigdata01 ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
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="9a0df9ec-a85f-40bd-9362-ebe134b7a100"
DEVICE="ens33"
IPADDR=192.168.182.100
GATEWAY=192.168.182.2
DNS1=192.168.182.2
[root@bigdata01 ~]# service network restart
Restarting network (via systemctl): [ OK ]
[root@bigdata01 ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group def link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state U
link/ether 00:0c:29:9c:86:11 brd ff:ff:ff:ff:ff:ff
inet 192.168.182.100/24 brd 192.168.182.255 scope global noprefixroute en
valid_lft forever preferred_lft forever
inet6 fe80::c8a8:4edb:db7b:af53/64 scope link noprefixroute
valid_lft forever preferred_lft forever
- hostname:设置临时主机名和永久主机名
[root@bigdata01 ~]# hostname bigdata01
[root@bigdata01 ~]# vi /etc/hostname
bigdata01
- firewalld:临时关闭防火墙+永久关闭防火墙
[root@bigdata01 ~]# systemctl stop firewalld
[root@bigdata01 ~]# systemctl disable firewalld
- ssh免密码登录
在这需要大致讲解一下ssh的含义,ssh 是secure shell,安全的shell,通过ssh可以远程登录到远程linux机器。
我们下面要讲的hadoop集群就会使用到ssh,我们在启动集群的时候只需要在一台机器上启动就行,然后hadoop会通过ssh连到其它机器,把其它机器上面对应的程序也启动起来。
但是现在有一个问题,就是我们使用ssh连接其它机器的时候会发现需要输入密码,所以现在需要实现ssh免密码登录。
那有同学可能有疑问了,你这里说的多台机器需要配置免密码登录,但是我们现在是伪分布集群啊,只有一台机器。
注意了,不管是几台机器的集群,启动集群中程序的步骤都是一样的,都是通过ssh远程连接去操作,就算是一台机器,它也会使用ssh自己连自己,我们现在使用ssh自己连自己也是需要密码的。
下面详细讲一下ssh免密码登录
ssh这种安全/加密的shell,使用的是非对称加密,加密有两种,对称加密和非对称加密。非对称加密的解密过程是不可逆的,所以这种加密方式比较安全。
非对称加密会产生秘钥,秘钥分为公钥和私钥,在这里公钥是对外公开的,私钥是自己持有的。
那么ssh通信的这个过程是,第一台机器会把自己的公钥给到第二台机器,
当第一台机器要给第二台机器通信的时候,
第一台机器会给第二台机器发送一个随机的字符串,第二台机器会使用公钥对这个字符串加密,
同时第一台机器会使用自己的私钥也对这个字符串进行加密,然后也传给第二台机器
这个时候,第二台机器就有了两份加密的内容,一份是自己使用公钥加密的,一份是第一台机器使用私钥加密传过来的,公钥和私钥是通过一定的算法计算出来的,这个时候,第二台机器就会对比这两份加密之后的内容是否匹配。如果匹配,第二台机器就会认为第一台机器是可信的,就允许登录。如果不相等 就认为是非法的机器。
下面就开始正式配置一下ssh免密码登录,由于我们这里要配置自己免密码登录自己,所以第一台机器和第二台机器都是同一台。
首先在bigdata01上执行 ssh-keygen -t rsa
rsa表示的是一种加密算法
注意:执行这个命令以后,需要连续按 4 次回车键回到 linux 命令行才表示这个操作执行 结束,在按回车的时候不需要输入任何内容。
执行以后会在~/.ssh目录下生产对应的公钥和秘钥文件
[root@bigdata01 ~]# ll ~/.ssh/
total 12
-rw-------. 1 root root 1679 Apr 7 16:39 id_rsa
-rw-r--r--. 1 root root 396 Apr 7 16:39 id_rsa.pub
-rw-r--r--. 1 root root 203 Apr 7 16:21 known_hosts
下一步是把公钥拷贝到需要免密码登录的机器上面
[root@bigdata01 ~]# cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
然后就可以通过ssh 免密码登录到bigdata01机器了
[root@bigdata01 ~]# ssh bigdata01
Last login: Tue Apr 7 15:05:55 2020 from 192.168.182.1
[root@bigdata01 ~]
- JDK安装
安装Hadoop
- 首先把hadoop的安装包上传到/home/software目录下
[root@bigdata01 software]# ll
total 527024
-rw-r--r--. 1 root root 345625475 Jul 19 2019 hadoop-3.2.0.tar.gz
drwxr-xr-x. 7 10 143 245 Dec 16 2018 jdk1.8
-rw-r--r--. 1 root root 194042837 Apr 6 23:14 jdk-8u202-linux-x64.tar.gz
- 解压hadoop安装包, 解压后移动到/usr/local/目录下。
[root@bigdata01 software]# tar -zxvf hadoop-3.2.0.tar.gz
hadoop目录下面有两个重要的目录,一个是bin目录,一个是sbin目录
我们看一下bin目录,这里面有hdfs,yarn等脚本,这些脚本后期主要是为了操作hadoop集群中的hdfs和yarn组件的
再来看一下sbin目录,这里面有很多start stop开头的脚本,这些脚本是负责启动 或者停止集群中的组件的。 因为我们会用到bin目录和sbin目录下面的一些脚本,为了方便使用,我们需要配置一下环境变量。
- 修改Hadoop相关配置文件
主要修改下面这几个文件:
hadoop-env.sh
core-site.xml
hdfs-site.xml
mapred-site.xml
yarn-site.xml
workers
首先修改
hadoop-env.sh
文件,增加环境变量信息,添加到
hadoop-env.sh
文件末尾即可。
JAVA_HOME:指定java的安装位置
HADOOP_LOG_DIR:hadoop的日志的存放目录
export JAVA_HOME=/usr/java/jdk1.8
export HADOOP_LOG_DIR=/usr/local/hadoop_repo/logs/hadoop
修改 core-site.xml 文件
注意 fs.defaultFS 属性中的主机名需要和你配置的主机名保持一致
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://bigdata01:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop_repo</value>
</property>
</configuration>
修改hdfs-site.xml文件,把hdfs中文件副本的数量设置为1,因为现在伪分布集群只有一个节点
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
修改mapred-site.xml,设置mapreduce使用的资源调度框架
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
修改yarn-site.xml,设置yarn上支持运行的服务和环境变量白名单
<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>
</configuration>
修改workers,设置集群中从节点的主机名信息,在这里就一台集群,所以就填写bigdata01即可
[root@bigdata01 hadoop]# vi workers
bigdata01
配置文件到这就修改好了,但是还不能直接启动,因为Hadoop中的HDFS是一个分布式的文件系统,文件系统在使用之前是需要先格式化的,就类似我们买一块新的磁盘,在安装系统之前需要先格式化才可以使用。
- 格式化HDFS
hdfs namenode -format
如果能看到successfully formatted这条信息就说明格式化成功了,如果提示错误,一般都是因为配置文件的问题,当然需要根据具体的报错信息去分析问题。
注意:格式化操作只能执行一次,如果格式化的时候失败了,可以修改配置文件后再执行格式化,如果格式化成功了就不能再重复执行了,否则集群就会出现问题。
如果确实需要重复执行,那么需要把/usr/local/hadoop_repo目录中的内容全部删除,再执行格式化
可以这样理解,我们买一块新磁盘回来装操作系统,第一次使用之前会格式化一下,后面你会没事就去格式化一下吗?肯定不会的,格式化之后操作系统又得重装了。
- 启动伪分布集群 使用sbin目录下的start-all.sh脚本
[root@bigdata01 hadoop-3.2.0]# sbin/start-all.sh
Starting namenodes on [bigdata01]
ERROR: Attempting to operate on hdfs namenode as root ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting operation. Starting datanodes
ERROR: Attempting to operate on hdfs datanode as root ERROR: but there is no HDFS_DATANODE_USER defined. Aborting operation. Starting secondary namenodes [bigdata01]
ERROR: Attempting to operate on hdfs secondarynamenode as root ERROR: but there is no HDFS_SECONDARYNAMENODE_USER defined. Aborting operatioStarting resourcemanager
ERROR: Attempting to operate on yarn resourcemanager as root ERROR: but there is no YARN_RESOURCEMANAGER_USER defined. Aborting operation. Starting nodemanagers
ERROR: Attempting to operate on yarn nodemanager as root
ERROR: but there is no YARN_NODEMANAGER_USER defined. Aborting operation.
执行的时候发现有很多ERROR信息,提示缺少HDFS和YARN的一些用户信息。
解决方案如下:
修改sbin目录下的start-dfs.sh,stop-dfs.sh这两个脚本文件,在文件前面增加如下内容
HDFS_DATANODE_USER=root
HDFS_DATANODE_SECURE_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
修改sbin目录下的start-yarn.sh,stop-yarn.sh这两个脚本文件,在文件前面增加如下内容
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
再启动集群成功
- 验证集群进程信息
执行jps命令可以查看集群的进程信息,去掉Jps这个进程之外还需要有5个进程才说明集群是正常启动的
还可以通过webui界面来验证集群服务是否正常
HDFS webui界面:
http://192.168.182.100:9870
YARN webui界面:
http://192.168.182.100:8088 - 停止集群
[root@bigdata01 hadoop-3.2.0]# sbin/stop-all.sh
分布式集群安装
- 环境准备
伪分布集群搞定了以后我们来看一下真正的分布式集群是什么样的
看一下这张图,图里面表示是三个节点,左边这一个是主节点,右边的两个是从节点,hadoop集群是支持主从架构的。
不同节点上面启动的进程默认是不一样的。
下面我们就根据图中的规划实现一个一主两从的hadoop集群
环境准备:三个节点
bigdata01 192.168.182.100
bigdata02 192.168.182.101
bigdata03 192.168.182.102
注意:每个节点的基础环境都要先配置好,先把ip、hostname、firewalld、ssh免密码登录、JDK这些基础环境配置好
先把bigdata01中之前安装的hadoop删掉,删除解压的目录,修改环境变量即可。
假设我们现在已经具备三台linux机器了,里面都是全新的环境。
下面开始操作。
注意:针对这三台机器的ip、hostname、firewalld、JDK这些基础环境的配置步骤在这里就不再记录了,具体步骤参考之前的步骤。
bigdata01
bigdata02
bigdata03
这三台机器的ip、hostname、firewalld、ssh免密码登录、JDK这些基础环境已经配置ok。
这些基础环境配置好以后还没完,还有一些配置需要完善。
配置/etc/hosts
因为需要在主节点远程连接两个从节点,所以需要让主节点能够识别从节点的主机名,使用主机名远程访问,默认情况下只能使用ip远程访问,想要使用主机名远程访问的话需要在节点的/etc/hosts文件中配置对应机器的ip和主机名信息。
所以在这里我们就需要在bigdata01的/etc/hosts文件中配置下面信息,最好把当前节点信息也配置到里面,这样这个文件中的内容就通用了,可以直接拷贝到另外两个从节点
[root@bigdata01 ~]# vi /etc/hosts
192.168.182.100 bigdata01
192.168.182.101 bigdata02
192.168.182.102 bigdata03
[root@bigdata02 ~]# vi /etc/hosts
192.168.182.100 bigdata01
192.168.182.101 bigdata02
192.168.182.102 bigdata03
[root@bigdata03 ~]# vi /etc/hosts
192.168.182.100 bigdata01
192.168.182.101 bigdata02
192.168.182.102 bigdata03
- 集群节点之间时间同步
集群只要涉及到多个节点的就需要对这些节点做时间同步,如果节点之间时间不同步相差太多,会应该集群的稳定性,甚至导致集群出问题。
使用ntpdate -u ntp.sjtu.edu.cn实现时间同步,但是执行的时候提示找不到ntpdata命令
[root@bigdata01 ~]# ntpdate -u ntp.sjtu.edu.cn
-bash: ntpdate: command not found
默认是没有ntpdate命令的,需要使用yum在线安装,执行命令 yum install -y ntpdate
然后手动执行
ntpdate -u ntp.sjtu.edu.cn
确认是否可以正常执行
建议把这个同步时间的操作添加到linux的crontab定时器中,每分钟执行一次
[root@bigdata01 ~]# vi /etc/crontab
* * * * * root /usr/sbin/ntpdate -u ntp.sjtu.edu.cn
然后在bigdata02和bigdata03节点上配置时间同步
在bigdata02节点上操作
[root@bigdata02 ~]# yum install -y ntpdate
[root@bigdata02 ~]# vi /etc/crontab
* * * * * root /usr/sbin/ntpdate -u ntp.sjtu.edu.cn
在bigdata03节点上操作
[root@bigdata03 ~]# yum install -y ntpdate
[root@bigdata03 ~]# vi /etc/crontab
* * * * * root /usr/sbin/ntpdate -u ntp.sjtu.edu.cn
- SSH免密码登录完善
注意:针对免密码登录,目前只实现了自己免密码登录自己,最终需要实现主机点可以免密码登录到所有节点,所以还需要完善免密码登录操作。
首先在bigdata01机器上执行下面命令,将公钥信息拷贝到两个从节点
[root@bigdata01 ~]# scp ~/.ssh/authorized_keys bigdata02:~/
[root@bigdata01 ~]# scp ~/.ssh/authorized_keys bigdata03:~/
然后在bigdata02和bigdata03上执行
[root@bigdata02/3 ~]# cat ~/authorized_keys >> ~/.ssh/authorized_keys
验证一下效果,在bigdata01节点上使用ssh远程连接两个从节点,如果不需要输入密码就表示是成功的,此时主机点可以免密码登录到所有节点。
[root@bigdata01 ~]# ssh bigdata02
Last login: Tue Apr 7 21:33:58 2020 from bigdata01
[root@bigdata02 ~]# exit
logout Connection to bigdata02 closed.
[root@bigdata01 ~]# ssh bigdata03
Last login: Tue Apr 7 21:17:30 2020 from 192.168.182.1
[root@bigdata03 ~]# exit logout Connection to bigdata03 closed.
[root@bigdata01 ~]#
有没有必要实现从节点之间互相免密码登录呢?
这个就没有必要了,因为在启动集群的时候只有主节点需要远程连接其它节点。
- 安装Hadoop
OK,那到这为止,集群中三个节点的基础环境就都配置完毕了,接下来就需要在这三个节点中安装Hadoop了。
首先在bigdata01节点上安装。
1:把hadoop-3.2.0.tar.gz安装包上传到linux机器的/home/software目录下
2:解压hadoop安装包
3:修改hadoop相关配置文件
进入配置文件所在目录
[root@bigdata01 soft]# cd hadoop-3.2.0/etc/hadoop/
[root@bigdata01 hadoop]#
首先修改hadoop-env.sh文件,在文件末尾增加环境变量信息
[root@bigdata01 hadoop]# vi hadoop-env.sh
export JAVA_HOME=/usr/java/jdk1.8
export HADOOP_LOG_DIR=/data/hadoop_repo/logs/hadoop
修改core-site.xml文件,注意fs.defaultFS属性中的主机名需要和主节点的主机名保持一致
[root@bigdata01 hadoop]# vi core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://bigdata01:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop_repo</value>
</property>
</configuration>
修改hdfs-site.xml文件,把hdfs中文件副本的数量设置为2,最多为2,因为现在集群中有两个从节点,还有secondaryNamenode进程所在的节点信息
[root@bigdata01 hadoop]# vi hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>bigdata01:50090</value>
</property>
</configuration>
修改mapred-site.xml,设置mapreduce使用的资源调度框架
[root@bigdata01 hadoop]# vi mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
修改yarn-site.xml,设置yarn上支持运行的服务和环境变量白名单
注意,针对分布式集群在这个配置文件中还需要设置resourcemanager的hostname,否则nodemanager找不到resourcemanager节点。
[root@bigdata01 hadoop]# vi 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.resourcemanager.hostname</name>
<value>bigdata01</value>
</property>
</configuration>
修改worker配置
[root@bigdata01 hadoop]# vi workers
bigdata02
bigdata03
修改启动脚本
修改
start-dfs.sh
,
stop-dfs.sh
这两个脚本文件,在文件前面增加如下内容
HDFS_DATANODE_USER=root
HDFS_DATANODE_SECURE_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
修改 start-yarn.sh , stop-yarn.sh 这两个脚本文件,在文件前面增加如下内容
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
- 把bigdata01节点上将修改好配置的安装包拷贝到其他两个从节点
[root@bigdata01 sbin]# cd /usr/local/
[root@bigdata01 soft]# scp -rq hadoop-3.2.0 bigdata02:/usr/local/ //注意:q指不显示进度条
[root@bigdata01 soft]# scp -rq hadoop-3.2.0 bigdata03:/usr/local/
- 在bigdata01节点上格式化HDFS
[root@bigdata01 hadoop-3.2.0]# hdfs namenode -format
如果在后面的日志信息中能看到这一行,则说明namenode格式化成功。
Storage: Storage directory /usr/local/hadoop_repo/dfs/name has been successfully formatted.
- 启动集群,在bigdata01节点上执行下面命令
[root@bigdata01 hadoop-3.2.0]# sbin/start-all.sh
- 验证集群
分别在3台机器上执行jps命令,进程信息如下所示:
在bigdata01节点执行
[root@bigdata01 hadoop-3.2.0]# jps
6128 NameNode
6621 ResourceManager
6382 SecondaryNameNode
在bigdata02节点执行
[root@bigdata02 ~]# jps
2385 NodeManager
2276 DataNode
在bigdata03节点执行
[root@bigdata03 ~]# jps
2385 NodeManager
2276 DataNode
- 停止集群 在bigdata01节点上执行停止命令
[root@bigdata01 hadoop-3.2.0]# sbin/stop-all.sh
至此,hadoop分布式集群安装成功!
Hadoop的客户端节点
在实际工作中不建议直接连接集群中的节点来操作集群,直接把集群中的节点暴露给普通开发人员是不安全的
建议在业务机器上安装Hadoop,只需要保证业务机器上的Hadoop的配置和集群中的配置保持一致即可,这样就可以在业务机器上操作Hadoop集群了,此机器就称为是Hadoop的客户端节点
Hadoop的客户端节点可能会有多个,理论上是我们想要在哪台机器上操作hadoop集群就可以把这台机器配置为hadoop集群的客户端节点。 注意客户端节点hadoop不要启动,仅作客户端使用。