【大数据面试宝典】 第一篇 Hadoop 面试题

  • Hadoop常见的端口
  • Hadoop生态圈
  • Hadoop配置文件以及简单的Hadoop集群搭建
  • Hadoop参数调优
  • 项目经验之基准测试
  • Hadoop宕机
  • Hadoop 高可用配置

Hadoop 常见的端口

 dfs.namenode.http-address:50070

 dfs.datanode.http-address:50075

 SecondaryNameNode辅助名称节点端口号:50090

 dfs.datanode.address:50010

 fs.defaultFS:8020 或者9000

 yarn.resourcemanager.webapp.address:8088

 历史服务器web访问端口:19888

Hadoop 生态圈


然后就是各个组件的介绍了,简单的介绍一下就好了。比如说:

  • Flume: 一个高可用的,高可靠的,分布式的海量数据日志采集,聚合和传输的系统;
  • Zookeeper: 是一个基于观察者模式设计的分布式服务管理框架,他负责存储和管理大家都关心的数据,然后接受管擦者的注册,一旦这些数据的状态发生了变化,Zookeeper就将负责通知已经在Zookeeper上注册的观察者做出相应的反应。

Hadoop配置文件以及简单的Hadoop集群搭建

(1)配置文件:

core-site.xml


        
        
                fs.defaultFS
                 hdfs://master:9000
        

        
        
                hadoop.tmp.dir
                /opt/module/hadoop-2.7.2/data/tmp
        
        
        
           io.compression.codecs
           
              org.apache.hadoop.io.compress.GzipCodec,
              org.apache.hadoop.io.compress.DefaultCodec,
              org.apache.hadoop.io.compress.BZip2Codec,
              org.apache.hadoop.io.compress.SnappyCodec,
              com.hadoop.compression.lzo.LzoCodec,
              com.hadoop.compression.lzo.LzopCodec
            
        

        
            io.compression.codec.lzo.class
            com.hadoop.compression.lzo.LzoCodec
        
        
        
            io.compression.codecs
            org.apache.hadoop.io.compress.SnappyCodec
        

hdfs-site.xml



    
        dfs.replication
        3
    

      
          dfs.image.transfer.timeout
          3600000
          如果对于某一次数据操作来讲,延迟非常高,socket需要等待更长的时间,建议把该值设置为更大的值(默认60000毫秒),以确保socket不会被timeout掉。
      
        
    
         dfs.namenode.secondary.http-address
         slave02:50090
    

    
        dfs.client.block.write.replace-datanode-on-failure.enable
        true
    
    
        dfs.client.block.write.replace-datanode-on-failure.policy
        NEVER
    

mapred-site.xml


    
    
        mapreduce.framework.name
        yarn
    
    
    
        mapreduce.jobhistory.address
        slave01:10020
    
    
    
        mapreduce.jobhistory.webapp.address
        slave01:19888
    
    
        mapreduce.map.output.compress
        true
    
    
    
        mapreduce.map.output.compress.codec
        org.apache.hadoop.io.compress.SnappyCodec
    

yarn-site.xml


        
        
            yarn.nodemanager.aux-services
            mapreduce_shuffle
        
        
        
            yarn.resourcemanager.hostname
            slave01
        
        
        
            yarn.log-aggregation.retain-seconds
            604800
        

        
             yarn.nodemanager.vmem-check-enabled
             false
        

hadoop-env.sh,yarn-env.sh,mapred-env.sh这三个文件,我们主要配置一下 JAVA_HOME 的路径。

slaves

这个文件,我们用于配置 DataNode 的节点。

master
slave01
slave02

(2)简单的集群搭建过程:

  1. JDK安装
  2. 配置SSH免密登录
  3. 配置hadoop核心文件
  4. 格式化namenode

Hadoop参数调优

1)在hdfs-site.xml文件中配置多目录,最好提前配置好,否则更改目录需要重新启动集群.

2)NameNode有一个工作线程池,用来处理不同DataNode的并发心跳以及客户端并发的元数据操作. dfs.namenode.handler.count=20 * log2(Cluster Size),比如集群规模为10台时,此参数设置为60.

3)编辑日志存储路径dfs.namenode.edits.dir设置与镜像文件存储路径 dfs.namenode.name.dir 尽量分开,达到最低写入延迟

4)服务器节点上YARN可使用的物理内存总量,默认是8192(MB),注意,如果你的节点内存资源不够8GB,则需要调减小这个值,而YARN不会智能的探测节点的物理内存总量。yarn.nodemanager.resource.memory-mb

5)单个任务可申请的最多物理内存量,默认是8192(MB).yarn.scheduler.maximum-allocation-mb .

项目经验之基准测试

