您的当前位置:首页正文

Hadoop面试题

2023-05-17 来源:易榕旅网
. -

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

单机〔本地〕模式 伪分布式模式全分布式模式 2. 单机〔本地〕模式中的注意点?

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

3. 伪分布模式中的注意点?伪分布式〔Pseudo〕适用于开发和测试环境,在这个模式中,所有守护进程都在同一台机器上运行。

4. VM是否可以称为Pseudo?不是,两个事物,同时Pseudo只针对Hadoop。 5. 全分布模式又有什么注意点?全分布模式通常被用于生产环境,这里我们使用N台主机组成一个Hadoop集群,Hadoop守护进程运行在每台主机之上。这里会存在Namenode运行的主机,Datanode运行的主机,以及task tracker运行的主机。在分布式环境下,主节点和从节点会分开。

6. Hadoop是否遵循UNIX模式?是的,在UNIX用例下,Hadoop还拥有“conf〞目录。

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

Cloudera和Apache使用一样的目录构造,Hadoop被安装在cd/usr/lib/hadoop-0.20/。 8. Namenode、Job tracker和task tracker的端口号是? Namenode,70;Job tracker,30;Task tracker,60。 9. Hadoop的核心配置是什么?

- .word.zl

. -

Hadoop的核心配置通过两个xml文件来完成:1,hadoop-default.xml;2,

hadoop-site.xml。这些文件都使用xml格式,因此每个xml中都有一些属性,包括名称和值,但是当下这些文件都已不复存在。 10. 那当下又该如何配置?

Hadoop现在拥有3个配置文件:1,core-site.xml;2,hdfs-site.xml;3,mapred-site.xml。这些文件都保存在conf/子目录下。

11. RAM的溢出因子是?溢出因子〔Spill factor〕是临时文件中储存文件的大小,也就是Hadoop-temp目录。

12. fs.mapr.working.dir只是单一的目录? fs.mapr.working.dir只是一个目录。 13. hdfs-site.xml的3个主要属性?

dfs.name.dir决定的是元数据存储的路径以及DFS的存储方式〔磁盘或是远端〕 dfs.data.dir决定的是数据存储的路径 fs.checkpoint.dir用于第二Namenode

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

15. 当你输入hadoopfsck /造成“connection refused java exception’〞时,系统终究发生了什么?这意味着Namenode没有运行在你的VM之上。

16. 我们使用Ubuntu及Cloudera,那么我们该去哪里下载Hadoop,或者是默认就与Ubuntu一起安装?这个属于Hadoop的默认配置,你必须从Cloudera或者Edureka的dropbox下载,然后在你的系统上运行。当然,你也可以自己配置,但是你需要一个Linux box,Ubuntu或者是Red Hat。在Cloudera或者是Edureka的Dropbox中

- .word.zl

. -

有安装步骤。

17. “jps〞命令的用处?这个命令可以检查Namenode、Datanode、Task Tracker、 Job Tracker是否正常工作。 18. 如何重启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〕。 19. Fsck的全名?全名是:File System Check。

20. 如何检查Namenode是否正常运行?如果要检查Namenode是否正常工作,使用命令/etc/init.d/hadoop-0.20-namenode status或者就是简单的jps。 21. mapred.job.tracker命令的作用?可以让你知道哪个节点是Job Tracker。 22. /etc /init.d命令的作用是?

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

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

24. 如何从SU转到Cloudera?从SU转到Cloudera只需要键入exit。 25. 启动和关闭命令会用到哪些文件? Slaves及Masters。 26. Slaves由什么组成?

Slaves由主机的列表组成,每台1行,用于说明数据节点。 27. Masters由什么组成?

Masters同样是主机的列表组成,每台一行,用于说明第二Namenode效劳器。

- .word.zl

. -

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

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

29. Master文件是否提供了多个入口?是的你可以拥有多个Master文件接口。 30. Hadoop-env.sh文件当下的位置? hadoop-env.sh现在位于conf。

31. 在Hadoop_PID_DIR中,PID代表了什么? PID代表了“Process ID〞。 32. /var/hadoop/pids用于做什么? /var/hadoop/pids用来存储PID。

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

hadoop-metrics.properties被用做“Reporting〞,控制Hadoop报告,初始状态是“not to report〞。

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

