hdfs dfs中的通配符支持在Hadoop 2.3.0-cdh5.1.3中添加命令?

时间:2015-02-27 15:59:51

标签: hdfs cloudera

我试图通过将每日日志文件复制到每个月的相关HDFS文件夹来将我的每日apache访问日志文件移动到Hive外部表。 我尝试使用通配符,但似乎hdfs dfs不支持它? (文档似乎在说它应该支持它)。

复制单个文件有效:

  

$ sudo HADOOP_USER_NAME = myuser hdfs dfs -put   " /mnt/prod-old/apache/log/access_log-20150102.bz2"   /用户/为myuser / PROD / apache_log / 2015/01 /

但是以下所有内容都会抛出#34;没有这样的文件或目录":

  

$ sudo HADOOP_USER_NAME = myuser hdfs dfs -put   " /mnt/prod-old/apache/log/access_log-201501*.bz2"   /用户/为myuser / PROD / apache_log / 2015/01 /
  放:   `/mnt/prod-old/apache/log/access_log-201501*.bz2':没有这样的文件或   目录

     

$ sudo HADOOP_USER_NAME = myuser hdfs dfs -put   到/ mnt / PROD岁/阿帕奇/日志/访问日志,201501 *   /用户/为myuser / PROD / apache_log / 2015/01 /
  放:   `/ mnt / prod-old / apache / log / access_log-201501 *':没有这样的文件或   目录

环境在Hadoop 2.3.0-cdh5.1.3

1 个答案:

答案 0 :(得分:2)

我要回答我自己的问题。 所以hdfs dfs put可以使用通配符,问题是输入目录不是本地目录,而是挂载的SSHFS(fuse)驱动器。 似乎SSHFS是不能处理通配符的人。

下面是使用本地文件系统而不是挂载的驱动器时hdfs dfs put与通配符一起工作的证明:

  

$ sudo HADOOP_USER_NAME = myuser hdfs dfs -put   的/ tmp /访问日志,201501 *   /用户/为myuser / PROD / apache_log / 2015/01 /
  put:'/ user / myuser / prod / apache_log/2015 / 01 / access_log-20150101.bz2':   文件存在
  放:   '/user/myuser/prod/apache_log/2015/01/access_log-20150102.bz2':文件   存在