zoukankan      html  css  js  c++  java
  • hadoop day 2

    1.hdfs shell相关命令

    #hadoop fs -ls /  查看HDFS根目录
    #hadoop fs -mkdir /test 在根目录创建一个目录test
        #hadoop fs -mkdir /test1 在根目录创建一个目录test1
    #hadoop fs -put ./test.txt /test 
    或#hadoop fs -copyFromLocal ./test.txt /test
        #hadoop fs -get /test/test.txt .
       或#hadoop fs -getToLocal /test/test.txt .
    #hadoop fs -cp /test/test.txt /test1
    #hadoop fs -rm /test1/test.txt
    #hadoop fs -mv /test/test.txt /test1
    #hadoop fs -rmr /test1   

    2.HDFS架构

                                  HDFS

    ----------------------------------------------------------------
    NameNode,DataNode,Secondary DataNode

    NameNode对元数据进行维护:

    元数据存放于内存中:读写分离中,主要做查询

    NameNode是整个文件系统的管理节点。它维护着整个文件系统的文件目录树,文件/目录的元信息和每个文件对应的数据块列表。接收用户的操作请求。
    文件包括:
    fsimage:元数据镜像文件。存储某一时段NameNode内存元数据信息。
    edits:操作日志文件,用于读写分离,只能追加,以便在断电时恢复数据,每当写满时,将数据刷到fsimage中去
    fstime:保存最近一次checkpoint的时间
    以上这些文件是保存在linux的文件系统中。

    client  ---------> namenode ---------->  editslog (存放更新的元数据信息)

    1).客户端上传文件时,NN首先往edits log文件中记录元数据操作日志

    2).客户端开始上传文件(namenode),完成后返回成功信息给NN,NN就在内存中写入这次上传操作新产生的元数据信息

    3).每当editslog写满时,需要将这一段时间的新的元数据刷到fsimage文件中去

    4).secondarynamenode 实现checkpoint

    secondary namenode的工作流程

    1).通知namenode切换edits文件

    2).从namenode获得fsimage和edits

    3).将fsimage载入内存,然后开始合并edits

    4).secondary将新的fsimage发回给namenode

    5).namenode用新的fsimage替换旧的fsimage

    checkpoint的触发条件:

    1).指定两次checkpoint的最大时间间隔,默认为3600秒,fs.checkpoint.period

    2).规定edits文件的最大值,一旦超过则强制checkpoint,fs.checkpoint.size

    优先在不同的机架上防止DataNode副本

    集群停止服务在被修复之前如何处理?

    采用两个namenode,进行高可用,两个namenode不能同时响应,high availablility

    datanode提供真实文件数据的存储服务。
    文件块(block):最基本的存储单位。对于文件内容而言,一个文件的长度大小是size,那么从文件的0偏移开始,按照固定的大小,顺序对文件进行划分并编号,划分好的每一个块称一个Block。HDFS默认Block大小是128MB,以一个256MB文件,共有256/128=2个Block.
    dfs.block.size
    不同于普通文件系统的是,HDFS中,如果一个文件小于一个数据块的大小,并不占用整个数据块存储空间
    Replication。多复本。默认是三个。

    data存放路径:data/dfs/data/current/BP-xxx-/current/finalized

    在eclipse中执行Hadoop文件操作时,需要设置jvm的用户环境变量

    文件操作相关方法:FileSystem类

    copyFromLocalFile(source,destination)

    copyToLocalFile()

    mkdirs()

    delete(Path,recursive)

    listFiles()

    主要代码:

    Configuration conf=new Configuration()
    conf.set("fs.defaultFS","hdfs://localhost:9000");
    
    FileSystem fs=FileSystem.get(conf);
    fs.copyFromLocalFile(new Path("c:/qingshu.txt"),new Path("hdfs://localhost:9000/aaa/"));

    namenode的主要职责:

    1)维护元数据信息

    2)维护hdfs的目录树

    3)响应客户端的请求

    3.RPC调用(远程过程调用:remote process call)

    通过网络远程调用服务器上jvm中的对象实例

     loginController <----> socket client,server ========== socket client,server  <----> loginService

    SOAP:http+xml

    namenode 和 DataNode必须定期通信,来保证数据的正确性

    Hadoop自带rpc功能组件:RPC

    动态代理+反射实现

    4.hdfs下载数据源码

    FileSystem fs=FileSystem.get(conf);
    DFSInputStream is = fs.open(src);
    
    fs需要调用namenode上打开元数据流的方法,所以需要RPCProxy为成员
    fs.open() ----->PRCProxy
  • 相关阅读:
    Python系列:四、Python函数--技术流ken
    Centos7破解密码的两种方法--技术流ken
    Python系列:三、流程控制循环语句--技术流ken
    Python系列:二、数据类型--技术流ken
    Python系列:一、Python概述与环境安装--技术流ken
    zabbix实现百台服务器的自动化监控--技术流ken
    学会这个删库再也不用跑路了~ --技术流ken
    五分钟彻底学会iptables防火墙--技术流ken
    Docker之使用Dockerfile创建定制化镜像(四)--技术流ken
    Docker数据卷Volume实现文件共享、数据迁移备份(三)--技术流ken
  • 原文地址:https://www.cnblogs.com/lvjygogo/p/8573860.html
Copyright © 2011-2022 走看看