spark 调优经验(续二)

标签: spark 经验 | 发表时间:2014-11-04 06:45 | 作者:lgandzmy
出处:http://blog.csdn.net

FAQ


1.      spark性能配置

我目前的环境是5台机器,每台机器8个核。如果有以下两种配置方案:

(a)

   SPARK_WORKER_INSTANCES = 8

   SPARK_WORKER_CORES = 1

 (b)

   SPARK_WORKER_INSTANCES = 1

      SPARK_WORKER_CORES = 8

 如何处理?

答: a方案每个节点会启动8个worker运行8个JVM,每个worker将会启动一个excutors, b方案将会启动一个worker运行一个JVM。如果数据很小,选择b方案,因为可以节省启动JVM的开销,如果数据很大,启动JVM的时间可以忽略,则选a方案。

如果5台机器的内存都是48g,a,b方案在添加如下配置:

(a)SPARK_WORKER_MEMORY = 6g     //给每个worker 分配6G 内存

(b)SPARK_WORKER_MEMORY = 48g

配置的时候注意:

SPARK_WORKER_CORES * SPARK_WORKER_INSTANCES= 每台机器总cores  

 

 

2.Hadoop配置详解

1.core-site.xml

常用的设置:

 fs.default.name   hdfs://mastername:9000

这是一个描述集群中NameNode结点的URI(包括协议、主机名称、端口号),集群里面的每一台机器都需要知道NameNode的地址。DataNode结点会先在NameNode上注册,这样它们的数据才可以被使用。独立的客户端程序通过这个URI跟DataNode交互,以取得文件的块列表。默认的文件系统的名称,默认的是设置单机配置,如果是伪分布式则设置hdfs://localhost:9000,如果是完全分布式则设置成hdfs://mastername:9000

 

 hadoop.tmp.dir    /tmp/hadoop-${user.name}

hadoop.tmp.dir是hadoop文件系统依赖的基础设置,很多路径都依赖它,如果hdfs-site.xml中不配置namenode和datanode的存放位置,默认就放在这个路径中,所以最好设置,而且设置到持久目录中。使用默认的路径会根据不同的用户名生成不同的临时目录。

 

优化参数:

hadoop.logfile.size       10000000         日志文件最大为10M

hadoop.logfile.count      10               日志文件数量为10个

hadoop跑了很多任务后,可以通过设置hadoop.logfile.size和hadoop.logfile.count来设定最大的日志大小和数量来自动清楚日志。

 

io.file.buffer.size        4096             流文件的缓冲区为4K 

这是读写sequence file的buffer size,可以减少I/O次数,在大型的Hadoop cluster,建议使用更大的值。


hdfs-site.xml

常用设置:

dfs.replication    它决定着 系统里面的文件块的数据备份个数。对于一个实际的应用,它应该被设为3(这个数字并没有上限,但更多的备份可能并没有作用,而且会占用更多的空间)。少于三个的备份,可能会影响到数据的可靠性(系统故障时,也许会造成数据丢失)

dfs.data.dir   这是DataNode结点被指定要存储数据的本地文件系统路径。DataNode结点上的这个路径没有必要完全相同,因为每台机器的环境很可能是不一样的。但如果每台机器上的这个路径都是统一配置的话,会使工作变得简单一些。默认的情况下,它的hadoop.tmp.dir, 这个路径只能用于测试的目的,因为,它很可能会丢失掉一些数据。所以,这个值最好还是被覆盖。

dfs.name.dir   这是NameNode结点存储hadoop文件系统信息的本地系统路径。这个值只对NameNode有效,DataNode并不需要使用到它。上面对于/temp类型的警告,同样也适用于这里。在实际应用中,它最好被覆盖掉。

 

dfs.permissions       true     文件操作时的权限检查标识,控制读写权限,false不控制读写权限。

 

dfs.block.size              67108864          缺省的文件块大小为64M

hadoop fsck /文件目录 –files –locations –blocks  查看文件存储信息

用法:hadoop fsck [GENERIC_OPTIONS]<path> [-move | -delete | -openforwrite] [-files [-blocks [-locations |-racks]]]

