APP下载

基于Linux平台下的Hadoop和Spark集群搭建研究

2020-09-27林皓月段华琼

电脑知识与技术 2020年23期
关键词:分布式

林皓月 段华琼

摘要:随着云计算的兴起,大数据受到越来越多的关注。为了将数据信息进行专业化处理,引进了Hadoop和Spark等大数据框架。其中Hadoop是最流行的处理平台,它主要解决了数据存储和分布式计算的问题,而Spark是基于Hadoop中的分布式文件系统和Hadoop Yarn进行计算。Hadoop和Spark的结合可以更好地提高计算速率和数据性能。该文首先介绍了Hadoop和Spark的特点,然后对分布式集群的搭建进行研究并实现,给出了搭建步骤并完成了对集群的验证。

关键词:Hadoop;Spark;分布式

中图分类号:TP311        文献标识码:A

文章编号:1009-3044(2020)23-0207-02

在网络技术不断发展的背景下,互联网公司为了应对大规模的信息与高吞吐的数据量,提出了Hadoop和Spark等大数据处理平台。它们应用范围广,给很多企业,诸如腾讯、淘宝、Yahoo和优酷等,带来了丰厚的利润。因此,构建一个高效的分布式大数据处理平台是大数据研究的基础。本文在Linux平台下,将最流行的Hadoop框架和Spark框架结合起来,构建了一个高效的大数据处理平台。

1 Hadoop和Spark的简介

1.1 Hadoop的特点及MR的运行过程

1) Hadoop的特点

Hadoop作为对大量数据分布式处理的基础架构,其设计是为了用便宜的机器组成高可用的集群。它经过多年的发展在大数据平台上有一定地位,而且由于代码开源,很多大数据开发人员还是会选择基于Hadoop框架搭建项目。Hadoop工程包括HBase、Hive、Spark、Zookeeper等模块,大多运行在Linux系统上,其主要的特点是文件系统HDFS的分布式存储和MapReduce的高性能计算。

2)MapReduce的运行过程

MapReduce是面向大数据并行处理的计算模型、框架和平台,其运行过程可以分为以下五点。

(1)將文件信息输入,经过split分割成数据块和程序,并将这些块和作业提交给一系列节点。Master节点负责调度,Map和Reduce负责执行。

(2)Master节点接收到程序后,将数据提交给合适的Map节点和Reduce节点。

(3)Map节点启动执行程序,读取本地的数据块,将数据进行整理放在本地计算,同时告知Master节点Map已完成以及中间结果的存储位置。

(4)Map输出的键值对经过shuffle混洗后,相同key的行会被直接输送到企业同一个Reducer中,然后sort键,排好序后的值被放入其中一个信息列表中。

(5)Master节点等待Map节点完成,接着Reduce节点启动,通过已知的存储位置读取数据,并将数据处理后输出结果。

1.2 Spark的特点及RDD的运行过程

1)Spark的特点

Spark是基于MapReduce的第二代计算引擎,它通过优化传统的MapReduce模型来满足之前HDFS以及MapReduce无法解决的问题,大大提高了效率,为处理流式数据以及其他需求提供了捷径。它主要的特点是计算效率高,支持多种运行模式,有高效的DAG引擎。虽然Saprk兼容性强,但也不支持所有语言开发。因此,Hadoop和Spark等多个框架的结合可以更好地满足用户需求,提高产品效率。

2) RDD的运行过程

RDD的运行过程总结为以下三点。

(1)首先创建RDD,读取文件。RDD可以从分布式文件系统、parallelize或本地文件系统创建。本研究中,Spark采用textFile方法从分布式文件系统中加载数据创建RDD。

(2)RDD的一系列转换操作。RDD的Map():将每个元素传递到函数func中,并将研究结果返回为一个新的数据集;RDD的flatMap():与Map()相似,不同点在于每个输入元素都可以映射到0或多个输出结果;RDD的reduceByKey():应用于map好的键值对(k,v),通过把每个key传到函数中聚合后的结果,返回新的键值对,它与groupByKey()的区别在于前者是使用函数合并相同键的值,可以自定义函数,后者则是把同键的值分组,不能自定义函数。

