前言
本文旨在记录在spark分布式环境下运行sparkbench所遇到的各种各样的坑,以及如何去避免这些坑的产生。
安装spark分布式请参考:
sparkbench安装请参考:
sparkbench中文安装指南
或
sparkbench英文原版readme
写这篇文档的原因
在运行sparkbench的时候,虽然安装sparkbench的流程在官方readme中以详细给出,但是在运行每个程序的过程中,文档明没有给出事无巨细的解答,同时由于sparkbench文档年代久远(2015年),在全新的spark环境下也出现的许多问题,所以写此文档,来达到避雷的目的。
具体问题
1.streaming applications
在运行流数据处理时,执行gen_data无需进行特别操作,但是在run.sh时,则需要在其后跟随参数
例如:
PageView 后需要跟随 <应用名称> <主机名> <端口号>
TwitterPopularTags 后需要跟随 <consumerKey> <consumerSecret>
同时一些流数据程序不需要生成数据,无需执行gen_data。
在TwitterPopularTags的run.sh中代码中用到了spark的example文件,但是版本号却时2.1.0,应当按照集群所安装的实际版本号进行相应的修改,否则将会无法读取。
2.Graph Computation Workloads
该处出现的问题具有特殊性,只有在docker环境下才可能出现
Master:yarn
[sudo] password for tank:
sh: 1: cannot create /proc/sys/vm/drop_caches: Read-only file system
Connection to hadoop1 closed.
[sudo] password for tank:
sh: 1: cannot create /proc/sys/vm/drop_caches: Read-only file system
Connection to hadoop2 closed.
[sudo] password for tank:
sh: 1: cannot create /proc/sys/vm/drop_caches: Read-only file system
Connection to hadoop3 closed.
data purged on hadoop1 hadoop2 hadoop3
问题其实很简单,程序中有相应的代码在程序执行前想通过修改文件的方式释放缓存,但是在docker容器中,无法在容器内部对此文件/proc/sys/vm/drop_caches
进行操作,因此出现了频繁要求sudo权限输入密码的情况(实际上并没有啥用),虽然其实并不会影响我们程序的执行,但这大大的阻碍了程序的自动化,解决这个问题其实只需要注释掉释放内存的代码即可,由人工在容器外部手动释放。
3.生成数据问题
其实这是官方文档的锅,官方说把测试结果放在了<SPARK_BENCH_HOME>/report
下,实则不然,具体的存放位置应该是<SPARK_BENCH_HOME>/num
的bench-report.dat
。
网友评论