
#社区sparkthrift对接开kerberos的cdp/cdh的metastore,也开启了ssl。
#ps:都自己对接过了。按照下面的文档ok。
#首先除了先搭建好的cdp外,另外搭建一台机器,上面只需要hadoop的客户端和spark、kerberos客户端即可。
yum install krb5-workstation krb5-libs krb5-auth-dialog
kerberos客户端需要修改,和对应cdp集群的保持一致。
PS:一般是修改/etc/krb5.conf这个客户端配置即可。
#hadoop客户端的core-site.xml hdfs-site.xml yarn-site.xml记得需要更换成对接集群的文件
PS:这里放hadoop文件是为了能使用hdfs命令,如果不需要的话就不用改,因为spark的conf里面只需要hive-site.xml。
spark的conf下hive-site.xml配置:
#在单独的spark tirift机器里面的hive-site.xml的配置的话只要修改thrift为cdp/cdh集群的,并且新增kerberos和ssl的配置,其他配置默认的就ok。
#修改
<property>
<name>hive.metastore.uris</name>
<value>thrift://cdp02:9083</value>
<description>Thrift URI for the remote metastore. Used by metastore client to connect to remote metastore.</description>
</property>
#新增/修改
#如果是spark的thrift不开启kerberos的话,下面的hiveserver2相关配置去掉就好。我下面的配置是因为hive的metastore和这个thrift都需要开启kerberos。
<property>
<name>hive.metastore.sasl.enabled</name>
<value>true</value>
</property>
<property>
<name>hive.server2.authentication</name>
<value>kerberos</value>
</property>
<property>
<name>hive.metastore.kerberos.principal</name>
<value>hive/cdp02@DTSTACK.COM</value>
</property>
<property>
<name>hive.server2.authentication.kerberos.keytab</name>
<value>/opt/dtstack/Spark/spark_pkg/conf/hive.keytab</value>
</property>
<property>
<name>hive.metastore.kerberos.keytab.file</name>
<value>/opt/dtstack/Spark/spark_pkg/conf/hive.keytab</value>
</property>
<property>
<name>hive.server2.authentication.kerberos.principal</name>
<value>hive/cdp02@DTSTACK.COM</value>
</property>
#以上的票据必须从cdp集群拷贝过来,而且需要注意metastore是否在这台机器,拷贝好princpal文件即可。
启动#spark thrift可开kerberos也可不开,开关在于启动参数,还有个hive-site.xml配置文件需要修改,参考下方配置即可。启动命令的话各式各样,比如我的是下面这个:
"${SPARK_HOME}"/bin/spark-submit --class "$command" --name 'Thrift JDBC/ODBC Server' --conf "spark.driver.extraJavaOptions=-javaagent:./dtstack/prometheus/jmx_prometheus_javaagent-0.3.1.jar=9508:./dtstack/prometheus/spark-prometheus.yml" --conf spark.driver.memory=2G --executor-memory 1G --num-executors 2 --name=ThriftServer02 --principal hive/cdp02@DTSTACK.COM --keytab /opt/dtstack/Spark/spark_pkg/conf/hive.keytab --driver-java-options "-XX:HeapDumpPath=./logs/thriftserver_heap.hprof -XX:+HeapDumpOnOutOfMemoryError -XX:+ExitOnOutOfMemoryError -XX:+UseGCLogFileRotation -Xloggc:./logs/spark_thriftserver_gc.log -XX:NumberOfGCLogFiles=2 -XX:GCLogFileSize=256M -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintHeapAtGC -XX:+PrintGCApplicationStoppedTime -XX:+PrintGCApplicationConcurrentTime -Dlog4j.configuration=file:/opt/dtstack/Spark/spark_pkg/conf/log4j.properties -Dapp.logging.name=$logname " >> "${log}" 2>&1 < /dev/null
#其他参数都ok
遇到的问题问题一:
#spark的conf里面需要hdfs-site.xml core-site.xml hive-site.xml yarn-site.xml。
#如果缺少了yarn-site.xml的话,thrift查询会报错如下:
java.io.IOException: Can’t get Master Kerberos principal for use as renewer
PS:这一步是我之前第一次遇到的报错了,我现在已经不确定是否能够复现。因为第二次也是放东西进去了。如果报错的话就这样 *** 作吧。因为按理来说spark conf下是不需要hdfs yarn这些配置的,我没有二次验证记不清楚了也不想再验证下,麻烦。
问题二:
#当然我插入创建表的时候也遇到过问题,原因是thrift初始化的时候去创建hdfs目录了,用的是root去创建,但是我hive的warehouse是hive。所以创建stage的时候就会两头报错(因为两个hdfs目录不同)。所以我在spark的spark-env.sh里面开头加上了
export HADOOP_USER_NAME=hive
#当然这是没有开kerberos的情况下。
#这样的话thrift初始化的时候创建的是hive目录
问题三:
#死活报gss认证问题,烦我很久。
原因是jdk的jre/lib/security下的jar包需要更换。local_policy.jar和US_export_policy.jar需要替换掉。是java的问题。这个对应jar我貌似上传不了附件,可以自己找下。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)