专栏首页Hadoop实操如何在Kerberos环境下的CDH集群部署Spark1.6 Thrift及spark-sql客户端

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

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

Fayson的github: https://github.com/fayson/cdhproject

提示:代码块部分可以左右滑动查看噢

1.文档编写目的


在前面的文章Fayson介绍了《如何在CDH中启用Spark Thrift》,本篇文章Fayson主要介绍如何在Kerberos环境下的CDH集群中部署Spark1.6的Thrift Server服务和Spark SQL客户端。

  • 内容概述

1.部署Spark Thrift

2.启动与停止Spark Thrift

3.功能验证及总结

  • 测试环境

1.CM和CDH版本为5.12.1

2.使用root用户操作

  • 前置条件

1.集群已启用Kerberos

2.集群已启用Sentry

2.部署Spark Thrift


在CDH自带的Spark1.6的spark-assembly jar包缺少Hive Thrift的相关依赖包,这里部署Spark Thrift服务需要使用Spark官网编译的spark-assembly jar包来替换集群中原有的jar包。

1.下载spark-1.6.0-bin-hadoop2.6.tgz,官网下载地址如下:

https://archive.apache.org/dist/spark/spark-1.6.0/spark-1.6.0-bin-hadoop2.6.tgz

(可左右滑动)

2.将下载的spark-1.6.0-bin-hadoop2.6.tgz包解压

[root@cdh04 ~]# tar -zxvf spark-1.6.0-bin-hadoop2.6.tgz 

(可左右滑动)

3.将解压出来的spark-assembly-1.6.0-hadoop2.6.0.jar包拷贝至CDH的jars目录下

[root@cdh04 ~]# cd spark-1.6.0-bin-hadoop2.6/lib
[root@cdh04 lib]# cp spark-assembly-1.6.0-hadoop2.6.0.jar /opt/cloudera/parcels/CDH/jars/

(可左右滑动)

替换CDH中默认的Spark-assembly jar包

[root@cdh04 jars]# cd /opt/cloudera/parcels/CDH/jars/
[root@cdh04 jars]# rm -rf spark-assembly-1.6.0-cdh5.12.1-hadoop2.6.0-cdh5.12.1.jar
[root@cdh04 jars]# mv spark-assembly-1.6.0-hadoop2.6.0.jar spark-assembly-1.6.0-cdh5.12.1-hadoop2.6.0-cdh5.12.1.jar

(可左右滑动)

注意:该步操作在集群所有节点上执行,因为考虑到后面部署spark-sql客户端,需要所有节点的spark-assessmbly jar包支持Thrift Server。

4.将spark-assembly-1.6.0-hadoop2.6.0.jar包上传至HDFS目录

[root@cdh04 lib]# kinit spark/admin
[root@cdh04 lib]# hadoop fs -mkdir -p /user/spark/share/jars
[root@cdh04 lib]# hadoop fs -put spark-assembly-1.6.0-hadoop2.6.0.jar /user/spark/share/jars
[root@cdh04 lib]# hadoop fs -ls /user/spark/share/jar

(可左右滑动)

5.通过CM修改Spark的配置

配置spark_jar_hdfs_path路径

配置GateWay使用spark.yarn.jar

spark.yarn.jar=hdfs://nameservice1/user/spark/share/jars/spark-assembly-1.6.0-hadoop2.6.0.jar

(可左右滑动)

配置Spark的JAVA_HOME和Spark血缘分析依赖包

export JAVA_HOME=/usr/java/jdk1.8.0_144/
export SPARK_DIST_CLASSPATH=$SPARK_DIST_CLASSPATH:/opt/cloudera/parcels/CDH/jars/spark-lineage_2.10-1.6.0-cdh5.12.1.jar

(可左右滑动)

注意:这里配置sparke-env.sh时增加了SPARK_DIST_CLASSPATH配置参数,在CDH5.11版本后,Navigator2.10中增加了Spark的血缘分析,需要在spark中添加spark-lineage_2.10-1.6.0-cdh5.12.1.jar依赖包,否则Thrift启动会报

