Hadoop面试题汇总
更新时间:2024-01-22 13:01:01 阅读量: 教育文库 文档下载
单选题
1.下面哪个程序负责 HDFS 数据存储。
a)NameNode b)Jobtracker c)Datanode d)secondaryNameNode e)tasktracker 答案C datanode
2. HDfS 中的 block 默认保存几份?
a)3 份 b)2 份c)1 份d)不确定 答案A默认3分
3. 下列哪个程序通常与 NameNode 在一个节点启动?
a)SecondaryNameNode b)DataNode c)TaskTracker d)Jobtracker 答案D
4. Hadoop 作者
a)Martin Fowler b)Kent Beck c)Doug cutting 答案C Doug cutting
5. HDFS 默认 Block Size
a)32MB b)64MB c)128MB
答案:1.X版本是64M
2.X版本是128M
6.下列哪项通常是集群的最主要瓶颈
a)CPU b)网络 c)磁盘IO d)内存 答案:C磁盘
7.Doug Cutting所创立的项目的名称都受到其家人的启发,以下项目不是由他创立的项目是
A. Hadoop B. Nutch
C. Lucene D. Solr 答案:D
8.配置Hadoop时,JAVA_HOME包含在哪一个配置文件中
A. hadoop-default.xml B. hadoop-env.sh C. hadoop-site.xml D. configuration.xsl 答案:B
9. Hadoop配置文件中,hadoop-site.xml显示覆盖hadoop-default.xml里的内容。在版本0.20中,hadoop-site.xml被分离成三个XML文件,不包括
A. conf-site.xml B. mapred-site.xml C. core-site.xml D. hdfs-site.xml 答案:A
10.HDFS默认的当前工作目录是/user/$USER,fs.default.name的值需要在哪个配置文件内说明
A. mapred-site.xml B. core-site.xml C. hdfs-site.xml D. 以上均不是 答案:B
11.关于Hadoop单机模式和伪分布式模式的说法,正确是
A.两者都起守护进程,且守护进程运行在一台机器上 B.单机模式不使用HDFS,但加载守护进程 C.两者都不与守护进程交互,避免复杂性
D.后者比前者增加了HDFS输入输出以及可检查内存使用情况 答案:D
12.下列关于Hadoop API的说法错误的是
A. Hadoop的文件API不是通用的,只用于HDFS文件系统
B. Configuration类的默认实例化方法是以HDFS系统的资源配置为基础的 C. FileStatus对象存储文件和目录的元数据
D. FSDataInputStream是java.io.DataInputStream的子类 答案:A
13.HDFS的NameNode负责管理文件系统的命名空间,将所有的文件和文件夹的元数据保存在一个文件系统树中,这些信息也会在硬盘上保存成以下文件:
A.日志
B.命名空间镜像 C.两者都是 答案:C
14.HDFS的namenode保存了一个文件包括哪些数据块,分布在哪些数据节点上,这些信息也存储在硬盘上。
A.正确 B.错误 答案:B
知识点:在系统启动的时候从数据节点收集而成的
15.Secondary namenode就是namenode出现问题时的备用节点
A.正确 B.错误 答案:B 知识点:它和元数据节点负责不同的事情。其主要功能就是周期性将元数据节点的命名空间镜像文件和修改日志合并,以防日志文件过大。合并过后的命名空间镜像文件也在Secondary namenode保存了一份,以防namenode失败的时候,可以恢复。
16.HDFS的是基于流数据模式访问和处理超大文件的需求而开发的,默认的最基本的存储单位是64M,具有高容错、高可靠性、高可扩展性、高吞吐率等特征,适合的读写任务是
A.一次写入,少次读写 B.多次写入,少次读写 C.一次写入,多次读写 D.多次写入,多次读写 答案:C
17.HDFS无法高效存储大量小文件,想让它能处理好小文件,比较可行的改进策略不包括
A.利用SequenceFile、MapFile、Har等方式归档小文件 B.多Master设计
C. Block大小适当调小
D.调大namenode内存或将文件系统元数据存到硬盘里 答案:D
18.关于HDFS的文件写入,正确的是
A.支持多用户对同一文件的写操作 B.用户可以在文件任意位置进行修改 C.默认将文件块复制成三份存放
D.复制的文件块默认都存在同一机架上 答案:C
19.Hadoop fs中的-get和-put命令操作对象是
A.文件 B.目录 C.两者都是 答案:C
20.Namenode在启动时自动进入安全模式,在安全模式阶段,说法错误的是
A.安全模式目的是在系统启动时检查各个DataNode上数据块的有效性 B.根据策略对数据块进行必要的复制或删除
C.当数据块最小百分比数满足的最小副本数条件时,会自动退出安全模式 D.文件系统允许有修改 答案:D
21.下列关于HDFS为存储MapReduce并行切分和处理的数
据做的设计,错误的是
A. FSDataInputStream扩展了DataInputStream以支持随机读 B. 为实现细粒度并行,输入分片(Input Split)应该越小越好 C. 一台机器可能被指派从输入文件的任意位置开始处理一个分片
D. 输入分片是一种记录的逻辑划分,而HDFS数据块是对输入数据的物理分割 答案:B
多选题
1. 关于 SecondaryNameNode 哪项是正确的?
a)它是 NameNode 的热备 b)它对内存没有要求
c)它的目的是帮助 NameNode 合并编辑日志,减少 NameNode 启动时间 d)SecondaryNameNode 应与 NameNode 部署到一个节点 答案C D
2. 下列哪项可以作为集群的管理?
a)Puppet b)Pdsh c)Cloudera Manager d)Zookeeper 答案1:ABC
3. 配置机架感知的下面哪项正确
a)如果一个机架出问题,不会影响数据读写
b)写入数据的时候会写到不同机架的 DataNode 中
c)MapReduce 会根据机架获取离自己比较近的网络数据 答案ABC
具体可以参考
hadoop机架感知--加强集群稳固性,该如何配置hadoop机架感知
4. Client 端上传文件的时候下列哪项正确
a)数据经过 NameNode 传递给 DataNode b)Client 端将文件切分为 Block,依次上传
c)Client 只上传数据到一台 DataNode,然后由 NameNode 负责 Block 复制工作
答案B
5. 下列哪个是 Hadoop 运行的模式
a)单机版 b)伪分布式 c)分布式 答案ABC
6. Cloudera 提供哪几种安装 CDH 的方法
a)Cloudera manager b)Tarball c)Yum d)Rpm 答案:ABCD具体可以参考
Hadoop CDH四种安装方式总结及实例指导
简答题
1.Hadoop集群可以运行的3个模式?
1)单机(本地)模式; 2)伪分布式模式; 3)全分布式模式;
2.单机(本地)模式中的注意点?
在单机模式(standalone)中不会存在守护进程,所有东西都运行在一个JVM上。这里同样没有DFS,使用的是本地文件系统。单机模式适用于开发过程中运行MapReduce程序,这也是最少使用的一个模式。
3.伪分布模式中的注意点?
伪分布式(Pseudo)适用于开发和测试环境,在这个模式中,所有守护进程都在同一台机器上运行。
4. 全分布模式又有什么注意点?
全分布模式通常被用于生产环境,这里我们使用N台主机组成一个Hadoop集群,Hadoop守护进程运行在每台主机之上。这里会存在Namenode运行的主机,Datanode
运行的主机,以及task tracker运行的主机。在分布式环境下,主节点和从节点会分开。
5. Hadoop是否遵循UNIX模式?
是的,在UNIX用例下,Hadoop还拥有“conf”目录。
6. Hadoop的核心配置是什么?
Hadoop的核心配置通过两个xml文件来完成:1,hadoop-default.xml;2,hadoop-site.xml。这些文件都使用xml格式,因此每个xml中都有一些属性,包括名称和值,但是当下这些文件都已不复存在。
7. 那当下又该如何配置?
Hadoop现在拥有3个配置文件:1,core-site.xml;2,hdfs-site.xml;3,mapred-site.xml。这些文件都保存在conf/子目录下。
8. fs.mapr.working.dir只是单一的目录?
fs.mapr.working.dir只是一个目录。
9. hdfs-site.xml的3个主要属性?
dfs.name.dir决定的是元数据存储的路径以及DFS的存储方式(磁盘或是远端) dfs.data.dir决定的是数据存储的路径 fs.checkpoint.dir用于第二Namenode
10. 如何退出输入模式?
退出输入的方式有:1,按ESC;2,键入:q(如果你没有输入任何当下)或者键入:wq(如果你已经输入当下),并且按下Enter。
11. “jps”命令的用处?
这个命令可以检查Namenode、Datanode、Task Tracker、 Job Tracker是否正常工作。
12. 如何重启Namenode?
点击stop-all.sh,再点击start-all.sh。
键入sudo hdfs(Enter),su-hdfs (Enter),/etc/init.d/ha(Enter),及/etc/init.d/hadoop-0.20-namenode start(Enter)。
13. Fsck的全名?
全名是:File System Check。
14. mapred.job.tracker命令的作用?
可以让你知道哪个节点是Job Tracker。
15. /etc /init.d命令的作用是?
/etc /init.d说明了守护进程(服务)的位置或状态,其实是LINUX特性,和Hadoop关系不大。
16. 如何在浏览器中查找Namenode?
如果你确实需要在浏览器中查找Namenode,你不再需要localhost:8021,Namenode的端口号是50070。
17. hadoop-env.sh是用于做什么的?
hadoop-env.sh提供了Hadoop中. JAVA_HOME的运行环境。
18. Master文件是否提供了多个入口?
是的你可以拥有多个Master文件接口。
19. Hadoop-env.sh文件当下的位置?
hadoop-env.sh现在位于conf。
20. 在Hadoop_PID_DIR中,PID代表了什么?
PID代表了“Process ID”。
21. /var/hadoop/pids用于做什么?
/var/hadoop/pids用来存储PID。
22. Hadoop需求什么样的网络?
Hadoop核心使用Shell(SSH)来驱动从节点上的服务器进程,并在主节点和从节点之间使用password-less SSH连接。
23.全分布式环境下为什么需求password-less SSH?
这主要因为集群中通信过于频繁,Job Tracker需要尽可能快的给Task Tracker发布任务。
24. SSH工作的端口号是?
SSH工作的端口号是NO.22,当然可以通过它来配置,22是默认的端口号。
25.为什么SSH本地主机需要密码?
在SSH中使用密码主要是增加安全性,在某些情况下也根本不会设置密码通信。
26.如果在SSH中添加key,是否还需要设置密码?
是的,即使在SSH中添加了key,还是需要设置密码。
27.假如Namenode中没有数据会怎么样?
没有数据的Namenode就不能称之为Namenode,通常情况下,Namenode肯定会有数据
28.当Job Tracker宕掉时,Namenode会发生什么?
当Job Tracker失败时,集群仍然可以正常工作,只要Namenode没问题。
29.是否可以在Windows上运行Hadoop?
你最好不要这么做,Red Hat Linux或者是Ubuntu才是Hadoop的最佳操作系统。在Hadoop安装中,Windows通常不会被使用,因为会出现各种各样的问题。因此,Windows绝对不是Hadoop的推荐系统。
30.简要描述如何安装配置一个apache开源版hadoop,描述即可,列出步骤更好
1.配置主机名
2.配置Hosts 3.配置面密码互通 4.安装JDK
5.安装hadoop
6.配置hadoop (1)修改 hadoop-env.sh (2)修改 core-site.xml (3)修改 hdfs-site.xml
(4)修改 mapred-site.xml
(5)修改 yarn-site.xml
(6)修改 slaves
7.配置hadoop的环境变量
8.格式化namenode
32.请列出正常工作的hadoop集群中hadoop都需要启动哪些进程,他们的作用分别是什么?
NameNode -- hdfs名字节点,存储hdfs元数据
SecondaryNameNode -- 辅助NameNode实现fsimage文件和edits文件的合并 DataNode -- 存储数据的节点
ResourceManager --负责集群中所有资源的统一管理和分,它接收来自各个节点(NodeManager)的资源汇报信息,并把这些信息按照一定的策略分配给各个应用程序
NodeManager --是YARN中每个节点上的代理,它管理Hadoop集群中单个计算节点,包括与ResourceManger保持通信,监督Container的生命周期管理,监控每个Container的资源使用(内存、CPU等)情况,追踪节点健康状况,管理日志和不同应用程序用到的附属服务(auxiliary service)
33.请写出以下执行命令
1)杀死一个job? hadoop job –kill job_id 2)删除hdfs上的/tmp/aaa目录 hadoop fs -rmdir /tmp/aaa
3加入一个新的存储节点和删除一个计算节点需要刷新集群状态命令? hadoop balance
5.请列出你所知道的hadoop调度器,并简要说明其工作方法? (1)默认的调度器FIFO
(2)计算能力调度器Capacity Scheduler (3)公平调度器Fair Scheduler (4)适用于异构集群的调度器LATE
(5)适用于实时作业的调度器Deadline Scheduler和Constraint-based Scheduler 6.请列出在你以前工作中所使用过的开发mapreduce的语言? Java
7.当前日志采样格式为
34.hive有哪些方式保存元数据,各有哪些特点?
Hive原生使用derby作为元数据库,无法并发调用hive 可以将Hive元数据保存在mysql数据库中 远程服务器模式,在服务器端启动一个 MetaStoreServer,客户端利用 Thrift 协议通过 MetaStoreServer 访问元数据库
35.请简述hadoop怎么样实现二级排序?
有两种方法进行二次排序,分别为:buffer and in memory sort和 value-to-key conversion。
对于buffer and in memory sort,主要思想是:在reduce()函数中,将某个key对应的所有value保存下来,然后进行排序。这种方法最大的缺点是:可能会造成out of memory。
对于value-to-key conversion,主要思想是:将key和部分value拼接成一个组合key(实现WritableComparable接口或者调用setSortComparatorClass函数),这样reduce获取的结果便是先按key排序,后按value排序的结果,需要注意的是,用户需要自己实现Paritioner,以便只按照key进行数据划分
36.简述hadoop实现join的几种方法?
2.1 reduce side join
reduce side join是一种最简单的join方式,其主要思想如下:
在map阶段,map函数同时读取两个文件File1和File2,为了区分两种来源的key/value数据对,对每条数据打一个标签(tag),比如:tag=0表示来自文件File1,tag=2表示来自文件File2。即:map阶段的主要任务是对不同文件中的数据打标签。
在reduce阶段,reduce函数获取key相同的来自File1和File2文件的value list,然后对于同一个key,对File1和File2中的数据进行join(笛卡尔乘积)。即:reduce阶段进行实际的连接操作。 2.2 map side join
之所以存在reduce side join,是因为在map阶段不能获取所有需要的join字段,即:同一个key对应的字段可能位于不同map中。Reduce side join是非常低效的,因为shuffle阶段要进行大量的数据传输。
Map side join是针对以下场景进行的优化:两个待连接表中,有一个表非常大,而另一个表非常小,以至于小表可以直接存放到内存中。这样,我们可以将小表复制多份,让每个map task内存中存在一份(比如存放到hash table中),然后只扫描大表:对于大表中的每一条记录key/value,在hash table中查找是否有相同的key的记录,如果有,则连接后输出即可。
为了支持文件的复制,Hadoop提供了一个类DistributedCache,使用该类的方法如下:
(1)用户使用静态方法DistributedCache.addCacheFile()指定要复制的文件,它的参数是文件的URI(如果是HDFS上的文件,可以这样:hdfs://namenode:9000/home/XXX/file,其中9000是自己配置的NameNode端口号)。JobTracker在作业启动之前会获取这个URI列表,并将相应的文件拷贝到各个TaskTracker的本地磁盘上。(2)用户使用DistributedCache.getLocalCacheFiles()方法获取文件目录,并使用标准的文件读写API读取相应的文件。 2.3 SemiJoin
SemiJoin,也叫半连接,是从分布式数据库中借鉴过来的方法。它的产生动机是:对于reduce side join,跨机器的数据传输量非常大,这成了join操作的一个瓶颈,如果能够在map端过滤掉不会参加join操作的数据,则可以大大节省网络IO。
实现方法很简单:选取一个小表,假设是File1,将其参与join的key抽取出来,保存到文件File3中,File3文件一般很小,可以放到内存中。在map阶段,使用DistributedCache将File3复制到各个TaskTracker上,然后将File2中不在File3中的key对应的记录过滤掉,剩下的reduce阶段的工作与reduce side join相同。 2.4 reduce side join + BloomFilter
在某些情况下,SemiJoin抽取出来的小表的key集合在内存中仍然存放不下,这时候可以使用BloomFiler以节省空间。
BloomFilter最常见的作用是:判断某个元素是否在一个集合里面。它最重要的两个方法是:add() 和contains()。最大的特点是不会存在false negative,即:如果contains()返回false,则该元素一定不在集合中,但会存在一定的true negative,即:如果contains()返回true,则该元素可能在集合中。 因而可将小表中的key保存到BloomFilter中,在map阶段过滤大表,可能有一些不在小表中的记录没有过滤掉(但是在小表中的记录一定不会过滤掉),这没关系,只不过增加了少量的网络IO而已。
37.请用Java实现非递归二分查找?
public static int binarySearch(Integer[]srcArray,int des){ //第一个位置. int low=0; //最高位置.数组长度-1,因为下标是从0开始的. int high=srcArray.length-1;
//当low\指针\和high不重复的时候.
while(low<=high){
//中间位置计算,low+ 最高位置减去最低位置,右移一位,相当于除2.也可以用(high+low)/2
int middle=low+((high-low)>>1);
//与最中间的数字进行判断,是否相等,相等的话就返回对应的数组下标. if(des==srcArray[middle]){ return middle;
//如果小于的话则移动最高层的\指针\ }else if(des //移动最低的\指针\}else{ low=middle+1; } return-1; } 38.请简述mapreduce中,combiner,partition作用? Partition:分区操作是shuffle操作中的一个重要过程,作用就是将map的结果按照规则分发到不同reduce中进行处理,从而按照分区得到多个输出结果 Combiner:每一个MapperTask可能会产生大量的输出,combiner的作用就是在MapperTask端对输出先做一次合并,以减少传输到reducerTask的数据量 39用mapreduce如何处理数据倾斜问题 1. 增加reduce 的jvm内存 2. 增加reduce 个数 3. customer partition 4. 其他优化的讨论. 5. reduce sort merge排序算法的讨论 6. 正在实现中的hive skewed join. 7. pipeline 8. distinct 9. index 尤其是bitmap index 40 Hive中内部表和外部表的区别 内部表现有表后有数据,数据在hive的hdfs目录下管理 外部表先有数据后有表,数据不再hive的hdfs目录下管理 删除表时,内部表对应文件被删除 删除表时,外部表对应的文件不会被删除 41用JAVA使用非递归二分查找 参看题37 42HADOOP如何处理大量小文件 (1) Hadoop Archive Hadoop Archive或者HAR,是一个高效地将小文件放入HDFS块中的文件存档工具,它能够将多个小文件打包成一个HAR文件,这样在减少namenode内存使用的同时,仍然允许对文件进行透明的访问。 对某个目录/foo/bar下的所有小文件存档成/outputdir/ zoo.har: hadoop archive -archiveName zoo.har -p /foo/bar /outputdir 当然,也可以指定HAR的大小(使用-Dhar.block.size)。 HAR是在Hadoop file system之上的一个文件系统,因此所有fs shell命令对HAR文件均可用,只不过是文件路径格式不一样,HAR的访问路径可以是以下两种格式: har://scheme-hostname:port/archivepath/fileinarchive har:///archivepath/fileinarchive(本节点) 可以这样查看HAR文件存档中的文件: hadoop dfs -ls har:///user/zoo/foo.har 输出: har:///user/zoo/foo.har/hadoop/dir1 har:///user/zoo/foo.har/hadoop/dir2 使用HAR时需要两点,第一,对小文件进行存档后,原文件并不会自动被删除,需要用户自己删除;第二,创建HAR文件的过程实际上是在运行一个mapreduce作业,因而需要有一个hadoop集群运行此命令。 此外,HAR还有一些缺陷:第一,一旦创建,Archives便不可改变。要增加或移除里面的文件,必须重新创建归档文件。第二,要归档的文件名中不能有空格,否则会抛出异常,可以将空格用其他符号替换(使用-Dhar.space.replacement.enable=true 和-Dhar.space.replacement参数)。 (2) Sequence file sequence file由一系列的二进制key/value组成,如果为key小文件名,value为文件内容,则可以将大批小文件合并成一个大文件。 Hadoop-0.21.0中提供了SequenceFile,包括Writer,Reader和SequenceFileSorter类进行写,读和排序操作。如果hadoop版本低于0.21.0的版本,实现方法可参见[3]。 (3)CombineFileInputFormat CombineFileInputFormat是一种新的inputformat,用于将多个文件合并成一个单独的split,另外,它会考虑数据的存储位置。 43hdfs中的block默认保存几份? 3份 44hive udf继承那个类 创建类继承UDF 自己编写一个evaluate方法,返回值和参数任意。 45.请列出正常工作的hadoop集群中hadoop都需要启动哪些进程,他们的作用分别是什么? 参看题32 46、Maperduce处理过程 1)输入文件(File) 2)格式化输入文件(InputFormat) 3)分割器(InputSplit) 4)RecordReader 5)Mapper 6)分区和洗牌(Partition & Shuffle) 7)Sort 8)Reducer 9)格式化输出(OutputFormat) 47、Hadoop流程 参看题48 48、Hadoop上传细节 使用HDFS提供的客户端开发库Client,向远程的Namenode发起RPC请求; Namenode会检查要创建的文件是否已经存在,创建者是否有权限进行操作,成功则会为文件创建一个记录,否则会让客户端抛出异常; 当客户端开始写入文件的时候,开发库会将文件切分成多个packets,并在内部以数据队列\的形式管理这些packets,并向Namenode申请新的blocks,获取用来存储replicas的合适的datanodes列表,列表的大小根据在Namenode中对replication的设置而定。 开始以pipeline(管道)的形式将packet写入所有的replicas中。开发库把packet以流的方式写入第一个datanode,该datanode把该packet存储之后,再将其传递给在此 pipeline中的下一个datanode,直到最后一个datanode,这种写数据的方式呈流水线的形式。 最后一个datanode成功存储之后会返回一个ack packet,在pipeline里传递至客户端,在客户端的开发库内部维护着\queue\,成功收到datanode返回的ack packet后会从\移除相应的packet。 如果传输过程中,有某个datanode出现了故障,那么当前的pipeline会被关闭, 出现故障的datanode会从当前的pipeline中移除,剩余的block会继续剩下的datanode中继续以pipeline的形式传输,同时Namenode会分配一个新的datanode,保持 replicas设定的数量。 49、Zookeeper的做什么的 zookeeper是一个开放源码的分布式协调服务,是一种典型的分布式数据一致性解决方案。由雅虎创建,贡献给了apache。 利用zookeeper可以实现数据发布订阅、负载均衡、命名服务、分布式协调/通知、集群管理、分布式锁、分布式队列等功能。 50、NIO是什么 NIO是jdk4提供的一种新的io方式,也叫做非阻塞式IO,特点是可以在非阻塞模式下进行工作,ACCEPT CONNECT READ WRITE时都不会产生阻塞,从而可以解决BIO在高并发场景下遇到的问题。 51、Hbase的细节 hbase中的表在行的方向上分隔为多个HRegion,分散在不同的RegionServer中 这样做的目的是在查询时可以将工作量分布到多个RegionServer中以提高速度 region由[startkey,endkey)表示 HRegion是hbase分布式存储和负载均衡的最小单元 要注意HRegion不在hdfs中,而是在RegionServer的内存中,在内存(其实也有数据在本地文件系统中,因为内存空间毕竟是有限的)中存储数据以提高查询性能,对于修改会将数据同步到hdfs中,以持久化数据。 hbase中的数据按照rowkey的字典顺序(字典顺序!!!先比较第一位如果相同再比较第二位。。。)按序存储,所以当以rowkey查询数据时,可以提高速度。 hregion的分裂,当hregion变的很大时会分裂成两个,存放到不同的RegionServer中,防止一个Region过大,导致查询其中数据时速度很慢 hbase的系统结构:主要有client master regionServer zookeeper 52、什么是分布式 分布式处理则是将不同地点的,或具有不同功能的,或拥有不同数据的多台计算机通过通信网络连接起来,在控制系统的统一管理控制下,协调地完成大规模信息处理任务的计算机系统。 53 函数式编程的好处: 1. 2. 代码简洁,开发快速 接近自然语言,易于理解 3. 更方便的代码管理 4. 易于“并发编程” 5. 代码的热升级(函数式编程没有副作用,只要保证接口不变,内部实现是外部无关的。所以,可以在运行状态下直接升级代码,不需要重启,也不需要停机。) 54在linux中,比如启动hadoop,会打印很多日志,什么命令可以不显示这些日志? 可以通过在命令前增加上nohup命令来实现 55 concurrent 的map 加锁是加部分锁是加的哪部分? 数据分段上 56环形缓冲区集群搭配的作用和优化? 每个MapperTask有一个环形内存缓冲区,用于存储map任务的输出。默认大小100MB(io.sort.mb属性),一旦达到阀值0.8(io.sort.spill.percent),一个后台线程把内容写到(spill)磁盘的指定目录(mapred.local.dir)下的新建的一个溢出写文件。 写磁盘前,要partition,sort,Combiner。如果有后续的数据,将会继续写入环形缓冲区中,最终写入下一个溢出文件中。 环形缓冲区是一种缓冲区技术,通过首尾相接的方式循环使用缓冲区,解决了数据量过大时缓冲区大小过大的问题。 57、 zookeeper原理 leader和所有的follower都可以提供查询功能 只有leader能够提供增删改的功能,如果客户端连接follower表示要进行增删改,follower会将请求转发给leader来处理。 所有的增删改的操作都会有一个版本号,这个版本号是递增唯一的,用来记录提案的顺序。 如何选老大? 选老大情况1:集群刚启动时,谁当老大都可以,一般是最先启动的做老大 选老大情况2:老大挂了,集群会暂时停止对外服务进入选举阶段,所有follower都会广播一个自己的所持有的最高版本给整个集群,当大家收到其他follwoer发过来的最高版本信息后,就会进行投票,投给收到的版本信息最高的follwer,每个机器只能发一票,此时选择集群中数据版本最高的机器做老大,任意一个follower当发现自己收到了过半的投票(自己也可以投给自己),可以认为获得了选举胜利,可以成为leader了。 老大如何决定一个提案是否通过? 如果老大自己说了算,那么如果刚好老大挂了,其他人不知道老大同一的提案,可 能就造成新选出来的leader不知道之前老大同意过的提案,从而造成违反一致性。不可行 如果老大把提案发给所有人,所有人都同意了才能通过提案,这时如果集群中任意一台机器出问题,投票都无法进行,相当于存在单节点故障的可能。不可取。 折中一下,老大收到提案后,发给所有人,所有人收到后都要回复老大,当老大收到过半同意的投票时,则通过这个提案。 这样一来,极端的情况下只要集群中有过半的机器还活着,选出来的老大是一定知道之前老大最后提案的。 !!!引申出来的结论是,zookeeper集群必须过半存活才能正常工作! !!!又引申出来的结论是,偶数台机器提供的集群可靠性和偶数-1台机器提供的可靠性是相同的!所以zookeeper集群中机器的数量最好是基数个。 58、hadoop的namenode可以存那些数据 包括文件和Block之间关系的信息、Block数量信息、Block和DataNode之间的关系信息 59 NIO和BIO 传统的BIO面临的问题: 在执行如下操作时会产生阻塞: ACCEPT CONNECT READ WRITE 在高并发场景下,如上的方法产生的阻塞可能会产生一些无法避免的问题。 在开发服务器程序时,通常针对于每一个客户端都要创建一个线程来处理,而线程的开辟和运行是相当耗费资源的,服务器能够运行的并发线程数量是很有限的。在高并发场景下,大量的客户端并发连接导致服务器创建大量线程,会直接影响服务器的性能。而一些场景下客户端连接后传输的数据并不多,只是保持连接的状态,此时创建的大量线程闲置着浪费服务器资源。所以我们想到用少量的线程来处理多个客户端的连接,但是这种方式下传统BIO会有阻塞的问题决定了是无法实现的。 NIO 也叫做非阻塞式IO,特点是可以在非阻塞模式下进行工作,ACCEPT CONNECT READ WRITE时都不会产生阻塞,从而可以解决BIO在高并发场景下遇到的问题。 BIO:面向流操作的是字节或字符 InputStream OutputStream Reader Writer 流只能单向传输数据操作的是字节或字符 NIO:面向通道操作的是缓冲区 Channel Buffer Selector 通道可以双向的传输数据操作的是缓冲区 60聚类包括那些?一堆数据,怎么用聚类中的一个算法实现? K-MEANS k-means 算法接受输入量 k ;然后将n个数据对象划分为 k个聚类以便使得所获得的聚类满足:同一聚类中的对象相似度较高;而不同聚类中的对象相似度较小。聚类相似度是利用各聚类中对象的均值所获得一个“中心对象”(引力中心)来进行计算的。 k-means 算法的工作过程说明如下: 首先从n个数据对象任意选择 k 个对象作为初始聚类中心;而对于所剩下其它对象,则根据它们与这些聚类中心的相似度(距离),分别将它们分配给与其最相似的(聚类中心所代表的)聚类; 然后再计算每个所获新聚类的聚类中心(该聚类中所有对象的均值);不断重复这一过程直到标准测度函数开始收敛为止。 一般都采用均方差作为标准测度函数. k个聚类具有以下特点:各聚类本身尽可能的紧凑,而各聚类之间尽可能的分开。 K-MEDOIDS(中心法) K-MEANS有其缺点:产生类的大小相差不会很大,对于脏数据很敏感。 改进的算法:k—medoids 方法。这儿选取一个对象叫做mediod来代替上面的中心的作用,这样的一个medoid就标识了这个类。K-medoids和K-means不一样的地方在于中心点的选取,在K-means中,我们将中心点取为当前cluster中所有数据点的平均值,在 K-medoids算法中,我们将从当前cluster 中选取这样一个点——它到其他所有(当前cluster中的)点的距离之和最小——作为中心点 Clara 上面提到K-medoids算法不适合于大数据量的计算。Clara算法,这是一种基于采样的方法,它能够处理大量的数据。 Clara算法的思想就是用实际数据的抽样来代替整个数据,然后再在这些抽样的数据上利用K-medoids算法得到最佳的medoids。Clara算法从实际数据中抽取多个采样,在每个采样上都用K-medoids算法得到相应的(O1, O2 ? Oi ? Ok),然后在这当中选取E最小的一个作为最终的结果。 61 NIO里面,channel的读写是否必须经过buffer 是的,channel面向通道操作缓冲区。 62hive表的分区和分桶 1、Hive 分区表 在Hive Select查询中一般会扫描整个表内容,会消耗很多时间做没必要的工作。有时候只需要扫描表中关心的一部分数据,因此建表时引入了partition概念。分区表指的是在创建表时指定的partition的分区空间。 Hive可以对数据按照某列或者某些列进行分区管理,所谓分区我们可以拿下面的例子进行解释。 当前互联网应用每天都要存储大量的日志文件,几G、几十G甚至更大都是有可能。存储日志,其中必然有个属性是日志产生的日期。在产生分区时,就可以按照日志产生的 日期列进行划分。把每一天的日志当作一个分区。 将数据组织成分区,主要可以提高数据的查询速度。至于用户存储的每一条记录到底放到哪个分区,由用户决定。即用户在加载数据的时候必须显示的指定该部分数据放到哪个分区。 1.1 实现细节 1、一个表可以拥有一个或者多个分区,每个分区以文件夹的形式单独存在表文件夹的目录下。 2、表和列名不区分大小写。 3、分区是以字段的形式在表结构中存在,通过describe table命令可以查看到字段存在, 但是该字段不存放实际的数据内容,仅仅是分区的表示(伪列) 。 2、Hive 桶 对于每一个表(table)或者分区, Hive可以进一步组织成桶,也就是说桶是更为细粒度的数据范围划分。Hive也是 针对某一列进行桶的组织。Hive采用对列值哈希,然后除以桶的个数求余的方式决定该条记录存放在哪个桶当中。 把表(或者分区)组织成桶(Bucket)有两个理由: (1)获得更高的查询处理效率。桶为表加上了额外的结构,Hive 在处理有些查询时能利用这个结构。具体而言,连接两个在(包含连接列的)相同列上划分了桶的表,可以使用 Map 端连接(Map-side join)高效的实现。比如JOIN操作。对于JOIN操作两个表有一个相同的列,如果对这两个表都进行了桶操作。那么将保存相同列值的桶进行JOIN操作就可以,可以大大较少JOIN的数据量。 (2)使取样(sampling)更高效。在处理大规模数据集时,在开发和修改查询的阶段,如果能在数据集的一小部分数据上试运行查询,会带来很多方便。
正在阅读:
Hadoop面试题汇总01-22
信息安全试题及答案11-30
实用综合教程(第二版)1-Unit_2__课后答案03-18
关于党建工作督查情况反馈专题党课08-22
乡镇庆七一表彰大会主持词03-08
2023端午节英文手抄报内容大全_端午节04-02
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 汇总
- 试题
- Hadoop
- 尾矿坝施工方案
- 高等数学 厦门大学出版社徐荣聪 高数课后习题详细参考答案
- 口语交际:《保护有益的动物》教案
- C#课程设计 - 图书管理系统
- 2011款高尔夫保养手册 - 图文
- 蛋白质合成与运输 - 图文
- 市纪委监察局信访举报工作制度
- 6《一封信》练习
- 安徽省芜湖市2016届九年级上学期期末考试英语试题解析(解析版)
- 我国中小企业品牌战略实施中的主要问题及对策研究
- 201209学期公差配合与测量技术作业4
- 新人教版八年级上册物理《噪声的危害和控制》教学设计
- 航空仪表教学大纲
- 队规
- 专题五:函数与导数应用(1) - 教师版
- 思源学校慢性病防控工作计划
- 2016(新)机械原理复习题88(1)
- SAP2000问题总结及质量源的定义 - 图文
- 黄淑和在全国国资监管政策法规暨指导监督工作座谈会上的讲话
- 2017-2023年热固性树脂行业“一带一路”战略研究及投资趋势预测报告(目录)