-
CDH添加高hdfs高可用后,hive,impala查询报错
0: jdbc:hive2://localhost:10000/> select count(1) from person;
Error: Error while compiling statement: FAILED: SemanticException Unable to determine if hdfs://bi-master:8020/user/hive/warehouse/gtp.db/person is encrypted: java.lang.IllegalArgumentException: Wrong FS: hdfs://bi-master:8020/user/hive/warehouse/gtp.db/person, expected: hdfs://nameservice1 (state=42000,code=40000)
解决办法:
1.进入Hive服务并停止Hive的所有服务
2.点击 “操作” => "点击“更新Hive Metastore NameNode” =>“重启”
3.重启impala
4.假如有安装hue的话,
-
hdfs添加HttpFS角色
-
hue配置
这样就能保证hue能找到正确的namenode
-
CDH集成kerberos后,hbase赋权报语法错误
一般这种情况是因为hbase:acl表丢失了
-
点击Hbase Web UI入口
-
查看hbase:acl
- 假如hbase:acl不存在的话, 进入zookeeper相应目录删除/hbase目录
- 注意:相应的目录得由相应的principal来操作, 否则会报 Authentication isnot valid (zkclient可通过getAcl 查看权限)
- 解决办法:
1.获取要删除的注册目录的ACL
[root@bi-master ~]# zookeeper-client -server bi-master:2181
Connecting to bi-master:2181
....
[zk: bi-master:2181(CONNECTED) 1]
[zk: bi-master:2181(CONNECTED) 1] ls /
[cluster, controller, brokers, znode001, zookeeper, hadoop-ha, admin, isr_change_notification, dubbo, otter, controller_epoch, consumers, hive_zookeeper_namespace_hive, latest_producer_id_block, config, hbase]
[zk: bi-master:2181(CONNECTED) 2] getAcl /hbase
'world,'anyone
: r
'sasl,'hbase
: cdrwa
2.创建jaas-zk-keytab.conf文件
[root@bi-master ~]# vi /usr/deng_yb/jaas-zk-keytab.conf
Client {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
keyTab="/opt/cm-5.11.0/run/cloudera-scm-agent/process/1247-hbase-HBASERESTSERVER/hbase.keytab"
storeKey=true
useTicketCache=false
principal="hbase/[email protected]";
};
3.在操作zookeeper前将jaas-zk-keytab.conf加载到环境变量
[root@bi-master ~]# export CLIENT_JVMFLAGS="-Djava.security.auth.login.config=/usr/deng_yb/jaas-zk-keytab.conf"
[root@bi-master ~]# zookeeper-client -server bi-master:2181
[zk: bi-master:2181(CONNECTED) 9] rmr /hbase
4.重启hbase
5.假如还是不行的话,在CM上把hbase服务删除,再重新添加即可
-
在CM看不到YARN 执行程序(例如spark)的日志
解决办法:
要么就disableACL管理,要么就yarn.admin.acl=*
-
关于SSH问题
- 有这样一个场景,其他机器需要登陆集群执行shell命令,这时候需要用到ssh,举例
#!/bin/sh
.....
for file in `cat $KETTLE_REPOSITORY/gtp/gtp_msck_repair/gtp_tables.txt`
do
sql_msck=" msck repair table $file;"
echo $file
echo $sql_msck
expect<<-END
set timeout 10000
spawn ssh $gtp_user@$gtp_ip "beeline -u 'jdbc:hive2://$gtp_ip:$gtp_port/gtp;principal=$gtp_principal' --hiveconf mapreduce.job.queuename=datacenter -e 'msck repair table $file;' "
expect "password: "
send "$gtp_password\n"
expect eof
exit
END
echo "finish"
done
#简单说下,就是通过ssh,expect远程登陆服务,登陆beeline执行表修复命令
1.当时这个脚本在开发和生产集群能运行,但在测试死活都运行不了,ssh版本和配置都一样,kdc服务正常,HiveServer2服务也正常
2.实在找不到差异的原因,考虑到有可能是命令带 ";" 分号导致的,就把该脚本分成两份
vi /usr/deng_yb/repair.sh
#!/bin/sh
gtp_ip=$1
gtp_port=$2
gtp_principal=$3
table=$4
ssh wms_test@test-gtp-cdh-node01 << eeooff
beeline -u 'jdbc:hive2://${gtp_ip}:${gtp_port}/gtp;principal=${gtp_principal}' --hiveconf mapreduce.job.queuename=datacenter -e 'msck repair table ${table};'
eeooff
原来的脚本改
...
spawn sh /usr/deng_yb/repair.sh $gtp_ip $gtp_port $gtp_principal $table
...
然后这两个脚本就能在任何环境执行了 (虽然方法笨,但胜在解决问题)
-
关于CM生成keytab问题
-
配置了KDC HA后,发现在CM上面新添加角色会报类似以下的错误
我们查看kdc日志发现,生成keytab的动作交给了从KDC操作,因为从KDC没有写权限,因此导致失败
查看krb5.conf文件
[realms]
WONHIGH.COM = {
kdc = bi-master
admin_server = bi-master
default_realm = WONHIGH.COM
kdc = bi-slave1
#admin_server = bi-slave1
- 把admin_server=bi-slave1注释掉即可
sparkstreaming消费kafka信息报错
Exception in thread "streaming-start" java.lang.NoSuchMethodError: org.apache.kafka.clients.consumer.KafkaConsumer.subscribe(Ljava/util/Collection;)V
at org.apache.spark.streaming.kafka010.Subscribe.onStart(ConsumerStrategy.scala:85)
at org.apache.spark.streaming.kafka010.DirectKafkaInputDStream.consumer(DirectKafkaInputDStream.scala:70)
at org.apache.spark.streaming.kafka010.DirectKafkaInputDStream.start(DirectKafkaInputDStream.scala:240)
at org.apache.spark.streaming.DStreamGraph$$anonfun$start$5.apply(DStreamGraph.scala:49)
at org.apache.spark.streaming.DStreamGraph$$anonfun$start$5.apply(DStreamGraph.scala:49)
at scala.collection.parallel.mutable.ParArray$ParArrayIterator.foreach_quick(ParArray.scala:143)
- 解决办法
-
spark2配置界面设置kafka客户端版本号
sqoop导数问题
1.数据库到hive过程中任务执行一半报错
- 建议先建表,再导入数据,不建议直接在sqoop命令自动建表,hbase同理
- 字段类型要设计好
2.从关系型数据库到hive,结果列错位,很多列变成NULL
- 错位是因为oralce表里面某些列包含切分的字符'\t',导致其中一列列切分成两列,从而列错位;
- 重新定义列分割字符,找个没有在数据中体现的,例如'^'
3.从关系型数据库到hive,结果行数不一样,count出来比原来多
- 行数变多是因为oracle表里面某些列包含行切分字符'\n';
因为目前的hive版本行切分只支持'\n',所以不能替换,加上--hive-drop-import-delims消除数据里面的'\n'