精华内容
下载资源
问答
  • 常见Hadoop面试题

    2018-01-21 16:44:35
    Hadoop、hive、hbase常见面试题!!! Hadoop、hive、hbase常见面试题!!! Hadoop、hive、hbase常见面试题!!! Hadoop、hive、hbase常见面试题!!!
  • HADOOP 面试题目录 1. 下列哪项通常是集群的最主要瓶颈 2. 下列哪项可以作为集群的管理工具? 3. 下列哪个是Hadoop 运行的模式? 4. 列举几个hadoop 生态圈的组件并做简要描述 4. 列举几个hadoop 生态圈的组件并做...
  • hadoop面试题

    2014-12-03 00:46:45
    分享的hadoop2的面试题,云帆大数据分享。
  • 整理的一些hadoop面试题及答案,希望对你有帮助 整理的一些hadoop面试题及答案,希望对你有帮助
  • hadoop面试题汇总

    2018-06-15 07:00:13
    面试题汇总,比较全面的总结和题型筛选,面试题汇总,比较全面的总结和题型筛选,
  • Hadoop面试题

    2018-10-22 17:58:25
    Hadoop常见习题汇编,最新2018年版,仅供大家学习和交流使用,不得作为其他用途。
  • Hadoop面试题之Hadoop基础一 Hadoop面试题1.1 Hadoop基础(☆☆)1.1.1 下列哪项通常是集群的最主要瓶颈(C)磁盘 IO1.1.2 下列哪个是Hadoop运行的模式?(ABC)单机版、伪分布式、完全分布式1.1.3 列举几个hadoop...

    Hadoop面试题之Hadoop基础

    一 Hadoop面试题

    1.1 Hadoop基础(☆☆)

    1.1.1 下列哪项通常是集群的最主要瓶颈(C)磁盘 IO

    A.CPU
    B.网络
    C.磁盘 IO
    D.内存

    1.1.2 下列哪个是Hadoop运行的模式?(ABC)单机版、伪分布式、完全分布式

    A.单机版
    B.伪分布式
    C.完全分布式

    1.1.3 列举几个hadoop生态圈的组件并做简要描述(Zookeeper、Flume、Hbase、Hive、Sqoop)

    1)Zookeeper:是一个开源的分布式应用程序协调服务,基于zookeeper可以实现同步服务,配置维护,命名服务。
    2)Flume:一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统。
    3)Hbase:是一个分布式的、面向列的开源数据库, 利用Hadoop HDFS作为其存储系统。
    4)Hive:基于Hadoop的一个数据仓库工具,可以将结构化的数据档映射为一张数据库表,并提供简单的sql 查询功能,可以将sql语句转换为MapReduce任务进行运行。
    5)Sqoop:将一个关系型数据库中的数据导进到Hadoop的 HDFS中,也可以将HDFS的数据导进到关系型数据库中。

    1.1.4 解释“hadoop”和“hadoop 生态系统”两个概念。(Hadoop框架本身;hadoop生态系统还包括保证hadoop框架正常高效运行其他框)

    Hadoop是指Hadoop框架本身;hadoop生态系统,不仅包含hadoop,还包括保证hadoop框架正常高效运行其他框架,比如zookeeper、Flume、Hbase、Hive、Sqoop等辅助框架。

    1.1.5 简要描述如何安装配置apache的一个开源Hadoop,只描述即可,无需列出具体步骤,列出具体步骤更好。(11步)

    1)使用root账户登录
    2)修改IP
    3)修改host主机名
    4)配置SSH免密码登录
    5)关闭防火墙
    6)安装JDK
    7)解压hadoop安装包
    8)配置hadoop的核心文件 hadoop-env.sh,core-site.xml , mapred-site.xml , hdfs-site.xml
    9)配置hadoop环境变量
    10)格式化 hadoop namenode-format
    11)启动节点start-all.sh

    1.1.6 Hadoop中需要哪些配置文件,其作用是什么?(4个配置文件1)core-site.xml、2)hadoop-env.sh、3)hdfs-site.xml、4)mapred-site.xml)

    1)core-site.xml:
    (1)fs.defaultFS:hdfs://cluster1(域名),这里的值指的是默认的HDFS路径 。
    (2)hadoop.tmp.dir:/export/data/hadoop_tmp,这里的路径默认是NameNode、DataNode、secondaryNamenode等存放数据的公共目录。用户也可以自己单独指定这三类节点的目录。
    (3)ha.zookeeper.quorum:hadoop101:2181,hadoop102:2181,hadoop103:2181,这里是ZooKeeper集群的地址和端口。注意,数量一定是奇数,且不少于三个节点 。
    2)hadoop-env.sh: 只需设置jdk的安装路径,如:export JAVA_HOME=/usr/local/jdk。
    3)hdfs-site.xml:
    (1) dfs.replication:他决定着系统里面的文件块的数据备份个数,默认为3个。
    (2) dfs.data.dir:datanode节点存储在文件系统的目录 。
    (3) dfs.name.dir:是namenode节点存储hadoop文件系统信息的本地系统路径 。
    4)mapred-site.xml:
    mapreduce.framework.name: yarn指定mr运行在yarn上。

    1.1.7 请列出正常工作的Hadoop集群中Hadoop都分别需要启动哪些进程,它们的作用分别是什么?(7个,1)NameNode、2)SecondaryNameNode、3)DataNode、4)ResourceManager(JobTracker)、5)NodeManager、6)DFSZKFailoverController、7)JournalNode )

    1)NameNode它是hadoop中的主服务器,管理文件系统名称空间和对集群中存储的文件的访问,保存有metadate。
    2)SecondaryNameNode它不是namenode的冗余守护进程,而是提供周期检查点和清理任务。帮助NN合并editslog,减少NN启动时间。
    3)DataNode它负责管理连接到节点的存储(一个集群中可以有多个节点)。每个存储数据的节点运行一个datanode守护进程。
    4)ResourceManager(JobTracker)JobTracker负责调度DataNode上的工作。每个DataNode有一个TaskTracker,它们执行实际工作。
    5)NodeManager(TaskTracker)执行任务
    6)DFSZKFailoverController高可用时它负责监控NN的状态,并及时的把状态信息写入ZK。它通过一个独立线程周期性的调用NN上的一个特定接口来获取NN的健康状态。FC也有选择谁作为Active NN的权利,因为最多只有两个节点,目前选择策略还比较简单(先到先得,轮换)。
    7)JournalNode 高可用情况下存放namenode的editlog文件.

    1.1.8 简述Hadoop的几个默认端口及其含义(5个)

    1)dfs.namenode.http-address:50070
    2)SecondaryNameNode辅助名称节点端口号:50090
    3)dfs.datanode.address:50010
    4)fs.defaultFS:8020 或者9000
    5)yarn.resourcemanager.webapp.address:8088

    1.1.9 请列出正常工作的hadoop集群中hadoop都分别需要启动哪些进程,他们的作用分别是什么,尽可能写的全面些

    1.1.10 列出几个配置文件优化hadoop,怎么做数据平衡?列出步骤

    1.1.11 手绘Hadoop架构

    1.1.12 是否看过Hadoop源码

    1.1.13 Hadoop中RecordReader的作用是什么?

    1.1.14 Hadoop中job和Tasks之间的区别是什么?

    展开全文
  • 1、 HDFS 中的 block 默认...  HDFS中的文件在物理上是分块存储(block),块的大小可以通过配置参数( dfs.blocksize)来规定,默认大小在hadoop2.x版本中是128M,老版本中是64M。   思考:为什么块的大小不能设置的太
  • 1、简述hadoop1与hadoop2 的架构异同   1)加入了yarn解决了资源调度的问题。   2)加入了对zookeeper的支持实现比较可靠的高可用。 2、为什么会产生 yarn,它解决了什么问题,有什么优势?   1)Yarn最主要的功能...
  • Hadoop面试题(一)

    2021-01-07 09:46:37
    2、Hadoop运行模式   单机版、伪分布式模式、完全分布式模式 3、Hadoop生态圈的组件并做简要描述   1)Zookeeper:是一个开源的分布式应用程序协调服务,基于zookeeper可以实现同步服务,配置维护,命名服务。   2...
  • hadoop 面试题收集及个人答案整理

    万次阅读 2018-06-27 15:46:04
    1、简要描述如何安装配置一个apache开源版hadoop,描述即可,列出步骤更好 --解压hadoop包,到指定安装文件夹 --配置linux基本网络环境、jdk环境、防火墙环境 --修改主机名,方便后面UI的访问 --修改hadoop/etc/...

    1、简要描述如何安装配置一个apache开源版hadoop,描述即可,列出步骤更好

            --解压hadoop包,到指定安装文件夹

            --配置linux基本网络环境、jdk环境、防火墙环境

            --修改主机名,方便后面UI的访问

            --修改hadoop/etc/hadoop/conf下的配置文件,根据部署的模式和需要进行配置

            --格式化namenode,对数据缓存的的路径进行格式化

            --启动hadoop进程

    2、请列出正常工作的hadoop集群中hadoop都需要启动哪些进程,他们的作用分别是什么?


            --namenode =>HDFS的守护进程,负责维护整个文件系统,存储着整个文件系统的元数据信息,有image+edit log namenode不会持久化存储这些数据,而是在启动时重建这些数据。

            --datanode  =>是具体文件系统的工作节点,当我们需要某个数据,namenode告诉我们去哪里找,就直接和那个DataNode对应的服务器的后台进程进行通信,由DataNode进行数据的检索,然后进行具体的读/写操作

            --secondarynamenode  =>一个冗余的守护进程,相当于一个namenode的元数据的备份机制,定期的更新,和namenode进行通信,将namenode上的image和edits进行合并,可以作为namenode的备份使用

            --resourcemanager =>是yarn平台的守护进程,负责所有资源的分配与调度,client的请求由此负责,监控nodemanager

            --nodemanager  => 是单个节点的资源管理,执行来自resourcemanager的具体任务和命令

    3、启动hadoop报如下错误,该如何解决?

        --1.error  org.apache.hadoop.hdfs.server.namenode.NameNode 

            --找不到主类,应该是配置文件的hadoop的安装位置配置错误,对hadoop-env.sh文件进行检查修改

        --2.org.apache.hadoop.hdfs.server.common.inconsistentFSStateException

            --这个是存储目录不存在,或者被删除,对namenode进行格式化,或重新格式化,对tmp.dir进行自己的设置

        --3.Directory /tmp/hadoop-root/dfs/name is in an inconsistent 

            --这个和上面一样的,重新设置core-site.xml中hadoop.tmp.dir的值,对namenode进行格式化,

        --4.state storage direction does not exist or is not accessible?

            --之前是默认的tmp目录,每次重启都会清除这个数据,所以找不到整个文件系统的信息,重新设置core-site.xml中hadoop.tmp.dir的值,对namenode进行格式化,

    4、请列出你所知道的hadoop调度器,并简要说明其工作方法?

        --1.先进先出调度器(FIFO)

        --Hadoop 中默认的调度器,也是一种批处理调度器。它先按照作业的优先级高低,再按照到达时间的先后选择被执行的作业

     --2.容量调度器(Capacity Scheduler)

       --支持多个队列,每个队列可配置一定的资源量,每个队列采用FIFO调度策略,为了防止同一个用户的作业独占队列中的资源,该调度器会对同一用户提交的作业所占资源量进行限定。调度时,首先按以下策略选择一个合适队列:计算每个队列中正在运行的任务数与其应该分得的计算资源之间的比值,选择一个该比值最小的队列;然后按以下策略选择该队列中一个作业:按照作业优先级和提交时间顺序选择,同时考虑用户资源量限制和内存限制

     --3.公平调度器(Fair Scheduler)

       --公平调度是一种赋予作业(job)资源的方法,它的目的是让所有的作业随着时间的推移,都能平均的获取等同的共享资源。所有的 job 具有相同的资源,当单独一个作业在运行时,它将使用整个集群。当有其它作业被提交上来时,系统会将任务(task)空闲资源(container)赋给这些新的作业,以使得每一个作业都大概获取到等量的CPU时间。与Hadoop默认调度器维护一个作业队列不同,这个特性让小作业在合理的时间内完成的同时又不"饿"到消耗较长时间的大作业。公平调度可以和作业优先权搭配使用——优先权像权重一样用作为决定每个作业所能获取的整体计算时间的比例。同计算能力调度器类似,支持多队列多用户,每个队列中的资源量可以配置,  同一队列中的作业公平共享队列中所有资源。

    5、当前日志采样格式为如下,请编写MapReduce计算第四列每个元素出现的个数

    a,b,c,d

    a,s,d,f

    d,f,g,c       就如此格式,

    代码如下,比wordcount还要简单一点,代码差不多的

    package make.hadoop.com.four_column;
    
    import java.io.IOException;
    
    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.conf.Configured;
    import org.apache.hadoop.fs.FileSystem;
    import org.apache.hadoop.fs.Path;
    import org.apache.hadoop.io.IntWritable;
    import org.apache.hadoop.io.LongWritable;
    import org.apache.hadoop.io.Text;
    import org.apache.hadoop.mapreduce.Job;
    import org.apache.hadoop.mapreduce.Mapper;
    import org.apache.hadoop.mapreduce.Reducer;
    import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
    import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
    import org.apache.hadoop.util.Tool;
    import org.apache.hadoop.util.ToolRunner;
    
    public class four_column extends Configured implements Tool {
    	// 1、自己的map类
    	// 2、继承mapper类,<LongWritable, Text, Text,
    	// IntWritable>输入的key,输入的value,输出的key,输出的value
    	public static class MyMapper extends
    			Mapper<LongWritable, Text, Text, IntWritable> {
    		private IntWritable MapOutputkey = new IntWritable(1);
    		private Text MapOutputValue = new Text();
    
    		@Override
    		protected void map(LongWritable key, Text value, Context context)
    				throws IOException, InterruptedException {
    
    			String strs = value.toString();
    			// 分割数据
    			String str_four = strs.split(",")[3];
    
    			MapOutputValue.set(str_four);
    			System.out.println(str_four);
    			context.write(MapOutputValue, MapOutputkey);
    
    		}
    	}
    	// 2、自己的reduce类,这里的输入就是map方法的输出
    	public static class MyReduce extends
    			Reducer<Text, IntWritable, Text, IntWritable> {
    
    		IntWritable countvalue = new IntWritable(1);
    
    		@Override
    		// map类的map方法的数据输入到reduce类的group方法中,得到<text,it(1,1)>,再将这个数据输入到reduce方法中
    		protected void reduce(Text inputkey, Iterable<IntWritable> inputvalue,
    				Context context) throws IOException, InterruptedException {
    
    			int sum = 0;
    
    			for (IntWritable i : inputvalue) {
    				System.out.println(i.get());
    				sum = sum + i.get();
    			}
    			// System.out.println("key: "+inputkey + "...."+sum);
    			countvalue.set(sum);
    			context.write(inputkey, countvalue);
    		}
    	}
    	// 3运行类,run方法,在测试的时候使用main函数,调用这个类的run方法来运行
    
    	/**
    	 * param args 参数是接受main方得到的参数,在run中使用
    	 */
    	public int run(String[] args) throws Exception {
    
    		Configuration conf = new Configuration();
    
    		Job job = Job.getInstance(this.getConf(), "four_column");
    
    		// set mainclass
    		job.setJarByClass(four_column.class);
    
    		// set mapper
    		job.setMapperClass(MyMapper.class);
    		job.setMapOutputKeyClass(Text.class);
    		job.setMapOutputValueClass(IntWritable.class);
    
    		// set reducer
    		job.setReducerClass(MyReduce.class);
    		job.setOutputKeyClass(Text.class);
    		job.setOutputValueClass(IntWritable.class);
    
    		// set path
    		Path inpath = new Path(args[0]);
    		FileInputFormat.setInputPaths(job, inpath);
    		Path outpath = new Path(args[1]);
    		FileOutputFormat.setOutputPath(job, outpath);
    		FileSystem fs = FileSystem.get(conf);
    		// 存在路径就删除
    		if (fs.exists(outpath)) {
    			fs.delete(outpath, true);
    		}
    		job.setNumReduceTasks(1);
    
    		boolean status = job.waitForCompletion(true);
    
    		if (!status) {
    			System.err.println("the job is error!!");
    		}
    
    		return status ? 0 : 1;
    
    	}
    	public static void main(String[] args) throws IOException,
    			ClassNotFoundException, InterruptedException {
    
    		Configuration conf = new Configuration();
    
    		int atatus;
    		try {
    			atatus = ToolRunner.run(conf, new four_column(), args);
    			System.exit(atatus);
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    
    	}
    }
    

    6、hive有哪些方式保存元数据,各有哪些特点?

        --1.内嵌Derby数据库存储

            --这个是hive默认自带的内嵌数据库,用来储存元数据,但这个在配置了hiveserver2和metastore服务后,不支持多个用户同时登录,不方便对数据库的安全访问

        --2.multi user mode

            --在自己本地配一个,mysql的数据库用作,hive的元数据的存储数据库,这个需要要自己本地搭建一个mysql数据库,通过配置文件创建一个,hive自己的元数据库,也是我们学习一般会用的方式,配置一般如下

    <property>
     jasbdaksbdaskbdoajsbdasbu
      <name>javax.jdo.option.ConnectionURL</name>
      <value>jdbc:mysql://hostname:3306/hive?createDatabaseIfNotExist=true</value>
      <description>JDBC connect string for a JDBC metastore</description>
    </property>
    <property>
      <name>hive.metastore.uris</name>
        <value>thrift://hostname:9083</value>
          <description>IP address (or fully-qualified domain name) and port of the metastore host</description>
    </property>
    <property>
      <name>javax.jdo.option.ConnectionDriverName</name>
      <value>com.mysql.jdbc.Driver</value>
      <description>Driver class name for a JDBC metastore</description>
    </property>
    
    <property>
      <name>javax.jdo.option.ConnectionUserName</name>
      <value>xxxx</value>
      <description>username to use against metastore database</description>
    </property>
    
    <property>
      <name>javax.jdo.option.ConnectionPassword</name>
      <value>xxxx</value>
      <description>password to use against metastore database</description>
    </property>

        --3.remote server mode

           --一种在远端配置数据库服务的方式,这个需要配置metastore服务,通过客户端的metastore服务访问服务器上的元数据库达到访问数据的目的

    7、 请简述hadoop怎么样实现二级排序

            --在MapReduce中本身就会对我们key进行排序,所以我们要对value进行排序,主要思想为将key和部分value拼接成一个组合key(实现WritableComparable接口或者调用 setSortComparatorClass函数),这样reduce获取的结果便是先按key排序,后按value排序的结果,在这个方法中,用户需 要自己实现Paritioner,继承Partitioner<>,以便只按照key进行数据划分。Hadoop显式的支持二次排序,在Configuration类中有个 setGroupingComparatorClass()方法,可用于设置排序group的key值。

    8、用非递归方法实现二分查找

            --代码如下,二分查找只适用于有序数列,对其进行查找,效率非常高,不适用于无序数列

    public static int binSearch(int srcArray[], int key) {
    		int mid;
    		int start = 0;
    		int end = srcArray.length - 1;
    		while (start <= end) {
    			mid = (end - start) / 2 + start;
    			if (key < srcArray[mid]) {
    				end = mid - 1;
    			} else if (key > srcArray[mid]) {
    				start = mid + 1;
    			} else {
    				return mid;
    			}
    		}
    		return -1;
    	}

    递归的二分查找

    public static int binSearch_di(int srcArray[], int start, int end, int key) {
    		int mid = (end - start) / 2 + start;
    		if (srcArray[mid] == key) {
    			return mid;
    		}
    		if (start >= end) {
    			return -1;
    		} else if (key > srcArray[mid]) {
    			return binSearch_di(srcArray, mid + 1, end, key);
    		} else if (key < srcArray[mid]) {
    			return binSearch_di(srcArray, start, mid - 1, key);
    		}
    		return -1;
    	}

    9、请简述mapreduce中,combiner,partition作用?

            --在MapReduce整个过程中,combiner是可有可无的,需要是自己的情况而定,如果只是单纯的对map输出的key-value进行一个统计,则不需要进行combiner,combiner相当于提前做了一个reduce的工作,减轻了reduce端的压力,

    Combiner只应该适用于那种Reduce的输入(key:value与输出(key:value)类型完全一致,且不影响最终结果的场景。比如累加,最大值等,也可以用于过滤数据,在 map端将无效的数据过滤掉。

    在这些需求场景下,输出的数据是可以根据key值来作合并的,合并的目的是减少输出的数据量,减少IO的读写,减少网络传输,以提高MR的作业效率。

        1.combiner的作用就是在map端对输出先做一次合并,以减少传输到reducer的数据量.

        2.combiner最基本是实现本地key的归并,具有类似本地reduce,那么所有的结果都是reduce完成,效率会相对降低。

        3.使用combiner,先完成的map会在本地聚合,提升速度.

            --partition意思为分开,分区。它分割map每个节点的结果,按照key分别映射给不同的reduce,也是可以自定义的。其实可以理解归类。也可以理解为根据key或value及reduce的数量来决定当前的这对输出数据最终应该交由哪个reduce task处理 
    partition的作用就是把这些数据归类。每个map任务会针对输出进行分区,及对每一个reduce任务建立一个分区。划分分区由用户定义的partition函数控制,默认使用哈希函数来划分分区。 
    HashPartitioner是mapreduce的默认partitioner。计算方法是 

    which reducer=(key.hashCode() & Integer.MAX_VALUE) % numReduceTasks,得到当前的目的reducer。

    10、HDFS数据写入实现机制

            --写入HDFS过程:

                1、根namenode通信请求上传文件,namenode检查目标文件是否已存在,父目录是否存在 
                2、namenode返回是否可以上传 
                3、client会先对文件进行切分,比如一个blok块128m,文件有300m就会被切分成3个块,一个128M、一个128M、一个44M请求第一个 block该传输到哪些datanode服务器上 
                4、namenode返回datanode的服务器 
                5、client请求一台datanode上传数据(本质上是一个RPC调用,建立pipeline),第一个datanode收到请求会继续调用第二个datanode,然后第二个调用第三个datanode,将整个pipeline建立完成,逐级返回客户端 
                6、client开始往A上传第一个block(先从磁盘读取数据放到一个本地内存缓存),以packet为单位(一个packet为64kb),当然在写入的时候datanode会进行数据校验,它并不是通过一个packet进行一次校验而是以chunk为单位进行校验(512byte),第一台datanode收到一个packet就会传给第二台,第二台传给第三台;第一台每传一个packet会放入一个应答队列等待应答 
                7、当一个block传输完成之后,client再次请求namenode上传第二个block的服务器。

            --读取文件过程:

                使用HDFS提供的客户端开发库Client,向远程的Namenode发起RPC请求;Namenode会视情况返回文件的部分或全部block列表,对于每个block,Namenode都会返回有该block拷贝的DataNode地址;客户端开发库Client会选取离客户端最接近的DataNode来读取block;如果客户端本身就是DataNode,那么将从本地直接获取数据.读取完当前block的数据后,关闭与当前的DataNode连接,并为读取下一个block寻找最佳的DataNode;当读完列表的block后,且文件读取还没有结束,客户端开发库会继续向Namenode获取下一批的block列表。读取完一个block都会进行 checksum 验证,如果读取 datanode 时出现错误,客户端会通知 Namenode,然后再从下一个拥有该 block 拷贝的 datanode 继续读。


    11、hadoop节点的动态上线下线的大概操作

            --节点上线

                1.关闭新增节点的防火墙
                2.在 NameNode节点的hosts文件中加入新增数据节点的hostname
                3.在每个新增数据节点的hosts文件中加入NameNode的hostname
                4.在NameNode节点上增加新增节点的SSH免密码登录的操作
                5.在NameNode节点上的dfs.hosts中追加上新增节点的hostname,
                6.在其他节点上执行刷新操作:hdfs dfsadmin -refreshNodes
                7.在 NameNode 节点上,更改slaves文件,将要上线的数据节点hostname追加
                到slaves文件中
                8.启动DataNode节点

                9.查看NameNode的监控页面看是否有新增加的节点      

           --节点下线

                1.修改/conf/hdfs-site.xml文件
                2.确定需要下线的机器,dfs.osts.exclude文件中配置好需要下架的机器,这个是阻
                止下架的机器去连接NameNode
                3.配置完成之后进行配置的刷新操作./bin/hadoop dfsadmin -refreshNodes,这个
                操作的作用是在后台进行block块的移动
                4.当执行三的命令完成之后,需要下架的机器就可以关闭了,可以查看现在集
                群上连接的节点,正在执行 Decommission,会显示:
                Decommission Status : Decommission in progress 执行完毕后,会显示:
                Decommission Status : Decommissioned

                5.机器下线完毕,将他们从 excludes 文件中移除。

    暂时写到这

    展开全文
  • 100 道常见 Hadoop 面试题及答案解析

    千次阅读 2017-10-12 12:00:20
    100 道常见 Hadoop 面试题及答案解析 目录 1 单选题 ...................................................................................................................... 5 ...

     

    100 道常见 Hadoop 面试题及答案解析

    目录

    1

    单选题

    ......................................................................................................................

    5

     

    1.1

    下面哪个程序负责 HDFS 数据存储。 ........................................................

    5

     

    1.2

    HDfS 中的 block 默认保存几份? .............................................................

    5

     

    1.3

    下列哪个程序通常与 NameNode 在一个节点启动? ..................................

    5

     

    1.4

    Hadoop  作者..............................................................................................

    6

     

    1.5

    HDFS  默认 Block Size ..............................................................................

    6

     

    1.6

    下列哪项通常是集群的最主要瓶颈:...........................................................

    6

     

    1.7

    关于 SecondaryNameNode 哪项是正确的? .............................................

    6

    2

    多选题

    ......................................................................................................................

    7

     

    2.1

    下列哪项可以作为集群的管理?..................................................................

    7

     

    2.2

    配置机架感知的下面哪项正确:..................................................................

    7

     

    2.3

    Client  端上传文件的时候下列哪项正确? ...................................................

    7

     

    2.4

    下列哪个是 Hadoop  运行的模式: ............................................................

    7

    3

    2.5

    Cloudera 提供哪几种安装 CDH 的方法? .................................................

    7

     

    判断题

    ......................................................................................................................

    8

     

    3.1

    Ganglia  不仅可以进行监控,也可以进行告警。( 正确) ...........................

    8

     

    3.2

    Block Size  是不可以修改的。(错误 ).......................................................

    8

     

    3.3

    Nagios  不可以监控 Hadoop  集群,因为它不提供 Hadoop

    支持。(错误 )

     

     

    8

     

     

     

    3.4

    如果 NameNode 意外终止,SecondaryNameNode 会接替它使集群继续工

     

    作。(错误 )............................................................................................................

    8

     

    3.5

    Cloudera CDH  是需要付费使用的。(错误 ).............................................

    8

     

    3.6

    Hadoop  是 Java  开发的,所以 MapReduce  只支持 Java

    语言编写。(错

     

    误 )

    8

     

     

     

    3.7

    Hadoop  支持数据的随机读写。(错 ) .......................................................

    8

     

    3.8

    NameNode  负责管理 metadata,client  端每次读写请求,它都会从磁盘中

     

    读取或则会写入 metadata 信息并反馈 client 端。(错误)......................................

    8

     

    3.9

    NameNode  本地磁盘保存了 Block 的位置信息。( 个人认为正确,欢迎提出

     

    其它意见) ...............................................................................................................

    9

     

    3.10

    DataNode 通过长连接与 NameNode  保持通信。(有分歧 ) ....................

    9

     

    3.11

    Hadoop  自身具有严格的权限管理和安全措施保障集群正常运行。(错误 )

     

     

    9

     

     

     

    3.12

    Slave 节点要存储数据,所以它的磁盘越大越好。( 错误)........................

    9

     

    3.13

    hadoop dfsadmin –report 命令用于检测 HDFS  损坏块。(错误 ) ............

    9

     

    3.14

    Hadoop  默认调度器策略为 FIFO(正确 ) ...............................................

    9


     

    3.15

    集群内每个节点都应该配 RAID,这样避免单磁盘损坏,影响整个节点运行。

    (错误 ) .................................................................................................................

    9

    3.16

    因为 HDFS 有多个副本,所以 NameNode  是不存在单点问题的。(错误 )

     

    9

     

    3.17

    每个 map 槽就是一个线程。(错误 ) .......................................................

    9

    3.18

    Mapreduce  的 input split  就是一个 block。(错误 ) ..............................

    10

    3.19

    NameNode  的 Web UI  端口是 50030,它通过 jetty 启动的 Web 服务。(错

    误 )

    10

     

    3.20

    Hadoop  环境变量中的 HADOOP_HEAPSIZE 用于设置所有 Hadoop 守护

    线程的内存。它默认是 200 GB。( 错误).............................................................

    10

    3.21

    DataNode 首次加入 cluster 的时候,如果  log  中报告不兼容文件版本,那

    需要 NameNode 执行“Hadoop namenode -format”操作格式化磁盘。(错误 ) ......

    10

    4   问答题(一)..........................................................................................................

    10

    4.1

    Hadoop 集群可以运行的 3 个模式? ........................................................

    10

    4.2

    单机(本地)模式中的注意点?................................................................

    10

    4.3

    伪分布模式中的注意点? ..........................................................................

    10

    4.4

    VM 是否可以称为Pseudo? ....................................................................

    10

    4.5

    全分布模式又有什么注意点? ...................................................................

    10

    4.6

    Hadoop 是否遵循 UNIX 模式? ...............................................................

    11

    4.7

    Hadoop 安装在什么目录下?...................................................................

    11

    4.8

    Namenode、Jobtracker 和tasktracker 的端口号是? ............................

    11

    4.9

    Hadoop 的核心配置是什么?...................................................................

    11

    4.10

    那当下又该如何配置?..............................................................................

    11

    4.11

    RAM 的溢出因子是? ...............................................................................

    11

    4.12

    fs.mapr.working.dir 只是单一的目录? ....................................................

    11

    4.13

    hdfs-site.xml 的 3 个主要属性? ..............................................................

    11

    4.14

    如何退出输入模式? .................................................................................

    11

    4.15

    当你输入 hadoopfsck/造成“connectionrefusedjavaexception’”时,系

    统究竟发生了什么? ...............................................................................................

    11

    4.16

    我们使用 Ubuntu 及Cloudera,那么我们该去哪里下载 Hadoop,或者是默

    认就与 Ubuntu 一起安装? ....................................................................................

    11

    4.17

    “jps”命令的用处? ................................................................................

    11

    4.18

    如何重启 Namenode?............................................................................

    11

    4.19

    Fsck 的全名?...........................................................................................

    12

    4.20

    如何检查 Namenode是否正常运行? ......................................................

    12

    4.21

    mapred.job.tracker 命令的作用? ...........................................................

    12

    4.22

    /etc/init.d 命令的作用是? .......................................................................

    12

    4.23

    如何在浏览器中查找Namenode? ..........................................................

    12

    4.24

    如何从 SU 转到Cloudera? .....................................................................

    12


    4.25

    启动和关闭命令会用到哪些文件?

    ............................................................

    12

     

    4.26

    Slaves 由什么组成? ................................................................................

    12

     

    4.27

    Masters 由什么组成?..............................................................................

    12

     

    4.28

    hadoop-env.sh 是用于做什么的? ...........................................................

    12

     

    4.29

    Master 文件是否提供了多个入口? ..........................................................

    12

     

    4.30

    hadoop-env.sh 文件当下的位置? ...........................................................

    12

     

    4.31

    在 Hadoop_PID_DIR 中,PID 代表了什么? ............................................

    12

     

    4.32

    /var/hadoop/pids 用于做什么? .............................................................

    12

     

    4.33

    hadoop-metrics.properties 文件的作用是? ..........................................

    12

     

    4.34

    Hadoop 需求什么样的网络?...................................................................

    13

     

    4.35

    全分布式环境下为什么需求 password-lessSSH? ....................................

    13

     

    4.36

    这会导致安全问题吗?..............................................................................

    13

     

    4.37

    SSH 工作的端口号是? .............................................................................

    13

     

    4.38

    SSH 中的注意点还包括? .........................................................................

    13

     

    4.39

    为什么 SSH本地主机需要密码? ..............................................................

    13

     

    4.40

    如果在 SSH中添加key,是否还需要设置密码? ......................................

    13

     

    4.41

    假如 Namenode中没有数据会怎么样? ..................................................

    13

     

    4.42

    当 JobTracker 宕掉时,Namenode 会发生什么? ...................................

    13

     

    4.43

    是客户端还是 Namenode决定输入的分片? ...........................................

    13

     

    4.44

    是否可以自行搭建 Hadoop 集群? ...........................................................

    13

     

    4.45

    是否可以在 Windows 上运行Hadoop? .................................................

    13

     

    5   问答题(二)..........................................................................................................

     

     

    13

     

    5.1

    写出以下执行命令.....................................................................................

    13

     

    5.2

    简述一下 hdfs的数据压缩算法,工作中用的是那种算法,为什么? ..........

    14

     

    5.3

    三个 datanode,当有一个 datanode 出现错误会怎样?..........................

    14

     

    5.4

    hdfs 原理,以及各个模块的职责?

    ...........................................................

    14

     

    5.5

    哪个进程通常与 namenode 在一个节点启动?并做分析 ..........................

    16

     

    5.6

    hdfs 的体系结构? ...................................................................................

    16

     

    5.7

    HDFS,replica  如何定位..........................................................................

    17

     

    5.8

    HDFS  存储的机制? ..................................................................................

    17

     

    5.9

    hdfs 的 client 端,复制到第三个副本时宕机, hdfs  怎么恢复保证下次写第三

     

    副本?

    18

     

     

     

     

     

    5.10

    block 块信息是先写 dataNode 还是先写   nameNode? .............................

    18

     

    5.11

    Hive

    join

    join.............................................

    18

     

     

    有几种方式,怎么实现

    的?

     

     

    5.12

    hive 内部表和外部表的区别? ...................................................................

    19

     

    5.13

    hive 是如何实现分区的? ..........................................................................

    19

     

    5.14

    hive 支持 not in吗? .................................................................................

    19

     

    5.15

    Hive 有哪些方式保存元数据,各有哪些优缺点。 .....................................

    19

     


     

    5.16         hive 如何优化.......................................................................................................................... 19

     

    5.17         hive 能像关系数据库那样,建多个库吗?................................................................ 19

     

    5.18         hive 中的压缩格式 RCFile、TextFile、 SequenceFile  各有什么区别? . 19

     

    5.19         hive 相对于 Oracle  来说有那些优点?.................................................................... 20

     

    5.20         Hive 的 sort by  和 orderby  的区别......................................................................... 20

     

    1     单选题

     

    1.1     下面哪个程序负责 HDFS    数据存储。

     

    a)NameNode

     

    b)Jobtracker

     

    c)Datanode

     

    d)secondaryNameNode

     

    e)tasktracker

     

    答案 C datanode

     

    1.2    HDfS中的 block    默认保存几份?

     

    a)3 份

     

    b)2 份

     

    c)1 份

     

    d)不确定

     

    答案 A 默认 3 分

     

    1.3     下列哪个程序通常与 NameNode 在一个节点启动?


    a)SecondaryNameNode


    b)DataNode


    c)TaskTracker


    d)Jobtracker

     

    答案 D,此题分析:

     

    hadoop 的集群是基于master/slave 模式,namenode和jobtracker 属于master,datanode 和tasktracker 属 于slave ,master 只 有 一 个 , 而slave 有 多 个SecondaryNameNode 内存需求和NameNode 在一个数量级上,所以通常secondary NameNode(运行在单独的物理机器上)和NameNode 运行在不同的机器上。JobTracker 和TaskTracker

    JobTracker 对应于NameNode

    TaskTracker 对应于 DataNode

    DataNode 和NameNode 是针对数据存放来而言的JobTracker 和TaskTracker 是对于MapReduce 执行而言的

    mapreduce 中几个主要概念,mapreduce整体上可以分为这么几条执行线索:obclient, JobTracker 与 TaskTracker。

     

    1、JobClient会在用户端通过JobClient类将应用已经配置参数打包成jar文件存储到hdfs,并把路径提交到 Jobtracker,然后由 JobTracker 创建每一个 Task(即 MapTask 和


    ReduceTask)并将它们分发到各个 TaskTracker 服务中去执行。

     

    2、JobTracker 是一个 master 服务,软件启动之后JobTracker 接收Job,负责调度Job 的每一个子任务task 运行于 TaskTracker 上,并监控它们,如果发现有失败的 task 就重新运行它。一般情况应该把 JobTracker 部署在单独的机器上。

    3、TaskTracker是运行在多个节点上的slaver 服务。TaskTracker主动与JobTracker 通信,


    接收作业,并负责直接执行每一个任务。TaskTracker 都需要运行在 HDFS 的 DataNode 上。

    1.4    Hadoop    作者


    a)Martin Fowler

     

    b)Kent Beck

     

    c)Doug cutting

     

    答案 C Doug cutting

     

     

    1.5    HDFS默认 Block Size

     

    a)32MB

     

    b)64MB

     

    c)128MB

     

    答案:B

     

    (因为版本更换较快,这里答案只供参考)


     

    1.6     下列哪项通常是集群的最主要瓶颈:

     

    a)CPU

     

    b)网络

     

    c)磁盘IO

     

    d)内存

     

    答案:C 磁盘

     

    该题解析:

     

    首先集群的目的是为了节省成本,用廉价的pc 机,取代小型机及大型机。小型机和大型机有什么特点?

     

    1.cpu 处理能力强

     

    2.内存够大

     

    所以集群的瓶颈不可能是 a 和 d

     

    3.网络是一种稀缺资源,但是并不是瓶颈。

     

    4.由于大数据面临海量数据,读写数据都需要io,然后还要冗余数据,hadoop一般备 3份数据,所以 IO 就会打折扣。

     

    1.7 关于 SecondaryNameNode 哪项是正确的?a)它是 NameNode 的热备b)它对内存没有要求


    c)它的目的是帮助 NameNode 合并编辑日志,减少NameNode 启动时间 d)SecondaryNameNode应与NameNode 部署到一个节点。答案C

     

    2     多选题

     

    2.1     下列哪项可以作为集群的管理?

     

    a)Puppet

     

    b)Pdsh

     

    c)Cloudera Manager

     

    d)Zookeeper

     

    答案:ABD

     

    2.2     配置机架感知的下面哪项正确:

     

    a)如果一个机架出问题,不会影响数据读写

     

    b)写入数据的时候会写到不同机架的DataNode 中c)MapReduce 会根据机架获取离自己比较近的网络数据

     

    答案 ABC

     

    2.3    Client    端上传文件的时候下列哪项正确?

     

    a)数据经过NameNode 传递给DataNode

     

    b)Client 端将文件切分为 Block,依次上传

     

    c)Client 只上传数据到一台DataNode,然后由NameNode 负责Block 复制工作答案 B,该题分析:

     

    Client 向NameNode 发起文件写入的请求。

     

    NameNode 根据文件大小和文件块配置情况,返回给Client 它所管理部分DataNode 的信息。

     

    Client 将文件划分为多个Block,根据DataNode 的地址信息,按顺序写入到每一个DataNode 块中。

     

    2.4     下列哪个是 Hadoop  运行的模式:

     

    a)单机版

     

    b)伪分布式

     

    c)分布式

     

    答案 ABC

     

    2.5    Cloudera 提供哪几种安装 CDH    的方法?

     

    a)Cloudera manager

     

    b)Tarball

     

    c)Yum

     

    d)Rpm

     

    答案:ABCD


     

    3     判断题

     

    3.1    Ganglia不仅可以进行监控,也可以进行告警。(    正确)

     

    分析:此题的目的是考 Ganglia 的了解。严格意义上来讲是正确。ganglia 作为一款最常用

     

    的 Linux环境中的监控软件,它擅长的的是从节点中按照用户的需求以较低的代价采集数据。但是ganglia 在预警以及发生事件后通知用户上并不擅长。最新的ganglia 已经有了部分

     

    这方面的功能。但是更擅长做警告的还有 Nagios。Nagios,就是一款精于预警、通知的软件。通过将 Ganglia 和Nagios 组合起来,把 Ganglia采集的数据作为Nagios 的数据源,然后利用 Nagios 来发送预警通知,可以完美的实现一整套监控管理的系统。

     

    3.2    BlockSize 是不可以修改的。(错误)

     

    分析:它是可以被修改的 Hadoop 的基础配置文件是 hadoop-default.xml,默认建立一

     

    个 Job的时候会建立Job 的Config,Config首先读入hadoop-default.xml 的配置,然后再读入 hadoop-site.xml 的配置(这个文件初始的时候配置为空),hadoop-site.xml 中主要配置需要覆盖的 hadoop-default.xml 的系统级配置。

     

    3.3 Nagios 不可以监控 Hadoop 集群,因为它不提供 Hadoop 支持。(错误 )分析:Nagios 是集群监控工具,而且是云计算三大利器之一

     

    3.4 如果 NameNode 意外终止,SecondaryNameNode 会接替它使集群继续工作。(错误 )

     

    分析:SecondaryNameNode 是帮助恢复,而不是替代,如何恢复,可以查看 3.5 Cloudera CDH 是需要付费使用的。(错误 )

     

    分析:第一套付费产品是 ClouderaEnterpris,ClouderaEnterprise 在美国加州举行的 Hadoop大会(Hadoop Summit) 上公开,以若干私有管理、 监控、运作工具加 强 Hadoop 的功能。收费采取合约订购方式,价格随用的 Hadoop 叢集大小变动。

     

    3.6  Hadoop 是 Java 开发的,所以 MapReduce 只支持 Java 语言编写。(错误 )

     

    分析:rhadoop 是用 R 语言开发的,MapReduce 是一个框架,可以理解是一种思想,可以使用其他语言开发。

     

    3.7    Hadoop支持数据的随机读写。(错        )

     

    分析:lucene是支持随机读写的,而 hdfs 只支持随机读。但是HBase 可以来补救。HBase提供随机读写,来解决Hadoop 不能处理的问题。HBase自底层设计开始即聚焦于各种可伸缩性问题:表可以很“高”,有数十亿个数据行;也可以很“宽”,有数百万个列;水平分区并在上千个普通商用机节点上自动复制。表的模式是物理存储的直接反映,使系统有可能提高高效的数据结构的序列化、存储和检索。

     

    3.8    NameNode 负责管理 metadata,client 端每次读写请求,它都会从磁盘中读取或则会写入 metadata 信息并反馈 client 端。(错误)

     

    此题分析:

     

    NameNode 不需要从磁盘读取metadata,所有数据都在内存中,硬盘上的只是序列化的结果,只有每次namenode 启动的时候才会读取。

     

    1)文件写入

     

    Client 向NameNode 发起文件写入的请求。


     

    NameNode 根据文件大小和文件块配置情况,返回给Client 它所管理部分DataNode 的信息。

     

    Client 将文件划分为多个Block,根据DataNode 的地址信息,按顺序写入到每一个DataNode 块中。

     

    2)文件读取

     

    Client 向NameNode 发起文件读取的请求。

     

    3.9    NameNode 本地磁盘保存了 Block 的位置信息。( 个人认为正确,欢迎提出其它意见)

     

    分析:DataNode 是文件存储的基本单元,它将 Block 存储在本地文件系统中,保存了 Block

     

    的 Meta-data,同时周期性地将所有存在的 Block 信息发送给NameNode。NameNode返回文件存储的 DataNode 的信息。

     

    Client 读取文件信息。

     

    3.10 DataNode 通过长连接与 NameNode 保持通信。(有分歧 )

     

    这个有分歧:具体正在找这方面的有利资料。下面提供资料可参考。

     

    首先明确一下概念:

     

    (1).长连接

     

    Client 方与Server方先建立通讯连接,连接建立后不断开,然后再进行报文发送和接收。

     

    这种方式下由于通讯连接一直存在,此种方式常用于点对点通讯。

     

    (2).短连接

     

    Client 方与Server 每进行一次报文收发交易时才进行通讯连接,交易完毕后立即断开连接。此种方式常用于一点对多点通讯,比如多个Client 连接一个 Server.

     

    3.11 Hadoop 自身具有严格的权限管理和安全措施保障集群正常运行。(错误       )

     

    hadoop 只能阻止好人犯错,但是不能阻止坏人干坏事

     

    3.12 Slave 节点要存储数据,所以它的磁盘越大越好。(         错误)

     

    分析:一旦 Slave 节点宕机,数据恢复是一个难题

     

    3.13 hadoop dfsadmin –report 命令用于检测 HDFS 损坏块。(错误 )

     

    3.14 Hadoop 默认调度器策略为  FIFO(正确 )

     

    3.15 集群内每个节点都应该配 RAID,这样避免单磁盘损坏,影响整个节点运行。(错误 )

     

    分析:首先明白什么是RAID,可以参考百科磁盘阵列。这句话错误的地方在于太绝对,具体情况具体分析。题目不是重点,知识才是最重要的。因为hadoop 本身就具有冗余能力,所以如果不是很严格不需要都配备RAID。具体参考第二题。

     

    3.16 因为 HDFS 有多个副本,所以 NameNode 是不存在单点问题的。(错误 )

     

    3.17 每个 map 槽就是一个线程。(错误 )

     

    分析:首先我们知道什么 是 map 槽,map 槽->mapslotmap slot 只是一个逻辑 值

     

    ( org.apache.hadoop.mapred.TaskTracker.TaskLauncher.numFreeSlots ),而不是对应着一个线程或者进程


     

    3.18 Mapreduce 的 inputsplit 就是一个 block。(错误 )

     

    3.19 NameNode 的 Web UI 端口是 50030,它通过 jetty 启动的 Web    服务。(错

     

    误 )

     

    3.20 Hadoop 环境变量中的 HADOOP_HEAPSIZE 用于设置所有 Hadoop 守护线程的内存。它默认是 200 GB。( 错误)

     

     

    hadoop 为各个守护进程

     

    (namenode,secondarynamenode,jobtracker,datanode,tasktracker)统一分配的内存在 hadoop-env.sh 中设置,参数为HADOOP_HEAPSIZE,默认为 1000M。

     

    3.21 DataNode 首次加入 cluster 的时候,如果 log   中报告不兼容文件版本,那需

     

    要 NameNode 执行“Hadoop namenode -format”操作格式化磁盘。(错误 )

     

    分析:

     

    首先明白介绍,什么 ClusterID

     

    ClusterID

     

    添加了一个新的标识符 ClusterID 用于标识集群中所有的节点。当格式化一个 Namenode,需要提供这个标识符或者自动生成。这个 ID 可以被用来格式化加入集群的其他 Namenode。二次整理

     

    有的同学问题的重点不是上面分析内容:内容如下:

     

    这个报错是说明 DataNode 所装的Hadoop版本和其它节点不一致,应该检查DataNode的 Hadoop 版本

     

    4     问答题(一)

     

    4.1     Hadoop 集群可以运行的 3 个模式?

     

    单机(本地)模式

     

    伪分布式模式

     

    全分布式模式

     

    4.2     单机(本地)模式中的注意点?

     

    在单机模式(standalone)中不会存在守护进程,所有东西都运行在一个 JVM 上。这里同样没有 DFS,使用的是本地文件系统。单机模式适用于开发过程中运行 MapReduce 程序,这也是最少使用的一个模式。

     

    4.3     伪分布模式中的注意点?

     

    伪分布式(Pseudo)适用于开发和测试环境,在这个模式中,所有守护进程都在同一台机器上运行。

     

    4.4     VM 是否可以称为 Pseudo?

     

    不是,两个事物,同时 Pseudo 只针对 Hadoop。

     

    4.5     全分布模式又有什么注意点?

     

    全分布模式通常被用于生产环境,这里我们使用 N 台主机组成一个 Hadoop 集群, Hadoop 守护进程运行在每台主机之上。这里会存在 Namenode 运行的主机,Datanode运行的主机,以及 tasktracker 运行的主机。在分布式环境下,主节点和从节点会分开。


     

    4.6     Hadoop 是否遵循 UNIX 模式?

     

    是的,在 UNIX 用例下,Hadoop 还拥有“conf”目录。

     

    4.7     Hadoop 安装在什么目录下?

     

    Cloudera 和 Apache 使 用 相 同 的 目 录 结 构 , Hadoop 被 安 装 在cd/usr/lib/hadoop-0.20/。

     

    4.8   Namenode、Jobtracker tasktracker 的端口号是?Namenode,70;Jobtracker,30;Tasktracker,60。

     

    4.9     Hadoop 的核心配置是什么?

     

    Hadoop 的核心配置通过两个 xml 文件来完成:1,hadoop-default.xml;2,hadoop-site.xml。这些文件都使用 xml 格式,因此每个 xml 中都有一些属性,包括名称

     

    和值,但是当下这些文件都已不复存在。

     

    4.10    那当下又该如何配置?

     

    Hadoop 现在拥有 3个配置文件:1,core-site.xml;2,hdfs-site.xml;3,

     

    mapred-site.xml。这些文件都保存在 conf/子目录下。

     

    4.11 RAM 的溢出因子是?

     

    溢出因子(Spillfactor)是临时文件中储存文件的大小,也就是 Hadoop-temp 目录。 4.12 fs.mapr.working.dir 只是单一的目录?

     

    fs.mapr.working.dir 只是一个目录。

     

    4.13 hdfs-site.xml 3 个主要属性?

     

    dfs.name.dir 决定的是元数据存储的路径以及 DFS 的存储方式(磁盘或是远端) dfs.data.dir 决定的是数据存储的路径

     

    fs.checkpoint.dir 用于第二 Namenode

     

    4.14    如何退出输入模式?

     

    退出输入的方式有:1,按ESC;2,键入:q(如果你没有输入任何当下)或者键入:wq(如果你已经输入当下),并且按下 Enter。

     

    4.15 当你输入 hadoopfsck/造成“connectionrefusedjavaexception’”时,系统究竟发生了什么?

     

    这意味着 Namenode 没有运行在你的 VM 之上。

     

    4.16 我们使用 Ubuntu Cloudera,那么我们该去哪里下载 Hadoop,或者是默认就与 Ubuntu 一起安装?

     

    这个属于Hadoop 的默认配置,你必须从Cloudera 或者 Edureka 的dropbox 下载,然后在你的系统上运行。当然,你也可以自己配置,但是你需要一个 Linuxbox,Ubuntu

     

    或者是 RedHat。在 Cloudera 网站或者是 Edureka 的 Dropbox 中有安装步骤。

     

    4.17 “jps”命令的用处?

     

    这个命令可以检查 Namenode、Datanode、TaskTracker、JobTracker     是否正常工

     

    作。

     

    4.18 如何重启 Namenode?

     

    点击 stop-all.sh,再点击 start-all.sh。


     

    键 入 sudohdfs ( Enter), su-hdfs ( Enter),/etc/init.d/ha (Enter), 及/etc/init.d/hadoop-0.20-namenodestart(Enter)。

     

    4.19 Fsck 的全名?

     

    全名是:FileSystemCheck。

     

    4.20 如何检查 Namenode 是否正常运行?

     

    如 果 要 检 查 Namenode 是 否 正 常 工 作 , 使 用 命 令 /etc/init.d/hadoop-0.20-namenodestatus 或者就是简单的 jps。

     

    4.21 mapred.job.tracker 命令的作用?

     

    可以让你知道哪个节点是 JobTracker。

     

    4.22 /etc/init.d 命令的作用是?

     

    /etc/init.d 说明了守护进程(服务)的位置或状态,其实是 LINUX 特性,和 Hadoop 关系不大。

     

    4.23 如何在浏览器中查找 Namenode?

     

    如果你确实需要在浏览器中查找 Namenode,你不再需要 localhost:8021, Namenode 的端口号是50070。

     

    4.24 如何从 SU 转到 Cloudera?

     

    从 SU转到Cloudera 只需要键入exit。

     

    4.25    启动和关闭命令会用到哪些文件?

     

    Slaves 及Masters。

     

    4.26 Slaves 由什么组成?

     

    Slaves 由主机的列表组成,每台1 行,用于说明数据节点。

     

    4.27 Masters 由什么组成?

     

    Masters 同样是主机的列表组成,每台一行,用于说明第二 Namenode 服务器。 4.28 hadoop-env.sh 是用于做什么的?

     

    hadoop-env.sh 提供了Hadoop 中.JAVA_HOME 的运行环境。

     

    4.29 Master 文件是否提供了多个入口?

     

    是的你可以拥有多个 Master 文件接口。

     

    4.30 hadoop-env.sh 文件当下的位置?

     

    hadoop-env.sh 现在位于 conf。

     

    4.31 Hadoop_PID_DIR 中,PID 代表了什么?

     

    PID 代表了“ProcessID”。

     

    4.32 /var/hadoop/pids 用于做什么?

     

    /var/hadoop/pids用来存储PID。

     

    4.33 hadoop-metrics.properties 文件的作用是?

     

    hadoop-metrics.properties 被用做“Reporting”,控制Hadoop 报告,初始状态是“nottoreport”。


     

    4.34 Hadoop 需求什么样的网络?

     

    Hadoop 核心使用 Shell(SSH)来驱动从节点上的服务器进程,并在主节点和从节点之间使用password-lessSSH 连接。

     

    4.35 全分布式环境下为什么需求 password-lessSSH?

     

    这主要因为集群中通信过于频繁,JobTracker 需要尽可能快的给 TaskTracker 发布任

     

    务。

     

    4.36    这会导致安全问题吗?

     

    完全不用担心。Hadoop 集群是完全隔离的,通常情况下无法从互联网进行操作。与众不同的配置,因此我们完全不需要在意这种级别的安全漏洞,比如说通过互联网侵入等等。 Hadoop为机器之间的连接提供了一个相对安全的方式。

     

    4.37 SSH 工作的端口号是?

     

    SSH 工作的端口号是 NO.22,当然可以通过它来配置,22 是默认的端口号。 4.38 SSH 中的注意点还包括?

     

    SSH 只是个安全的 shell 通信,可以把它当做 NO.22 上的一种协议,只需要配置一个密码就可以安全的访问。

     

    4.39 为什么 SSH 本地主机需要密码?

     

    在 SSH 中使用密码主要是增加安全性,在某些情况下也根本不会设置密码通信。 4.40 如果在 SSH 中添加 key,是否还需要设置密码?

     

    是的,即使在 SSH 中添加了 key,还是需要设置密码。

     

    4.41 假如 Namenode 中没有数据会怎么样?

     

    没有数据的 Namenode 就不能称之为 Namenode,通常情况下,Namenode 肯定会有数据。

     

    4.42 JobTracker 宕掉时,Namenode 会发生什么?

     

    当 JobTracker 失败时,集群仍然可以正常工作,只要 Namenode 没问题。 4.43 是客户端还是 Namenode 决定输入的分片?

     

    这并不是客户端决定的,在配置文件中以及决定分片细则。

     

    4.44 是否可以自行搭建 Hadoop 集群?

     

    是的,只要对 Hadoop 环境足够熟悉,你完全可以这么做。

     

    4.45 是否可以在 Windows 上运行 Hadoop?

     

    你最好不要这么做,RedHatLinux或者是 Ubuntu 才是Hadoop 的最佳操作系统。在 Hadoop 安装中,Windows 通常不会被使用,因为会出现各种各样的问题。因此,Windows绝对不是 Hadoop 的推荐系统。

     

     

    5     问答题(二)

     

    5.1     写出以下执行命令

     

    1) 如何杀死一个job

     

    先 Hadoop job -list 得到 jobid杀死job:hadoop job -kill jobid 2) 删除 hdfs 上的/tmp/xxx 目录 hadoop fs -rm -r /tmp/xxx


     

    3) 加入一个新的存储节点和删除一个计算节点,需要刷新集群状态命令加入新节点时:

     

    Hadoop-daemon.sh start datanode

     

    Hadoop-daemon.sh start tasktracker

     

    删除节点时

     

    Hadoop maradmin -refreshnodes

     

    Hadoop dfsadmin -refreshnodes

     

    5.2     简述一下 hdfs 的数据压缩算法,工作中用的是那种算法,为什么?

     

    1、在HDFS 之上将数据压缩好后,再存储到HDFS

     

    2、在HDFS 内部支持数据压缩,这里又可以分为几种方法:

     

    2.1、压缩工作在DataNode 上完成,这里又分两种方法:

     

    2.1.1、数据接收完后,再压缩

     

    这个方法对 HDFS 的改动最小,但效果最低,只需要在 block 文件 close 后,调用压缩工具,将 block 文件压缩一下,然后再打开 block 文件时解压一下即可,几行代码就可以搞定

     

    2.1.2、边接收数据边压缩,使用第三方提供的压缩库

     

    效率和复杂度折中方法,Hook 住系统的 write 和 read 操作,在数据写入磁盘之前,先压缩一下,但write 和 read 对外的接口行为不变,比如:原始大小为 100KB 的数据,压

     

    缩后大小为 10KB,当写入 100KB 后,仍对调用者返回 100KB,而不是 10KB 2.2、压缩工作交给DFSClient 做,DataNode 只接收和存储

     

    这个方法效果最高,压缩分散地推给了 HDFS 客户端,但 DataNode 需要知道什么时候一个 block 块接收完成了。

     

    推荐最终实现采用 2.2 这个方法,该方法需要修改的 HDFS 代码量也不大,但效果最高。

     

    1、   Datanode 在什么情况下不会备份?

     

    单节点的情况下不会备份!

     

    2、 datanode 首次加入cluster的时候,如果log 报告不兼容文件版本,那需要 namenode

     

    3、 执行格式化操作,这样处理的原因是?这个说法是错误的!

     

    添加了一个新的标识符 ClusterID 用于标识集群中所有的节点。当格式化一个 Namenode,需要提供这个标识符或者自动生成。这个 ID 可以被用来格式化加入集群的其他 Namenode 应该检查 hadoop 的版本是不是与其他的 hadoop 版本一致!

     

    5.3     三个 datanode,当有一个  datanode    出现错误会怎样?

     

    Datanode以数据块作为容错单位 通常一个数据块会备份到三个datanode 上,如果一个datanode 出错,则回去其他备份数据块的datanode 上读取,并且会把这个datanode 上的数据块再复制一份以达到备份的效果!

     

    5.4    hdfs    原理,以及各个模块的职责?

     

    Client:切分文件;访问或通过命令行管理HDFS;与NameNode 交互,获取文件位置信息;与DataNode 交互,读取和写入数据。


     

    NameNode:Master节点,只有一个,管理HDFS 的名称空间和数据块映射信息;配置副本策略;处理客户端请求。

     

    DataNode:Slave节点,存储实际的数据;执行数据块的读写;汇报存储信息给NameNode。

     

    Secondary NameNode:辅助NameNode,分担其工作量;定期合并 fsimage和 fsedits,推送给NameNode;紧急情况下,可辅助恢复NameNode,但 SecondaryNameNode 并非 NameNode 的热备

     

    Hdfs 文件读取

     

    1.首先调用FileSystem 对象的open 方法,其实是一个DistributedFileSystem 的实

     

     

    2.DistributedFileSystem 通过 rpc 获得文件的第一批个block 的locations,同一block 按照重复数会返回多个locations,这些locations 按照hadoop 拓扑结构排序,距

     

    离客户端近的排在前面.

     

    3.前两步会返回一个FSDataInputStream 对象,该对象会被封装成DFSInputStream

     

    对象,DFSInputStream可以方便的管理datanode和namenode数据流。客户端调用read方法,DFSInputStream 最会找出离客户端最近的 datanode 并连接。

     

    4.数据从datanode 源源不断的流向客户端。

     

    5.如果第一块的数据读完了,就会关闭指向第一块的datanode 连接,接着读取下一块。

     

    这些操作对客户端来说是透明的,客户端的角度看来只是读一个持续不断的流。

     

    6.如果第一批block 都读完了,DFSInputStream 就会去namenode 拿下一批blocks的 location,然后继续读,如果所有的块都读完,这时就会关闭掉所有的流 Hdfs 的文件写入

     

    1.客户端通过调用DistributedFileSystem 的 create 方法创建新文件

     

    2.DistributedFileSystem通过RPC 调用namenode 去创建一个没有blocks 关联的新文件,创建前,namenode 会做各种校验,比如文件是否存在,客户端有无权限去创建等。如果校验通过,namenode 就会记录下新文件,否则就会抛出 IO 异常.

     

    3.前两步结束后会返回FSDataOutputStream 的对象,和读文件的时候相似, FSDataOutputStream 被封装成 DFSOutputStream,DFSOutputStream可以协调namenode 和datanode。客户端开始写数据到DFSOutputStream,DFSOutputStream 会把数据切成一个个小 packet,然后排成队列 data quene。

     

    4.DataStreamer 会去处理接受 data quene,他先问询 namenode 这个新的block 最适合存储的在哪几个datanode 里,比如重复数是3,那么就找到 3 个最适合的 datanode,把他们排成一个pipeline.DataStreamer 把packet 按队列输出到管道的第一个datanode 中,第一个 datanode 又把 packet 输出到第二个 datanode 中,以此类推。

     

    5.DFSOutputStream 还有一个对列叫ack quene,也是有packet 组成,等待datanode的收到响应,当pipeline 中的所有datanode 都表示已经收到的时候,这时 akc quene 才会把对应的 packet 包移除掉。

     

    6.客户端完成写数据后调用close 方法关闭写入流

     

    7.DataStreamer 把剩余得包都刷到pipeline 里然后等待ack 信息,收到最后一个ack后,


    通知 datanode 把文件标示为已完成。

     

     

    5.5     哪个进程通常与 namenode 在一个节点启动?并做分析

     

    JobTracker

     

    hadoop 的集群是基于master/slave 模式,namenode和jobtracker 属于master,datanode 和tasktracker 属于slave,master只有一个,而slave 有多个

     

     

    SecondaryNameNode 内存需求和 NameNode 在一个数量级上,所以通常 secondary NameNode(运行在单独的物理机器上)和NameNode 运行在不同的机器上。JobTracker 和TaskTracker

     

    JobTracker 对应于NameNode

     

    TaskTracker 对应于 DataNode

     

    DataNode 和NameNode 是针对数据存放来而言的JobTracker 和TaskTracker 是对于MapReduce 执行而言的

     

     

    mapreduce 中几个主要概念,mapreduce整体上可以分为这么几条执行线索:

     

    jobclient,JobTracker与TaskTracker。

     

    1、JobClient会在用户端通过JobClient类将应用已经配置参数打包成jar文件存储到hdfs,

     

    并把路径提交到 Jobtracker,然后由 JobTracker 创建每一个 Task(即 MapTask 和ReduceTask)

     

    并将它们分发到各个 TaskTracker 服务中去执行

     

    2、JobTracker是一个master 服务,软件启动之后JobTracker 接收Job,负责调度Job 的每一个子任务 task 运行于 TaskTracker 上,

     

    并监控它们,如果发现有失败的 task就重新运行它。一般情况应该把 JobTracker 部署在单独的机器上。

     

    3、TaskTracker是运行在多个节点上的slaver 服务。TaskTracker主动与JobTracker 通信,接收作业,并负责直接执行每一个任务。

     

    TaskTracker 都需要运行在HDFS 的DataNode 上。

     

    5.6    hdfs    的体系结构?

     

    HDFS 采用了主从(Master/Slave)结构模型,一个HDFS 集群是由一个NameNode

     

    和若干个 DataNode 组成的。其中 NameNode 作为主服务器,管理文件系统的命名空间和客户端对文件的访问操作;集群中的 DataNode 管理存储的数据。HDFS 允许用户以文件的形式存储数据。从内部来看,文件被分成若干个数据块,而且这若干个数据块存放在一组DataNode 上。NameNode 执行文件系统的命名空间操作,比如打开、关闭、重命名文件或目录等,它也负责数据块到具体 DataNode的映射。DataNode负责处理文件系统客户端的文件读写请求,并在NameNode 的统一调度下进行数据块的创建、删除和复制工作。NameNode 和 DataNode 都被设计成可以在普通商用计算机上运行。这些计算机通常运行的是GNU/Linux 操作系统。HDFS 采用Java语言开发,因此任何支持 Java 的机器


     

    都可以部署 NameNode 和 DataNode。一个典型的部署场景是集群中的一台机器运行一个 NameNode 实例,其他机器分别运行一个 DataNode 实例。当然,并不排除一台机器运行多个 DataNode 实例的情况。集群中单一的 NameNode 的设计则大大简化了系统的架构。NameNode 是所有 HDFS 元数据的管理者,用户数据永远不会经过NameNode。

     

     

    5.7    HDFS,replica   如何定位

     

    //查找某个文件在HDFS 集群的位置

     

    public static void getFileLocal() throws IOException{

     

     

    //返回FileSystem 对象

     

    FileSystem fs = getFileSystem();

     

     

    //文件路径

     

    Path path =

     

    newPath("hdfs://single.hadoop.dajiangtai.com:9000/middle/weibo/weibo.txt");

     

     

    //获取文件目录

     

    FileStatus filestatus = fs.getFileStatus(path); //获取文件块位置列表

     

    BlockLocation[] blkLocations =fs.getFileBlockLocations(filestatus, 0, filestatus.getLen());

     

    //循环输出块信息

     

    for(int i=0;i< blkLocations.length;i++){ String[]hosts = blkLocations[i].getHosts();System.out.println("block_"+i+"_location:"+hosts[0]);

     

    }

     

     

    5.8    HDFS存储的机制?

     

    HDFS 的三个实体

     

    数据块

     

    每个磁盘都有默认的数据块大小,这是磁盘进行读写的基本单位.构建于单个磁盘之上的文件系统通过磁盘块来管理该文件系统中的块.该文件系统中的块一般为磁盘块的整数倍.磁盘块一般为 512 字节.HDFS 也有块的概念,默认为 64MB(一个 map 处理的数据大小).HDFS 上的文件也被划分为块大小的多个分块,与其他文件系统不同的是,HDFS 中小于一个块大小的文件不会占据整个块的空间.

     

    HDFS 用块存储带来的第一个明显的好处一个文件的大小可以大于网络中任意一个磁盘的容量,数据块可以利用磁盘中任意一个磁盘进行存储.第二个简化了系统的设计,将控制单元设置为块,可简化存储管理,计算单个磁盘能存储多少块就相对容易.同时也消除了对元数据


    的顾虑,如权限信息,可以由其他系统单独管理.

     

    DataNode 节点

     

    DataNode 是HDFS 文件系统的工作节点,它们根据需要存储并检索数据块,受NameNode节点调度.并且定期向 NameNode 发送它们所存储的块的列表

     

    NameNode 节点

     

    NameNode 管理HDFS 文件系统的命名空间,它维护着文件系统树及整棵树的所有的文件及目录.这些文件以两个文件形式永久保存在本地磁盘上(命名空间镜像文件和编辑日志文件).NameNode 记录着每个文件中各个块所在的数据节点信息但并不永久保存这些块的位置信息,因为这些信息在系统启动时由数据节点重建.

     

    没有 NameNode,文件系统将无法使用.如提供 NameNode 服务的机器损坏,文件系统上的所有文件丢失,我们就不能根据 DataNode 的块来重建文件.因此,对 NameNode 的容错非常重要.第一种机制,备份那些组成文件系统元数据持久状态的文件.通过配置使 NameNode 在多个文件系统上保存元数据的持久状态或将数据写入本地磁盘的同时,写入一个远程挂载的网络文件系统.当然这些操作都是原子操作.第二种机制是运行一个辅助的 NameNode,它会保存合并 后的命名 空间镜像的副本 ,并在 Name/Node 发生故障时启 用.但是辅助 NameNode 保存.态总是滞后于主力节点,所以在主节点全部失效后难免丢失数据.在这种情况下,一般把存储在远程挂载的网络文件系统的数据复制到辅助 NameNode 并作为新的主

     

    NameNode 运行

     

    5.9    hdfs 的 client 端,复制到第三个副本时宕机, hdfs 怎么恢复保证下次写第三副本?

     

    Datanode 会定时上报block 块的信息给namenode ,namenode就会得知副本缺失,然后 namenode 就会启动副本复制流程以保证数据块的备份!

     

     

    5.10 block 块信息是先写  dataNode 还是先写nameNode?

     

    Client 向NameNode 发起文件写入的请求。

     

    NameNode根据文件大小和文件块配置情况,返回给 Client 它所管理部分 DataNode 的信息。

     

    Client 将文件划分为多个 Block,根据 DataNode 的地址信息,按顺序写入到每一个DataNode 块中。

     

     

    5.11 Hive 的 join 有几种方式,怎么实现 join 的?

     

    答:3 种 join  方式:

     

    1)在 reduce 端进行 join,最常用的 join  方式。

     

    Map端的主要工作:为来自不同表(文件) key/value 对打标签以区别不同来源的记录。然后用连接字段作为 key,其余部分和新加的标志作为 value,最后进行输出。

     

    reduce端的主要工作:在reduce 端以连接字段作为key 的分组已经完成,我们只需要在每一个分组当中将那些来源于不同文件的记录 ( map 阶段已经打标志)分开,最后进行笛卡尔。

     

    2)在 map 端进行 join,使用场景:一张表十分小、一张表很大:


     

    在提交作业的时候先将小表文件放到该作业的 DistributedCache 中,然后从 DistributeCache 中取出该小表进行 join key / value 解释分割放到内存中(可以放大 Hash Map 等等容器中)。然后扫描大表,看大表中的每条记录的 join key /value 值是否能够在内存中找到相同 join key 的记录,如果有则直接输出结果

     

    3)SemiJoin,semijoin 就是左边连接是 reducejoin 的一种变种,在 map       端过滤掉一些数

     

    据,在网络传输过程中,只传输参与连接的数据,减少了 shuffle的网络传输量,其他和 reduce 的思想是一样的。

     

    实现:将小表中参与 join 的 key 单独抽取出来通过 DistributeCache  分发到相关节点,

     

    在 map 阶段扫描连接表,将 join key 不在内存 hashset 的纪录过滤掉,让参与 join 的纪录通过 shuffle 传输到 reduce 端进行 join,其他和 reduce join 一样。

     

    5.12 hive 内部表和外部表的区别?

     

    内部表:建表时会在 hdfs  创建一个表的存储目录,增加分区的时候,会将数据复制到此

     

    location  下,删除数据的时候,将表的数据和元数据一起删除。

     

    外部表:一般会建立分区,增加分区的时候不会将数据移到此表的 location下,删除数据的时候,只删除了表的元数据信息,表的数据不会删除。

     

    5.13 hive 是如何实现分区的?

     

    建表语句:

     

    createtable tablename (id) partitioned by (dt string)

     

    增加分区:

     

    alter table tablenname   addpartition (dt = ‘2016-03-06’)

     

    删除分区:

     

    alter table tablename    droppartition (dt = ‘2016-03-06’)

     

    5.14 hive 支持 not in 吗?

     

    不支持,可以用 left join 实现此功能

     

    5.15 Hive 有哪些方式保存元数据,各有哪些优缺点。

     

    1)存储于 derby 数据库,此方法只能开启一个 hive  客户端,不推荐使用

     

    2)存储于 mysql  数据库中,可以多客户端连接,推荐使用。

     

    5.16 hive 如何优化

     

    1)join 优化,尽量将小表放在 join 的左边,如果一个表很小可以采用 mapjoin

     

    2)排序优化,order by 一个 reduce 效率低,distirbute by +sort by 也可以实现全局排序

     

    3)使用分区,查询时可减少数据的检索,从而节省时间。

     

    5.17 hive 能像关系数据库那样,建多个库吗?

     

    可以建立多个库,多库多表都支持。

     

    5.18 hive 中的压缩格式 RCFile、TextFile、 SequenceFile 各有什么区别?

     

    TextFile:默认格式,数据不做压缩,磁盘开销大,数据解析开销大

     

    SequenceFile:Hadoop API提供的一种二进制文件支持,使用方便,可分割,可压缩,支

     

    持三种压缩,NONE,RECORD,BLOCK

     

    RCFILE 是一种行列存储相结合的方式。首先,将数据按行分块,保证同一个 record 在同一个块上,避免读一个记录读取多个 block。其次,块数据列式存储,有利于数据压缩和快


     

    速的列存取。数据加载的时候性能消耗大,但具有较好的压缩比和查询响应。

     

    5.19 hive 相对于 Oracle     来说有那些优点?

     

    1)存储,hive 存储在 hdfs 上,oracle  存储在本地文件系统

     

    2)扩展性,hive 可以扩展到数千节点,oracle 理论上只可扩展到 100  台左右

     

    3)单表存储,数据量大 hive 可以分区分桶,oracle 数据量大只能分表。

     

    5.20 Hive 的 sort by 和 orderby      的区别

     

    order by 会对输入数据做全局排序,只有一个 reduce,数据量较大时,很慢。

     

    sort by 不是全局排序,只能保证每个 reduce 有序,不能保证全局有序,需设置 mapred.reduce.tasks>1

    展开全文
  • hadoop面试题.chm

    2019-11-26 15:47:04
    这是一套hadoop面试题资源一个文件100M,上传到HDFS占用几个快?一个块128M,剩余的28M怎么办? 事实上,128只是个数字,数据超过128M,便进行切分, 如果没有超过128M,就不用切分,有多少算多少, ...
  • Hadoop和hive大数据面试题,压缩包一共有三个文件一共超过两百个大数据就业实用相关面试题
  • 1、MapReduce跑得慢的原因?(☆☆☆☆☆) Mapreduce 程序效率的瓶颈在于两点: 1)计算机性能   CPU、内存、磁盘健康、网络 2)I/O 操作优化   (1)数据倾斜   (2)map和reduce数设置不合理 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 15,252
精华内容 6,100
关键字:

hadoop面试题

友情链接: 下拉选择框代码.zip