Hadoop核心使用Shell〔SSH〕来驱动从节点上的效劳器进程,并在主节点和从节点之间使用password-less SSH连接。

35. 全分布式环境下为什么需求password-less SSH?这主要因为集群中通信过于频繁,Job Tracker需要尽可能快的给Task Tracker发布任务。

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

37. SSH工作的端口号是?

- .word.zl

. -

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

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

39. 为什么SSH本地主机需要密码?在SSH中使用密码主要是增加平安性,在某些情况下也根本不会设置密码通信。

40. 如果在SSH中添加key,是否还需要设置密码?是的,即使在SSH中添加了key,还是需要设置密码。

41. 假设Namenode中没有数据会怎么样?没有数据的Namenode就不能称之为Namenode,通常情况下,Namenode肯定会有数据。

42. 当Job Tracker宕掉时,Namenode会发生什么?当Job Tracker失败时,集群仍然可以正常工作,只要Namenode没问题。

43. 是客户端还是Namenode决定输入的分片?这并不是客户端决定的,在配置文件中以及决定分片细那么。

44. 是否可以自行搭建Hadoop集群?是的,只要对Hadoop环境足够熟悉,你完全可以这么做。

45. 是否可以在Windows上运行Hadoop?你最好不要这么做,Red Hat Linux或者是Ubuntu才是Hadoop的最正确操作系统。在Hadoop安装中,Windows通常不会被使用,因为会出现各种各样的问题。因此,Windows绝对不是Hadoop的推荐系统。

- .word.zl

. -

Hadoop就业面试宝典

1.0 简要描述如何安装配置apache的一个开源hadoop,只描述即可,无需列出具体步骤,列出具体步骤更好。答: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

2.0 请;列出正常的hadoop集群中hadoop都分别需要启动哪些进程,他们的作用分别都是什么,请尽量列的详细一些。答:namenode:管理集群,存储数据的原信息,并管理记录datanode中的文件信息。 Secondname:可以做冷备,对一定范围内数据做快照性备份。 Datanode:存储数据 Jobtracker :管理任务,并将任务分配给 tasktracker。 Tasktracker: 执行JobTracker分配的任务。

3.0请写出以下的shell命令〔1〕杀死一个job 〔2〕删除hdfs上的 /tmp/aaa目录〔3〕参加一个新的存储节点和删除一个节点需要执行的命令答:〔1〕hadoop job –list 得到job的id,然后执行 hadoop job -kill jobId就可以杀死一个指定jobId的job工作了。〔2〕hadoop fs -rmr /tmp/aaa (3) 增加一个新的节点在新的几点上执行Hadoop daemon.sh start datanode Hadooop daemon.sh start tasktracker 然后在主节点中执行 hadoop dfsadmin -refreshnodes 删除一个节点的时候,只需要在主节点执行 hadoop mradmin -refreshnodes

4.0 请列出你所知道的hadoop调度器,并简要说明其工作方法答:Fifo schedular :默认,先进先出的原那么 Capacity schedular :计算能力调度器,选择占用最小、优先级高的先执行,依此类推。 Fair schedular:公平调度,所有的 job 具有一样的资源。

5.0 请列出你在工作中使用过的开发mapreduce的语言答:java,hive

6.0 当前日志采样格式为 a , b , c , d b , b , f , e a , a , c , f 请你用最熟悉的语言编写mapreduce,计算第四列每个元素出现的个数 Static final String

