补充: mapreduce 、hive. 为何不用mapredeuce,用hive?html
1.MapReduce is hard to program.
java
2.No Schema,lack of query lanaguager. eg.SQLnode
后面facebook 开源了一个hive的框架,它是基于hadoop的。mysql
what is hive?
linux
A Hadoop-based system for querying and managing structured data
web
Uses Map/Reduce for execution (执行)算法
Uses Hadoop Distributed File System (HDFS) for storagesql
Provides SQL-like query language named HiveQL;shell
Hive compile SQL queries into MapReduce jobs and run the jobs in the Hadoop cluster.数据库
Hive Advantages
Indispensable for SQL users,ease-of-use;
Easier then java MR API;
Hive Disadvantages
Hive does Not provide low latency or realtime queries;
Even querying small amounts of data may take minutes;
Hive's Focus
Scalable SQL processing over data in Hadoop
Scales to 100PB+;
Data has a schema;
Designed for scalability and ease-of-use rather than low latency responses;
一、Hive内部表和外部表的区别?
1) 在导入数据到外部表,数据并无移动到本身的数据仓库目录下,也就是说外部表中的数据并非由它本身来管理的!而内部表则不同;
2) 在删除内部表的时候,Hive将会把属于内部表的元数据和数据所有删掉;而删除外部表的时候,Hive仅仅删除外部表的元数据,数据是不会删除的!
那么,应该如何选择使用哪一种表呢?在大多数状况没有太多的区别,所以选择只是我的喜爱的问题。可是做为一个经验,若是全部处理都须要由Hive完成,那么你应该建立内部表,不然使用外部表!
http://www.aboutyun.com/thread-7458-1-1.html
二、Hbase的rowkey怎么建立比较好?列族怎么建立比较好?
三、用mapreduce怎么处理数据倾斜问题?
http://www.alidata.org/archives/2109
http://blog.csdn.net/biaorger/article/details/38392957
四、hadoop框架中怎么来优化?
http://itindex.net/detail/49326-hadoop-%E4%BC%98%E5%8C%96-%E6%80%BB%E7%BB%93
五、Hbase内部是什么机制?
http://ju.outofmemory.cn/entry/50070
六、hdfs的数据压缩算法
http://blog.sina.com.cn/s/blog_66474b1601017yjq.html
七、hive底层与数据库交互原理
八、hbase过滤器实现原则
http://zjushch.iteye.com/blog/1530143
一. 问答题
1) datanode在什么状况下不会备份?
2) hdfs的体系结构?
3) sqoop在导入数据到mysql时,如何让数据不重复导入?若是存在数据问题sqoop如何处理?
4) 请列举曾经修改过的/etc下的配置文件,并说明修改要解决的问题?
5) 描述一下hadoop中,有哪些地方使用了缓存机制,做用分别是什么?
二. 计算题:
一、使用Hive或者自定义MR实现以下逻辑
[plain] view plain
product_no lac_id moment start_time user_id county_id staytime city_id
13429100031 22554 8 2013-03-11 08:55:19.151754088 571 571 282 571
13429100082 22540 8 2013-03-11 08:58:20.152622488 571 571 270 571
13429100082 22691 8 2013-03-11 08:56:37.149593624 571 571 103 571
13429100087 22705 8 2013-03-11 08:56:51.139539816 571 571 220 571
13429100087 22540 8 2013-03-11 08:55:45.150276800 571 571 66 571
13429100082 22540 8 2013-03-11 08:55:38.140225200 571 571 133 571
13429100140 26642 9 2013-03-11 09:02:19.151754088 571 571 18 571
13429100082 22691 8 2013-03-11 08:57:32.151754088 571 571 287 571
13429100189 22558 8 2013-03-11 08:56:24.139539816 571 571 48 571
13429100349 22503 8 2013-03-11 08:54:30.152622440 571 571 211 571
字段解释:
product_no:用户手机号;
lac_id:用户所在基站;
start_time:用户在此基站的开始时间;
staytime:用户在此基站的逗留时间。
需求描述:
根据lac_id和start_time知道用户当时的位置,根据staytime 知道用户各个基站的逗留时
长。根据轨迹合并连续基站的staytime。最终获得每个用户按时间排序在每个基站驻留时长
指望输出举例:
[plain] view plain
13429100082 22540 8 2013-03-11 08:58:20.152622488 571 571 270 571
13429100082 22691 8 2013-03-11 08:56:37.149593624 571 571 390 571
13429100082 22540 8 2013-03-11 08:55:38.140225200 571 571 133 571
13429100087 22705 8 2013-03-11 08:56:51.139539816 571 571 220 571
13429100087 22540 8 2013-03-11 08:55:45.150276800 571 571 660 571
二、Linux 脚本能力考察
2.1 请随意使用各类类型的脚本语言实现:批量将指定目录下的全部文件中的
$HADOOP_HOME替换成/home/ocetl/app/hadoop
2.2 假设有10 台主机,H1 到H10,在开启SSH互信的状况下,编写一个或多个脚本实现
在全部的远程主机上执行脚本的功能
例如:runRemoteCmd.sh "ls -l"
指望结果:
H1:
XXXXXXXX
XXXXXXXX
XXXXXXXX
H2:
XXXXXXXX
XXXXXXXX
XXXXXXXX
H3:
...
三、Java能力考察
3.1 写代码实现1G 大小的文本文件,行分隔符为\x01\x02,统计一下该文件中的总行数,
要求注意边界状况的处理
3.2 请描述一下在开发中如何对上面的程序进行性能分析,对性能进行优化的过程。
一. 问答题:
1. 用mapreduce实现sql语句select count(x) from a group by b?
2. 简述MapReduce大体流程,map -> shuffle -> reduce
3. HDFS如何定位replica
4. Hadoop参数调优: cluster level: JVM, map/reduce slots, job level: reducer, memory, use combiner? use compression?
5. hadoop运行的原理?
6. mapreduce的原理?
7. HDFS存储的机制?
8. 如何确认Hadoop集群的健康情况?
二. 思考题
现有1 亿个整数均匀分布,若是要获得前1K 个最大的数,求最优的算法。(先不考虑内存的限制,也不考虑读写外存,时间复杂度最少的算法即为最优算法)
我先说下个人想法:分块,好比分1W块,每块1W个,而后分别找出每块最大值,从这最大的1W个值中找最大1K个,那么其余的9K 个最大值所在的块便可扔掉,从剩下的最大的1K 个值所在的块中找前1K个便可。那么原问题的规模就缩小到了1/10。
问题:
(1) 这种分块方法的最优时间复杂度。
(2) 如何分块达到最优。好比也可分10W 块,每块1000 个数。则问题规模可降到原来1/100。但事实上复杂度并没下降。
(3) 还有没更好更优的方法解决这个问题。
一. 问答题
1.hive如何调优?
2.hive如何权限控制?
3.hbase写数据的原理是什么?
4.hive能像关系数据库那样,建多个库吗?
5.hbase宕机如何处理?
6.hive实现统计的查询语句是什么?
7.生产环境中为何建议使用外部表?
8.hadoop mapreduce建立类DataWritable的做用是什么?
9.为何建立类DataWritable?
二. 思考题
1.假设公司要建一个数据中心,你会如何规划?
2.用Hadoop分析海量日志文件,每行日志记录了以下数据:
TableName(表名),Time(时间),User(用户),TimeSpan(时间开销)。
要求:
编写MapReduce程序算出高峰时间段(如上午10 点)哪张表被访问的最频繁,以及这段时间访问这张表最多的用户,以及这个用户的总时间开销。
一. 问答题:
1. 简单说说map端和reduce端溢写的细节
2. hive的物理模型跟传统数据库有什么不一样
3. 描述一下hadoop机架感知
4. 对于mahout,如何进行推荐、分类、聚类的代码二次开发分别实现那些接口
5. 直接将时间戳做为行健,在写入单个region 时候会发生热点问题,为何呢?
二. 计算题:
1. 比方:现在有10个文件夹, 每一个文件夹都有1000000个url. 现在让你找出top1000000url。
方法一:
运用2个job,第一个job直接用filesystem读取10个文件夹做为map输入,url作key,reduce计算url的sum,
下一个job map用url做key,运用sum做二次排序,reduce中取top10000000
方法二:
建hive表A,挂分区channel,每一个文件夹是一个分区.
select x.url,x.c from(select url,count(1) as c from A where channel ='' group by url) x order by x.c desc limit 1000000;
2.若是让你设计,你以为一个分布式文件系统应该如何设计,考虑哪方面内容?
一.问答题
一、map方法是如何调用reduce方法的?
二、fsimage和edit的区别?
三、hadoop1和hadoop2的区别?
四、列举几个配置文件优化?
五、写出你对zookeeper的理解
六、datanode首次加入cluster的时候,若是log报告不兼容文件版本,那须要namenode执行格式化操做,这样处理的缘由是?
七、hbase 集群安装注意事项
二. 思考题
1. linux 基础:
(1) find 用法
(2) 给出一个文本:
http://aaa.com
http://bbb.com
http://bbb.com
http://bbb.com
http://ccc.com
http://ccc.com
让写shell统计,最后输出结果,要求结果还要排序
aaa 1
ccc 2
bbb 3
2. 画出公司的hadoop项目架构
1.文件大小默认为64M,改成128M有啥影响?
2.RPC的原理?
3.NameNode与SecondaryNameNode的区别与联系?
4.介绍MadpReduce整个过程,好比把WordCount的例子的细节将清楚(重点讲解Shuffle)?
5.MapReduce出现单点负载多大,怎么负载平衡?
6.MapReduce怎么实现Top10?
7.hadoop底层存储设计
8.zookeeper有什么优势,用在什么场合
9.Hbase中的metastore用来作什么的?
10.HBase在进行模型设计时重点在什么地方?一张表中国定义多少个Column Family最合适?为何?
11.如何提升HBase客户端的读写性能?请举例说明。
12.在hadoop开发过程当中使用过哪些算法?其应用场景是什么?
13.MapReduce程序如何发布?若是MapReduce中涉及到了第三方的jar 包,该如何处理?
14.在实际工做中使用过哪些集群的运维工具,请分别阐述其做用。
1. 集群多少台, 数据量多大, 吞吐量是多大, 天天处理多少G的数据?
2. 咱们的日志是否是除了apache的访问日志是否是还有其余的日志?
3. 假设咱们有其余的日志是否是能够对这个日志有其余的业务分析?这些业务分析都有什么?
4. 大家的服务器有多少台?服务器的内存多大?
5. 大家的服务器怎么分布的?(这里说地理位置分布,最好也从机架方面也谈谈)
6. 你日常在公司都干些什么(一些建议)
7. 大家的集群规模?
开发集群: 10台(8台可用) 8核cpu
8. 大家的数据是用什么导入到数据库的?导入到什么数据库?
处理以前的导入:经过 hadoop 命令导入到 hdfs 文件系统
处理完成以后的导出:利用 hive 处理完成以后的数据,经过 sqoop 导出到 mysql 数据库中,以供报表层使用。
9. 大家业务数据量多大?有多少行数据?
开发时使用的是部分数据,不是全量数据,有将近一亿行( 八、 9 千万,具体不详,通常开发中也没人会特别关心这个问题)
10. 大家处理数据是直接读数据库的数据仍是读文本数据?
将日志数据导入到 hdfs 以后进行处理
11. 大家写 hive 的 hql 语句,大概有多少条?
不清楚,我本身写的时候也没有作过统计
12. 大家提交的 job 任务大概有多少个?这些 job 执行完大概用多少时间?
没统计过,加上测试的,会有不少
13. 你在项目中主要的工做任务是?
利用 hive 分析数据
14. 你在项目中遇到了哪些难题,是怎么解决的?
某些任务执行时间过长,且失败率太高,检查日志后发现没有执行完就失败,缘由出在hadoop 的 job 的 timeout 太短(相对于集群的能力来讲),设置长一点便可
15. 你本身写过 udf 函数么?写了哪些?
16. 你的项目提交到 job 的时候数据量有多大?
17. 数据备份, 大家是多少份, 若是数据超过存储容量, 大家怎么处理?
18. 怎么提高多个 JOB 同时执行带来的压力, 如何优化, 说说思路?
19. 大家用 HBASE 存储什么数据?
20. 大家的 hive 处理数据能达到的指标是多少?
21. 大家的 hbase 大概在公司业务中(主要是网上商城)大概都几个表,几个表簇,都存什么样的数据?
1.hbase怎么预分区?
2.hbase怎么给web前台提供接口来访问?
3.htable API有没有线程安全问题,在程序中是单例仍是多例?
4.hbase有没有并发问题?
5.metaq消息队列,zookeeper集群,storm集群,就能够完成对商城推荐系统功能吗?还有没有其余的中间件?
6.storm 怎么完成对单词的计数?
7.hdfs的client端,复制到第三个副本时宕机, hdfs怎么恢复保证下次写第三副本?
8.block块信息是先写dataNode仍是先写nameNode?
9.Hadoop生态圈中各类框架的运用场景?
10.hive中的压缩格式RCFile、TextFile、SequenceFile各有什么区别?
11.说明 Hadoop 2.0 的基本构成。
12.相比于 HDFS1.0, HDFS 2.0最主要的改进在哪几方面?
13.试使用"步骤 1,步骤 2,步骤 3…" 说明YARN中运行应用程序的基本流程。
14.MapReduce2.0中,MRAppMaster主要做用是什么?MRAppMaster如何实现任务容错的?
15.为何会产生yarn, 它解决了什么问题,有什么优点?
一. 问答题
1.请说说hadoop1的HA如何实现?
2.列举出hadoop中定义的最经常使用的InputFormats。那个是默认的?
3.TextInputFormat和KeyValueInputFormat类之间的不一样之处在于哪里?
4.hadoop中的InputSplit是什么?
5.hadoop框架中文件拆分是如何被触发的?
6.hadoop中的RecordReader的目的是什么?
7.若是hadoop中没有定义定制分区,那么如何在输出到reducer前执行数据分区?
8.什么是jobtracker?jobtracker有哪些特别的函数?
9.hadoop中job和task之间是什么关系?
10.假设hadoop一个job产生了100个task,其中一个task失败了,hadoop会如何处理?
11.hadoop推测执行是如何实现的?
12.关系型数据库有什么弱点?
很难进行分布式部署,I/O瓶颈显著,依赖于强大的服务器,须要花更大的代价才能突破性能极限
很难处理非结构化数据
13.什么状况下使用hbase?
适合海量的,但同时也是简单的操做(例如:key-value)
成熟的数据分析主题,查询模式已经肯定而且不会轻易改变。
传统的关系型数据库已经没法承受负荷,高速插入,大量读取
二. 分析题
1.有一千万条短信,有重复,以文本文件的形式保存,一行一条,有重复。请用5分钟时间,找出重复出现最多的前10条。
分析:
常规方法是先排序,在遍历一次,找出重复最多的前10条。可是排序的算法复杂度最低为nlgn。能够设计一个 hash_table, hash_map<string, int> ,依次读取一千万条短信,加载到hash_table表中,而且统计重复的次数,与此同时维护一张最多10条的短信表。这样遍历一次就能找出最多的前10条,算法复杂度为 O(n)。