Hadoop3.1.3集群搭建

1. Hadoop简介

Hadoop是一个用于解决海量数据存储和计算的分布式系统架构,其核心组件为分布式文件系统Hadoop Distributed File System (HDFS)、资源调度Yet Another Resource Negotiator (YARN)以及计算架构MapReduce。笔者作为大数据初学者是首次接触Hadoop,也是首次写博客,一方面是为了分享学习心得,另一方面记录自己的学习路线。如有错误或者不当的地方,还望不吝赐教。

2. 机器准备

要满足企业生产的集群需要大量的机器,但是如果仅仅作为入门者学习对机器并没有太大的要求,一般来说家用电脑即可满足集群的搭建要求。笔者搭建集群使用的是实验室闲置的服务器资源,没有资源的也可以到各大云平台购买服务器,一般按需计费的话三台机器一小时也就1-2元的价格。

2.1机器硬件配置

本文搭建的集群机器配置如下:

机器名称CPU内存硬盘
hadoop00144G50G
hadoop00244G50G
hadoop00344G50G

2.2 虚拟机安装

由于之前接触较多为centos系统,因此选择centos7.5作为上述机器的操作系统,安装的过程为图形化界面对新手比较友好,期间硬盘选择自动分区,安装方式最小安装即可

安装完一台机器之后其余选择直接克隆即可

2.3 网络设置

安装的虚拟机初始并没有配置网络,不能与外网连通,修改网络配置文件:

[root@localhost ~] vi /etc/sysconfig/network-scripts/ifcfg-ensXXX	# XXX因人而异

进入编辑界面,修改下列信息

BOOTPROTO=static		# dhcp更改为static
ONBOOT=yes				# no改为yes

# 增加下列信息
IPADDR=192.168.1.X1		# X1为内网IP,注意多台机器的内网IP不能冲突
NETMASK=255.255.255.0
GATEWAY=192.168.1.1		# 路由器网关
DNS1=114.114.114.114
DNS2=8.8.8.8

保存退出,重启网络服务

[root@localhost ~] service network restart

重启成功之后测试时候能够ping通baidu,可以则IP配置完成,注意所有机器都要配置IP。在配置好IP之后需要关闭系统自带的防火墙,否则集群的机器之间无法通信

[root@localhost ~] systemctl stop firewalld
[root@localhost ~] systemctl disable firewalld

2.4 更改主机名称

分别更改三台机器的主机名

[root@localhost ~] vi /etc/hostname
hadoop001/hadoop002/hadoop003	# 分别对应三台机器

将IP地址与主机名称作映射

[root@localhost ~] vi /etc/hosts

# 在最下方新增
192.168.1.X1 hadoop001
192.168.1.X2 hadoop002
192.168.1.X3 hadoop003

修改windows系统的host,记事本打开本地C:\Windows\System32\drivers\etc\hosts,最下方添加上述hosts中加入的IP与主机名称的映射。注意该步骤不可省略,笔者在最初尝试搭建集群时感觉这一步并不重要所以略去,但是在集群搭建完成之后测试的时候,web界面不能预览HDFS所存储的文件,MapReduce也无法正常计算,仔细排查发现缺失这一步骤,补充后问题解决。
在这里插入图片描述

2.5 创建新用户

创建非root用户,之后的大部分操作都要基于该用户进行

[root@localhost ~] useradd hadoopuser	# 添加hadoopuser用户
[root@localhost ~] passwd hadoopuser		# 设置密码

赋予新建用户root权限

[root@localhost ~] vi /etc/sudoers

## Allows people in group wheel to run all commands
%wheel  ALL=(ALL)       ALL
hadoopuser	ALL=(ALL)	ALL		# 新增

3. 工具及脚本准备

3.1 上传jdk和hadoop安装包

在所有机器上新建目录用于放置java和hadoop的安装包

[root@localhost ~] mkdir /opt/software	# java和hadoop的安装包目录
[root@localhost ~] mkdir /opt/module		# java和hadoop的安装目录

修改上述两个目录的所有者为hadoopuser

[root@localhost ~] chown hadoopuser:hadoopuser /opt/module
[root@localhost ~] chown hadoopuser:hadoopuser /opt/software

使用xftp上传jdk和hadoop的安装包到hadoop001的机器上/opt/software目录中,再将安装包传输到hadoop002和hadoop003上

