开篇:润墨网以专业的文秘视角,为您筛选了一篇通过虚拟化技术在Linux系统下搭建Hadoop集群的研究与实现范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!
摘要:本文从节约成本和简化搭建过程出发,介绍了通过VMware Workstation和CentOS 6.5在单机环境下,搭建分布式Hadoop集群的方法,并给出了详细的搭建步骤,最后对搭建好的平台进行了测试,测试结果表明建立在虚拟机上的Hadoop集群已经可以正常运行,可在上面进行实验和应用开发。
关键词:Hadoop;VMware;虚拟化
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2016)25-0175-06
1 概述
目前,大数据已经成为研究的热点,大数据的解决方案种类繁多,其中Hadoop作为 Apache基金会的一个开源项目,已经积累了大量用户,在业界也得到了广泛的认可,一些知名企业如百度、阿里巴巴、 谷歌、腾讯和facebook等,纷纷将 Hadoop应用于商业领域。传统的Hadoop集群是基于物理节点搭建的,虽然理论上组建一个 Hadoop集群不需要昂贵的高性能计算机,仅需一些廉价的计算机即可[1,2],但如采用传统技术搭建Hadoop集群,就不得不面对一些问题:①构建集群需要大量的物理设备以及足够的实验场地②物理机的性能得不到充分利用;③基于物理机的Hadoop集群组建后,如需增加节点,就要增加新的物理机,需要更大的场地,而且集线器、交换机等物理设备也要相应增加,布置起来比较错综复杂。面对这些问题,如何在?本文对这个问题进行探讨,介绍一下在单机环境中,使用VMware Workstation 10和CentOS 6.5搭建Hadoop分布式集群并进行简单的测试。
2 Hadoop简介
Hadoop是一种分析和处理大数据的软件平台,是Apache的一个用Java语言所实现的开源软件框架,在大量计算机组成的集群当中实现了对海量数据进行分布式计算。Hadoop的框架最核心的设计就是:HDFS和MapReduce,HDFS为海量的数据提供了存储,而MapReduce为海量的数据提供了计算。大数据在Hadoop处理的流程可以参照图1来进行理解:数据是通过Hadoop的集群处理后得到的结果。[3]
Hadoop的集群主要由 NameNode,DataNode,Secondary NameNode,JobTracker,TaskTracker组成,如图2所示:
NameNode:记录文件是如何被拆分成block以及这些block都存储到了那些DateNode节点,同时也保存了文件系统运行的状态信息。
DataNode:存储被拆分的blocks。
Secondary NameNode:帮助NameNode收集文件系统运行的状态信息。
JobTracker:当有任务提交到Hadoop集群时,负责Job的运行,负责调度多个TaskTracker。
TaskTracker:负责某一个map或者reduce任务。
3 搭建Hadoop虚拟实验平台
3.1准备与安装环境
服务器准备:安装虚拟机和linux,虚拟机推荐使用vmware;PC可以使用workstation,配置低的话可选择Cygwin,模拟linux环境;服务器可以使用ESXi,在管理上比较方便。ESXi还可以通过拷贝镜像文件复制虚拟机,复制后自动修改网卡号和ip非常快捷。 如果只是实验用途,硬盘大约预留20-30G空间。
操作系统:CentOS 6.5 ,分区可以选择默认,安装选项默认即可,注意选项里应包括ssh , vi (用于编辑配置文件) , perl等(有些脚本里包含perl代码需要解析)。
JAVA环境:到Oracle官网下载java jdk安装包,并且进行安装。
3.2实验环境
硬件环境:Vmware 10 ,三台Linux虚拟机:CentOS 6.5, 安装介质:cdh5.4.0。
三台虚拟机配置如表1:
3.3安装与配置三台虚拟机
3.3.1准备三台虚拟机
打开虚拟软件VMware WorkStation。
点击“文件”->“打开”,找到虚拟机所在目录,打开装有CentOS6.5的虚拟机。
通过克隆生成新的虚拟机,如图3。
3.3.2操作系统网络配置
确认三台虚拟机为不同MAC地址,选择“NAT模式”的网络连接方式,如图4。
打开虚拟机,按照表1设置IP地址,然后通过“ifconfig”命令查看网络地址,如图5。
设置完后,root用户用“service network restart”命令重启网络。
根据表1修改三台主机的主机名,修改后系统需重新启动,编辑/etc/sysconfig/network,HOSTNAME=master或slave。
修改/etc/hosts,所有主机添加如下内容:
192.168.xx.101 master
192.168.xx.102 slave1
192.168.xx.103 slave2
3.3.3 ssh无密码登录配置
三台主机确保关闭防火墙,#chkconfig iptables,#services iptables stop。
关闭SElINUX,修改/etc/selinux/config中的SELINUX=””为disable。
在所有主机生成密钥并配置SSH无密码登录主机
#ssh-keygen -t rsa
在master生成认证文件,然后授权并将文件拷贝到slave1
#cat ~/.ssh/id_rsa.pub >>~ /.ssh/authorized_ keys
# chmod 600 authorized_keys
#scp ~/.ssh/authorized_ keys slave 1:~/.ssh/
在slave1上添加公钥信息,然后授权并将文件拷贝到slave2
#cat ~/.ssh/id_rsa.pub >>~ /.ssh/authorized_ keys
# chmod 600 authorized_keys
#scp ~/.ssh/authorized_ keys slave 2:~/.ssh/
在slave2上添加公钥信息,然后授权并将文件拷贝到master和slave1
#cat ~/.ssh/id_rsa.pub >>~ /.ssh/authorized_ keys
# chmod 600 authorized_keys
#scp ~/.ssh/authorized_ keys master:~/.ssh/
#scp ~/.ssh/authorized_ keys slave 1:~/.ssh/
测试是否实现三台主机间的无密码登录
#ssh master
#ssh slave1
3.3.4 配置JAVA环境
三台主机分别上传jdk文件到桌面并执行配置
mkdir /usr/java
mv ~/Desktop/jdk-7u71-linux-x64.gz /usr/java/
cd /usr/java
tar -xvf jdk-7u71-linux-x64.gz
在master配置环境变量,在/root/.bashrc文件添加如下内容
export JAVA_HOME=/usr/java/jdk1.7.0_71
export PATH=$PATH:$JAVA_HOME/bin
生效并发送到另外两台主机
#source .bashrc
#scp .bashrc slave1: ~
#scp .bashrc slave2: ~
验证
#java -version
3.3.5配置集群时间同步
选择master作为时间同步服务器,修改master的/etc/ntp.conf,添加
restrict 192.168.x.O mask 255.255.255.0 notrap nomodify
server 127.127.1.0 #local clock
启动服务
#service ntpd start
#chkconfig ntpd on
在slave1和slave2上添加定时任务,执行#crontab -e命令,添加如下内容
0 1 * * * root /usr/sbin/ntpdate master >> /root/ntpdate.log 2>&1
3.3.6 配置yum源
设置虚拟机master,使用ISO镜像文件,如图6。
在master上挂载光驱
#mkdir /media/cdh5
#mount -o loop -t iso9660 /dev/cdrom /media/cdh5
在master上创建文件/etc/yum.repos.d/cloudera-cdh5.repo,添加
[cloudera-cdh5]
name=Cloudera's Distribution for Hadoop, Version 5
baseurl=file:///media/cdh5/cdh/5.4.0/
gpgcheck=O
enabled= 1
在slave1和slave2上创建文件/etc/yum.repos.d/cloudera-cdh5.repo,添加
[cloudera-cdh5]
name=Cloudera's Distribution for Hadoop, Version 5
baseurl=http://master/media_cdh5/cdh/5.4.0/
gpgcheck=O
enabled= 1
在master上启动web服务
#service httpd start
#chkconfig httpd on
在master上创建相应软连接并测试
#ln -s /media/cdh5 /var/www/html/media_cdh5
#yum clean all
#yum list |grep hadoop-hdfs
3.3.7安装HDFS
在master上安装
yum install -y hadoop hadoop-hdfs hadoop-client hadoop-doc \
hadoop-debuginfo hadoop-hdfs-namenode \
hadoop-hdfs-secondarynamenode
在slave1和slave2节点上安装
yum install -y hadoop hadoop-hdfs hadoop-client hadoop-doc \
hadoop-debuginfo hadoop-hdfs-datanode
3.3.8安装YARN
在master上安装
yum install -y hadoop-yarn hadoop-yarn-resourcemanager
在slave1和slave2节点上安装
yum install hadoop-yarn hadoop-yarn-nodemanager hadoop-mapreduce -y
3.3.9配置HAdoop环境变量
在master配置环境变量,在/root/.bashrc文件添加如下内容
#HADOOP
export HADOOP_HOME=/usr/lib/hadoop
export HADOOP_HDFS_HOME=/usr/lib/hadoop-hdfs
export HADOOP_MAPRED_HOME=/usr/lib/hadoop-mapreduce
export HADOOP_COMMON_HOME=${HADOOP_HOME}
export HADOOP_YARN_HOME=/usr/lib/hadoop-yarn
export HADOOP_LIBEXEC_DIR=${HADOOP_HOME}/libexec
export HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop
export HDFS_CONF_DIR=${HADOOP_HOME}/etc/hadoop
export YARN_CONF_DIR=${HADOOP_HOME}/etc/hadoop
执行如下命令使配置生效,并发送到slave1和slave2
#source .bashrc
#scp .bashrc slave1: ~
#scp .bashrc slave2: ~
Hadoop有两类重要的配置文件:
只读默认的配置文件:core-default.xml, hdfs-default.xml, yarn-default.xml,mapred-default.xml。
手工配置文件($HADOOP_HOME/etc/hadoop/目录下): core-site.xml,hdfs-site.xml,yarn-site.xml, mapred-site.xml。
另外,还有几个重要的Hadoop环境配置文件:yarn-env.sh,slaves。
在master上修改yarn-env.sh和slave文件,配置yarn的运行环境
#vi $HADOOP_HOME/etc/hadoop/yarn-env.sh
export JAVA_HOME=/usr/java/jdk1.7.0_71/
#vi $HADOOP_HOME/etc/hadoop/slaves
slave1
slave2
修改core-site.xml文件
#vi $HADOOP_HOME/etc/hadoop/core-site.xml
fs.defaultFS
hdfs://master:9000
修改hdfs-site.xml文件
#vi $HADOOP_HOME/etc/hadoop/hdfs-site.xml
dfs.replication
3
dfs.permissions.superusergroup
hadoop
dfs.namenode.name.dir
file:///data/dfs/nn
dfs.datanode.data.dir
file:///data/dfs/dn
在master节点手动创建dfs.namenode.name.dir的本地目录
#mkdir -p /data/dfs/nn
在slave1和slave2节点手动配置创建dfs.datanode.data.dir的本地目录
#mkdir -p /data/dfs/dn
在所有主机上修改所有者权限
#chown -R hdfs:hdfs /data/dfs
下面列出一些需要关注的资源分配参数,如表2。
配置yarn-site.xml文件
增加
yarn.resourcemanager.address
master:8032
yarn.resourcemanager.scheduler.address
master:8030
yarn.resourcemanager.resource-track.address
master:8031
yarn.resourcemanager.admin.address
master:8033
yarn.resourcemanager.webapp.address
master:8088
yarn.resourcemanager.hostname
master
修改
Where to aggregate logs to.
yarn.nodemanager.remote-app-log-dir
/var/log/hadoop-yarn/apps
配置mapred-site.xml
mapreduce.framework.name
yarn
复制配置到其他节点,复制.bashrc和hadoop配置文件到slave1和slave2
#scp .bashrc slave1: ~
#scp .bashrc slave2: ~
#scp -r /etc/hadoop/conf slave1:/etc/hadoop/
#scp -r /etc/hadoop/conf slave2:/etc/hadoop/
在master节点上进行格式化
#sudo -u hdfs hadoop namenode Cformat
3.3.10启动HDFS集群
在master上启动
#service hadoop-hdfs-namenode start
#service hadoop-hdfs-secondarynamenode start
在slave1和slave2上启动
#service hadoop-hdfs-datanode start
通过jsp命令查看进程,确认HDFS集群是否成功启动
登录web控制台,查看HDFS集群状态,http://192.168.6.101:50070,如图7
3.3.11创建HDFS目录
创建/temp临时目录,并设置权限为1777
#sudo Cu hdfs hadoop fs Cmkdir Cp /tmp/hadoop-yarn
#sudo Cu hdfs hadoop fs Cchmod CR 1777 /tmp
创建/user用户目录,并设置权限为777
#sudo Cu hdfs hadoop fs Cmkdir /user
#sudo Cu hdfs hadoop fs Cchmod 777 /user
创建yarn.nodemanager.remote-app-log-dir目录
#sudo Cu hdfs hadoop fs Cmkdir Cp /var/log/hadoop-yarn/apps
#sudo Cu hdfs hadoop fs Cchown yarn:mapred /var/log/hadoop-yarn/apps
#sudo Cu hdfs hadoop fs Cchmod 1777 /var/log/hadoop-yarn/apps
#sudo Cu hdfs hadoop fs Cchmod 1777 /tmp/hadoop-yarn
3.3.12启动YARN集群
在master上启动
#service hadoop-yarn-resourcemanager start
在slave1和slave2上启动
#service hadoop-yarn-nodemanager start
通过jsp命令查看进程,确认YARN集群是否成功启动
通过Web控制台,查看ResourceManager状态,http://192.168.6.101:8088,如图8。
通过Web控制台,查看NodeManager状态,http://192.168.6.102:8042,如图9。
4 测试Hadoop集群
在master上执行
#sudo Cu hdfs hadoop fs Cmkdir Cp /input/wordcount
#mkdir /tmp/input
#echo “hello hadoop hello word xiaonan” > /tmp/input/test1.txt
#sudo Cu hdfs hadoop fs Cput /tmp/input/*.txt /input/wordcount
#sudo Cu hdfs hadoop jar /usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar wordcount /input/wordcount /output/wc01
执行结果如图10所示。
5 总结
测试结果显示,建立在虚拟机上的Hadoop集群已经可以正常运行,可在上面进行实验和应用开发。本文从简化搭建过程和充分利用机器性能出发,在单机上通过虚拟化软件,虚拟出三台Linux主机,搭建了分布式hadoop集群。在搭建过程中,有几点需要注意:虚拟机安装时,就要配置好主机的静态IP和主机名,这样可以方便后面的操作;当安装或运行时发生错误,可以查看相应的log文件,这会对找出问题很有帮助。
参考文献:
[1] 付伟,严博,吴晓平.云计算实验平台建设关键技术研究[J].实验室研究与探索,2013(11):78-81.
[2] 张兴旺,李晨晖,秦晓珠.构建于廉价计算机集群上的云存储的研究与初步实现[J].情报杂志,2011(11):166-171,182.
[3](美)Tom White.Hadoop权威指南[M].2版.周敏奇,王晓玲,金澈清,等.译.北京:清华大学出版社,2011:9-12.