<path>      检查的起始目录。

-move      移动受损文件到/lost+found

-delete     删除受损文件。

-openforwrite     打印出写打开的文件。

-files             打印出正被检查的文件。

-blocks     打印出块信息报告。

-locations     打印出每个块的位置信息。

-racks             打印出data-node的网络拓扑结构。

 

 

dfs.namenode.logging.level     info        输出日志类型

 

优化设置:

dfs.df.interval                60000         磁盘空间统计间隔为6秒

dfs.client.block.write.retries    3           块写入出错时的重试次数

dfs.heartbeat.interval           3          数据节点的心跳检测间隔时间

dfs.balance.bandwidthPerSec     1048576     启动负载均衡的数据节点可利用带宽最大值为1M

 

dfs.datanode.failed.volumes.tolerated      0      

决定停止数据节点提供服务充许卷的出错次数。0次则任何卷出错都要停止数据节点。

 

dfs.datanode.data.dir.perm 755          数据节点的存贮块的目录访问权限设置

更多信息请参读:

http://hadoop.apache.org/docs/r2.2.0/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml


mapred-site.xml

mapreduce.framework.name         yarn

mapred.job.tracker     mastername:9001  作业跟踪管理器是否和MR任务在一个进程中。默认值是local,单节点。Job 运行的host和端口号。

mapred.local.dir       ${hadoop.tmp.dir}/mapred/local  MR的中介数据文件存放目录

mapred.system.dir     ${hadoop.tmp.dir}/mapred/system MR的控制文件存放目录

mapred.temp.dir       ${hadoop.tmp.dir}/mapred/temp   MR临时共享文件存放区



常见名词解释:

Driver:使用Driver这一概念的分布式框架很多,比如Hive等,spark中的Driver即运行Application的main() 函数并且创建SparkContext,创建sparkContext的目的是为了准备spark应用程序的运行环境,在spark中由SparkContext负责和clusterManager通信,进行资源的申请、任务的分配和监控等。当Excutor部分运行完毕后,Driver同时负责将SparkContext关闭,通常用SparkContext代表Driver。

 

  Excutor:某个Appliction运行在Worker节点上的一个进程,该进程负责运行某些Task,并且负责将数据存在内存或者磁盘上。每个Application都有各自独立的一批Excutor。在Spark on yarn 模式下,进程名称为CoarseGrainedExcutorBackend。一个CoarseGrainedExcutorBackend进程有且仅有一个Excutor对象,它负责将Task包装成taskRunner,并从线程池中抽取出一个空闲线程运行Task,每个CoarseGrainedExcutorBackend能并行运行的Task的数量就取决于分配给他的cpu的个数了。

 

 Cluster Manager:指的是在集群上获取资源的外部服务,目前有:

Standalone:Spark原生的资源管理,有Master负责资源的分配,可以在亚马逊的EC2上运行。

Apache Mesos:与Hadoop Mapreduce兼容性良好的一种资源调度框架;

Hadoop Yarn:主要是指的Yarn的ResourceManger;


作者:lgandzmy 发表于2014-11-3 22:45:41 原文链接
阅读:37 评论:0 查看评论

相关 [spark 经验] 推荐:

spark 调优经验(续二)

- - CSDN博客云计算推荐文章
1.      spark性能配置. 我目前的环境是5台机器,每台机器8个核. 答: a方案每个节点会启动8个worker运行8个JVM,每个worker将会启动一个excutors, b方案将会启动一个worker运行一个JVM. 如果数据很小,选择b方案,因为可以节省启动JVM的开销,如果数据很大,启动JVM的时间可以忽略,则选a方案.

spark调优经验(待续)

- - CSDN博客云计算推荐文章
spark调优是需要根据业务需要调整的,并不是说某个设置是一成不变的,就比如机器学习一样,是在不断的调试中找出当前业务下更优的调优配置. 下面零碎的总结了一些我的调优笔记. spark 存储的时候存在严重的分配不均的现象,有几台机器在过渡使用, 有几台机器却很少被使用,有几台机器缓存了几十个上百个RDD blocks  有的机器一个RDD blocks 都没有,这样存储有RDD blocks 的可以进行运算,运算的tasks 最多为该机器core数.