(3)RDD进行完以上操作后,经行动操作,把结果输出。

2 Hadoop和Spark集群的搭建

2.1 配置Linux (切换到root用户)

(1)准备虚拟机。安装三台CentOS 7系统的虚拟机,设置主机名为master,slave1,slave2。

(2)设置网络和ip地址。在设置中点Wired Setting于ON,将三台VM虚拟机的ip分别设置为192.168.100.100、192.168.100.101、192.168.100.102。

(3)配置时钟同步。如果自动配置则用命令 crontab -e 进入编辑模式,输入i插入“0 1 * * * /usr/sbin/ntpdate cn.pool.ntp.org”;如果手动配置,则直接运行命令 /user/sbin/ntpdate cn.pool.ntp.org。

(4)关闭防火墙。命令systemctl status firewalld.service可以查看防火墙状态;如果状态处于running,则systemctl stop firewalld.service关闭防火墙;systemctl disable firewalld.service,可永久禁止防火墙服务,下次重启也不会开启。

(5)配置host列表。在每台虚拟机上执行命令 vi /etc/hosts添加三行192.168.100.100 master 192.168.100.101 slave1 192.168.100.102 slave2保存。使用ping命令检查是否互通。

(6)安装JDK。首先移除系统自带的jdk,将JDK安装包解压放至提前创建的/opt/SoftWare/Jdk下,然后配置环境变量JAVA_HOME和PATH,最后source文件后使用java -version测试JDK是否安装。

(7)免密码登录。在master节点上执行ssh-keygen -t rsa,然后复制公钥文件cat~/.ssh/id_rsa.pub >>~/.ssh/authorized_keys,接着将authorized_keys复制到slave1和slave2,同样Slave节点也生成密钥,将 authorized_keys 文件移动到.ssh 目录,最后验证免密钥登录。

2.2 Hadoop集群的搭建

(1)解压安装包。将安装包解压到提前创建的/opt/SoftWare/Hadoop下,使用命令vi /etc/profile 配置 Hadoop 的系统环境变量HADOOP_HOME和PATH。

(2)配置文件hadoop-env.sh和yarn-env.sh。将export JAVA_HOME=xxx这行代码修改为下面的代码 export JAVA_HOME=/opt/SoftWare/Jdk/jdk1.8.0_131/。

(3)配置核心组件core-site.xml和hdfs-site.xml,配置文件系统yarn-site.xml,配置计算框架 mapred-site.xml。其中hdfs-site.xml的核心代码是

dfs.replication1

(4)配置slaves文件,加入从节点主机名。将已经配置完成的Hadoop复制到从节点.使用scp -r ... @savel1....命令。需要注意的是,因为之前已经配置了SSH,这里可以无密码地登录。

(5)格式化namenode启动Hadoop集群。使用 start-all.sh启动 Hadoop集群,然后启动jps可验证。在浏览器地址栏中输入http://master:50070/检查 namenode 和 datanode 是否正常。

2.3 Spark集群的搭建

(1)解压Scala安装包。将安装包解压在提前创建的/opt/SoftWare/Scala下,配置环境变量SCALA_HOME,PATH,保存退出,source /etc/profile后执行Scala -version测试Scala是否安装成功,注意Scala安装版本和Spark版本要对应。

(2)解压Spark安装包。将安装包解压到提前创建的/opt/SoftWare/Spark下,配置 Hadoop 启动的系统环境变量HADOOP_CONF_DIR,HDFS_CONF_DIR,YARN_CONF_DIR。

(3)修改配置文件spark-env.sh,配置JAVA_HOME,SPARK_MASTER_IP,SPARK_MASTER_PORT,SCALA_HOME,HADOOP_HOME,SPARK_HOME。

(4)修改slaves. template文件,添加主机名,删掉主机名,插入从节点名字slave1 slave2。

(5)将配置好的 Spark 拷贝到其他节点上。使用scp -r ... @savel1....命令。

(6)启动Spark集群。进入sbin目录,运行./start-all.sh,运行jps,分别有进程master,worker,worker。在浏览器中查看master:8080可知Spark安裝配置成功。

3 平台的验证