“com.cloudera.spark.lineage.ClouderaNavigatorListener”

错误。前面《如何在CDH中启用Spark Thrift》处理方式是在/etc/spark/conf/classpath.txt文件末尾增加依赖,这种配置方式在修改Spark客户端配置后会被覆盖,需要重新手动加入。通过使用SPARK_DIST_CLASSPATH的配置方式可以避免该问题。

6.部署Spark Thrift启动和停止脚本

将spark-1.6.0-bin-hadoop2.6/sbin/目录下的start-thriftserver.sh和stop-thriftserver.sh脚本拷贝至/opt/cloudera/parcels/CDH/lib/spark/sbin目录下,并设置执行权限

[root@cdh04 ~]# cd spark-1.6.0-bin-hadoop2.6/sbin/
[root@cdh04 sbin]# pwd
[root@cdh04 sbin]# ll *thrift*
[root@cdh04 sbin]# cp *thrift* /opt/cloudera/parcels/CDH/lib/spark/sbin/

(可左右滑动)

修改load-spark-env.sh脚本,该脚本是启动Spark相关服务加载依赖环境

[root@cdh04 sbin]# cd /opt/cloudera/parcels/CDH/lib/spark/bin/
[root@cdh04 bin]# vim load-spark-env.sh 

(可左右滑动)

将80行的exec "$SPARK_HOME/bin/$SCRIPT" "$@"内容注释

7.部署Spark SQL客户端

将spark-1.6.0-bin-hadoop2.6/bin/目录下的spark-sql脚本拷贝至/opt/cloudera/parcels/lib/spark/bin目录下

[root@cdh04 ~]# cp spark-1.6.0-bin-hadoop2.6/bin/spark-sql /opt/cloudera/parcels/CDH/lib/spark/bin/

(可左右滑动)

3.启动与停止Spark Thrift


1.由于集群启用Kerberos,这里我们需要为Spark Thrift服务创建一个Kerberos账号

在KDC所在服务器上执行如下命令创建一个hive/cdh04.fayson.com@FAYSON.COM账号,并导出hive.keytab文件

[root@cdh01 ~]# kadmin.local 
kadmin.local:  addprinc -randkey hive/cdh04.fayson.com@FAYSON.COM
kadmin.local:  xst -norandkey -k hive.keytab hive/cdh04.fayson.com@FAYSON.COM

(可左右滑动)

查看本地的hive.kytab文件是否为导出的hive/cdh04.fayson.com@FAYSON.COM账号

[root@cdh01 ~]# klist -e -kt hive.keytab 

(可左右滑动)

将hive.keytab文件拷贝至SparkThriftServer服务所在服务器。

2.进入/opt/cloudera/parcels/CDH/lib/spark/sbin目录下执行脚本启动Thrift Server

./start-thriftserver.sh --hiveconf hive.server2.authentication.kerberos.principal=hive/cdh04.fayson.com@FAYSON.COM \
  --hiveconf hive.server2.authentication.kerberos.keytab=hive.keytab \
  --principal hive/cdh04.fayson.com@FAYSON.COM --keytab hive.keytab \
  --hiveconf hive.server2.thrift.port=10001 \
  --hiveconf hive.server2.thrift.bind.host=0.0.0.0

(可左右滑动)

检查端口是否监听

[root@cdh04 sbin]# netstat -apn |grep 10001

(可左右滑动)

注意:为了防止和HiveServer2的10000端口冲突,可以在启动脚本中增加如下配置自定义端口,端口默认绑定的地址为127.0.0.1,不能远程访问需要将指定绑定host,0.0.0.0为监听所有IP地址。在启动Thrift Server时指定principal和keytab否则服务启动时会报初始化Kerberos失败。

通过CM的Yarn应用程序界面可以看到启动的ThriftServer服务

3.停止Spark ThriftServer服务

[root@cdh04 sbin]# ./stop-thriftserver.sh

(可左右滑动)

