大数据面试小结

(1) hadoop的配置文件修改过哪些?
core-site.xml
hdfs-site.xml
mapred-site.xml
yarn-site.xml
主要修改以上四个文件
具体内容
①core-site.xml

<configuration>
	<!-- Hadoop文件系统依赖的基础配置 -->     
	<property>         
		<name>hadoop.tmp.dir</name>         
		<value>/home/bigdata/hadoop/data</value>    
	</property>     
	<!-- NameNode结点的URI(包括协议、主机名称、端口号) -->    
	<property>        
		<name>fs.defaultFS</name>        
		<value>hdfs://SZ01:8020</value>    			
	</property>    
	<!-- 开启回收站机制,可以设置文件彻底删除的时间,默认为0,单位为分钟 -->    
	<property>        
		<name>fs.trash.interval</name>     
		<value>60</value>    
	</property> 
</configuration>

②hdfs-site.xml

<configuration>
	<property>
		<name>dfs.namenode.secondary.http-address</name>
		<value>SZ01:50090</value>
	</property>
	<property>
		<name>dfs.replication</name>
		<value>3</value>
	</property>
	<property>
		<name>dfs.permissions</name>
		<value>false</value>
	</property>
	<property>
		<name>dfs.namenode.http-address</name>
		<value>SZ01:50070</value>
	</property>
	<property>
		<name>dfs.datanode.data.dir</name>
		<value>file:///home/bigdata/hadoop/data/dfs/dn</value>
	</property>
</configuration>

③mapred-site.xml

<configuration>
	<property>
		<name>mapreduce.jobhistory.address</name>
		<value>SZ01:10020</value>
	</property>
	<property>
		<name>mapreduce.jobhistory.webapp.address</name>
		<value>SZ01:19888</value>
	</property>
	<property>
		<name>mapreduce.framework.name</name>
		<value>yarn</value>
	</property>
</configuration>

④yarn-site.xml

<configuration>
<!-- Site specific YARN configuration properties -->
	<property>
		<name>yarn.resourcemanager.hostname</name>
		<value>SZ01</value>
	</property>
	<property>
		<name>yarn.resourcemanager.resource-tracker.address</name>
		<value>SZ01:8031</value>
	</property>
	<property>
		<name>yarn.resourcemanager.address</name>
		<value>SZ01:8032</value>
	</property>
	<property>
		<name>yarn.resourcemanager.scheduler.address</name>
		<value>SZ01:8030</value>
	</property>
	<property>
		<name>yarn.nodemanager.resource.memory-mb</name>
		<value>1536</value>
	</property>
	<property>
		<name>yarn.nodemanager.aux-services</name>
		<value>mapreduce_shuffle</value>
	</property>
</configuration>

(2) 列举hadoop的优化,至少三点?

  • 解决数据倾斜问题
  • 减少job数
  • 设置合理的map reduce的task数,能有效提升性能。(比如,10w+级别的计算,用160个reduce,那是相当的浪费,1个足够)
  • 合理的使用combine,能减少在reduce端大量的数据压力
  • 对小文件进行合并
  • 大数据量的情况下少使用count(distinct),因为count(distinct)时使用group by字段分组,按照distinct排序,这会导致数据分布倾斜。

(3) 给40亿个不重复的unsigned int的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中?
看起来很复杂,实际上答案很简单。
https://blog.csdn.net/csdnsevenn/article/details/82230049 这篇讲的很棒!强烈推荐,我觉得打开了我的代码思路。

(4) 100万个数中找到最大的100个?
我个人的想法是先默认前100为最大的100个数存入小数组,用小数组中最小的数与第101个数比较,如果小数组最小的数比大数组之后的数小,则替换小数组中最小的值,再查找出小数组最小的值,否则继续进行比较,以此作为循环。

(5) 怎么在海量数据找出重复次数最多的一个?

(6)谈谈对Hadoop的理解以及分别介绍Hadoop生态圈各组件(Hive、HBase、Flume、ZK、Kafka、Sqoop)的基本原理;

(7)手写一个线程安全的单例模式
说到线程安全,就要立马想到synchronized,synchronized能使代码在同一时间内只被一个线程访问。下面是一个经典的处理多线程中的单例模式:

public class only {

    private only(){

    }
    public static only instance;
    public static only getInstance(){
        if(instance == null){
            instance = new only();
        }
        return instance;
    }
}

(8)Java多线程、线程池的理解

首先我们要了解什么是进程,什么是线程。

  • 进程:是执行中一段程序,即一旦程序被载入到内存中并准备执行,它就是一个进程。进程是表示资源分配的的基本概念,又是调度运行的基本单位,是系统中的并发执行的单位。
  • 线程:单个进程中执行中每个任务就是一个线程。线程是进程中执行运算的最小单位。
    具体可参照 https://www.jianshu.com/p/50fffbf21b39 博主讲的很详细,感兴趣的道友们可以慢慢看。

(9)Java堆和栈的理解,以及分别在什么情况下会出现堆溢出、栈溢出?
首先我们要知道JAVA在程序运行时,是会在内存中划分5片空间进行数据的存储。分别是:
1、寄存器 2、本地方法区 3、方法区 4、栈 5、堆
其中栈和堆尤为重要

  • 栈:局部变量以及基本数据类型都会存放在栈内存中,以FIFO的形式存储数据,使用完就会从栈中消失
  • 堆:new创建的对象实例以及数组都是存放在堆内存中,堆中数据会比较持久,用完之后会通过gc不定期消除。

