hadoop-2.5.0-cdh5.2.1 + spark-1.2.0-bin-hadoop2.4 配置调优心得

更多内容,请访问 bbhhhh.github.io

环境:

hadoop-2.5.0-cdh5.2.1

spark-1.2.0-bin-hadoop2.4

master,

slave2  30G ram,32 vCore

slave4  60G ram,24 vCore

slave5  60G ram,24 vCore

 

测试用例:根据关联条件对2个文件进行关联操作,并将关联后的结果保存到HDFS上。主文件大小:13.1GB, 100086432条记录。关联文件大小:6.2GB,100086432条记录。关联后生成的文件大小:14.7GB,100086432条记录。

 

1        Spark配置说明

声明:以下spark配置都只需要在master节点上配置,不需要同步到slave节点上,一样生效。

1.1    Spark-env.sh

先来看spark on yarn 模式

# Options read in YARN client mode

# - SPARK_EXECUTOR_INSTANCES, Number ofworkers to start (Default: 2)

# - SPARK_EXECUTOR_CORES, Number of coresfor the workers (Default: 1).

# - SPARK_EXECUTOR_MEMORY, Memory perWorker (e.g. 1000M, 2G) (Default: 1G)

 

1.      SPARK_EXECUTOR_INSTANCES 这个参数配在这里不起任何作用, 如果要指定executor的个数,可以通过spark-submit–num-executors 这个参数来动态指定,比修改配置文件来的方便。

2.      SPARK_EXECUTOR_INSTANCES 这个参数的默认值是1, 配置文件中的注释是错的。

3.      SPARK_EXECUTOR_CORES 这个参数不管是在这里还是通过 spark-submit –executor-cores参数配置,都不起作用,始终是1。

4.      SPARK_EXECUTOR_MEMORY 这个参数在这里是起作用的,并且不单针对on yarn模式,同时针对 standalone模式。当然,也可以通过spark-submit –executor-memory 参数动态指定。

 

再来看standalone 模式

# Options for the daemons used in thestandalone deploy mode

# - SPARK_WORKER_CORES, to set the numberof cores to use on this machine

# - SPARK_WORKER_MEMORY, to set how muchtotal memory workers have to give executors (e.g. 1000m, 2g)

# - SPARK_WORKER_INSTANCES, to set thenumber of worker processes per node

 

1.      SPARK_WORKER_CORES参数是指所有worker最多能使用的cpu 核数,默认是全部cpu资源,除非你希望限制使用数,否则不需要修改这个参数

2.      SPARK_WORKER_MEMORY, 参数是指所有worker最多能使用的内存,默认是全部mem资源。除非你希望限制使用数,否则不需要修改这个参数

3.      SPARK_WORKER_INSTANCES,每个节点运行的worker数量,默认是1,如果希望在standalone模式下提高每个节点同时运行的executor个数,就需要增大这个参数。

 

 

调优经验:

在spark standalone模式下,

大的SPARK_EXECUTOR_MEMORY+ 少的SPARK_WORKER_INSTANCES 运行性能要好于

小的SPARK_EXECUTOR_MEMORY+ 多的SPARK_WORKER_INSTANCES,在笔者硬件条件下,最佳组合是:

–executor-memory24G SPARK_WORKER_INSTANCES=1,该组合由于下列组合:

–executor-memory12G SPARK_WORKER_INSTANCES=2

–executor-memory6G SPARK_WORKER_INSTANCES=4

 

在spark on yarn模式下,

笔者通过测试不同的参数组合,在笔者的硬件条件下,发现最佳组合是:

–num-executors32 –executor-memory 4G,该组合要优于下列组合:

–num-executors16 –executor-memory 8G –num-executors 8 –executor-memory 16G, –num-executors 64–executor-memory 2G

 

1.2    spark-defaults.conf

该文件主要是配置log和history,内容如下:

spark.eventLog.dir               hdfs://master:8020/directory

spark.eventLog.enabled           true

spark.yarn.historyServer.address   master:18080

 

奇怪的是在http://master:18080下只能看到笔者在sparkon yarn-cluster模式下运行的记录,其他spark standalone和spark on yarn-client的运行记录都看不到,不知道原因何在,若有高手知道望赐教,谢谢。

 

