FusionInsight HD C60 spark程序访问solr,报没权限错误

发布时间:  2016-10-17 浏览次数:  331 下载次数:  0
问题描述

1、spark应用在map阶段完成数据处理后,未经过reduce直接将数据入库到solr时失败。

2、在solr日志中发现:数据从spark写入到solr使用的是spark的内置账户,而该账户,对solr,没有读写权限。

处理过程
在客户端配置文件中:/opt/client/Spark/spark/conf/spark-defaults.conf

发现:
参数spark.executor.extraJavaOptions配置为:-Djava.security.auth.login.config=/opt/huawei/Bigdata/FusionInsight/spark/cfg/jaas-zk.conf

而jaas-zk.conf文件配置如下:

Client {
com.sun.security.auth.module.Krb5LoginModule  required
useKeyTab=true
keyTab="/opt/huawei/Bigdata/FusionInsight_V100R002C60SPC200/etc/1_14_SparkResource/spark_zk.keytab"
principal="spark_zk/hadoop.hadoop.com"
useTicketCache=false
storeKey=true
debug=true;
};

文件中说明,执行器中使用的用户为内置的用户:spark_zk

【修改思路】

(1)增加spar_zk内置账户对solr的访问权限或者使用有权限的业务账户。
(2)修改文档、并提供应用程序样例代码,提示用户在改场景下需要修改账户。
根因

实际访问Solr的时候是用的spark的内置账户,而这个账户没有对solr 的访问权限。

理论上使用客户端访问Solr的时候应该用solr的账户。

解决方案
【规避方案】

1、从用户管理下载新业务账户的keytab来替换系统中原有的keytab文件。

2、在每个节点上都放上一份用户的keytab,以及自定义的jaas-zk.conf,并设置到spark客户端参数中。

参数spark.executor.extraJavaOptions配置如下:-Djava.security.auth.login.config=/opt/huawei/jaas-zk.conf

END