如何通过Cloudera Manager配置Spark1和Spark2的运行环境

温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。

1.文档编写目的


大部分用户在使用CDH集群做Spark开发的时候,由于开发环境的JDK版本比CDH集群默认使用的JDK1.7.0_67-cloudera版本新,可能会出现Spark代码依赖的Java API不兼容问题,解决这个问题方法有两个:一是升级CDH集群的JDK版本;二是指定Spark运行环境JDK版本。本文章主要讲述如何通过Cloudera Manager来指定Spark1和Spark2的运行环境(包含JDK环境、Spark Local Dir等的配置)。

  • 内容概述

1.部署JDK

2.CM配置Spark运行环境

  • 测试环境

1.CDH集群服务正常

2.CM和CDH版本为5.11.2

3.集群启用了Kerberos

4.Spark On Yarn模式

2.部署JDK


本文章使用的jdk1.8.0_151进行说明,可以根据你自己开发环境JDK版本进行调整。

将需要的JDK版本部署到集群所有节点,此处配置以一个节点为例

[ec2-user@ip-172-31-21-45 jdk1.8]$ sudo tar -zxvf jdk-8u151-linux-x64.tar.gz
[ec2-user@ip-172-31-21-45 java]$ cd jdk1.8.0_151/
[ec2-user@ip-172-31-21-45 jdk1.8.0_151]$ pwd
/usr/java/jdk1.8.0_151
[ec2-user@ip-172-31-21-45 java]$ ll

注意:JDK的HOME目录必须统一,这样方便在Cloudera Manager统一管理配置。

3.CM配置Spark运行环境


1.登录Cloudera Manager平台,进入Spark服务,添加spark-env.sh配置

注意:每个配置占用一行。

2.保存配置,回到主页根据CM提示,重新部署Spark客户端配置

完成以上配置,那么接下来在执行spark作业的时候,就会默认的使用指定的环境变量。

注意:这里我们指定了SPARK_LOCAL_DIRS这个配置,如果在目录不存在的时候则需要自己在集群创建相应的目录,且需要赋权为777

[ec2-user@ip-172-31-22-86 ~]$ sudo mkdir -p /mnt/disk1/sparktmp1
[ec2-user@ip-172-31-22-86 ~]$ sudo chmod 777 /mnt/disk1/sparktmp1/
[ec2-user@ip-172-31-22-86 ~]$

该目录只需要在使用yarn-client模式提交Spark时Driver所在节点存在即可。

3.运行Spark作业测试

[ec2-user@ip-172-31-22-86 ~]$ spark-submit --master yarn-client\
>   --num-executors 4 --driver-memory 1g\
>   --driver-cores 1 --executor-memory 1g\
>   --executor-cores 2\
>   --class org.apache.spark.examples.SparkPi /opt/cloudera/parcels/CDH/lib/spark/examples/lib/spark-examples-1.6.0-cdh5.11.2-hadoop2.6.0-cdh5.11.2.jar 
...
17/10/23 08:39:05 INFO zookeeper.ZooKeeper: Client environment:java.version=1.8.0_151
17/10/23 08:39:05 INFO zookeeper.ZooKeeper: Client environment:java.vendor=Oracle Corporation
17/10/23 08:39:05 INFO zookeeper.ZooKeeper: Client environment:java.home=/usr/java/jdk1.8.0_151/jre
...

可以看到Spark作业使用的是我们指定的JDK1.8版本。

4.总结


通过CM可以方便的指定Spark1和Spark2的运行环境变量,对于指定JDK版本,则需要在所有的Spark Gateway节点统一目录下部署需要的JDK版本(目录统一方便CM管理,由于CM不支持对单个Spark Gateway节点进行配置)。如果集群启用了Kerberos则需要为JDK安装JCE的支持。

上述文章中还讲述了配置SPARK_LOCAL_DIRS目录,在使用yarn-client模式提交Spark作业时会在Driver所在服务的/tmp目录生成作业运行临时文件,由于/tmp目录空间有限可能会造成作业运行时无法创建临时文件从而导致作业运行失败,因此需要对此参数进行调整,确保多个Spark作业运行时临时文件所需要的空间足够大(注意:该目录必须存在且权限为777)。在使用yarn-cluster模式提交Spark作业时,会默认使用Yarn的yarn.nodemanager.local-dirs配置。

