账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    读取hdfs中的某一文件夹的文件为什么不支持通配符(foo/*)呢?
    96
    0

    刚刚学习Hadoop get started 遇到了这么一个问题

    # 有两个目录
    bin/hdfs dfs -ls
    drwxr-xr-x   - zhugw supergroup          0 2018-11-17 17:11 output
    drwxr-xr-x   - zhugw supergroup          0 2018-11-17 18:02 pv_users_count
    
    # 
    bin/hdfs dfs -ls output
    Found 2 items
    -rw-r--r--   1 zhugw supergroup          0 2018-11-17 17:11 output/_SUCCESS
    -rw-r--r--   1 zhugw supergroup        220 2018-11-17 17:11 output/part-r-00000
    
    # output可以使用通配符进行读取
    bin/hdfs dfs -cat output/*
    6    dfs.audit.logger
    4    dfs.class
    
    # 
     bin/hdfs dfs -ls pv_users_count
    Found 2 items
    -rw-r--r--   1 zhugw supergroup          0 2018-11-17 18:02 pv_users_count/_SUCCESS
    -rw-r--r--   1 zhugw supergroup         21 2018-11-17 18:02 pv_users_count/part-r-00000
    
    # 为什么pv_users_count就不支持通配符读取了呢
    bin/hdfs dfs -cat  pv_users_count/*
    zsh: no matches found: pv_users_count/*
    # 必须显式指定文件名
    bin/hdfs dfs -cat  pv_users_count/part-r-00000
    1,25    1
    1,32    1
    1
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 孤寐语 普通会员 1楼

      在Hadoop中,文件系统HDFS提供了多种文件系统路径操作方式,包括通配符。通配符是HDFS中的一种特殊字符,用于在文件路径中匹配指定的字符序列。HDFS支持多种通配符,包括:

      1. 全路径通配符 (dot)
      2. /.: 用于匹配当前目录的路径,即"."。
      3. ..: 用于匹配上一层目录的路径,即".*",代表所有目录的路径。
      4. ?: 用于匹配任意数量的任意字符,相当于通配符"?"。

      5. 前缀通配符 (prefix)

      6. /: 用于匹配文件系统的根目录路径,即"/"。
      7. /[^/]: 用于匹配除了"/"之外的所有路径,即"/[^/]*",代表除了根目录之外的所有路径。

      8. 后缀通配符 (suffix)

      9. -: 用于匹配后缀为"-"的文件路径,即"-/"。
      10. -[^-]: 用于匹配除了"-"之外的所有后缀,即"-[^-]*",代表除了后缀 "-"之外的所有后缀。

      11. 匹配任意数量的任意字符 (any)

      12. \: 用于匹配任意字符,即"\",代表任意字符。

      13. 匹配指定数量的任意字符 (one or more)

      14. |: 用于匹配指定数量的任意字符,即"|",代表任意数量的任意字符。

      15. 特殊字符 (other)

      16. [ ]: 用于匹配任意字符,但不进行区分大小写。
      17. { }: 用于匹配任意字符,但不进行区分大小写。
      18. {}: 用于匹配任意数量的任意字符,但不进行区分大小写。
      19. **: 用于匹配任意字符,但不进行区分大小写。

      综上所述,HDFS支持通配符来匹配文件系统的路径,包括全路径、前缀、后缀、匹配任意数量的任意字符和特殊字符。然而,对于通配符 "foo/",由于它需要匹配文件夹中所有以 "foo" 开头的文件,而文件夹本身不包含 "foo" 字符,因此在实际操作中无法使用通配符 "foo/" 来读取HDFS中的某一文件夹的文件。这是因为 HDFS 文件系统仅支持有限的路径操作符,包括空路径和匹配特定路径的部分路径。对于包含 "foo" 字符的文件夹,HDFS 只会匹配到文件夹中的文件,而不会匹配到子目录中的文件。因此,要在HDFS中读取某一文件夹的文件,需要使用特定的路径操作符,例如 /path/to/directorypath/to/directory/*,才能匹配到指定的文件夹中的所有文件。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部