答: public class WordCount1 { public static final String INPUT_PATH = \"hdfs://hadoop0:9000/in\"; public static final String OUT_PATH = \"hdfs://hadoop0:9000/out\"; public static void main(String[] args) throws Exception { Configuration conf = new Configuration(); FileSystem fileSystem = FileSystem.get(conf); if(fileSystem.exists(new Path(OUT_PATH))){} fileSystem.delete(new Path(OUT_PATH),true); Job job = new Job(conf,WordCount1.class.getSimpleName()); //1.0读取文件,解析成key,value对 FileInputFormat.setInputPaths(job,new Path(INPUT_PATH)); //2.0写上自己的逻辑,对输入

- .word.zl

. -

的可以,value进展处理,转换成新的key,value对进展输出 job.setMapperClass(MyMapper.class); job.setMapOutputKeyClass(Text.class); job.setMapOutputValueClass(LongWritable.class); //3.0对输出后的数据进展分区 //4.0对分区后的数据进展排序,分组,一样key的value放到一个集合中 //5.0对分组后的数据进展规约 //6.0对通过网络将map输出的数据拷贝到reduce节点 //7.0 写上自己的reduce函数逻辑,对map输出的数据进展处理 job.setReducerClass(MyReducer.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(LongWritable.class); FileOutputFormat.setOutputPath(job, new Path(OUT_PATH)); job.waitForpletion(true); } static class MyMapper extends Mapper{ Override protected void map(LongWritable k1, Text v1, org.apache.hadoop.mapreduce.Mapper.Context context) throws IOException, InterruptedException {

String[] split = v1.toString().split(\"\\"); for(String words :split){ context.write(split[3], 1); } } } static class MyReducer extends Reducer{ protected void reduce(Text k2, Iterable v2, org.apache.hadoop.mapreduce.Reducer.Context context) throws IOException, InterruptedException { Long count = 0L; for(LongWritable time : v2){ count += time.get(); } context.write(v2, new LongWritable(count)); } } }

7.0 你认为用java , streaming , pipe方式开发map/reduce ,各有哪些优点就用过 java 和 hiveQL。 Java 写 mapreduce 可以实现复杂的逻辑,如果需求简单,那么显得繁琐。 HiveQL 根本都是针对 hive 中的表数据进展编写,但对复杂的逻辑很难进展实现。写起来简单。

8.0 hive有哪些方式保存元数据,各有哪些优点三种:内存数据库 derby,挺小,不常用。本地 mysql。。常用远程端 mysql。。不常用上网上找了下专业名称:single user mode..multi user mode...remote user mode

9.0 请简述hadoop怎样实现二级排序第一种方法是,Reducer将给定key的所有值都缓存起来,然后对它们再做一个Reducer内排序。但是,由于Reducer需要保存给定key的所有值,可能会导致出现内存耗尽的错误。第二种方法是,将值的一局部或整个值参加原始key,生成一个合成key。这两种方法各有优势,第一种方法可能会更快一些(但有内存耗尽的危险),第二种方法那么是将排序的任务交给MapReduce框架,更符合Hadoop/Reduce的设计思想。这篇文章里选择的是第二种。我们将编写一个Partitioner,确保拥有一样key(原始key,不包括添加的局部)的所有数据被发往同一个Reducer,还将编写一个parator,以便数据到达Reducer后即按原始key分组。

10.简述hadoop实现jion的几种方法

利用dataJoin来实现mapreduce的jion问题。

11.0 请用java实现非递归二分查询 1. public class BinarySearchClass 2. { 3. 4. public static int binary_search(int[] array, int value) 5. { 6. int beginIndex = 0;// 低位下标 7. int endIndex = array.length - 1;// 高位下标 8. int

midIndex = -1; 9. while (beginIndex <= endIndex) { 10. midIndex = beginIndex + (endIndex - beginIndex) / 2;//防止溢出 11. if (value == array[midIndex]) { 12. return midIndex; 13. } else if (value < array[midIndex]) { 14. endIndex = midIndex - 1; 15. } else { 16. beginIndex = midIndex + 1;

- .word.zl

. -

17. } 18. } 19. return -1; 20. //找到了,

返回找到的数值的下标,没找到,返回-1 21. } 22. 23. 24. //start 提示:自动阅卷起始唯一标识,请勿删除或增加。 25. public static void

