Hadoop与spark性能比较试验

               自从spark正式亮相后,其官网上就公开声称其计算速度比hadoop要快10到100倍。我看了后总觉得其存在很大的炒作成份,不太相信。正好单位目前在做一个大数据的项目,于是就借机实实在在的对二者的计算速度进行了比较。正如一句北京土话:是骡子是马,拉出来遛遛。实验过程记录如下。

        第一步  安装软件

        我先在笔记本上装了个乌班图,然后安装hadoop,接着安装spark,。安装过程不再赘述,但有一点要提一下,spark安装完后,在启动spark-shell的时候,总是提示没有启动hive的metastore服务,这令我很不能理解,我又不用hive存取数据,为什么非要hive的metastore呢?可是找不到其它办法,只能是安装hive了。

Hadoop,spark和hive是本次实验所必须的软件。

        第二步  启动服务

        先启动hadoop,命令:start-alll.sh。

        在将hdfs的安全模式关闭:命令是hdfs dfsadmin  -safemode leave。注意,最好关闭安全模式,否则启动metastore的时候出错的概率非常高。

        接着启动metastore,命令是hive  --service metastore。注意,最好在hive的根目录下执行该命令,在我的电脑上,只有在根目录下才能正常启动,影响不大也就没追究原因。

        启动完后,当前命令行客户端就不能在继续使用了,需要重新开启新的命令行客户端进行其它操作。当然可以在执行时通过添加相应的参数来继续使用当前客户端,但对实验影响不大。

        在新的命令行客户端中,启动spark,命令是start-all.sh。

        至此,所有需要的服务启动完成。

        第三步准备数据

         下面就需要准备数据了。准备两个文本文件,一个小一些,大约为几兆,另一个要明显大一些,最好在128兆以上,这样在hdfs中就会存储在多个块中了。我将testbed和jtest的使用手册反复的拷贝粘贴,得到一个138兆的文件t1.txt用于实验,另外有准备了一个3兆的小文件t2.txt用于实验。

          接着创建输入目录,命令是hadoop dfs  -mkdir /input。

          通过浏览器访问http://localhost:50070可以看到创建的目录,如果创建成功就可以继续了。

         第四步 hadoop计算能力实验

         将准备的小文件t2.tx上传到hdfs中,命令是hadoop dfs -put /home/yutian/t2.txt   /input。

Hadoop自带词频统计的例子,所以不用编写任何代码,就可以进行hadoop的计算能力实验了。在hadoop根目录下执行词频统计的例子,命令是hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-example-2.7.3.jar wordcount /input  /output。

        执行的同时开始计时,执行完毕后我得到的数据是3秒,由于时间短,时间统计的精度并不高。

        记录下时间后,将t2.txt删除,如果不删除后续会报错,命令是:hadoop dfs -rm /input/t2.txt。将输出目录也删除,命令是:hadoop dfs -rmr /output。然后将t1.txt上传到hdfs中。

        再次执行词频统计的例子,得到大文件消耗的时间是27秒。

        至此,hadoop的计算能力的数据已经获取完毕。

        第五步Spark计算能力实验

        Spark没有词频统计的例子,所以需要自己编写。根据自己喜好决定是否安装sbt,反正我安装了sbt。编写WordCount.scala文件,关键代码就三行:

        Val textFile=sc.textFile("hdfs://localhost:9000/input/t1.txt")

        Valcounts=textFile.flatMap(line=>line.split(“ ”)).map(_,1)).reduceByKey(_+_)

        Counts.saveAsTextFile("hdfs://localhost:9000/output/s2")

        编写好WordCount.scala文件后,在基础目录下,将其打包,命令是:sbt package。打包完成后,词频统计程序就准备完成了。

        将hdfs中的output/s2目录删除,当前input中的文件是t1.txt,在基础目录下执行词频统计程序,命令是spark-submit  –class “WordCount” –master  spark://yutian-ThinkPad-Edge-E440:7077 ./target/scala-2.11/wordcount_2.11-1.0.jar。yutian-ThinkPad-Edge-E440是机器名,注意,spark服务的url要同spark的web页面http://localhost:8080中的服务ur相一致,一开始我使用localhost,结果总提示连接失败,改成机器名后,就成功了。得到大文件消耗的时间是13秒。然后将hdfs中的/output/s2删除,将/input/t1.txt删除,将t2.txt上传至/input中,再次执行词频统计程序,得到t2.txt消耗的时间是4秒。

        第六步数据分析

        获得的数据列表如下:

                                      Hadoop(s)             spark(s)

t1.txt(138M)                     27                        13

t2.txt(3M)                           3                          4


        由实验数据可以得出如下结论,spark的计算能力方面的确存在优势,并且其优势随着计算任务的复杂程度的增加而扩大。

  

猜你喜欢

转载自blog.csdn.net/plstudio1/article/details/77581525
今日推荐