1.3    slaves

列出spark standalone模式下所有节点的主机名(不是ip地址)。

注意:该文件只有在sparkstandalone运行模式时才需要配置,如果是spark on yarn-client(cluster)模式,我们不需要节点的worker进程,可以将文件中的所有主机名注释掉,这样就不会在节点上启动worker进程了。如:

#slave2

#slave4

#slave5

 

2        Hadoop配置说明

Hadoop的配置不同于spark,有的需要在master上配,有的需要在slave上配。

 归纳:master上负责每个container最多能使用的资源数量。而slave上负责本节点最多能提供的资源数量。前者必须小于后者。

 

2.1    yarn-site.xml

2.1.1 在master节点上

      <property>

            <name>yarn.scheduler.minimum-allocation-mb</name>

             <value>256</value>

      </property>

      <property>

            <name>yarn.scheduler.maximum-allocation-mb</name>

             <value>20480</value><!-- must less than the max mem one slave nodemanager can allocat -->

      </property>

      <property>

             <name>yarn.scheduler.minimum-allocation-vcores</name>

             <value>1</value>

      </property>

      <property>

            <name>yarn.scheduler.maximum-allocation-vcores</name>

             <value>2</value>

      </property>

 

以上4个参数要配置在master上,配置到slave上不起作用。

yarn.scheduler.maximum-allocation-mb节点上最多分配给每个container的内存量,必须小于yarn.nodemanager.resource.memory-mb最小的那个节点。

在我们的环境中,slave2的物理内存最小,它的yarn.nodemanager.resource.memory-mb= 22G,因此master上的yarn.scheduler.maximum-allocation-mb必须小于22G。

 

该参数同时会影响到spark onyarn模式,--executor-memory 必须小于该值减去 384MB,否则spark任务报错。

 

yarn.scheduler.maximum-allocation-vcores节点上分配个每个container的cpu核数,必须小于yarn.nodemanager.resource.cpu-vcores 最小的那个节点。

 

2.1.2 在salve节点上

以上在master节点配的4个参数你即使配到slave上也不起作用。Slave上关键的参数是下面2个:

         <property>

                <name>yarn.nodemanager.resource.cpu-vcores</name>

                 <value>32</value>

                <description></description>

         </property>

         <property>

                <name>yarn.nodemanager.resource.memory-mb</name>

                <value>22528</value>

         </property>

 

yarn.nodemanager.resource.cpu-vcores,该节点最多可使用的cpu核数(cpu资源管理),

yarn.nodemanager.resource.memory-mb该节点最多可使用的内存数(内存资源管理)

这2个参数值每个节点根据节点实际硬件情况定。

 

2.2    mapred-site.xml

2.2.1 在master节点上

    <property>

       <name>mapred.child.java.opts</name>

        <value>-Xmx8192m</value>

    </property>

     <property>

         <name>mapreduce.map.memory.mb</name> 

          <value>4096</value> 

     </property>

     <property>

         <name>mapreduce.map.cpu.vcores</name>

          <value>1</value>

     </property>

     <property>

         <name>mapreduce.reduce.memory.mb</name>

          <value>8192</value>

     </property>

     <property>

         <name>mapreduce.reduce.cpu.vcores</name>

          <value>2</value>

     </property>

以上几个参数配置到slave上不起作用。

mapred.child.java.opts配置java参数,如-Xmx,默认是200m,太小了,按照reduce任务最多需要的量来配置。但不能超过master上的yarn.scheduler.maximum-allocation-mb值。

mapreduce.map.memory.mb每个map任务的内存量,不能超过-Xmx值。

mapreduce.map.cpu.vcores每个map任务的cpu核数,不能超过master上的yarn.scheduler.maximum-allocation-vcores

mapreduce.reduce.memory.mb每个reduce任务的内存量,不能超过-Xmx值。

mapreduce.reduce.cpu.vcores每个reduce任务的cpu核数,不能超过master上的yarn.scheduler.maximum-allocation-vcores

 

2.2.2 在salve节点上

除了不需要配置以上master的5个参数,其他与master一致即可。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值