前言
由于我们在调研是否让自建IDC大数据机房上云服务,所以华为云进行一下测试。
问题一:impala的连接问题
由于我们开启了Kerberos
,所以我们在终端执行impala-shell
的时候,默认情况下是连不上的。需要通过Kerberos
进行身份校验
和授权
才可以访问。
我们创建了一个名字叫hiveuser
的账号,目前所有的组件服务都通过该账号进行访问。
所以我们需要初始化和续期凭据
1 | [root@node-str-coreoVpr ~]# impala-shell |
可以看到,我们是连不上的。
1 | [root@node-str-coreoVpr ~]# kinit hiveuser@122451B2_394D_494B_9FCA_B045F596D6D4.COM |
再次尝试连接
1 | [root@node-str-coreoVpr ~]# impala-shell -i node-ana-coretXnL |
可以看到,已经可以连接上了。
问题一:flume && kudu
目前,我们对基本配置如下:
服务 | 版本 |
---|---|
flume | 1.6 |
kudu | 1.9 |
Kerberos
由于flume官方没有提供对应的sink。但是kudu有提供,所以我去找了kudu的sink的jar库下来。而版本对应嘛,一开始我们使用和kudu一样的1.9版本,发现api对应不上。查阅了资料之后,选择了1.4版本。
需要把jar包放在 java运行程序的 classpath目录下
,也就是 -cp 参数的目录下
。由于不想通过修改GC_OPTS
来指定目录,所以我选择了放在 /opt/Bigdata/MRS_2.1.0/install/FusionInsight-Flume-1.6.0/flume/lib/*
目录下。
可是谁曾想最后还要是动到
GC_OPTS
到参数配置
还是类似的问题,目前遇到的问题几乎都是 Kerberos
引起的。因为以往我们并没有使用 Kerberos
作为身份认证。
1 | # =================================================== |
测试的时候所采用的配置如上
1 | omm 17051 1 0 11:31 ? 00:00:09 /opt/Bigdata/jdk1.8.0_212//bin/java -XX:OnOutOfMemoryError=bash /opt/Bigdata/MRS_2.1.0/install/FusionInsight-Flume-1.6.0/flume/bin/out_memory_error.sh /opt/Bigdata/MRS_2.1.0/1_7_Flume/etc %p -Xms2G -Xmx4G -XX:CMSFullGCsBeforeCompaction=1 -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -Djava.security.krb5.conf=/opt/Bigdata/MRS_2.1.0/1_7_Flume/etc/krb5.conf -Djava.security.auth.login.config=/opt/Bigdata/MRS_2.1.0/1_7_Flume/etc/jaas.conf -Dzookeeper.request.timeout=120000 -Djavax.security.auth.useSubjectCredsOnly=false -verbose:gc -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=1M -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/var/log/Bigdata/flume//flume/flume-omm-20210106113125-%p-gc.log -Djava.security.krb5.conf=/opt/Bigdata/MRS_2.1.0/1_5_KerberosClient/etc/kdc.conf -Djava.security.auth.login.config=/opt/Bigdata/MRS_2.1.0/1_7_Flume/etc/jaas.conf -Dzookeeper.server.principal=zookeeper/hadoop.122451b2_394d_494b_9fca_b045f596d6d4.com -Dzookeeper.request.timeout=120000 -Dsolrclient.token.enabled=false -Dcom.amazonaws.sdk.disableCertChecking=true -Dnet.sf.ehcache.skipUpdateCheck=true -Dflume.instance.id=1000 -Dflume.role=server -Dlog4j.configuration.watch=true -Dlog4j.configuration=log4j.properties -Dflume_log_dir=/var/log/Bigdata/flume//flume/ -Dflume.monitoring.type=http -Dflume.monitoring.port=21150 -Dbeetle.application.home.path=/opt/Bigdata/MRS_2.1.0/install/FusionInsight-Flume-1.6.0/flume/conf/service -Dflume.called.from.service -Dflume.conf.dir=/opt/Bigdata/MRS_2.1.0/1_7_Flume/etc -Dflume.metric.conf.dir=/opt/Bigdata/MRS_2.1.0/install/FusionInsight-Flume-1.6.0/flume/conf -Dflume.script.home=/opt/Bigdata/MRS_2.1.0/install/FusionInsight-Flume-1.6.0/flume/bin -cp /opt/Bigdata/MRS_2.1.0/1_7_Flume/etc:/opt/Bigdata/MRS_2.1.0/install/FusionInsight-Flume-1.6.0/flume/lib/*:/opt/Bigdata/MRS_2.1.0/install/FusionInsight-Flume-1.6.0/flume/conf/service/ -Djava.library.path=/opt/Bigdata/MRS_2.1.0/install/FusionInsight-Flume-1.6.0/flume/plugins.d/native/native org.apache.flume.node.Application --conf-file /opt/Bigdata/MRS_2.1.0/1_7_Flume/etc/properties.properties --name server |
启动的参数如上,其中有几个参数是我后面加的:
- -Djava.security.krb5.conf=/opt/Bigdata/MRS_2.1.0/1_7_Flume/etc/krb5.conf (指定krb5的配置文件路径)
- -Djava.security.auth.login.config=/opt/Bigdata/MRS_2.1.0/1_7_Flume/etc/jaas.conf (获取jass的认证配置文件路径)
- -Dzookeeper.request.timeout=120000
- -Djavax.security.auth.useSubjectCredsOnly=false (通过底层获取凭据)
1 | [root@node-str-coreoVpr ~]# cat /opt/Bigdata/MRS_2.1.0/1_7_Flume/etc/jaas.conf |
由于华为云自己修改过部分组件,所以不太确定为什么凭据一直失败,所以我加了 -Djavax.security.auth.useSubjectCredsOnly=false
参数,这是让我们从底层去拿凭据,而默认拿的section
部分就是 com.sun.security.jgss.initiate
详见源码,所以加上了 com.sun.security.jgss.initiate
之后,flume就可以连接上了kudu.
以下是我调试的时候遇到的问题。
GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos Ticket) Cause: This may occur if no valid Kerberos credentials are obtained. In particular, this occurs if you want the underlying mechanism to obtain credentials but you forgot to indicate this by setting the javax.security.auth.useSubjectCredsOnly system property value to false (for example via -Djavax.security.auth.useSubjectCredsOnly=false in your execution command).
GSSException: No valid credentials provided (Mechanism level: Attempt to obtain new INITIATE credentials failed! (null)) . . . Caused by: javax.security.auth.login.LoginException: Clock skew too great Cause: Kerberos requires the time on the KDC and on the client to be loosely synchronized. (The default is within 5 minutes.) If that’s not the case, you will get this error.
附上 jgss 的异常尝试解决方案官方文档, PS:反正我根据文档没解决,不知道是不是华运自己修改的部分有什么潜规则。所以我才采用默认的jass配置。
1 | 2021-01-06 11:31:26,235 | INFO | [lifecycleSupervisor-1-0] | Configuration provider starting | org.apache.flume.node.PollingPropertiesFileConfigurationProvider.start(PollingPropertiesFileConfigurationProvider.java:61) |
可以看到,sink启动成功。
记录几个需要用到的命令:
同步kudu-flume-sink到各flume节点
1 | str_nodes="node-str-corelgoh node-str-corenydJ node-str-coreoVpr";for ip in $(echo ${str_nodes});do scp /opt/Bigdata/MRS_2.1.0/install/FusionInsight-Flume-1.6.0/flume/lib/kudu-flume-sink-1.4.0.jar ${ip}:/opt/Bigdata/MRS_2.1.0/install/FusionInsight-Flume-1.6.0/flume/lib/;ssh ${ip} 'chmod 751 /opt/Bigdata/MRS_2.1.0/install/FusionInsight-Flume-1.6.0/flume/lib/kudu-flume-sink-1.4.0.jar && chown omm:ficommon /opt/Bigdata/MRS_2.1.0/install/FusionInsight-Flume-1.6.0/flume/lib/kudu-flume-sink-1.4.0.jar';done |
修改对应的jass配置 和 凭据信息同步
1 | str_nodes="node-str-corelgoh node-str-corenydJ node-str-coreoVpr";for ip in $(echo ${str_nodes});do scp /tmp/krb5.conf ${ip}:/opt/Bigdata/MRS_2.1.0/1_7_Flume/etc/; scp /tmp/user.keytab ${ip}:/opt/Bigdata/MRS_2.1.0/1_7_Flume/etc/;ssh ${ip} "sed -i -e '/principal/s/flume/hiveuser/g' -e '/keyTab/s/\/opt\/Bigdata\/MRS_2.1.0\/install\/FusionInsight-Flume-1.6.0\/flume\/conf\/flume.keytab/\/opt\/Bigdata\/MRS_2.1.0\/1_7_Flume\/etc\/user.keytab/g' -e '/^Client/s/Client/com.sun.security.jgss.initiate/g' /opt/Bigdata/MRS_2.1.0/1_7_Flume/etc/jaas.conf;chown omm:wheel /opt/Bigdata/MRS_2.1.0/1_7_Flume/etc/jaas.conf;chown -R omm:wheel /opt/Bigdata/MRS_2.1.0/1_7_Flume/etc/";done |
这个不是命令,但是是记得最新的GC_OPTS参数
1 | -Xms2G -Xmx4G -XX:CMSFullGCsBeforeCompaction=1 -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -Djava.security.krb5.conf=/opt/Bigdata/MRS_2.1.0/1_7_Flume/etc/krb5.conf -Djava.security.auth.login.config=/opt/Bigdata/MRS_2.1.0/1_7_Flume/etc/jaas.conf -Dzookeeper.request.timeout=120000 |