4.验证Spark Thrift及spark-sql


1.使用fayson的Kerberos账号初始化,通过beeline测试

[root@cdh01 ~]# kinit fayson
[root@cdh01 ~]# klist
[root@cdh01 ~]# beeline 
beeline> !connect jdbc:hive2://cdh04.fayson.com:10001/;principal=hive/cdh04.fayson.com@FAYSON.COM

(可左右滑动)

上图可以看到成功使用Beeline连接Spark ThriftServer。

2.运行SQL测试

0: jdbc:hive2://cdh04.fayson.com:10001/> show tables;
0: jdbc:hive2://cdh04.fayson.com:10001/> select * from test;
0: jdbc:hive2://cdh04.fayson.com:10001/> select count(*) from test;
0: jdbc:hive2://cdh04.fayson.com:10001/> 

(可左右滑动)

3.通过Yarn的8088界面查看SQL操作都是通过Spark执行

4.spark-sql验证

[root@cdh04 ~]# kint fayson
[root@cdh04 ~]# /opt/cloudera/parcels/CDH/lib/spark/bin/spark-sql

(可左右滑动)

执行SQL操作

5.总结


1.在Kerberos环境下部署Spark Thrift服务时在启动时需要执行prinicipal和keytab文件,该Kerberos账号需要为hive用户。

2.在处理Spark 血缘分析依赖包的时候,Fayson前面的文章是在/etc/spark/confg/classpath.txt文件中添加,在修改配置后该文件会被覆盖需要再次添加依赖,本篇文章通过在spark-evn.sh环境变量中配置SPARK_DIST_CLASSPATH解决。

3.使用spark-sql客户端需要将集群所有节点CDH自带的spark-assembly Jar包替换为原生的spark-assembly-1.6.0-hadoop2.6.0.jar包。

提示:代码块部分可以左右滑动查看噢

为天地立心,为生民立命,为往圣继绝学,为万世开太平。 温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。

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

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

本文分享自微信公众号 - Hadoop实操(gh_c4c535955d0f),作者:Fayson

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-05-25

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 0654-6.2.0-如何通过CM API获取集群事件并入库到MySQL

    Fayson在本文中介绍如何通过shell 和python 脚本获取CM中重要的告警信息,以便更方便的掌握和分析集群以及集群中节点和服务的健康状况。

    Fayson
  • 如何在CDH中启用Spark Thrift

    CDH 自带的Spark 不支持Spark Thrift,因为spark-assembly jar中缺少Hive thrift相关的依赖包,导致CDH用户没法使...

    Fayson
  • PySpark启动过程解密

    作为数据工程师,你可能会碰到过很多种启动PySpark的方法,可能搞不懂这些方法有什么共同点、有什么区别,不同的方法对程序开发、部署有什么影响,今天我们一起分析...

    Fayson
  • Day61:序列化二叉树

    思路一:   序列化就是按照前序遍历的顺序将其输出为一个字符串,节点为空则用#代替,反序列化就是讲一个字符串恢复成为一个树。接下来我们分别用java将其实现:

    stefan666
  • 使用pscp从windows电脑拷贝数据到linux遇到的ssh_init错误

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    Jerry Wang
  • SAP CRM系统订单模型的设计与实现

    版权声明:本文为博主汪子熙原创文章,未经博主允许不得转载。 https://jerry.blog....

    Jerry Wang
  • CentOS7修改主机名

    本文由 bytebye 创作 本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名

    ByteBye
  • CSE lab7 RPC 攻略

    part A marshall: 通过观察可以得知,所有无符号的整形的实现相当于从高位到低位的每个字节依次调用rawb...

    ApacheCN_飞龙
  • VR社交大势已成,但这些技术难关还需被解决

    VRPinea
  • PHP call_user_func和call_user_func_array函数的简单理解与应用分析

    本文实例讲述了PHP call_user_func和call_user_func_array函数的简单理解与应用。分享给大家供大家参考,具体如下:

    砸漏

扫码关注云+社区

领取腾讯云代金券