zoukankan      html  css  js  c++  java
  • 《Hadoop权威指南 第4版》

    3.1 HDFS的设计概念

    • HDFS以流式数据访问模式来存储超大的文件
    • HDFS延时较高, HBASE 到可以是较好的选择.
    • 大量的小文件, namenode(命名结点/空间) 将文件系统的元数据存储在内存中,每个大概占150Bytes, 上百万/千万时需要考虑物理机的内存大小
    • HDFS只支持单用户在 " 文件末尾 " 的追加的方式写入数据

    3.2 HDFS 的概念

    • 数据块: 数倍于磁盘的数据块, 通常MapReduce中的map任务一次只处理一个HDFS块中的数据, 也不会过大(涉及到集群)
    • namenode 和 datanode
      • namenode为管理结点,文件系统的命名空间 ,保存整个文件系统树的所有文件信息,记录每个文件在各个结点中的存储信息(文件和数据块的互相引用关系)
      • datanode为数据结点,
    • 客户端Client,通过namenode和datanode交互来访问整个文件系统
    • 块缓存,访问频繁的块会被显式的加载到DataNode的内存中
    • 联邦HDFS,适用于超大集群,内存会成为瓶颈,联邦的HDFS的namenode允许进行扩展,每个node只管理一部分文件,如不同的目录对应不同的node
    • HDFS的高可用性
      • namenode存在单点故障,Hadoop2 增加了 “活动-备份” 的nameNode模式

    3.3 命令行模式

    • 输入hadoop fs -help 获取命令大全
      示例 新建文件夹/查询/查询根目录下的全部文件夹及文件
        [root@localhost hadoop-2.7.2]# bin/hdfs dfs -mkdir -p /user/root/input             # 这种方式也可以
        [root@localhost hadoop-2.7.2]# hadoop fs -mkdir books
    
        [root@localhost hadoop-2.7.2]# hadoop fs -ls .
        Found 2 items
        drwxr-xr-x   - root supergroup          0 2020-01-02 15:55 books
        drwxr-xr-x   - root supergroup          0 2020-01-02 15:46 input
    
    [root@localhost hadoop-2.7.2]# hadoop fs -ls file:///
    Found 22 items
    dr-xr-xr-x   - root root      53248 2019-04-09 21:25 file:///bin
    dr-xr-xr-x   - root root       4096 2020-01-02 10:14 file:///boot
    drwxr-xr-x   - root root       3300 2020-01-02 10:13 file:///dev
    drwxr-xr-x   - root root       8192 2020-01-02 10:50 file:///etc
    drwxr-xr-x   - root root         35 2020-01-02 10:20 file:///home
    dr-xr-xr-x   - root root       4096 2019-04-09 21:24 file:///lib
    .....
    

    创建input文件夹, 上传两个文件

     hadoop fs -mkdir /input
    hdfs dfs -put ~/baize/a.txt /input  
    hdfs dfs -put ~/baize/a.txt /input/b.txt
    
    

    查询 ,成功创建 http://192.168.147.132:50070/explorer.html#/

    执行一次MapReduce任务 单词统计

     hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /input /output      
    

    结果在/output中查看
    http://192.168.147.132:50070/explorer.html#/output
    进行download 即可.

    下面展示命令行的操作:

    [root@localhost hadoop-2.7.2]# hdfs dfs -ls /output
    Found 2 items
    -rw-r--r--   1 root supergroup          0 2020-01-02 20:04 /output/_SUCCESS
    -rw-r--r--   1 root supergroup         16 2020-01-02 20:04 /output/part-r-00000
    [root@localhost hadoop-2.7.2]# hdfs dfs -cat /output/part-r-00000
    Hello   2
    World   2
    [root@localhost hadoop-2.7.2]# 
    

    3.4 hadoop的文件系统

    • hdfs只是hadoop文件系统的一种实现
    • 接口 (hadoop以Java API的方式来提供接口访问)
      • 文件系统的命令解释器就是Java来书写的, 它使用Java的FileSystem类来提供文件系统的操作
      • HTTP 方式, 缓慢, 通过HDFS 代理来完成RPC请求
      • C语言
      • NFS
      • FUSE

    3.5 Java接口

    • 从hadoop的URL直接读取数据

      • 设置URL 使用Fs的流处理器工厂模式,
        static {
        URL.setURLStreamHandlerFactory(new FsUrlStreamHandlerFactory());
        }
      • 使用java.net.URL对象打开数据流, 从中读取数据
      • InputStream in = new URL("hdfs://host/path"). openStream() ;
      • 使用后进行关闭, IOUtils.closeStream()
    • 使用通用的File System的文件系统API来读取数据

      • seek(index) ,将流的指针指向指定的index 的字符位置
      • read(position, offset),从一个指定的偏移量出读取指定的文件的一部分
      • create(),写入文件,自动创建父类,选择不同的模式;可以指定create(inputStream)
      • append(path),追加文件内容
      • mkdirs(Path),创建目录
    • 3.5.5 创建文件系统

      • 文件的元数据 FileStatus类,封装了文件系统中文件和目录的元数据 getFileStatus()
      • 列出文件,查找一个文件或者目录相关的信息很实用;listStatus()
      • Hadoop支持的通配符与Unix bash shell支持的相同,如 “path。toString().match(regex)”
      • 删除数据, delete()
    • 3.6 数据流 TODO

      • 剖析文件读取
      • 剖析文件写入
      • 一致模型
    • 3.7 通过distcp 并行复制 TODO

  • 相关阅读:
    ES6中的模板字符串使用方法
    windows下手动安装composer
    搬运 centos7.2 apache 绑定二级目录 访问依然是apache页面
    博客园样式修改
    Linux系统小知识
    Tcahce Stashing Unlink Attack
    vps+v_2_ray+proxychains
    环境问题记录
    web
    2020BJDCTF
  • 原文地址:https://www.cnblogs.com/zhazhaacmer/p/12133377.html
Copyright © 2011-2022 走看看