那么很显而易见,栈中存放过多数据就会溢出,比如数据清洗过程中造成的数据倾斜、死循环等就会造成栈溢出;而new了过多的对象则会出现堆溢出的情况。

(10)Scala的特点?有什么优势和缺点?

  • Scala的特点是结构简单,与Java相比scala的代码耦合性更低,定义变量时对变量无严格要求,且更易被优化。
    (ps:https://www.cnblogs.com/soyo/p/7017808.html
    推荐感兴趣的朋友去看看这篇博客,哪怕是初学者看到了这篇文章都会热血沸腾的想去学习Scala,当然面试的时候不能直接告诉面试官去看这篇博客,该如何去总结,既能讲的有深度,又能以简练精干的语言告诉面试官你是对这个有研究的就看各位的了。)

(11)说说Spark中常用的算子,以及一些常用算子的区别,是否看过Spark的源代码?
Spark算子分为Transformation算子和Action算子
Spark常用的Transformation算子:

转换算子含义
reduceByKey(func, [numTasks])在一个(K,V)的RDD上调用,返回一个(K,V)的RDD,使用指定的reduce函数,将相同key的值聚合到一起,与groupByKey类似,reduce任务的个数可以通过第二个可选的参数来设置
groupByKey([numTasks])在一个(K,V)的RDD上调用,返回一个(K, Iterator[V])的RDD,没有本地聚合。都是全局聚合
flatMap(func)类似于map,但是每一个输入元素可以被映射为0或多个输出元素(所以func应该返回一个序列,而不是单一元素),要求RDD中每个元素类型是集合类型
mapPartitions(func)类似于map,但独立地在RDD的每一个分片上运行,因此在类型为T的RDD上运行时,func的函数类型必须是Iterator[T] => Iterator[U]
mapPartitionsWithIndex(func)类似于mapPartitions,但func带有一个整数参数表示分片的索引值,因此在类型为T的RDD上运行时,func的函数类型必须是(Int, Iterator[T]) => Iterator[U]

Spark常用的Action算子:

行动算子含义
foreach(func)在数据集的每一个元素上,运行函数func进行更新。
countByKey()针对(K,V)类型的RDD,返回一个(K,Int)的map,表示每一个key对应的元素个数。
saveAsTextFile(path)将数据集的元素以textfile的形式保存到HDFS文件系统或者其他支持的文件系统,对于每个元素,Spark将会调用toString方法,将它装换为文件中的文本
count()返回RDD的元素个数
reduce(func)通过func函数聚集RDD中的所有元素,这个功能必须是可交换且可并联的
collect()在驱动程序中,以数组的形式返回数据集的所有元素
take(n)返回一个由数据集的前n个元素组成的数组

(12)Git和SVN有什么区别?
转载于 https://www.cnblogs.com/somethingWithiOS/p/5636356.html
原作者写的非常好
1)Git是分布式的,SVN不是:
这是GIT和其它非分布式的版本控制系统,例如SVN,CVS等,最核心的区别。好处是跟其他同事不会有太多的冲突,自己写的代码放在自己电脑上,一段时间后再提交、合并,也可以不用联网在本地提交;GIT并不是目前第一个或唯一的分布式版本控制系统。还有一些系统,例如Bitkeeper, Mercurial等,也是运行在分布式模式上的。但GIT在这方面做的更好,而且有更多强大的功能特征。

GIT跟SVN一样有自己的 集中式版本库或服务器。但GIT更倾向于被使用于分布式模式,也就是每个开发人员从中心版本库/服务器上chect out代码后会在自己的机器上克隆一个自己的版本库。可以这样说,如果你被困在一个不能连接网络的地方时,你仍然能够提交文件,查看历史版本记录,创建项目分支等。

2)GIT把内容按元数据方式存储,而SVN是按文件:
所有的资源控制系统都是把文件的元信息隐藏在一个类似.svn,.cvs等的文件夹里。如果你把.git目录的体积大小跟.svn比较,你会发现它们差距很大。因为git目录是处于你的机器上的一个克隆版的版本库,它拥有中心版本库上所有的东西,例如标签,分支,版本记录等。

3)GIT分支和SVN的分支不同:
分支在SVN中一点不特别,就是版本库中的另外的一个目录。如果你想知道是否合并了一个分支,你需要手工运行像这样的命令svn propget svn:mergeinfo,来确认代码是否被合并。 然而,处理GIT的分支却是相当的简单和有趣。

Git鼓励分Branch,而SVN,说实话,我用Branch的次数还挺少的,SVN自带的Branch merge我还真没用过,有merge时用的是Beyond Compare工具合并后再Commit的;

4)GIT没有一个全局的版本号,而SVN有:
目前为止这是跟SVN相比GIT缺少的最大的一个特征。

5)GIT的内容完整性要优于SVN:
GIT的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。

6)Git下载下来后,在本地不必联网就可以看到所有的log,很方便学习,SVN却需要联网;

7)SVN在Commit前,我们都建议是先Update一下,跟本地的代码编译没问题,并确保开发的功能正常后再提交,这样其实挺麻烦的,有好几次同事没有先Updata,就Commit了,发生了一些错误,耽误了大家时间,Git可能这种情况会少些。

(13)ElasticSearch熟悉么?
ElasticSearch是一个分布式可扩展的实时搜索和分析引擎。对于ElasticSearch我也真的是只了解到这了,被问到这个问题后也是回头恶补了一下。
https://www.cnblogs.com/dreamroute/p/8484457.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值