Hadoop面试连环炮 2

简介: Hadoop面试连环炮

1.8 Hadoop读数据流程

详细步骤

1)客户端通过Distributed FileSystem向namenode请求下载文件,namenode通过查询元数据,找到文件块所在的datanode地址。

2)挑选一台datanode(就近原则,然后随机)服务器,请求读取数据。

3)datanode开始传输数据给客户端(从磁盘里面读取数据输入流,以packet为单位来做校验,大小为64k)。

4)客户端以packet为单位接收,先在本地缓存,然后写入目标文件。作者:李小李的路

1.9 SecondaryNameNode的作用

NameNode职责是管理元数据信息,DataNode的职责是负责数据具体存储,那么SecondaryNameNode的作用是什么?

答:它的职责是合并NameNode的edit logs到fsimage文件中。

每达到触发条件 [达到一个小时,或者事物数达到100万],会由secondary namenode将namenode上积累的所有edits和一个最新的fsimage下载到本地,并加载到内存进行merge(这个过程称为checkpoint),如下图所示:


eb30ce7a29164860b082491cdf908c0a.png

1.10 HDFS的扩容 缩容(面试)

1.动态扩容

随着公司业务的增长,数据量越来越大,原有的datanode节点的容量已经不能满足存储数据的需求,需要在原有集群基础上动态添加新的数据节点。也就是俗称的**动态扩容**。

随着公司业务的增长,数据量越来越大,原有的datanode节点的容量已经不能满足存储数据的需求,需要在原有集群基础上动态添加新的数据节点。也就是俗称的**动态扩容**。
有时候旧的服务器需要进行退役更换,暂停服务,可能就需要在当下的集群中停止某些机器上hadoop的服务,俗称**动态缩容**。

1.1. 基础准备

在基础准备部分,主要是设置hadoop运行的系统环境


修改新机器系统hostname(通过/etc/sysconfig/network进行修改)


3d4eeb3d4c1c441fae70edf9b29458b3.png


修改hosts文件,将集群所有节点hosts配置进去(集群所有节点保持hosts文件统一)


c4773513e2a84b21a3afbe037481d7aa.png


设置NameNode到DataNode的免密码登录(ssh-copy-id命令实现)


修改主节点slaves文件,添加新增节点的ip信息(集群重启时配合一键启动脚本使用)


70bb00927b1a491392eeede3bf21d0a7.png


在新的机器上上传解压一个新的hadoop安装包,从主节点机器上将hadoop的所有配置文件,scp到新的节点上。


1.2. 添加datanode

在namenode所在的机器的

/export/servers/hadoop-2.6.0-cdh5.14.0/etc/hadoop目录下创建dfs.hosts文件

cd /export/servers/hadoop-2.6.0-cdh5.14.0/etc/hadoop
vim dfs.hosts
添加如下主机名称(包含新服役的节点)
node-1
node-2
node-3
node-4

在namenode机器的hdfs-site.xml配置文件中增加dfs.hosts属性

cd /export/servers/hadoop-2.6.0-cdh5.14.0/etc/hadoop


vim hdfs-site.xml


<property>
  <name>dfs.hosts</name>
  <value>/export/servers/hadoop-2.6.0-cdh5.14.0/etc/hadoop/dfs.hosts</value>
</property>
dfs.hosts属性的意义:命名一个文件,其中包含允许连接到namenode的主机列表。必须指定文件的完整路径名。如果该值为空,则允许所有主机。相当于一个白名单,也可以不配置。

在新的机器上单独启动datanode: hadoop-daemon.sh start datanode


e72d6a4b6ea744e588ac4c0a58de94b7.png


刷新页面就可以看到新的节点加入进来了


09a739262d114495961ebdd0b0f4364f.png


1.3.datanode负载均衡服务

新加入的节点,没有数据块的存储,使得集群整体来看负载还不均衡。因此最后还需要对hdfs负载设置均衡,因为默认的数据传输带宽比较低,可以设置为64M,即hdfs dfsadmin -setBalancerBandwidth 67108864即可


默认balancer的threshold为10%,即各个节点与集群总的存储使用率相差不超过10%,我们可将其设置为5%。然后启动Balancer,


sbin/start-balancer.sh -threshold 5,等待集群自均衡完成即可。


1.4.添加nodemanager

在新的机器上单独启动nodemanager:


yarn-daemon.sh start nodemanager


1feedb2b0cc4426cb9aee5f275b298c0.png


在ResourceManager,通过yarn node -list查看集群情况


927bd6e2a6064c1fb254db0ef5695229.png


2.动态缩容

2.1.添加退役节点

在namenode所在服务器的hadoop配置目录etc/hadoop下创建dfs.hosts.exclude文件,并添加需要退役的主机名称。


注意:该文件当中一定要写真正的主机名或者ip地址都行,不能写node-4