5.常见问题


1.在执行Spark作业的时候报错

Caused by: java.io.IOException: javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)]
        at org.apache.hadoop.ipc.Client$Connection$1.run(Client.java:718)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Subject.java:422)
        at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1920)
        at org.apache.hadoop.ipc.Client$Connection.handleSaslConnectionFailure(Client.java:681)
        at org.apache.hadoop.ipc.Client$Connection.setupIOstreams(Client.java:769)
        at org.apache.hadoop.ipc.Client$Connection.access$3000(Client.java:396)
        at org.apache.hadoop.ipc.Client.getConnection(Client.java:1557)
        at org.apache.hadoop.ipc.Client.call(Client.java:1480)
        ... 31 more

原因:由于集群启用了Kerberos,Spark运行环境指定的JDK没有安装JCE导致。

解决方法:

  • 从oracle官网下载相应JDK版本的JCE文件

http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html

  • 将jce_policy-8.zip压缩包文件解压,覆盖至/usr/java/jdk1.8.0_151/jre/lib/security

醉酒鞭名马,少年多浮夸! 岭南浣溪沙,呕吐酒肆下!挚友不肯放,数据玩的花! 温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。


推荐关注Hadoop实操,第一时间,分享更多Hadoop干货,欢迎转发和分享。

原创文章,欢迎转载,转载请注明:转载自微信公众号Hadoop实操

原文发布于微信公众号 - Hadoop实操(gh_c4c535955d0f)

原文发表时间:2017-10-24

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Hadoop实操

如何在Kerberos环境下的CDH集群部署Spark1.6 Thrift及spark-sql客户端

25130
来自专栏Hadoop实操

如何使用R连接Hive与Impala

继之前的文章讲述如何在Redhat中配置R环境和如何在Redhat中安装R的包及搭建R的私有源后,那我们如何使用R连接CDH集群中的Hive和Impala进行数...

65760
来自专栏云计算

在Hadoop YARN群集之上安装,配置和运行Spark

Spark是一种通用的集群计算系统。它可以在从单个节点到数千个分布式节点的集群上部署和运行并行应用程序。Spark最初设计用于运行Scala应用程序,但也支持J...

61310
来自专栏Hadoop实操

如何获取Hive正在执行或者已结束的的MapReduce作业的SQL语句

当我们提交Hive SQL语句到YARN后,有时如果我们想监控某个SQL的执行情况,需要查看具体SQL语句,如果这个SQL语句比较长,无论是通过YARN的808...

99550
来自专栏Hadoop实操

Python3环境通过JDBC访问非Kerberos环境的Hive

在前面Fayson介绍了在Python2的环境下《如何使用Python Impyla客户端连接Hive和Impala》,本篇文章Fayson主要介绍在Pytho...

25710
来自专栏北京马哥教育

Hadoop 2.0中作业日志收集原理以及配置方法

Hadoop 2.0提供了跟1.0类似的作业日志收集组件,从一定程度上可认为直接重用了1.0的代码模块,考虑到YARN已经变为通用资源管理平台,因此,提供一个通...

44860
来自专栏Hadoop实操

如何在Kerberos环境下使用Spark2通过JDBC访问Impala

32120
来自专栏Hadoop实操

如何使用Oozie API接口向非Kerberos环境的CDH集群提交Spark作业

在CDH集群外的节点向集群提交Spark作业的方式有多种,前面Fayson介绍了Livy相关的文章主要描述如何在集群外节点通过RESTful API接口向CDH...

35670
来自专栏简单聊聊Spark

Spark内核分析之spark作业的三种提交方式

        最近在研究Spark源码,顺便记录一下,供大家学习参考,如有错误,请批评指正。好,废话不多说,这一篇先来讲讲Spark作业提交流程的整体架构。

24210
来自专栏大数据学习笔记

Hadoop基础教程-第12章 Hive:进阶(12.4 Hive Metastore)(草稿)

第12章 Hive:进阶 12.4 Hive Metastore 12.4.1 三种配置方式 Hive Metastore有三种配置方式,分别是: Embedd...

51770

扫码关注云+社区

领取腾讯云代金券