打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
HDFS笔记整理
HDFS(Hadoop Distributed File System  & hadoop分布式文件系统)
    1.优点:a.高容错性。数据自动保存多个副本(默认三个),一个副本丢失后,自动回复,总是保证副本书有三个
        b.适合批处理。移动计算而非数据,数据位置暴露给计算框架
        c.适合大数据处理。
        d.可构建在廉价机器上。通过多个副本提高可靠性,提供了容错和恢复机制
    2.缺点:a.低延迟数据访问。比如毫秒级,高吞吐率
        b.小文件存取,占用NameNode大量内存,寻道时间超长读取时间
        c.并发写入,文件随机修改。一个文件只能有一个写着,仅支持append.
    3.HDFS数据存储单元:
        文件被切分成固定的大小的数据块,默认的大小    是64M可配置不同的值,若单独的文件大小不到64M,则单独存放成一个block,每个block被保存在不同的node上,默认情况每个block有3个副本,上传成功后block副本的个数可以变,但是block的大小不能变。
    4.Namenode:
        保存文件的元信息(文件名,大小,修改时间,每个block保存在那个DataNode上(由DataNode启动时上报))
        NameNode的元信息再启动后会加载到内存中,保存到磁盘,文件名(fsimage),edits是记录元信息的操作日志
    5.SecondaryName(SNN):
        他不是NN的备份,(部分备份,他主要帮助NN合并edits log,减少NN启动时间)
    6.SNN的合并流程:
        用户在对HDFS的文件目录进行修改时,NN都会在edits中留下记录,以保证系统出现问题时,通过日志可以进行回复。fsimage是某一个时刻的检查点,由于fsimage很大,因此不会再每次的元数据修改都会写入到它里面,而只是存在到edits中,在系统启动时,会首先恢复到fsimage最近的时刻,然后通过edits恢复到新系统的最新状态。当edits太大,那么节点启动是将用很长的时间来执行日志的每个操作,使得系统回复最近的状态,再启动恢复的时间,服务是不可用的。为了避免edits过大,增加集群的可用时间,HDFS引入了第二名字节点(SNN),他是为了辅助NN完成fsimage和edits合并。
        SNN辅助合并过程:由SNN发起,首先通过远程方法获得NN上的edits的大小。如果日志很小,SNN就会在指定的时间后重新检查,否则,继续通过远程接口启动一次检查点的过程。这时NN需要创建一个新的编辑日志edits.new,后续对元数据的改动,都会就在这个新日志中。而原有的fsimage和edits会有SNN通过HTTP下载到本地,在内存中进行合并。合并好的结果就是fsimage.chk。然后SNN通过HTTP通知NN fsimage已经准备好。NN会通过HTTP get获取合并好的fsimage。在NN下载完后,SNN会就完成这次检查。NN在处理这个fsimage覆盖原来的fsimage,并将edits.new改名为edit。
    7.HDFS读取流程:
        a.使用HDFS提供的客户端开发库Client,向远程的Namenode发起RPC请求;
        b.Namenode会视情况返回文件的部分或者全部block列表,对于每个block,Namenode都会返回有该block拷贝的DataNode地址;
        c.客户端开发库Client会选取离客户端最接近的DataNode来读取block;如果客户端本身就是DataNode,那么将从本地直接获取数据.
        d.读取完当前block的数据后,关闭与当前的DataNode连接,并为读取下一个block寻找最佳的DataNode;
        e.当读完列表的block后,且文件读取还没有结束,客户端开发库会继续向Namenode获取下一批的block列表。
        f.读取完一个block都会进行checksum验证,如果读取datanode时出现错误,客户端会通知Namenode,然后再从下一个拥有该block拷贝的datanode继续读。
    8.HDFS写流程
        a.使用HDFS提供的客户端开发库Client,向远程的Namenode发起RPC请求;
        b.Namenode会检查要创建的文件是否已经存在,创建者是否有权限进行操作,成功则会为文件创建一个记录,否则会让客户端抛出异常;
        c.当客户端开始写入文件的时候,开发库会将文件切分成多个packets,并在内部以数据队列"data queue"的形式管理这些packets,并向Namenode申请新的blocks,获取用来存储replicas的合适的datanodes列表,列表的大小根据在Namenode中对replication的设置而定。
        d.开始以pipeline(管道)的形式将packet写入所有的replicas中。开发库把packet以流的方式写入第一个datanode,该datanode把该packet存储之后,再将其传递给在此pipeline中的下一个datanode,直到最后一个datanode,这种写数据的方式呈流水线的形式。
        e.最后一个datanode成功存储之后会返回一个ack packet,在pipeline里传递至客户端,在客户端的开发库内部维护着"ack queue",成功收到datanode返回的ack packet后会从"ack queue"移除相应的packet。
        f.如果传输过程中,有某个datanode出现了故障,那么当前的pipeline会被关闭,出现故障的datanode会从当前的pipeline中移除,剩余的block会继续剩下的datanode中继续以pipeline的形式传输,同时Namenode会分配一个新的datanode,保持replicas设定的数量。
    9.HDFS配置步骤:
        a.Hadoop安装,解压收hadoop-1.2.1.tar.gz
        b.conf/下配置文件的配置&说明:
            conf/core-site.xml:
                <configuration>
                    <!-- 配置namenode的入口地址&端口 -->
                    <property>
                        <name>fs.default.name</name>
                        <value>hdfs://localhost(本地IP):9000</value>
                    </property>
                    <!-- hadoop.tmp.dir是hadoop文件系统依赖的基础配置,很多路径都依赖它。它默认的位置是在/tmp/{$user}下面,但是在/tmp路径下的存储是不安全的,因为linux一次重启,文件就可能被删除,重新指定自定义目录 -->
                    <property>
                        <name>hadoop.tmp.dir</name>
                        <value>/opt/hadoop-root</value>
                    </property>

                </configuration>

            conf/hdfs-site.xml:
                <configuration>
                    <!-- 配置datanode副本的个数 -->
                    <property>
                        <name>dfs.replication</name>
                        <value>2</value>
                    </property>
                </configuration>

            masters文件:配置SNN的主机地址;

            slaves文件: 配置DN的主机地址;

        c.ssh免密码登陆:
            1.每台主机运行,生成私钥和公钥,并重定向到authorized_keys文件
                $ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
                $ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
            2.将namenode的公钥文件id_dsa.pub,复制到其他的主机
                $ scp ~/.ssh/id_dsa.pub  root@Ivan-PC:~/.ssh/ (要输密码,会覆盖原来的主机的公钥)
            3.在每台主机上讲新的公钥追加到authorized_keys文件
                $ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
            
            注意:CentOS可能会出现配置密钥后也不能登录,是因为centOS在网络方面比较严格,启用了SELINUX,所以要关闭SELINUX
                $ vim /etc/selinux/config  更新配置SELINUX=disabled
        
        d.第一次配置完成后,第一次启动需要格式化
            $ bin/hadoop namenode -format

        e.只启动HDFS:
            $ bin/start-dfs.sh
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
2、Hdfs架构设计与原理分析
【11月12日】Hadoop架构
02-Hadoop常用命令和Java API实现
HDFS的知识整理
HDFS (Hadoop)
大数据面试题整理-好程序员
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服