我现在在一家公司负责大数据平台(CDH平台)的运维管理,最常遇见的问题我总结出来,并且继续在下面更新。希望方便自己以后trouble shooting以及方便各位同行解决问题与学习。
关于做运维有几个重要的要点一定一定要遵守的:
遇到问题冷静,冷静,冷静,就山崩都要冷静,心态关乎你是否能将问题解决同时不会给人留下不好的印象。
凡是关于对集群更改与变动的操作,一定要在测试环境测试到没问题才上生产,不然可能会造成不可挽回的损失。
尽可能的定期做备份,它可能在最绝望的时刻救命,这是最后的救命草。
HUE Cannot access
突然一天业务跟我说hue不能登陆,拒绝登陆。我发现hue web页面是可以正常打开的,但是使用账号login时提示 cannot access!
首先上cdh cm管理界面检查 hue 相关进程 ,发现有个进程处于不正常的状态:Kerberos Ticket Renewer
解决办法:重启该 Kerberos Ticket Renewer 进程就能正常访问hue了。
Hive 运维
hive外部表不能查询
一天业务跟我反馈 hive 外部表不能查询并给出报错截图
我第一反应是外部表是连接到数据存储的目录,问题出现的问题肯定是该外部表的 location 下的文件出现问题。于是我检查命令 : show create table table_name;
查看到外部表的 location ,检查该表所在的 location ,发现除了原先的excel表之外还有个文件夹,文件夹里面还有其他的文件。初步判断是业务把不同schema的文件放在该 location ,导致 hive 无法正常读取文件出现查询表格报错的问题。
解决办法:把该location下的其他文件迁移出去就行了。
hive内部表转外部表
在业务操作中经常遇到用查询出来的结果创建一张表,再将这张表转为外部表:
ALTER TABLE table_name SET TBLPROPERTIES ('EXTERNAL'='TRUE');
hive 查询中文乱码/hive查询外部导入的excel文件中文乱码
在实际应用场景中经常遇到这样的问题,将excel文件上传HDFS,再建立外部表指向该文件在HDFS的位置。但是外部表建立好了发现查询该表示时发现,出现中文乱码并且列对不上,数据都挤到第一列。这个时候发现业务建立外部表的分隔符是“,”同时检查到她上传的文件的后缀时 “.xlsx"。
判断上传文件的格式与外部表的分隔符不对。微软的excel xlsx等分隔符是”\t“,csv格式是逗号。另外在windows上中文系统文件的编码一般都是 GBK,HDFS默认编码是UTF8,需要对该外部表更改编码。
解决过程发现换了分隔符和换了编码都不能解决问题。尝试将xlsx文件另存为csv文件(逗号分隔符)上传到HDFS,将外部表的分隔符转为逗号,将外部表编码转为GBK,就好了。然后定下规范上传分隔符为逗号的 csv 文件给外部表,建外部表的分隔符为逗号。
ALTER TABLE 表名 SET SERDEPROPERTIES ('serialization.encoding'='GBK')
hive 查询结果导出中文乱码
在实际应用场景中经常遇到这样的问题,需要将查询的结果导出成为电子表格文件,在hue上提供了两种外部文件的方法,xlsx文件和csv文件。xlsx文件数据量比较大的时候它导出时长比较长,会报服务器网络异常的错误(可能是我们公司出现这种问题),导出csv文件很快,但是出现打开文件是中文乱码的问题。于是将导出的文件用uedit这个人间重新保存为有bom的utf8。就完美解决中文乱码问题,虽然繁琐但是实用。
HIVE外部表不能查询
一天一个user跟我反应说hive外部表不能使用了,昨天还能使用的。
首先遇到这种问题,先不要慌,跟着自己的思路走:
1.亲自测试时什么情况,在有权限的情况下查询下该表,亲自看看报错是怎的。
发现真的是有报错,既然昨天能使用说明表结构是正常的。排除建立外部表字段对应不上的问题。
2.既然表结构没问题,判断数据源。hive外部表是有个location,通过show create table table_name 检查location
在hdfs上检查该路径,发i现该路径下有出了一个excel表,还有一个文件夹,文件夹里面还有别的文件。错误是在location里面添加了不是与hive相同 schema的文件,离谱的是加了文件夹。
3.解决办法:
把这些多余的文件迁移到别的地方。
hive表不能truncate
hive> TRUNCATE TABLE test.student; FAILED: SemanticException [Error 10146]: Cannot truncate non-managed table test.student. hive>
原因:truncate 不能删除外部表
解决办法,把外部表转为内部表或者把外部表删除后重新建一张内部表。
Need to specify partition columns because the destination table is partition
原因是insert into default.tablename 后面没有指定分区的字段 :PARTITION(dt)
hdfs dfs -du -s -h /user/hive/warehouse/xxx.db/xxxxxxx