网站首页  词典首页

请输入您要查询的论文:

 

标题 通过虚拟化技术在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=Clouderas 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=Clouderas 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 –format

    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 –u hdfs hadoop fs –mkdir –p /tmp/hadoop-yarn

    #sudo –u hdfs hadoop fs –chmod –R 1777 /tmp

    创建/user用户目录,并设置权限为777

    #sudo –u hdfs hadoop fs –mkdir /user

    #sudo –u hdfs hadoop fs –chmod 777 /user

    创建yarn.nodemanager.remote-app-log-dir目录

    #sudo –u hdfs hadoop fs –mkdir –p /var/log/hadoop-yarn/apps

    #sudo –u hdfs hadoop fs –chown yarn:mapred /var/log/hadoop-yarn/apps

    #sudo –u hdfs hadoop fs –chmod 1777 /var/log/hadoop-yarn/apps

    #sudo –u hdfs hadoop fs –chmod 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 –u hdfs hadoop fs –mkdir –p /input/wordcount

    #mkdir /tmp/input

    #echo “hello hadoop hello word xiaonan” > /tmp/input/test1.txt

    #sudo –u hdfs hadoop fs –put /tmp/input/*.txt /input/wordcount

    #sudo –u 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.

随便看

 

科学优质学术资源、百科知识分享平台,免费提供知识科普、生活经验分享、中外学术论文、各类范文、学术文献、教学资料、学术期刊、会议、报纸、杂志、工具书等各类资源检索、在线阅读和软件app下载服务。

 

Copyright © 2004-2023 puapp.net All Rights Reserved
更新时间:2025/3/21 15:38:18