node04.hadoop.com


在namenode机器的hdfs-site.xml配置文件中增加dfs.hosts.exclude属性


cd /export/servers/hadoop-2.6.0-cdh5.14.0/etc/hadoop


vim hdfs-site.xml

<property> 
        <name>dfs.hosts.exclude</name>
        <value>/export/servers/hadoop-2.6.0-cdh5.14.0/etc/hadoop/dfs.hosts.exclude</value>
</property>

dfs.hosts.exclude属性的意义:命名一个文件,其中包含不允许连接到namenode的主机列表。必须指定文件的完整路径名。如果值为空,则不排除任何主机。


2.2.刷新集群

在namenode所在的机器执行以下命令,刷新namenode,刷新resourceManager。


hdfs dfsadmin -refreshNodes


yarn rmadmin –refreshNodes

8ca423cddaf44689812656513f78ddb9.png



等待退役节点状态为decommissioned(所有块已经复制完成),停止该节点及节点资源管理器。注意:如果副本数是3,服役的节点小于等于3,是不能退役成功的,需要修改副本数后才能退役。


node-4执行以下命令,停止该节点进程


cd /export/servers/hadoop-2.6.0-cdh5.14.0


sbin/hadoop-daemon.sh stop datanode


sbin/yarn-daemon.sh stop nodemanager


namenode所在节点执行以下命令刷新namenode和resourceManager


hdfs dfsadmin –refreshNodes


yarn rmadmin –refreshNodes


namenode所在节点执行以下命令进行均衡负载


cd /export/servers/hadoop-2.6.0-cdh5.14.0/


sbin/start-balancer.sh


1.11 HDFS安全模式

安全模式是HDFS所处的一种特殊状态,在这种状态下,文件系统只接受读数据请求,而不接受删除 修改等变更请求,是一种保护机制,用于保证集群中的数据块的安全性。

安全模式是HDFS所处的一种特殊状态,在这种状态下,文件系统只接受读数据请求,而不接受删除 修改等变更请求,是一种保护机制,用于保证集群中的数据块的安全性。
在NameNode主节点启动时,HDFS首先进入安全模式,集群会开始检查数据块的完整性。DataNode在启动的时候会向namenode汇报可用的block信息,当整个系统达到安全标准时,HDFS自动离开安全模式。

手动进入安全模式

hdfs dfsadmin -safemode enter

手动离开安全模式

hdfs dfsadmin -safemode leave

1.12 机架感知

hadoop自身是没有机架感知能力的,必须通过人为的设定来达到这个目的。一种是通过配置一个脚本来进行映射;另一种是通过实现DNSToSwitchMapping接口的resolve()方法来完成网络位置的映射。


通过机架感知,达到数据块冗余度的要求。,分区域是容灾为了防止rack1宕机最先考虑,同一个机架说明网络一样,传递较快.具体算法不需要深究.因为是实现好的.

369c2061d5c744ed96b4802c27d3e1be.png



1 写一个脚本,然后放到hadoop的core-site.xml配置文件中,用namenode和jobtracker进行调用。

#!/usr/bin/python
#-*-coding:UTF-8 -*-
import sys
rack = {"hadoop-node-31":"rack1",
                                "hadoop-node-32":"rack1",
                                "hadoop-node-33":"rack1",
                                "hadoop-node-34":"rack1",
                                "hadoop-node-49":"rack2",
                                "hadoop-node-50":"rack2",
                                "hadoop-node-51":"rack2",
                                "hadoop-node-52":"rack2",
                                "hadoop-node-53":"rack2",
                                "hadoop-node-54":"rack2",
                                "192.168.1.31":"rack1",
                                "192.168.1.32":"rack1",
                                "192.168.1.33":"rack1",
                                "192.168.1.34":"rack1",
                                "192.168.1.49":"rack2",
                                "192.168.1.50":"rack2",
                                "192.168.1.51":"rack2",
                                "192.168.1.52":"rack2",
                                "192.168.1.53":"rack2",
                                "192.168.1.54":"rack2",
                                }
if __name__=="__main__":
        print "/" + rack.get(sys.argv[1],"rack0")

2 将脚本赋予可执行权限chmod +x RackAware.py,并放到bin/目录下。


3 然后打开conf/core-site.html


    <property>
        <name>topology.script.file.name</name>
        <value>/opt/modules/hadoop/hadoop-1.0.3/bin/RackAware.py</value>
<!--机架感知脚本路径-->
    </property>
    <property>
        <name>topology.script.number.args</name>
        <value>20</value>
<!--机架服务器数量,由于我写了20个,所以这里写20-->
    </property>

4 重启Hadoop集群


namenode日志

