0521-Hadoop命令无法访问HDFS路径诡异问题解决

1 诡异现象

Fayson今天在集群中浏览HDFS数据目录时发现,通过Cloudera Manager的“文件浏览”功能可以正常的浏览某一个HDFS数据目录,如下显示:

但Fayson在脚本或命令行操作该数据目录时又提示“/tmp/guiyi/123: No such file or directory”,异常如下:

2 问题分析

在Cloudera Manager上可以正常的浏览该数据目录,但在命令行无法正常访问提示文件不存在,经过一系列操作(如:重启Cloudera Manager、重启HDFS服务均无法解决该问题),继续分析….

猜测可能是由于HDFS数据目录包含特殊字符导致,Fayson使用如下命令查看HDFS路径是否携带特殊字符:

[root@cdh05 ~]# hadoop fs -ls /tmp/guiyi | cat -A

通过如上命令可以看到在/tmp/guyiyi/123路径后看到存在特殊字符“^[”,由此可以推断是HDFS路径包含了特殊字符导致的问题。

3 问题解决

在上面我们定位到HDFS路径中包含特殊字符导致命令行无法正常访问HDFS路径(这里只是hadoop命令的影响,也有可能会影响Hive无法正常的获取表的数据),那接下来可以通过如下步骤解决该问题:

1.使用hadoop命令将/tmp/guiyi目录下的所有数据目录列出到一个shell脚本

[root@cdh05 ~]# hadoop fs -ls /tmp/guiyi > test.sh
[root@cdh05 ~]# cat -A test.sh 

2.在上一步test.sh脚本的基础上较该脚本修改为如下:

[root@cdh05 ~]# vim test.sh 
hadoop fs -mv /tmp/guiyi/123^[ /tmp/guiyi/123

注意:这里为什么是在test.sh的基础上修改,是因为“^[”字符在Linux通过拷贝的方式则认为普通字符,不是不可见的特殊字符。

3.执行上述修改后的脚本将/tmp/guiyi/123^[ 目录修改为/tmp/guiyi/123

[root@cdh05 ~]# sh test.sh 
[root@cdh05 ~]# hadoop fs -ls /tmp/guiyi
[root@cdh05 ~]# hadoop fs -ls /tmp/guiyi | cat -A
[root@cdh05 ~]# hadoop fs -ls /tmp/guiyi/123

可以看到此时/tmp/guiyi/123的HDFS路径已可以正常访问。

4 总结

1.在使用脚本创建HDFS目录或文件时一定要注意特殊字符问题(特别是在window上编写好的脚本拷贝至Linux服务器时,需要检查文件中是否包含特殊字符)

2.在Linux中使用vim进入编辑状态后使用ctrl+c、ctrl+v会产生上述问题中的特殊字符,因此在编辑时需要注意。

3.可以通过cat -A命令查看文件中是否包含特殊字符

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值