单词计数作为大数据学习的入门程序,相当于C语言中的Hello World,它是用来统计信息经分割后得到相同字段的次数,即将原本文字转换成形式。像统计某人访问日志网站次数,计算电影院某天的场数以及整合大数据集的数据种类等这些看似庞杂的任务都会涉及单词计数,掌握它对之后复杂框架的学习很有帮助。运行此程序就可知MR和RDD是否工作,从而进一步验证集群的成功。

3.1 在Hadoop集群中的验证

在Hadoop集群下MapReduce起到主要作用,它主要经过了split的数据切片、Mapper的数据映射、Shuffle的数据混洗和Reduce的数据归约这四个步骤。对于Driver是负责运行Saprk应用的组件,运行流程分别是FileInputFormat、Mapper、Combine、Reduce、Partitioner、FileOutputFormat,其中最重要的是Mapper、Reduce和Driver函数的代码,其运行步骤如下:

(1)打开idea,新建MR工程,加入jar包导入。

(2)主要写Mapper、Reducer和Driver函数,在此展示Mapper函数的主要代码:

Public void map(Object key, Text value, Context context )throws IOException, InterruptedException {

StringTokenizer itr = new StringTokenizer(value.toString());

while (itr.hasMoreTokens()) {

word.set(itr.nextToken());

context.write(word, one);}

}。

(3)使用工具选择主函数打包成jar包,将jar传至虚拟机并运行hadoop jar命令。

(4)可通过Hadoop fs -cat在终端查看,也可用web网页查看HDFS输出信息。

3.2 在Spark集群中的验证

在Spark运行单词计数时需要RDD的帮助,RDD是为了解决数据复制和防止在不同计算阶段之间重用中间结果的数据结构,它可以有多个分区,从而保证在集群中的不同节点上进行并行计算。RDD在Spark中的工作流程如下:首先创建RDD对象;通过RDD的转换和动作操作构建DAG;然后主要由DAGScheduler负责将DAG拆分为多个stage;最后TaskScheduler负责通过集群管理器加载任务,派发给worker。同时这个程序还将用到Hadoop的HDFS系统,两者结合,凸显出Hadoop和Spark组合的魅力。运行步骤如下:

(1)打开idea,新建工程,加入Spark包,其程序主要代码如下:

val sc=new SparkContext(sparkconf)

val line=sc.textFile(args(0))

val words=line.flatMap(_.split(“ “))

val wordToOne=words.map((_,1))

val wordToCount=wordToOne.reduceByKey(_+_)

wordToCount.saveAsTextFile(args(1))

(2)构建之后把代码打jar包,然后将被测文件传到HDFS目录下。

(3)执行spark -submit,最后用Hadoop fs -cat查看结果。

4 总结

Hadoop和Spark各有各的特点,Spark虽然没有像Hadoop一样的文件管理系统,但是在计算领域还是比MapReduce速率快。Hadoop 的本质在于分布式系统,而Spark对应上Hadoop中的MapReduce,提出了RDD的思想。尽管Spark功能也比Hadoop多,但很多企业基于Hadoop搭建了整個系统,要全部迁移到Spark还是要很长时间,因此初学者可根据需求选择适当框架。本文介绍了两个框架的特点,如何搭建集群以及验证单词词频统计的Word Count程序。

如今大数据是现代产业极具价值的重要资产,采用Hadoop/Spark大数据构架可提供一致的应用服务,它能较好地克服集中式计算架构的缺陷,表现出良好的应用效果。也许在未来,大数据领域最热门的组合就是Hadoop/Spark。

参考文献:

[1] 张海涛.基于Hadoop的大数据计算之研究[J]电子测试,2019,(4).

[2] 林海,王强,李英震.基于大数据下的Spark快速大数据分析[J].现代工业经济和信息化,2019,9(10).

[3] 杨秋鸿,潘晓衡,赵铁柱, 等.面向大数据应用的分布式服务平台设计与实现[J].东莞理工学院学报,2020,27(1):34-38.

【通联编辑:朱宝贵】

猜你喜欢

分布式
基于预处理MUSIC算法的分布式阵列DOA估计
西门子 分布式I/O Simatic ET 200AL
家庭分布式储能的发展前景