main(String[] args) 26. { 27. System.out.println(\"Start...\"); 28. int[] myArray = new int[] { 1, 2, 3, 5, 6, 7, 8, 9 }; 29. System.out.println(\"查找数字8的下标:\"); 30. System.out.println(binary_search(myArray, 8)); 31. } 32. //end //提示:自动阅卷完毕唯一标识,请勿删除或增加。 33. }

12.0 请简述mapreduce中的bine和partion的作用答:biner是发生在map的最后一个阶段,其原理也是一个小型的reducer,主要作用是减少输出到reduce的个数,减少reducer的输入,提高reducer的执行效率。 Partion的主要作用就是指定输出到reduce的个数的。

13.0 hive内部表和外部表的区别 Hive 创立内部表时,会将数据移动到数据仓库指向的路径;假设创立外部表,仅记录数据所在的路径,不对数据的位置做任何改变。在删除表的时候,内部表的元数据和数据会被一起删除,

而外部表只删除元数据,不删除数据。这样外部表相对来说更加平安些,数据组织也更加灵活,方便共享源数据。

14. Hbase的rowKey怎么创立比较好?列簇怎么创立比较好?答:rowKey最好要创立有规那么的rowKey,即最好是有序的。HBase中一X表最好只创立一到两个列族比较好,因为HBase不能很好的处理多个列族。

15. 用mapreduce怎么处理数据倾斜问题

在mapreduce聚合key中所有values的时候,如果一个key对应了很多values,就会产生数据倾斜的问题。数据倾斜主要就是某个key下面对应的value太多,导致某个reduce节点执行的数据过多,然后产生某个或者某几个reduce节点的执行效率过低,导致整个集群中的任务执行效率较慢,可以使用partion对数据过多的节点进展再划分,划分成多个小的数据块,输入到reduce进展处理。

16. hadoop框架怎么来优化答:hadoop优化的范围太广泛了,可以从某个方面具体来谈一谈,比方说HBase的rowKey和列族的创立的来进展数据存储的优化,可以从网络的拷贝对数据的优化,可以从mapreduce对数据的处理来谈优化,可以从参数方面来说优化等。

17. hbase内部机制是什么答:内部机制更多的是借助nosql数据的关系模型,是建立的hdfs之上,提供高可靠性、高性能、列存储、可伸缩、实时读写的数据库系统。

18. 我们在开发分布式计算job的时候,是否可以去掉reduce阶段答:可以,例如我们的集群就是为了存储文件而设计的,不涉及到数据的计算,就可以将mapReduce都省掉。

19 hdfs的数据压缩算法答:可以使用sequenceFile和mapFile来对小文件进展压缩,压缩成大文件,然后存储,减轻namenode的内存压力。

20. mapreduce的调度模式答:公平调度模式和容量调度模式

21. hive底层与数据库交互原理答:hive有一套自己的sql解析引擎,称为metastore,存储在mysql或者derby数据库中,可以将sql语句转化为mapreducejob任务执行。

22. hbase过滤器实现原那么答:过滤器必须实现HBase Jar包中的Filter接口,或者继承扩展一个实现了该接口的抽象类

23. reduce之后数据的输出量有多大

24. 现场出问题测试mapreduce掌握情况和hive的ql语言掌握情况

25.datanode在什么情况下不会备份数据答:在配置文件中设置文件副本数为1 26.bine出现在哪个过程答:map阶段的最后一个过程。

27. hdfs的体系构造答:HDFS采用了主从〔Master/Slave〕构造模型,一个HDFS集群是由一个NameNode和假设干个DataNode组成的。其中NameNode作为主效劳器,管理文件系

- .word.zl

. -

统的命名空间和客户端对文件的访问操作;集群中的DataNode管理存储的数据

100. 假设我们有其他的日志是不是可以对这个日志有其他的业务分析?这些业务分析都有什么?

101. job 的运行流程(提交一个 job 的流程)? 102Hadoop 生态圈中各种框架的运用场景?

103. hive 中的压缩格式 RCFile、TextFile、SequenceFile 各有什么区别?以上 3 种格式一样大的文件哪个占用空间大小..等等

104假设:Flume 收集到的数据很多个小文件,我需要写 MR 处理时将这些文件合并 (是在 MR 中进展优化,不让一个小文件一个 MapReduce) 他们公司主要做的是中国电信的流量计费为主,专门写 MR。

105. 解释“hadoop〞和“hadoop 生态系统〞两个概念 106. 说明 Hadoop 2.0 的根本构成。

107. 相比于 HDFS1.0, HDFS 2.0 最主要的改进在哪几方面?

108. 试使用“步骤 1,步骤 2,步骤 3„..〞说明 YARN 中运行应用程序的根本流程。 109. MapReduce 2.0〞与“YARN〞是否等同,尝试解释说明

110. MapReduce 2.0 中,MRAppMaster 主要作用是什么,MRAppMaster 如何实现任务容错的?

111. 为什么会产生 yarn,它解决了什么问题,有什么优势?

112. 集群多少台,数据量多大,吞吐量是多大,每天处理多少 G 的数据? 113. 自动化运维了解过吗,你们是否是自动化运维管理?

114. 数据备份,你们是多少份,如果数据超过存储容量,你们怎么处理? 115. 怎么提升多个 JOB 同时执行带来的压力,如何优化,说说思路? 116. 你们用 HBASE 存储什么数据?

117. 你们的 hive 处理数据能到达的指标是多少? 118.hadoop中RecorderReader的作用是什么???

1、在hadoop中定义的主要公用InputFormat中,哪个是默认值? FileInputFormat

2、两个类TextInputFormat和KeyValueInputFormat的区别是什么?答:TextInputFormat主要是用来格式化输入的文本文件的,KeyValueInputFormat那么主要是用来指定输入输出的key,value类型的

3、在一个运行的hadoop任务中,什么是InputSplit? InputSplit是InputFormat中的一个方法,主要是用来切割输入文件的,将输入文件切分成多个小文件,然后每个小文件对应一个map任务

4、 Hadoop框架中文件拆分是怎么调用的? InputFormat --> TextInputFormat --> RecordReader --> LineRecordReader --> LineReader

- .word.zl

. -

5、参考以下M/R系统的场景:hdfs块大小为64MB,输入类为FileInputFormat,有3个文件的大小分别为64KB, 65MB, 127MB Hadoop框架会把这些文件拆分为多少块? 5块 6、 hadoop中RecordReader的作用是什么? RecorderReader是一个接口,主要是用来读取文件的输入键值对的,我们也可以自定义输入的key,value对的读取规那么

7、 Map阶段完毕后,Hadoop框架会处理:Partitioning, Shuffle和Sort,在这个阶段都发生了什么? Partition是对输出的key,value进展分区,可以自定义分区,按照业务需求,将map的输出归分到多个不同的文件中将map的输出作为输入传给reducer 称为shuffle sort是排序的过程,将map的输出,作为reduce的输入之前,我们可以自定义排序,按照key来对map的输出进展排序

8、如果没有定义partitioner,那数据在被送达reducer前是如何被分区的? hadoop有一个默认的分区类,HashPartioer类,通过对输入的k2去hash值来确认map输出的k2,v2送到哪一个reduce中去执行。 9、什么是biner?

biner就是规约操作,通过对map输出的数量进展规约,可以减少reduce的数量,提高执行效率 biner的输入输出类型必须和mapper的输出以及reducer的输入类型一致 10、分别举例什么情况要使用 biner,什么情况不使用?求平均数的时候就不需要用biner,因为不会减少reduce执行数量。在其他的时候,可以依据情况,使用biner,来减少map的输出数量,减少拷贝到reduce的文件,从而减轻reduce的压力,节省网络开销,提升执行效率 11、Hadoop中job和tasks之间的区别是什么?首先通过jobTracker接收到了用户的操作请求之后,就会产生job任务,job然后将任务分配给tasks分配给多个机器去并行的执行,通过将job任务分解为多个tasks任务并行的执行,提高了执行的效率。

12、hadoop中通过拆分任务到多个节点运行来实现并行计算,但某些节点运行较慢会拖慢整个任务的运行,hadoop采用全程机制应对这个情况?对于那些较慢的tasks任务,hadoop 13、流API中的什么特性带来可以使map/reduce任务可以以不同语言〔如perl, ruby, awk等〕实现的灵活性?

14、有可能使hadoop任务输出到多个目录中吗?如果可以,怎么做?可以,hadoop 15、如何为一个hadoop任务设置mappers的数量? 1 map的数量 map的数量通常是由hadoop集群的DFS块大小确定的,也就是输入文件的总块数,正常的map数量的并行规模大致是每一个Node是10~100个,对于CPU消耗较小的作业可以设置Map数量为300个左右,但是由于hadoop的没一个任务在初始化时需要一定的时间,因此比较合理的情况是每个map执行的时间至少超过1分钟。具体的数据分片是这样的,InputFormat在默认情况下会根据hadoop集群的DFS块大小进展分片,每一个分片会由一个map任务来进展处理,当然用户还是可以通过参数mapred.min.split.size参数在作业提交客户端进展自定义设置。还有一个重要参数就是mapred.map.tasks,这个参数设置的map数量仅仅是一个提示,只有当InputFormat 决定了map任务的个数比mapred.map.tasks值小时才起作用。同样,Map任务的个数也能通过使用JobConf 的conf.setNumMapTasks(int num)方法来手动地设置。这个方法能够用来增加map任务的个数,但是不能设定任务的个数小于

Hadoop系统通过分割输入数据得到的值。当然为了提高集群的并发效率,可以设置一个默认的map数量,当用户的map数量较小或者比本身自动分割的值还小时可以使用一个相对交大的默认值,从而提高整体hadoop集群的效率。

16、如何为一个hadoop任务设置要创立reduder的数量? 2 reduece的数量 reduce在运行时往往需要从相关map端复制数据到reduce节点来处理,因此相比于map任务。reduce节点资源是相比照拟缺少的,同时相对运行较慢,正确的reduce任务的个数应该是0.95或者1.75 *〔节点数×mapred.tasktracker.tasks.maximum参数值〕。如果任务数是节点个数的0.95倍,

- .word.zl

. -

那么所有的reduce任务能够在 map任务的输出传输完毕后同时开场运行。如果任务数是节点个数的1.75倍,那么高速的节点会在完成他们第一批reduce任务计算之后开场计算第二批 reduce任务,这样的情况更有利于负载均衡。同时需要注意增加reduce的数量虽然会增加系统的资源开销,但是可以改善负载匀衡,降低任务失败带来的负面影响。同样,Reduce任务也能够与 map任务一样,通过设定JobConf 的conf.setNumReduceTasks(int num)方法来增加任务个数。

xxx信息技术XX 1、你们的集群规模?开发集群:10台〔8台可用〕8核cpu 2、你们的数据是用什么导入到数据库的?导入到什么数据库?处理之前的导入:通过hadoop命令导入到hdfs文件系统处理完成之后的导出:利用hive处理完成之后的数据,通过sqoop导出到mysql数据库中,以供报表层使用 3、你们业务数据量多大?有多少行数据?(面试了三家,都问这个问题) 开发时使用的是局部数据,不是全量数据,有将近一亿行〔8、9千万,具体不详,一般开发中也没人会特别关心这个问题〕 4、你们处理数据是直接读数据库的数据还是读文本数据?将日志数据导入到hdfs之后进展处理 5、你们写hive的hql语句,大概有多少条?不清楚,我自己写的时候也没有做过统计 6、你们提交的job任务大概有多少个?这些job执行完大概用多少时间?(面试了三家,都问这个问题) 没统计过,加上测试的,会与很多

7、hive跟hbase的区别是?这个可以百度 8、你在工程中主要的工作任务是?利用hive分析数据 9、你在工程中遇到了哪些难题,是怎么解决的?某些任务执行时间过长,且失败率过高,检查日志后发现没有执行完就失败,原因出在hadoop的job的timeout过短〔相对于集群的能力来说〕,设置长一点即可 10、你自己写过udf函数么?写了哪些?这个我没有写过 11、你的工程提交到job的时候数据量有多大?(面试了三家,都问这个问题) 不清楚是要问什么 12、reduce后输出的数据量有多大?不清楚 1.一个网络商城1天大概产生多少G的日志? 2.大概有多少条日志记录〔在不清洗的情况下〕? 3.日访问量大概有多少个? 4.注册数大概多少? 5.我们的日志是不是除了apache的访问日志是不是还有其他的日志? 6.假设我们有其他的日志是不是可以对这个日志有其他的业务分析?这些业务分析都有什么〔*********〕 1.问:你们的效劳器有多少台? 2.问:你们效劳器的内存多大? 3.问:你们的效劳器怎么分布的?〔这里说地理位置分布,最好也从机架方面也谈谈〕 4.问:你平常在公司都干些什么〔一些建议〕下面是HBASE我非常不懂的地方: 1.hbase怎么预分区? 2.hbase怎么给web前台提供接口来访问〔HTABLE可以提供对HTABLE的访问,但是怎么查询同一条记录的多个版本数据〕? 3.htable API有没有线程平安问题,在程序中是单例还是多例? 4.我们的hbase大概在公司业务中〔主要是网上商城〕大概都几个表,几个表簇,大概都存什么样的数据? 5.hbase的并发问题?

1、将现有逻辑在Spark上面实现。

2、数据倾斜怎么处理?

数据倾斜有很多解决方案,本例子简要介绍一种实现方式,假设表A 和表B连接,表A 数据倾斜,只有一个key倾斜,首先对A进展采样,统计出最倾斜的key,将A 表分隔为A1 只有倾斜 key, A2 不包含倾斜key,然后分别与表B 连接。

- .word.zl

. -

最后将结果合并, union

3 、各完成一个awk和sed的例子,最简单的应用即可,并说明。

cat /etc/passwd |awk -F ':' '{print $1}' 读取文件,指定文本分隔符,然后打印第一个域

cat test.sh | sed '2,50d' 读取文件的每一行,然后对每一行进展处理后打印在控制台,有很多模式,很多方法。还可以直接修改文件 4、简要描述你知道的数据挖掘算法和使用场景

〔一〕基于分类模型的案例

〔 1〕垃圾的判别通常会采用朴素贝叶斯的方法进展判别 〔2〕医学上的肿瘤判断通过分类模型识别

〔二〕基于预测模型的案例

〔1〕红酒品质的判断分类回归树模型进展预测和判断红酒的品质

〔 2〕搜索引擎的搜索量和股价波动

〔三〕基于关联分析的案例:沃尔玛的啤酒尿布

〔四〕基于聚类分析的案例:零售客户细分

〔五〕基于异常值分析的案例:支付中的交易欺诈侦测

〔六〕基于协同过滤的案例:电商猜你喜欢和推荐引擎

〔七〕基于社会网络分析的案例:电信中的种子客户

〔八〕基于文本分析的案例

〔1〕字符识别:扫描王APP

〔2〕文学著作与统计:红楼梦归属

5、列举你知道的常用的Hadoop管理和监控的命令、比方hdfs dfs -mkdir /usr

-ls -cat -text -cp -put -chmod -chown

- .word.zl

. -

-du -get -copyFromLocal -copyToLocal

-mv -rm - tail -chgrp

6、评述hadoop运行原理

站在高处,大的方面讲解

1、有hdfs 负责数据存放是Hadoop的分布式文件存储系统

将大文件分解为多个Block,每个Block保存多个副本。提供容错机制,副本丧失或者宕机时自动恢复。

默认每个Block保存3个副本,64M为1个Block。 将Block按照key-value映射到内存当中。

2、有mapreduce负责计算,Map〔映射〕和Reduce〔归约〕

7、讲述mapreduce的原理

ApplicationMaster 是一个详细的框架库,它结合从 ResourceManager 获得的资源和 NodeManager 协同工作来运行和监控任务。

ResourceManager 支持分层级的应用队列,这些队列享有集群一定比例的资源。从某种意义上讲它就是一个纯粹的调度器,

ApplicationMaster 的职责有:向调度器索要适当的资源容器,运行任务,跟踪应用程序的状态和监控它们的进程,处理任务的失败原因。

输入分片〔input split〕

map阶段:

biner阶段:

8、JVM&垃圾回收机制

三个代:年轻代〔Young Generation〕、年老代〔Old Generation〕和持久代〔Permanent Generation〕。

- .word.zl

. -

9、找出公共好友:

.blogs./lucius/p/3483494.html

.aboutyun./thread-18826-1-1.html

原理:A 有好友 B ,C,D F 有好友 D E F

其实A 的好友也是他好友的好友

其实F 的好友也是他的好友的好友

那么D 的共同好友就是 A F

10、biner作用

biner最根本是实现本地key的聚合,对map输出的key排序、value进展迭代。

biner还有本地reduce功能〔其本质上就是一个reduce〕:

使用biner先完成在map端的本地聚合,可以减少网络传输数据量,提高性能。

平均数的归约算法不能屡次调用。

11、在mr环节中,那些环节需要优化,如何优化,请详细说明。

1、 setNumReduceTasks 适当的设置reduce的数量,如果数据量比较大,那么可以增加reduce的数量

2、适当的时候使用 bine 函数,减少网络传输数据量

3、压缩map和reduce的输出数据

4、使用SequenceFile二进制文件。

5、通过application 的ui页面观察job的运行参数

6、太多小文件,造成map任务过多的问题,应该可以先合并小文件,或者有一个特定的map作为处理小文件的输入

7、map端效率低原因分析

- .word.zl

. -

源文件的大小远小于HDFS的块的大小。这意味着任务的开启和停顿要消耗更多的时间,就没有足够的时间来读取并处理输入数据。

源文件无法分块。这导致需要通过网络IO从其他节点读取文件块。 一个节点的本地磁盘或磁盘控制器运行在降级模式中,读取写入性能都很差。这会影响某个节点,而不是全部节点。

源文件不来自于HDFS。那么可能是Hadoop节点和数据源之间的延迟导致了性能低下。 Map任务从其他数据节点读取数据。可以从JobTracker的map任务细节信息和任务运行尝试中找到输入块的位置。如果输入块的位置不是任务执行的节点,那就不是本地数据了。 技术33 Reduce实例缺乏或过多

技术34 诊断reduce段的数据倾斜的问题

技术35 确定reduce任务是否存在整体吞吐量过低

技术36 缓慢的洗牌〔shuffle〕和排序

技术37 作业竞争和调度器限制

1.查找硬件的失效

CPU竞争

3 内存交换

4 磁盘安康 网络

技术46 躲避使用reduce

技术48 使用bine

技术50 收集倾斜数据

减小Reduce端数据倾斜的性能损失

抽样和范围分区

方法2:自定义分区

方法3:bine

- .word.zl

. -

方法4:Map端连接和半连接

数据大小倾斜的自定义策略

1.正那么表达式〔少用〕

2.字符串令牌化〔TOKENIZATION〕Apache mons中的StringUtils类效率要更好

3.对象重用

4字符串连接

5对象的内存资源消耗

6.4.6 优化数据序列化 压缩

二进制文件格式使用二进制文件格式,如Avro和SequenceFile,可以使数据的表达更为紧凑,并提高编组〔marshalling〕和逆编组的效率,相比文本格式要更为高效。

确保准确的度量,理解如何获得MapReduce和系统的性能指标 使用性能指标来减少潜在的性能问题

通过检查MapRecue/HDFS配置,优化MapReduce洗牌/排序阶段,优化用户JAVA代码,来修复常见的性能问题

spark通信模块

1、spark的 cluster manager可以有 local , standalone, mesos , yarn等部署方式,为了 集中通信方式

1、rpc remote produce call spark的通信机制:

akka的优势和特性如下:

1、并行和分布式:akka在设计时采用了异步通信和分布式架构 2、可靠性:在本地、远程都有监控和恢复机制

3、高性能:在单机环境中美妙可以发送50000000 个消息,1GB内存中可以创立和保存2500000个actor对象

4、去中心,区别于master-slave模式,采取无中心节点的架构

- .word.zl

. -

5、可拓展性:可以在分布式环境下记性scala out ,线性扩大计算能力。 可以看到akka具有强大的并发处理能力。

4.5容错机制

4.5.1 lineage机制 rdd的依赖 有宽依赖,还有窄依赖

宽依赖的:lineage 根据分区,来进展恢复,很简单

窄依赖:一个子的rdd有多个父亲,比较麻烦一点,所以增加了checkpoin ,检查点机制,其实就是备份的意思,来做容错处理 可以通过sparkcontext.setcheckpointdir〔〕设置检查点数据的存储路径,进而将数据存储藏份,然后spark删除所有已经做检查点的rdd的祖先rdd依赖。这个操作需要在所有需要对这个rdd所做的操作完成之后再做。

官方建议:做检查点的rdd最好是在内存中已经缓存的rdd,否那么这个rdd在持久化的文件中需要重新计算,产生io开销。

4.6shuffler机制 shufffler write shuffler fetch shuffler aggenr

spark在执行过程中中driver控制应用生命周期,在调度中,spark采用了经典的fifo 和fair等调度算法对内部的资源实现不同级别的调度。在spark的io中,将数据抽象为以快为单位进展管理,rdd中的一个分区就是需要处理的一个快,集群中的通信对于命令和状态的传递极为重要,spark通过akka框架进展集群消息通信,spark通过 lineage和checkpoint机制进展容错性保证,lineage进展重算操作,checkpoint进展数据冗余备份,最后介绍了spark中的shuffle机制,spark也借鉴了mapreduce模型,但是其shuffle 机制进展了创新与优化, 第五章: spark 开发环境配置和流程

- .word.zl

因篇幅问题不能全部显示,请点此查看更多更全内容