【某公司笔试面试题】
1\使用mr,spark ,spark sql编写word count程序
【Spark 版本】
val conf=new SparkConf().setAppName("wd").setMaster("local[1]")
val sc=new SparkContext(conf,2)
//加载
val File("tructField("name",DataTypes.StringType,true)")
val paris=lines.flatMap(line=>line.split("^A"))
val words=paris.map((_,1))
val duceByKey(_+_).sortBy(x=>x._1,false)
//打印
result.foreach(
wds=>{
println("单词:"+wds._1+" 个数:"+wds._2)
}
)
sc.stop()
【spark sql版本】
val conf=new SparkConf().setAppName("sqlWd").setMaster("local[1]")
val sc=new SparkContext(conf)
val sqlContext=new SQLContext(sc)
//加载
val File("E:\idea15\createRecommeder\")
val words=lines.flatMap(x=>x.split(" ")).map(y=>Row(y))
val structType=StructType(Array(StructField("name",DataTypes.StringType,true)))
val ateDataFrame(rows,structType)
df.registerTempTable("t_word_count")
ister("num_word",(name:String)=>1)
sqlContext.sql("select name,num_word(name) from t_word_count").l("name")).count().show()
sc.stop()
2\hive的使用,内外部表的区别,分区作用,UDF和Hive优化
(1)hive使用:仓库、工具
(2)hive内外部表:内部表数据永久删除,外部表数据删除后、其他人依然可以访问
(3)分区作用:防止数据倾斜
(4)UDF函数:用户自定义的函数(主要解决格式,计算问题),需要继承UDF类
java代码实现
class TestUDFHive extends UDF {
public String evalute(String str){
try{
return "hello"+str
}catch(Exception e){
return str+"error"
}
}
}
(5)Hive优化:看做mapreduce处理
a\排序优化:sort by 效率高于 order by
b\分区:使用静态分区 (statu_date="20160516",location="beijin"),每个分区对应hdfs上的一个目录
c\减少job和task数量:使用表链接操作
d\解决groupby数据倾斜问题:设置upby.skewindata=true ,那么hive会自动负载均衡
e\小文件合并成大文件:表连接操作
f\使用UDF或UDAF函数:wwwblogs/ggjucheng/archive/2013/02/01/2888819.html
3\Hbase的rk设计,Hbase优化
java面试题csdn a\rowkey:hbase三维存储中的关键(rowkey:行键 ,columnKey(family+quilaty):列键 ,timestamp:时间戳)
\rowkey字典排序、越短越好
\使用id+时间:9527+20160517 \使用hash散列:dsakjkdfuwdsf+9527+20160518
\应用中,rowkey 一般10~100bytes,8字节的整数倍,有利于提高操作系统性能
b\Hbase优化
\分区:RegionSplit()方法 \NUMREGIONS=9
\column不超过3个
\硬盘配置,便于regionServer管理和数据备份及恢复
\分配合适的内存给regionserver
其他:
hbase查询
(1)get
(2)scan
使用startRow和endRow限制
4\Linux常用操作
a\awk:
awk -F:`BEGIN{print "name ip "}{print $1 $7} END{print "结束"}` /etc/passwd
last | head -5 |awk `BEGIN{print "name ip"}{print $1 $3}END{print "结束了"}`
b\sed
5\java线程2种方式实现、设计模式、链表操作、排序
(1)2种线程实现
a\Thread类继承
TestCL th=new TestCL()//类继承Thread
th.start()
b\实现Runnable接口
Thread th=new Thread(new Runnable(){
public void run(){
//实现
}
})
th.start()
(2)设计模式,分为4类
a\创建模式:如工厂模式、单例模式
b\结构模式:代理模式
c\行为模式:观察者模式
d\线程池模式
6\【最熟悉的一个项目简介、架构图、使用的技术、你负责哪块】
7\cdh集监控
(1)数据库监控 (2)主机监控 (3)服务监控 (4)活动监控
8\计算机网络工作原理
将分散的机器通过数据通信原理连接起来,实现共享!
9\hadoop生态系统
hdfs\mapreduce\hive\hbase\zookeeper\flume
hdfs原理及各个模块的功能 mapreduce原理 mapreduce优化 数据倾斜
11系统维护:hadoop升级datanode节点
12\【讲解项目要点:数据量、多少人、分工、运行时间、项目使用机器、算法、技术】
13\【学会向对方提问】
14\jvm运行机制及内存原理
运行:
I加载.class文件
II管理并且分配内存
III垃圾回收
内存原理:
IJVM装载环境和配置
II装载JVM.dll 并初始化JVM.dll
IV 处理class类
15\hdfs、yarn参数调优
mapreduce.job.jvm.num.tasks
默认为1,设置为 -1,重用jvm
16\Hbase、Hive、impala、zookeeper、Storm、spark原理和使用方法、使用其架构图讲解
【某公司笔试题】
1、如何为一个hadoop任务设置mappers的数量
答案:
使用job.setNumMapTask(int n)手动分割,这是不靠谱的
官方文档:“Note: This is only a hint to the framework”说明这个方法只是提示作用,不起决定性作用
实际上要用公式计算:
Max(min.split,min(max.split,block))就设置分片的最大最下值 computeSplitSize()设置
参考:blog.csdn/strongerbit/article/details/7440111
2、有可能使hadoop任务输出到多个目录中么?如果可以,怎么做?
答案:在1.X版本后使用MultipleOutputs.java类实现
源码:
MultipleOutputs.addNamedOutput(conf, "text2", TextOutputFormat.class, Long.class, String.class);
MultipleOutputs.addNamedOutput(conf, "text3", TextOutputFormat.class, Long.class, String.class);
参考:my.oschina/leejun2005/blog/94706
发音:Multiple['m?lt?pl]--》许多的
3、如何为一个hadoop任务设置要创建的reducer的数量
答案:job.setNumReduceTask(int n)
或者调整l中的duce.tasks.maximum默认参数值
4、在hadoop中定义的主要公用InputFormats中,哪一个是默认值:
(A)TextInputFormat
(B)KeyValueInputFormat
(C)SequenceFileInputFormat
答案:A
5、两个类TextInputFormat和KeyValueTextInputFormat的区别?
答案:
FileInputFormat的子类:
TextInputFormat(默认类型,键是LongWritable类型,值为Text类型,key为当前行在文件中的偏移量,value为当前行本身);
KeyValueTextInputFormat(适合文件自带key,value的情况,只要指定分隔符即可,比较实
用,默认是\t分割);
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论