我试图通过将每日日志文件复制到每个月的相关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
上答案 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':文件 存在