搭建完Hadoop集群后需要对HDFS读写性能和MR计算能力测试。测试jar包在hadoop的share文件夹下。

Hadoop宕机

1)如果MR造成系统宕机。此时要控制Yarn同时运行的任务数,和每个任务申请的最大内存。调整参数:yarn.scheduler.maximum-allocation-mb(单个任务可申请的最多物理内存量,默认是8192MB)

2)如果写入文件过量造成NameNode宕机。那么调高Kafka的存储大小,控制从Kafka到HDFS的写入速度。高峰期的时候用Kafka进行缓存,高峰期过去数据同步会自动跟上。

Hadoop 高可用配置

配置 HDFS-HA集群

1) 配置core-site.xml



            
                  fs.defaultFS
              hdfs://mycluster
            

            
            
                  hadoop.tmp.dir
                  /opt/ha/hadoop-2.7.2/data/tmp
            

2) 配置 hdfs-site.xml


    
    
        dfs.nameservices
        mycluster
    

    
    
        dfs.ha.namenodes.mycluster
        nn1,nn2
    

    
    
        dfs.namenode.rpc-address.mycluster.nn1
        hadoop102:9000
    

    
    
        dfs.namenode.rpc-address.mycluster.nn2
        hadoop103:9000
    

    
    
        dfs.namenode.http-address.mycluster.nn1
        hadoop102:50070
    

    
    
        dfs.namenode.http-address.mycluster.nn2
        hadoop103:50070
    

    
    
        dfs.namenode.shared.edits.dir
    qjournal://hadoop102:8485;hadoop103:8485;hadoop104:8485/mycluster
    

    
    
        dfs.ha.fencing.methods
        sshfence
    

    
    
        dfs.ha.fencing.ssh.private-key-files
        /home/corp/.ssh/id_rsa
    

    
    
        dfs.journalnode.edits.dir
        /opt/hadoop-2.7.2/data/jn
    

    
    
        dfs.permissions.enable
        false
    

    
    
          dfs.client.failover.proxy.provider.mycluster
    org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
    

再将我们的配置分发到各个节点上去。

配置HDFS-HA自动故障转移

(1)在hdfs-site.xml中增加


    dfs.ha.automatic-failover.enabled
    true

(2)在core-site.xml文件中增加


    ha.zookeeper.quorum
    hadoop102:2181,hadoop103:2181,hadoop104:2181

1)关闭所有HDFS服务:

sbin/stop-dfs.sh

(2)启动Zookeeper集群:

bin/zkServer.sh start

(3)初始化HA在Zookeeper中状态:

bin/hdfs zkfc -formatZK

(4)启动HDFS服务:

sbin/start-dfs.sh

(5)在各个NameNode节点上启动DFSZK Failover Controller,先在哪台机器启动,哪个机器的NameNode就是Active NameNode

sbin/hadoop-daemin.sh start zkfc

配置Yarn-HA

Yarn-HA的工作机制:

配置 yarn-site.xml 文件



    
        yarn.nodemanager.aux-services
        mapreduce_shuffle
    

    
    
        yarn.resourcemanager.ha.enabled
        true
    
    
    
        yarn.resourcemanager.cluster-id
        cluster-yarn1
    
    
        yarn.resourcemanager.ha.rm-ids
        rm1,rm2
    
    
        yarn.resourcemanager.hostname.rm1
        hadoop102
    
    
        yarn.resourcemanager.hostname.rm2
        hadoop103
    
    
    
        yarn.resourcemanager.zk-address
        hadoop102:2181,hadoop103:2181,hadoop104:2181
    
    
    
        yarn.resourcemanager.recovery.enabled
        true
    
     
    
        yarn.resourcemanager.store.class     org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore


启动HDFS
(1)在各个JournalNode节点上,输入以下命令启动journalnode服务:

sbin/hadoop-daemon.sh start journalnode

(2)在[nn1]上,对其进行格式化,并启动:

bin/hdfs namenode -format
sbin/hadoop-daemon.sh start namenode

(3)在[nn2]上,同步nn1的元数据信息:

bin/hdfs namenode -bootstrapStandby

(4)启动[nn2]:

sbin/hadoop-daemon.sh start namenode

(5)启动所有DataNode

sbin/hadoop-daemons.sh start datanode

(6)将[nn1]切换为Active

bin/hdfs haadmin -transitionToActive nn1

启动YARN
(1)在hadoop102中执行:

sbin/start-yarn.sh

(2)在hadoop103中执行:

sbin/yarn-daemon.sh start resourcemanager

(3)查看服务状态

bin/yarn rmadmin -getServiceState rm1

你可能感兴趣的:(【大数据面试宝典】 第一篇 Hadoop 面试题)