Spark概览

- - 简单文本
Spark具有先进的DAG执行引擎,支持cyclic data flow和内存计算. 因此,它的运行速度,在内存中是Hadoop MapReduce的100倍,在磁盘中是10倍. 这样的性能指标,真的让人心动啊. Spark的API更为简单,提供了80个High Level的操作,可以很好地支持并行应用.

Spark与Mapreduce?

- - 崔永键的博客
我本人是类似Hive平台的系统工程师,我对MapReduce的熟悉程度是一般,它是我的底层框架. 我隔壁组在实验Spark,想将一部分计算迁移到Spark上. 年初的时候,看Spark的评价,几乎一致表示,Spark是小数据集上处理复杂迭代的交互系统,并不擅长大数据集,也没有稳定性. 但是最近的风评已经变化,尤其是14年10月他们完成了Peta sort的实验,这标志着Spark越来越接近替代Hadoop MapReduce了.

Spark迷思

- - ITeye博客
目前在媒体上有很大的关于Apache Spark框架的声音,渐渐的它成为了大数据领域的下一个大的东西. 证明这件事的最简单的方式就是看google的趋势图:. 上图展示的过去两年Hadoop和Spark的趋势. Spark在终端用户之间变得越来越受欢迎,而且这些用户经常在网上找Spark相关资料. 这给了Spark起了很大的宣传作用;同时围绕着它的也有误区和思维错误,而且很多人还把这些误区作为银弹,认为它可以解决他们的问题并提供比Hadoop好100倍的性能.

Spark 优化

- - CSDN博客推荐文章
提到Spark与Hadoop的区别,基本最常说的就是Spark采用基于内存的计算方式,尽管这种方式对数据处理的效率很高,但也会往往引发各种各样的问题,Spark中常见的OOM等等. 效率高的特点,注定了Spark对性能的严苛要求,那Spark不同程序的性能会碰到不同的资源瓶颈,比如:CPU,带宽、内存.

Spark&Spark性能调优实战

- - CSDN博客互联网推荐文章
       Spark特别适用于多次操作特定的数据,分mem-only和mem & disk. 其中mem-only:效率高,但占用大量的内存,成本很高;mem & disk:内存用完后,会自动向磁盘迁移,解决了内存不足的问题,却带来了数据的置换的消费. Spark常见的调优工具有nman、Jmeter和Jprofile,以下是Spark调优的一个实例分析:.

Mesos上部署spark

- - 开源小站
还是回到之前一直持续的 Mesos话题. 在之前的环节里,我们已经尝试了Mesos的安装,Marathon守护服务以及相对比较主流的Mesos作为Hadoop的资源管理器的实际操作. 这次就说说同属于伯克利出品的Spark. 其实spark最初0.7以前的版本还没有自己的资源管理系统,资源的调度都是通过Mesos来执行的.

Spark容错机制

- - zzm
一般来说,分布式数据集的容错性有两种方式: 数据检查点和记录数据的更新. 面向大规模数据分析,数据检查点操作成本很高,需要通过数据中心的网络连接在机器之间复制庞大的数据集,而网络带宽往往比内存带宽低得多,同时还需要消耗更多的存储资源. 因此,Spark选择记录更新的方式. 但是,如果更新粒度太细太多,那么记录更新成本也不低.

beeline 连接SPARK /Hive

- - 开源软件 - ITeye博客
hiveclient所在主机的jdk 1.7_51,hive 0.12和hadoop 2.3.0是从服务器端拷贝过来的,环境变量一切OK. 执行连接报了Invalid URL的错误:. 开始的一段时间都在纠结这个jdbc的URL格式问题,后来在cloudra论坛上找到了一个方法,. 直接调用的jdbc:hive2的驱动测试是正常的,证明CLASSPATH等环境变量没有问题.