Spark优化:禁止应用程序将依赖的Jar包传到HDFS

转: https://www.iteblog.com/archives/1173.html

每次当你在Yarn上以Cluster模式提交Spark应用程序的时候,通过日志我们总可以看到下面的信息:

21 Oct 2014 14 : 23 : 22 , 006 INFO  [main] (org.apache.spark.Logging$ class .logInfo: 59 )  -
Uploading file:/home/spark- 1.1 . 0 -bin- 2.2 . 0 /lib/spark-assembly- 1.1 . 0 -hadoop2. 2.0 .jar to
hdfs: //my/user/iteblog/...../spark-assembly-1.1.0-hadoop2.2.0.jar
21 Oct 2014 14 : 23 : 23 , 465 INFO  [main] (org.apache.spark.Logging$ class .logInfo: 59 )  -
Uploading file:/export1/spark/spark- 1.0 . 1 -bin-hadoop2/spark- 1.0 -SNAPSHOT.jar to
hdfs: //my/user/iteblog/.sparkStaging/application_1413861490879_0010/spark-1.0-SNAPSHOT.jar

  这是Spark自己将运行时候需要依赖的Java包上传到HDFS上,而且每次运行Spark Application的时候都会上传,这时候你会发现你的hdfs://mycluster/user/iteblog/.sparkStaging目录下面存在了大量的Jar文件,这最少存在两个不好的地方:
  1、每次上传Jar文件,多少也会影响到程序的运行速度;
  2、当在HDFS中上传了大量的Jar文件,这会产生大量的小文件,会对HDFS有影响。
  所以我们想是否可以在HDFS上面建立一个公共的lib库存放目录,每次运行Spark的时候,只要我们程序依赖的Jar包存在HDFS中的lib库中,那么这时候我们就不上传该Jar。其实是可以的。我们可以通过配置相应的环境变量实现,步骤如下:

bin/hadoop fs -mkdir /home/iteblog/spark_lib
bin/hadoop fs -put  spark-assembly- 1.1 . 0 -hadoop2. 2.0 .jar
                  /home/iteblog/spark_lib/spark-assembly- 1.1 . 0 -hadoop2. 2.0 .jar

然后编辑spark-default.conf文件,添加以下内容:

spark.yarn.jar=hdfs: //my/home/iteblog/spark_lib/spark-assembly-1.1.0-hadoop2.2.0.jar
以上配置为原文,下面是自己给出的
spark.yarn.jar hdfs://jar包位置  (spark默认为空格设置参数名参数值)

也就是使得spark.yarn.jar指向我们HDFS上的Spark lib库。
然后你再去提交应用程序

./bin/spark-submit -- class org.apache.spark.examples.SparkPi \
     --master yarn-cluster \
     --num-executors 3 \
     --driver-memory 512m \
     --executor-memory 2g \
     --executor-cores 1 \
     lib/spark-examples*.jar \
     10

  你可以看到日志里面已经不需要上传spark-assembly-1.1.0-hadoop2.2.0.jar文件了。

根据Cloudera 官方博客说明,如果你用的是Cloudera Manager,那么Spark assembly JAR 会自动地上传到HDFS,比如上面的hdfs://my/home/iteblog/spark_lib/目录。但是我没安装那个,如果你安装了可以试试。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值