[root@localhost ~] su hadoopuser		# 切换到hadoopuser用户
[hadoopuser@hadoop001 /] scp -r /opt/software/jdk-8u212-linux-x64.tar.gz hadoopuser@hadoop002:/opt/software/
[hadoopuser@hadoop001 /] scp -r /opt/software/jdk-8u212-linux-x64.tar.gz hadoopuser@hadoop003:/opt/software/
[hadoopuser@hadoop001 /] scp -r /opt/software/hadoop-3.1.3.tar.gz hadoopuser@hadoop002:/opt/software/
[hadoopuser@hadoop001 /] scp -r /opt/software/hadoop-3.1.3.tar.gz hadoopuser@hadoop003:/opt/software/

3.2 配置集群间ssh免密登录

[hadoopuser@hadoop001 /] cd home/hadoopuser/.ssh/
[hadoopuser@hadoop001 .ssh] ssh-keygen -t rsa		# 产生密钥
[hadoopuser@hadoop001 .ssh] ssh-copy-id hadoop001	# 分发密钥
[hadoopuser@hadoop001 .ssh] ssh-copy-id hadoop002	# 分发密钥
[hadoopuser@hadoop001 .ssh] ssh-copy-id hadoop003	# 分发密钥

上述操作分别在hadoop002和hadoop003上的userhadoop用户重复,确保任意一台机器都可以免密访问其余的机器,此外还需设置hadoop001上的root用户也可免密访问

[hadoopuser@hadoop001 .ssh] exit
[root@hadoop001 /] cd root/.ssh/
[root@localhost .ssh] ssh-keygen -t rsa
[root@localhost .ssh] ssh-copy-id hadoop001
[root@localhost .ssh] ssh-copy-id hadoop002
[root@localhost .ssh] ssh-copy-id hadoop003

4. jdk和hadoop安装(三台机器均需完成)

4.1 解压jdk和hadoop安装包

分别将/opt/software中的java和hadoop安装包解压至/opt/module内

[hadoopuser@hadoop001 /] tar -xzvf /opt/software/jdk-8u212-linux-x64.tar.gz -C /opt/module/
[hadoopuser@hadoop001 /] tar -xzvf /opt/software/hadoop-3.1.3.tar.gz -C /opt/module/

4.2 配置java和hadoop的环境变量

编辑环境变量

[hadoopuser@hadoop001 /] sudo vi /etc/profile.d/my_env.sh

# 加入下列信息
export JAVA_HOME=/opt/module/jdk1.8.0_212
export PATH=$PATH:$JAVA_HOME/bin

export HADOOP_HOME=/opt/module/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin

激活环境变量

[hadoopuser@hadoop001 /] source /etc/profile.d/my_env.sh

查看版本确认java和hadoop安装成功

[hadoopuser@hadoop001 /] java -version
[hadoopuser@hadoop001 /] hadoop version

5. 配置hadoop集群

5.1 集群部署规划

Hadoop的核心组件HDFS和YARN均需要一台服务器分别作为NameNode和ResourceManager,此外HDFS也需要配置SecondaryNameNode,如果把这些服务全部放到同一台服务器上,会造成这台服务器的压力过大,因此一般将这三个服务分别部署在三个节点上,笔者的集群部署规划如下:

服务hadoop001hadoop002hadoop003
HDFSNameNode/SecondaryNameNode
YARN/ResourceManager/

5.2 修改各组件对应的配置文件

修改Hadoop基础组件的配置

[hadoopuser@hadoop001 /] vi /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml

# 在<configuration>之间加入如下参数
<property>
        <name>fs.defaultFS</name>
        <value>hdfs://hadoop001:8020</value>		# 配置NameNode的默认端口
</property>

<property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/module/hadoop-3.1.3/data</value>	# 配置HDFS的默认存储路径
</property>

<property>
        <name>hadoop.http.staticuser.user</name>
        <value>hadoopuser</value>							# 配置HDFS的web界面默认登录用户
</property>

修改HDFS组件的配置

[hadoopuser@hadoop001 /] vi /opt/module/hadoop-3.1.3/etc/hadoop/hdfs-site.xml

# 在<configuration>之间加入如下参数
<property>
        <name>dfs.namenode.http-address</name>
        <value>hadoop001:9870</value>					# NameNode的web访问地址
</property>

<property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>hadoop003:9868</value>					# SecondaryNameNode的wen访问地址
</property>

修改YARN组件的配置

[hadoopuser@hadoop001 /] vi /opt/module/hadoop-3.1.3/etc/hadoop/yarn-site.xml

# 在<configuration>之间加入如下参数
<property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>				# MapReduce的shuffle
</property>

<property>
        <name>yarn.resourcemanager.hostname</name>
        <value>hadoop002</value>						# ResourceManager的
</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>

修改MapReduce组件的配置

[hadoopuser@hadoop001 /] vi /opt/module/hadoop-3.1.3/etc/hadoop/mapred-site.xml

