陈新华
摘要:Hadoop系統是优秀的大数据处理系统,具有分布式存储和处理数据的能力,其应用环境的部署相对比较复杂,文章提出一种自动化部署Hadoop的解决方案。通过编写自动化部署Hadoop的shell脚本,可以快速部署Hadoop大数据平台,显著降低了Hadoop集群部署的复杂度及时间成本。
关键词:自动化部署;大数据平台;Hadoop集群
中图分类号:TP393 文献标识码:A
文章编号:1009-3044(2019)08-0221-03
1 概述
随着信息技术的发展,越来越多的信息以数字形式在信息系统中传输、处理和存储。在信息技术快速发展的今天,人类以正在以前所未有的速度产生数据,除了信息系统的运行产生大量数据,现在每个人在每天的生活中都会产生很多的数据(例如工作中产生的数据、电话通信、交通导航、新闻阅览、消费记录、评论、留言、工作过程等),大数据就成为这个高科技时代的产物。大数据是云计算、智慧城市的基础,同时大数据也为人工智能提供数据基础。Hadoop作为开源的大数据处理系统,为数据的存储和处理提供了技术平台,为了解决Hadoop系统应用中配置管理的复杂性问题,本文通过shell编程,提供了一种自动化配置管理Hadoop的方法,减少了配置难度,提升了Hadoop平台的部署速度。
2 HADOOP简介
Hadoop是一套开源的软件平台,利用服务器集群,根据用户的自定义业务逻辑,对海量数据进行分布式处理。Hadoop的主要目标是对分布式环境下的“大数据”以一种可靠、高效、可伸缩的方式处理。
Hadoop的MapReduce和HDFS的核心设计,使得整个框架能够自动处理节点故障。MapReduce提供了对数据的计算,HDFS提供了海量数据的存储。Hadoop能够轻松处理PB级的海量数据。
HDFS(Hadoop Distributed File System)是为Hadoop项目开发的文件系统,它采用(master/slave)架构。HDFS由一个NameNode和众多DataNode组成。HDFS以文件格式为用户存储数据提供相应的文件名称空间。通常情况下,HDFS将这些文件分成几个文件块,这些文件块被存储在一组数据服务中。然后由NameNode提供基本功能,如打开、关闭和重命名文件和目录,同时负责将文件块映射到DataNode节点上。由DataNode负责响应客户端具体文件的读写操作,同时处理NameNode节点发来的建立、删除和备份数据块的请求。Hadoop平台架构如图1所示。
Hadoop平台的部署形式可分为三类:独立模式,伪分布模式和完全分布模式(标准集群模式)。根据研究项目的要求,建立企业大数据Hadoop平台必须使用完全分布式模式。
Hadoop的部署方式目前以手动部署居多。手动部署缺点较多,主要表现在部署耗时多、容易出现错误、对操作人员的技术水平要求高、部署过程既不可重复也不可靠、需要维护额外的文档。
本文提出一种自动化部署Hadoop的解决方案。通过编写shell脚本,可以快速实现自动化部署Hadoop大数据平台,大大降低了Hadoop集群部署的复杂度、缩减了部署的时间成本。在一定程度上弥补了手动部署的缺点。
3 自动化部署程序的设计与实现
3.1 shell工具介绍
Shell提供了用户和内核进行交互操作的一种接口。同时,Shell也是一个命令解释器,它解释由用户输入的命令并且把它们送到内核。不仅如此,Shell有自己的编程语言用于对命令的编辑,它允许用户编写由 shell 命令组成的程序。UNIX/Linux 操作系统下的Shell既是用户交互的界面,也是控制系统的脚本语言。
本文利用shell编写自动化部署脚本。
3.2 自动化部署shell脚本的实现
自动化部署shell脚本的实现主要依据hadoop平台的部署步骤,将每一个步骤编写为shell脚本,最后形成一个shell脚本文件。下文以一个master节点,两个slave节点,共三个节点组成的hadoop集群为例进行展示。
1) 配置SSH免密登录。脚本如下:
[#修改hosts文件,配置主机名与ip的映射。
echo "IP地址 master" >> /etc/hosts
echo " IP地址slave1" >> /etc/hosts
echo " IP地址slave2" >> /etc/hosts
#下载安装expect。
yum install expect –y
#生成秘钥。
echo |ssh-keygen -t rsa
#需要配置的主机名。
SERVERS="master slave1 slave2"
#需要配置的主机登录密码。
PASSWORD=123456
#将本机生成的公钥复制到其他节点上。
ssh_copy_id_to_all(){
for SERVER in $SERVERS
do
auto_ssh_copy_id $SERVER $PASSWORD
done
} ]
2) 配置每台服务器的hosts文件。脚本如下:
[#在master上配置hosts文件,再将配置好的hosts文件发送给slave1,slave2。
scp /etc/hosts slave1:/etc
scp /etc/hosts slave2:/etc ]
3) 创建目录并安装hadoop和jdk软件。脚本如下:
[#为集群中节点的hdfs的NameNode、DataNode及临时文件在用户目录下创建目录。
mkdir -p /home/data/hdfs/data /home/data/hdfs/tmp /home/data/hdfs/name
#解压软件包并将解压后的包移动到相应的目录下。
tar -zxvf jdk-8u171-linux-x64.tar.gz
mv jdk1.8.0_171 /usr/local/
tar -zxvf hadoop-2.7.6.tar.gz
mv hadoop-2.7.6 /home/data/hdfs/data ]
4) 配置环境变量。
java环境变量配置脚本如下:
[grep -q "export PATH=" /etc/profile
if [ $? -ne 0 ]; then
#末行插入
echo 'export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$HADOOP_HOME/bin'>>/etc/profile
else
#行尾添加
sed -i '/^export PATH=.*/s/$/:\$JAVA_HOME\/bin/' /etc/profile
fi
grep -q "export JAVA_HOME=" /etc/profile
if [ $? -ne 0 ]; then
#导入配置
filename="$(ls /usr/local | grep '^jdk.*[^rpm | gz]$' | sed -n '1p')"
sed -i "/^export PATH=.*/i\export JAVA_HOME=\/usr\/local\/jdk1.8.0_171$filename" /etc/profile
sed -i '/^export PATH=.*/i\export CLASSPATH=$JAVA_HOME/lib:$JAVA_HOME/jre/lib' /etc/profile
#echo "export JAVA_HOME=/usr/local/$filename">>/etc/profile
#echo 'export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar'>>/etc/profile
else
#替換原有配置
filename="$(ls /usr/local | grep '^jdk.*[^rpm | gz]$' | sed -n '1p')"
sed -i "s/^export JAVA_HOME=.*/export JAVA_HOME=\/usr\/local\/$filename/" /etc/profile
fi
source /etc/profile
echo"7"
source /etc/profile
echo"8" ]
hadoop环境变量配置脚本如下:
[grep -q "export HADOOP_HOME=" /etc/profile
if [ $? -ne 0 ]; then
#在PATH前面一行插入HADOOP_HOME
sed -i '/^export PATH=.*/i\export HADOOP_HOME=\/home\/data\/hdfs\/data\/hadoop-2.7.6' /etc/profile
else
sed -i 's/^export HADOOP_HOME=.*/export HADOOP_HOME=\/home\/data\/hdfs\/data\/hadoop-2.7.6:' /etc/profile
fi
source /etc/profile
echo"9"
source /etc/profile ]
加载,使slave的环境变量生效。
[scp /etc/profile slave1:/etc
scp /etc/profile slave2:/etc
ssh slave1 source /etc/profile
ssh slave2 source /etc/profile ]
5) 共享Hadoop配置文件。
hadoop-2.7的配置目录,依次修改core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml以及slaves文件。脚本如下:
[#将整个hadoop-2.7.6文件夹及其子文件夹复制到slave1和slave2的相同目录中。
scp –r /home/data/hdfs/data/hadoop-2.7.6/root@slave1:/home/data/hdfs/data
scp –r /home/data/hdfs/data/hadoop-2.7.6/root@slave2:/home/data/hdfs/data ]
6) 启动hadoop服务。脚本如下:
[#格式化namenode
/home/data/hdfs/data/hadoop-2.7.6/bin/hadoop namenode –format
#启动hadoop进程
/home/data/hdfs/data/hadoop-2.7.6/sbin/hadoop-daemon.sh start namenode
/home/data/hdfs/data/hadoop-2.7.6/sbin/hadoop-daemon.sh start datanode
/home/data/hdfs/data/hadoop-2.7.6/sbin/hadoop-daemon.sh start secondarynamenode
/home/data/hdfs/data/hadoop-2.7.6/sbin/yarn-daemon.sh start resourcemanager
#在slave节点上启动hadoop进程
ssh slave1 /home/data/hdfs/data/hadoop-2.7.6/sbin/yarn-daemon.sh start nodemanager
ssh slave2 /home/data/hdfs/data/hadoop-2.7.6/sbin/yarn-daemon.sh start nodemanager ]
4 基于HADOOP的企业大数据平台自动化部署测试
4.1 测试网络拓扑结构设计
测试环境搭建的是hadoop三节点集群,包含一台master节点,两台slave节点。
实验室环境中Hadoop集群的拓扑结构如图2所示。
ip地址和主机名规划如表1所示。
4.2 测试环境准备
1)操作系统镜像选择的是rhel-server-7.0-x86_64-dvd.iso,也可以选择Ubuntu、CentOS等。
2)软件选择Hadoop2.7.6和jdk1.8.0_171。
4.3 基于HADOOP的企業大数据平台的自动化部署
1) 执行hadoop.sh脚本文件。
将以上脚本写入一个名为hadoop.sh的脚本文件,并在master节点上使用下列命令执行该脚本文件。
[root@master ~]# . /hadoop.sh
2) 运行jps查看服务启动情况。
脚本文件运行结束后,即可用jps查看hadoop服务启动情况。
[root@master ~]# jps
3) 查看UI管理界面
登录http://192.168.127.130:50070查看YARN管理界面,如图3所示。
可以看出三节点集群的hadoop大数据平台自动化部署成功。
5 总结
Hadoop作为大数据分析平台被企业广泛应用,但其部署过程复杂、耗时长、技术要求高。本文以企业大数据平台的部署为研究对象,提出使用自动化部署来改善手动部署的缺点,编写了自动化部署文件,并在三节点的hadoop集群上进行了自动化部署测试。测试结果显示,自动化部署将部署时间从5~6小时缩减至5~10分钟,显著地降低了部署的时间成本,而且对部署人员的技术要求也不高。
参考文献:
[1] 孟源北.支持自动化Hadoop安装部署的研究[J].信息通信,2013(8):20.
[2] 于金良,朱志祥,李聪颖.Hadoop平台的自动化部署与监控研究[J].计算机与数字工程,2016(12):2457-2461.
[3] 刘萍.基于Hadoop与Spark的大数据处理平台的构建研究[J].通化师范学院学报,2018(30):83-88.
[4] 孟永伟,黄建强,曹腾飞,王晓英.Hadoop集群部署实验的设计与实现[J].实验技术与管理,2015(1):145-149.
【通联编辑:王力】