2012-06-08 14:42:19,174 INFO org.apache.hadoop.hdfs.StateChange: BLOCK* NameSystem.registerDatanode: node registration from 192.168.1.49:50010 storage DS-1155827498-192.168.1.49-50010-1338289368956
2012-06-08 14:42:19,204 INFO org.apache.hadoop.net.NetworkTopology: Adding a new node: /rack2/192.168.1.49:50010
2012-06-08 14:42:19,205 INFO org.apache.hadoop.hdfs.StateChange: BLOCK* NameSystem.registerDatanode: node registration from 192.168.1.53:50010 storage DS-1773813988-192.168.1.53-50010-1338289405131
2012-06-08 14:42:19,226 INFO org.apache.hadoop.net.NetworkTopology: Adding a new node: /rack2/192.168.1.53:50010
2012-06-08 14:42:19,226 INFO org.apache.hadoop.hdfs.StateChange: BLOCK* NameSystem.registerDatanode: node registration from 192.168.1.34:50010 storage DS-2024494948-127.0.0.1-50010-1338289438983
2012-06-08 14:42:19,242 INFO org.apache.hadoop.net.NetworkTopology: Adding a new node: /rack1/192.168.1.34:50010
2012-06-08 14:42:19,242 INFO org.apache.hadoop.hdfs.StateChange: BLOCK* NameSystem.registerDatanode: node registration from 192.168.1.54:50010 storage DS-767528606-192.168.1.54-50010-1338289412267
  2012-06-08 14:42:49,492 INFO org.apache.hadoop.hdfs.StateChange: STATE* Network topology has 2 racks and 10 datanodes
  2012-06-08 14:42:49,492 INFO org.apache.hadoop.hdfs.StateChange: STATE* UnderReplicatedBlocks has 0 blocks
  2012-06-08 14:42:49,642 INFO org.apache.hadoop.hdfs.server.namenode.FSNamesystem: ReplicateQueue QueueProcessingStatistics: First cycle completed 0 blocks in 0 msec
  2012-06-08 14:42:49,642 INFO org.apache.hadoop.hdfs.server.namenode.FSNamesystem: ReplicateQueue QueueProcessingStatistics: Queue flush completed 0 blocks in 0 msec processing time, 0 msec clock time, 1 cycles
目录
相关文章
|
存储 缓存 运维
JVM面试连环炮
JVM面试连环炮
104 0
|
5月前
|
存储 SQL 分布式计算
【史上最全】Hadoop精选18道面试题(附回答思路)
【史上最全】Hadoop精选18道面试题(附回答思路)
311 1
【史上最全】Hadoop精选18道面试题(附回答思路)
|
5月前
|
分布式计算 资源调度 监控
Hadoop生态系统深度剖析:面试经验与必备知识点解析
本文深入探讨了Hadoop生态系统的面试重点,涵盖Hadoop架构、HDFS、YARN和MapReduce。了解Hadoop的主从架构、HDFS的读写流程及高级特性,YARN的资源管理与调度,以及MapReduce编程模型。通过代码示例,如HDFS文件操作和WordCount程序,帮助读者巩固理解。此外,文章强调在面试中应结合个人经验、行业动态和技术进展展示技术实力。
77 0
|
5月前
|
设计模式 搜索推荐 Java
面试官不按套路出牌,上来就让聊一聊Java中的迭代器(Iterator ),夺命连环问,怎么办?
面试官不按套路出牌,上来就让聊一聊Java中的迭代器(Iterator ),夺命连环问,怎么办?
40 0
|
5月前
|
存储 分布式计算 资源调度
2022年Hadoop面试题最全整理,两万字干货分享【建议收藏】
2022年Hadoop面试题最全整理,两万字干货分享【建议收藏】
622 0
|
5月前
|
算法 安全 调度
[操作系统] 面试宝典之~死锁连环系列
[操作系统] 面试宝典之~死锁连环系列
|
5月前
|
资源调度 分布式计算 Hadoop
大数据面试题百日更新_Hadoop专题_Yarn专题(Day11)
大数据面试题百日更新_Hadoop专题_Yarn专题(Day11)
61 0
|
5月前
|
分布式计算 Hadoop 大数据
大数据面试题百日更新_Hadoop专题(Day09)
大数据面试题百日更新_Hadoop专题(Day09)
42 0
|
5月前
|
分布式计算 Hadoop 大数据
字节跳动面试问到Hadoop源码,拿40K进大厂的Java程序员必备技能
大数据由于数据量庞大、数据类型复杂等特点,特别是非结构化或半结构化数据远远多于结构化数据,导致传统关系型数据库让企业面临巨大的成本压力。而 Hadoop 能够很好的提供解决大数据问题的技术手段。因此,Hadoop 技术在大数据中占据着举足轻重的作用,也很受企业的青睐。
|
5月前
|
分布式计算 Hadoop 大数据
大数据面试题百日更新_Hadoop专题(Day03)
大数据面试题百日更新_Hadoop专题(Day03)
26 0