# 在<configuration>之间加入如下参数
<property>
	<name>mapreduce.framework.name</name>
	<value>yarn</value>									# 指定MapReduce运行在YARN上
</property>

配置workers

[hadoopuser@hadoop001 /] vi /opt/module/hadoop-3.1.3/etc/hadoop/workers

# 修改信息如下
hadoop001
hadoop002
hadoop003

5.3 启动集群并测试

首次启动集群需要初始化NameNode

[hadoopuser@hadoop001 /] hdfs namenode -format

在hadoop001上启动HDFS

[hadoopuser@hadoop001 /] start-dfs.sh

在hadoop002上启动YARN

[hadoopuser@hadoop002 /] start-yarn.sh

打开web界面HDFS的地址hadoop001:9870和YARN的web访问地址hadoop002:8088,出现界面则成功


使用hadoop的examples来测试集群是否能够正常的存储和计算,首先在/opt/module/hadoop-3.1.3下新建一个word.txt文件,随意输入一些字符并保存

[hadoopuser@hadoop001 /] vi /opt/module/hadoop-3.1.3/word.txt

# 随意输入一些字符
aaa bb
cc aaa
bb cc
aaa bbb
c

将该文件上载到HDFS中,在此之前可先创建一个目录来放置该文件

[hadoopuser@hadoop001 /] hadoop fs -mkdir input		# 在HDFS中新建一个input的目录
[hadoopuser@hadoop001 /] hadoop fs -put /opt/module/hadoop-3.1.3/word.txt /input	# 将word.txt上载到HDFS中

上载之后,可在HDFS的web界面查看到文件

调用hadoop的example,统计word.txt中的字符出现次数

[hadoopuser@hadoop001 /] hadoop jar /opt/module/hadoop-3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output

注意,这个地方的输出目录output在运行之前不能存在于HDFS的目录下,否则会抛出目录已存在的异常。运行之后可在web界面查看到output目录,打开之后有统计之后的结果

结果准确无误,集群搭建成功

6. 设置集群历史服务器和日志聚集

6.1 配置历史服务器

历史服务器可以查看程序的历史运行情况,便于查找bug。其配置与上述类似,只需要修改对应地配置文件,并启动服务即可。在配置之前,首先将HDFS和YARN的服务都停止,然后修改所有机器上的/opt/module/hadoop-3.1.3/etc/hadoop/mapred-site.xml配置文件

[hadoopuser@hadoop002 /] stop-yarn.sh										# hadoop002中停止YARN服务
[hadoopuser@hadoop001 /] stop-dfs.sh										# hadoop001中停止HDFS服务
[hadoopuser@hadoop001 /] vi /opt/module/hadoop-3.1.3/etc/hadoop/mapred-site.xml	# 修改mapred配置文件

# 在configuration之间添加下列参数
<property>
        <name>mapreduce.jobhistory.address</name>
        <value>hadoop001:10020</value>							# 历史服务器的地址为hadoop001
</property>

<property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>hadoop001:19888</value>							# 历史服务器的web访问地址为hadoop001:19888
</property>

6.2 配置日志聚集

日志会记录集群运行时的详细情况,在出现故障时对溯源很有效,配置日志聚集的步骤与上述历史服务器的配置类似,只不过日志聚集并不是单独的服务,而是依赖于YARN,所以我们只需要在所有机器上都修改YARN的配置,打开其日志聚集功能即可

[hadoopuser@hadoop001 /] vi /opt/module/hadoop-3.1.3/etc/hadoop/yarn-site.xml	# 修改YARN配置文件

# 在configuration之间新增下列参数
<property>
        <name>yarn.log-aggregation-enable</name>
        <value>true</value>										# 开启日志聚集功能
</property>

<property>
        <name>yarn.log.server.url</name>
        <value>http://hadoop001:19888/jobhistory/logs</value>	# 设置日志聚集的地址
</property>

<property>
        <name>yarn.log-aggregation.retain-seconds</name>
        <value>604800</value>									# 设置日志保存的时效
</property>

以上配置完成之后,依次在hadoop001上启动HDFS和historyserver,在hadoop002上启动YARN

[hadoopuser@hadoop001 /] start-dfs.sh			# hadoop001上启动HDFS
[hadoopuser@hadoop001 /] mapred --daemon start historyserve	# hadoop001上启动历史服务器
[hadoopuser@hadoop002 /] start-yarn.sh			# hadoop002上启动YARN

删除HDFS下的output目录,再次运行examples

[hadoopuser@hadoop001 /] hadoop jar /opt/module/hadoop-3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output

运行结束之后在YARN的web界面点击History,跳转到历史服务器的界面


点击logs,即可跳转到日志聚集的页面

至此,简单的集群配置完成!

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值