有1t的文本文件,放在hdfs 动态增加节点上,怎么实现排序,每个节点的内存只有1g,考虑性能

查看: 6197|回复: 1
实现hadoop内存计算
论坛徽章:0
本帖最后由 数据矿工 于
15:22 编辑
& && &&&Hadoop运算效率不高是个不争的事实,这主要是由于Hadoop是使用MapReduce作为底层计算框架的,而MapReduce基本都是外存计算。外存计算就需要通过频繁读写外存文件来实现计算和数据的交换,由于文件IO的读写效率比内存低两个数量级左右,因此Hadoop的运算性能不可能很高。
& && &&&对于Facebook、eBay、Amazon等重型企业说,他们的集群规模往往是数百台或者数千台,此时外存计算是有意义的,它能保证在不稳定的集群环境中安全地交换中间计算结果。但对于普通用户来说,他们的集群规模小,只有几十台或十几台节点。集群环境相对可靠,发生故障的可能性很低。利用集算器这种既支持外存计算也支持内存计算的并行计算框架,中小集群用户能够获得更高的性能。
& && &&&下面用一个典型的分组计算的例子来说明集算器是如何实现Hadoop内存计算的。计算目标是按照产地汇总订单表中的销售额。数据来源于HDFS上两个文件:sales.txt是订单信息,数据量较大,主要字段是:orderID,product(产品ID),amount(订单金额);product.txt数据量较小,主要字段有proID(产品ID)、origin(产品产地)。
& && &&&直观的解法是这样的:在汇总机将sales.txt拆分为若干段,每一段是一个任务,将这些任务分配给节点机去分组汇总,节点机算完后将结果返回给汇总机,汇总机再进行第二次分组汇总。节点机要做的是将sales.txt和product.txt进行关联计算,再按照origin进行分组汇总。
& && &&&集算器的代码如下:
代码1:任务的分解和汇总(汇总机)
_151926.jpg (25.53 KB, 下载次数: 2)
15:20 上传
代码2:生成产品表全局变量(节点机)
_151944.jpg (8.74 KB, 下载次数: 1)
15:20 上传
代码3:关联计算并按产地汇总求和(节点机)
_151955.jpg (19.43 KB, 下载次数: 0)
15:20 上传
& && &&&来分析一下集算器是如何提高Hadoop的计算性能的。
任务拆分:
& && &&&从代码1中可以看到,按照节点机的计算能力我们将sales.txt拆分为40个任务,每个任务100万条数据左右。集算器允许用户根据自身的计算环境来定制任务的拆分规模,比如节点机是性能较好的PC Server,那就可以考虑将一亿条数据分成十份,每个节点每次处理一千万条数据。如果计算节点只是淘汰的老旧笔记本,那就可以考虑将数据分成一千份,每个节点每次处理十万条数据。自由的调整任务拆分粒度,可以减少任务拆分所产生的调度成本,显著提高计算性能。
& && &&&MapReduce为了应对大集群环境下的不稳定因素,默认是将任务拆分到最细,即每个任务一条数据;虽然通过改写底层可以自定义拆分粒度,但编码困难改写复杂,可操作性不高。这样拆分数据虽然可以用较少的代价来应对故障,但拆分任务所产生的调度成本却是最高的。
& && &&&中小集群用户的节点数量较少,故障很少且易于恢复,他们更希望灵活的任务拆分方法来提高计算性能而不是应对可能性较低的故障。MapReduce难以提供这样的方法,性能难以提高,但是集算器可以。
数据交换:
& && &&&从代码3中可以看到,节点机在计算完成后,没有将结果写入文件再传回汇总机,而是直接和节点机进行数据交换。集算器提供了两种方式,允许用户在安全性和性能之间进行选择。如果更偏重中间结果的安全性,则可以选择将数据写入HDFS再交换;如果偏重交换性能,则可以直接交换数据。
& && &&&MapReduce的数据交换必须通过文件进行,这样可以保证中间结果的安全,即使节点机发生故障,它所完成的计算结果也不会丢失。在大集群环境下,节点机很容易发生这样的故障,因此这种方式是有效的。但通过文件交换数据将会产生大量的磁盘IO操作,使计算性能明显降低。
& && &&&中小集群用户的节点数量少,发生故障的概率很低,他们更愿意直接交换数据来换取性能,而不是写入文件以保证安全。MapReduce无法提供直接数据交换的方式,性能无法提高,但集算器可以。
内存共享:& && &&&代码2是将产品表参与计算的两个字段一次性读入内存,形成了节点机上的全局变量。由于每台节点机要依次进行多轮的计算,每轮要进行多线程多任务计算,因此这种内存共享可是省去每次任务里读取产品表的时间。节点规模越小,计算任务越多,性能提升的也就越明显。
& && &&&MapReduce没有实现这种内存共享,因为在大集群环境下,计算节点被假定是会经常崩溃的,崩溃后内存中的数据是没有意义的。这种情况下直接使用HDFS上的文件进行共享才是安全的。MapReduce不能内存共享,每次使用产品表都要从硬盘读取一遍数据,显然这样的效率会差两个数量级。
& && &&&小集群用户的计算节点少,易于维护,他们更愿意使用高效的内存而不是文件共享。MapReduce无法提供内存共享,但是集算器可以。
内存计算:
& && &&&从代码3可以看到,产品表是直接来自内存中的全局变量;而订单表分段后仍然较大无法读入内存,我们是用游标进行访问的。这样就实现了高效的内存关联计算。当然,如果继续拆分任务,我们可以将订单表的分段也读入内存。可以看到,集算器允许自由的数据加载方式,既支持数据量较大但速度较慢的文件游标方式,也支持数据量较小但速度较快的内存加载。
& && &&&MapReduce默认使用外存计算,即从文件读取一条数据再进行关联计算和分组计算,这样的好处是可以应对不稳定的大集群环境。虽然MapReduce在底层使用了内存缓冲的技术,但这无法改变它依赖磁盘IO的本质,因此性能很低。如果想改为内存计算,则用户需要改变MapReduce原本的底层框架结构,这需要付出巨大的开发成本。
& && &&&小集群用户的集群环境相对稳定,外存计算基本上没有用武之地,他们更愿意使用内存计算来提升性能。MapReduce无法提供如此方便的内存计算,但是集算器可以。
& && &&&从以上四个方面我们可以看出,集算器可以高效地实现Hadoop内存计算,比较适合中小规模的集群用户。
认证徽章论坛徽章:24
这个是哪来的?
itpub.net All Right Reserved. 北京皓辰网域网络信息技术有限公司版权所有    
 北京市公安局海淀分局网监中心备案编号: 广播电视节目制作经营许可证:编号(京)字第1149号HDFS理论及基本命令-爱编程
HDFS理论及基本命令
第六章的代码及命令的部分本人还未验证,先记录,验证后如有变动再更新。
一、是什么
1.是一个易于扩展的分布式文件系统
2.可以运行在大量普通廉价机器上,提供容错机制
3.可以为大量用户提供性能不错的文件存取服务
高容错性:数据自动保存多个副本,副本丢失后,自动恢复
适合批处理:移动计算而非数据,数据位置暴露给计算框架
适合大数据处理:GB、TB、甚至PB级数据;百万规模以上的文件数量;10K+节点规模
流式文件访问:一次性写入,多次读取;保证数据一致性
可构建在廉价机器上:通过多副本提高可靠性;提供了容错和恢复机制
低延迟数据访问:比如毫秒级;低延迟与高吞吐率;
不适合小文件存取:占用NameNode大量内存;寻道时间超过读取时间;
并发写入、文件随机修改:一个文件只能有一个写者;仅支持append
四、HDFS架构
主Master(只有一个):可以用来管理HDFS的名称空间;管理数据块映射信息;配置副本策略;处理客户端读写请求
NameNode的热备:可以定期合并fsimage和fsedits,推送给NameNode;当Active NameNode出现故障时,快速切换为新的& Active NameNode。
Datanode:Slave(有多个);存储实际的数据块;执行数据块读/写
Client:文件切分;与NameNode交互,获取文件位置信息; 与DataNode交互,读取或者写入数据;管理HDFS;访问HDFS
HDFS数据块(block):文件被切分成固定大小的数据块,默认数据块大小为64MB,可配置。若文件大小不到64MB,则单独存成一个block。数据库之所以如此之大,是为了保障数据传输时间超过寻道时间(高吞吐率)。一个文件在HDFS中存储时,会按大小被切分成若干个block,存储到不同节点上。默认情况下每个block有三个副本。
典型物理拓扑:
五、HDFS策略
Block副本放置策略:
副本1: 同Client的节点上;
副本2: 不同机架中的节点上;
副本3: 与第二个副本同一机架的另一个节点上
其他副本:随机挑选
可靠性策略:
常见的三种错误情况:文件损坏;网络或者机器失效;namenode挂掉
文件完整性:CRC32校验;用其他副本取代损坏文件
网络或者机器失效:利用Heartbeat,Datanode 定期向Namenode发heartbeat;
namenode挂掉:通过下面策略保障元数据信息,FSImage(文件系统镜像)、Editlog(操作日志);多份存储;主备NameNode实时切换
HDFS不适合存储小文件:
1.元信息存储在NameNode内存中,一个节点的内存是有限的,存取大量小文件消耗大量的寻道时间,类比拷贝大量小文件与拷贝同等大小的一个大文件。
2.NameNode存储block数目是有限的,一个block元信息消耗大约150 byte内存, 存储1亿个block,大约需要20GB内存,如果一个文件大小为10K,则1亿个文件大小仅为1TB(但要消耗掉NameNode20GB内存)
六、HDFS访问方式
HDFS Shell命令;
HDFS Java API;
HDFS REST API;
HDFS Fuse:实现了fuse协议;
HDFS lib hdfs:C/C++访问接口;
HDFS 其他语言编程API;
使用thrift实现,支持C++、Python、php、C#等语言;
HDFS Shell命令
1.将本地文件上传到HDFS上
bin/hadoop &fs&-copyFromLocal &/local/data /hdfs/data
2.删除文件/目录
bin/hadoop &fs&-rmr&/hdfs/data
3.创建目录
bin/hadoop &fs&-mkdir&&/hdfs/data
4.一些脚本
在sbin目录下:start-all.sh;start-dfs.sh;start-yarn.sh;hadoop-deamon(s).sh;
单独启动某个服务:
hadoop-deamon.sh start namenode;
hadoop-deamons.sh start namenode(通过SSH登录到各个节点);
5.文件管理命令fsck:
检查hdfs中文件的健康状况
查找缺失的块以及过少或过多副本的块
查看一个文件的所有数据块位置
删除损坏的数据块
6.数据块重分布
bin/start-balancer.sh -threshold &percentage of diskcapacity&
percentage of disk capacity:HDFS达到平衡状态的磁盘使用率偏差值,值越低各节点越平衡,但消耗时间也更长.
7.设置目录份额
限制一个目录最多使用磁盘空间:
bin/hadoop dfsadmin -setSpaceQuota 1t /user/username
限制一个目录包含的最多子目录和文件数目:
bin/hadoop dfsadmin -setQuota 10000 /user/username
8.增加/移除节点
加入新的datanode:
步骤1:将已存在datanode上的安装包(包括配置文件等)拷贝到新datanode上;
步骤2:启动新datanode: sbin/hadoop-deamon.sh start datanode
移除旧datanode
步骤1:将datanode加入黑名单,并更新黑名单,在NameNode上,将datanode的host或者ip加入配置选项dfs.hosts.exclude指定的文件中
步骤2:移除datanode: bin/hadoopdfsadmin& -refreshNodes
HDFS Java API介绍
Configuration类:该类的对象封装了配置信息,这些配置信息来自core-*.xml;
FileSystem类:文件系统类,可使用该类的方法对文件/目录进行操作。一般通过FileSystem的静态方法get获得一个文件系统对象;
FSDataInputStream和FSDataOutputStream类: HDFS中的输入输出流。分别通过FileSystem的open方法和create方法获得。
以上类均来自java包:org.apache.hadoop.fs
如:将本地文件拷贝到HDFS上;
Configuration config = new Configuration();
FileSystem hdfs = FileSystem.get(config);
Path srcPath = new Path(srcFile);
Path dstPath = new Path(dstFile);
hdfs.copyFromLocalFile(srcPath, dstPath);
创建HDFS文件;
//byte[] buff – 文件内容
Configuration config = new Configuration();
FileSystem hdfs = FileSystem.get(config);
Path path = new Path(fileName);
FSDataOutputStream outputStream = hdfs.create(path);
outputStream.write(buff, 0, buff.length);
补充(来自百度百科):机架是用于固定电信柜内的接插板、外壳和设备。通常宽19英寸,高7英尺。对于IT行业,可简单理解为存放服务器的机柜。标准机架也称“19英寸”机架。的外形看来不像计算机,而像交换机,路由器等。机架式服务器安装在标准的19英寸机柜里面。这种结构的多为功能型服务器。
七、Hadoop 2.0新特性
NameNode HA
NameNode Federation
HDFS 快照(snapshot)
HDFS 缓存(in-memory cache)
异构层级存储结构(Heterogeneous Storage hierarchy)
异构层级存储结构
HDFS将所有存储介质抽象成性能相同的Disk
&property&
&name&dfs.datanode.data.dir&/name&
&value&/dir0,/dir1,/dir2,/dir3&/value&
&/property&
产生背景:
存储介质种类繁多,一个集群中存在多种异构介质,如:磁盘、SSD、RAM等
多种类型的任务企图同时运行在同一个Hadoop集群中,需要解决批处理,交互式处理,实时处理等问题。
不同性能要求的数据,最好存储在不同类别的存储介质上
每个节点是由多种异构存储介质构成的
&property&
&name&dfs.datanode.data.dir&/name&
&value&[disk]/dir0,[disk]/dir1,[ssd]/dir2,[ssd]/dir3&/value&
&/property&
HDFS仅提供了一种异构存储结构,并不知道存储介质的性能;
HDFS为用户提供了API,以控制目录/文件写到什么介质上;
HDFS为管理员提供了管理工具,可限制每个用户对每种介质的可使用份额;目前完成度不高
阶段1:DataNode支持异构存储介质(HDFS-2832,完成)
阶段2:为用户提供访问API(HDFS-5682,未完成)
HDFS ACL基于POSIX ACL的实现
产生背景:现有权限管理的局限性
对当前基于POSIX文件权限管理的补充(HDFS-4685);
启动该功能;
将dfs.namenode.acls.enabled置为true
使用方法;
hdfs dfs -setfacl -m user:tom:rw- /bank/exchange
hdfs dfs -setfacl -m user:lucy:rw- /bank/exchange
hdfs dfs -setfacl -m group:team2:r-- /bank/exchange
hdfs dfs -setfacl -m group:team3:r-- /bank/exchange
背景:HDFS上文件和目录是不断变化的,快照可以帮助用户保存某个时刻的数据;
作用:防止用户误操作删除数据和数据备份。
一个目录可以产生快照,当且仅当它是Snapshottable;
bin/hdfs dfsadmin allowSnapshot &path&
创建/删除快照;
bin/hdfs dfs -createSnapshot &path&[&snapshotName&]
bin/hdfs dfs -deleteSnapshot&path&[&snapshotName&]
快照存放位置和特点:快照是只读的,不可修改
快照位置:
? &snapshottable_dir_path&/.snapshot
? &snapshottable_dir_path&/.snapshot/snap_name
1.HDFS自身不提供数据缓存功能,而是使用OS缓存。容易内存浪费,eg.一个block三个副本同时被缓存。
2.多种计算框架共存,均将HDFS作为共享存储系统
MapReduce:离线计算,充分利用磁盘
Impala:低延迟计算,充分利用内存
Spark:内存计算框架
3.HDFS应让多种混合计算类型共存一个集群中,合理的使用内存、磁盘等资源,比如,高频访问的特点文件应被尽可能长期缓存,防止置换到磁盘上
用户需通过命令显式的将一个目录或文件加入/移除缓存:不支持块级别的缓存、不支持自动化缓存、可设置缓存失效时间。
缓存目录:仅对一级文件进行缓存,不会递归缓存所有文件与目录。
以pool的形式组织缓存资源,借助YARN的资源管理方式,将缓存划分到不同pool中。每个pool有类linux权限管理机制、缓存上限、失效时间等。
独立管理内存,未与资源管理系统YARN集成,用户可为每个DN设置缓存大小,该值独立于YARN
版权所有 爱编程 (C) Copyright 2012. . All Rights Reserved.
闽ICP备号-3
微信扫一扫关注爱编程,每天为您推送一篇经典技术文章。综合技术(18)
-----------------------------------------------------------------------------
[申明:资料来源于互联网]
本文链接:
编辑:朱培 & ID:sdksdk0
-----------------------------------------------------------------
以下资料来源于互联网,很多都是面试者们去面试的时候遇到的问题,我对其中有的问题做了稍许的修改了回答了部分空白的问题,其中里面有些考题出的的确不是很好,但是也不乏有很好的题目,这些都是基于真实的面试来的,希望对即将去面试或向继续学习hadoop,大数据分析等的朋友有帮助!
1.0&&&简要描述如何安装配置apache的一个开源hadoop,只描述即可,无需列出具体步骤,列出具体步骤更好。
答:第一题:1使用root账户登录
3 修改host主机名
4 配置SSH免密码登录
5 关闭防火墙
6& 安装JDK
6 解压hadoop安装包
7 配置hadoop的核心文件 hadoop-env.sh,core-site.xml , mapred-site.xml , hdfs-site.xml
8 配置hadoop环境变量
9 格式化 hadoop namenode-format
10 启动节点start-all.sh
2.0 请列出正常的hadoop集群中hadoop都分别需要启动 哪些进程,他们的作用分别都是什么,请尽量列的详细一些。
&&&&&& 答:namenode:负责管理hdfs中文件块的元数据,响应客户端请求,管理datanode上文件block的均衡,维持副本数量
Secondname:主要负责做checkpoint操作;也可以做冷备,对一定范围内数据做快照性备份。
Datanode:存储数据块,负责客户端对数据块的io请求
Jobtracker :管理任务,并将任务分配给 tasktracker。
Tasktracker: 执行JobTracker分配的任务。
Resourcemanager
Nodemanager
Journalnode
3.0请写出以下的shell命令&
(1)杀死一个job
(2)删除hdfs上的 /tmp/aaa目录
(3)加入一个新的存储节点和删除一个节点需要执行的命令
答:(1)hadoop job –list&& 得到job的id,然后执&&&&& 行 hadoop job& -kill &jobId就可以杀死一个指定jobId的job工作了。
(2)hadoopfs& -rmr&/tmp/aaa
(3)& 增加一个新的节点在新的几点上执行
&&&&&&&&&&& Hadoop& daemon.sh&start& datanode
&&&&&&&&&&&&&&&&&&&& Hadooop&daemon.sh& start&&tasktracker/nodemanager
下线时,要在conf目录下的excludes文件中列出要下线的datanode机器主机名
&&&&&&&&&&&&& 然后在主节点中执行& hadoop&&dfsadmin& -refreshnodes& à下线一个datanode
删除一个节点的时候,只需要在主节点执行
&hadoop mradmin&-refreshnodes& ---à下线一个tasktracker/nodemanager
4.0&&&&& 请列出你所知道的hadoop调度器,并简要说明其工作方法
答:Fifo schedular :默认,先进先出的原则
Capacity schedular :计算能力调度器,选择占用最小、优先级高的先执行,依此类推。
Fair schedular:公平调度,所有的 job 具有相同的资源。
5.0&&&&& 请列出你在工作中使用过的开发mapreduce的语言
答:java,hive,(python,c++)hadoop streaming
6.0&&&&& 当前日志采样格式为
&&&&&&&&&& a , b , c , d
&&&&& &&&&&b , b , f , e
&&&&&&&&&& a , a , c , f&&& &&&&
请你用最熟悉的语言编写mapreduce,计算第四列每个元素出现的个数
public classWordCount1 {
&&&&&& 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 = newConfiguration();
&&&&&&&&&&&&& FileSystem fileSystem =FileSystem.get(conf);
&&&&&&&&&&&&& if(fileSystem.exists(newPath(OUT_PATH))){}
&&&&&&&&&&&&& fileSystem.delete(newPath(OUT_PATH),true);
&&&&&&&&&&&&& Job job = newJob(conf,WordCount1.class.getSimpleName());
&&&&&&&&&&&&& //1.0读取文件,解析成key,value对
&&&&&&&&&&&&& FileInputFormat.setInputPaths(job,newPath(INPUT_PATH));
&&&&&&&&&&&&& //2.0写上自己的逻辑,对输入的可以,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.waitForCompletion(true);
&&&&&& static class MyMapper extendsMapper&LongWritable, Text, Text, LongWritable&{
&&&&&&&&&&&&& @Override
&&&&&&&&&&&&& protected void map(LongWritablek1, Text v1,
&&&&&&&&&&&&&&&&&&&&&&&&&&& org.apache.hadoop.mapreduce.Mapper.Contextcontext)
&&&&&&&&&&&&&&&&&&&&&&&&&&& throws IOException,InterruptedException {
&&&&&&&&&&&&&&&&&&&& String[] split =v1.toString().split(&\t&);
&&&&&&&&&&&&&&&&&&&& for(String words :split){
&&&&&&&&&&&&&&&&&&&&&&&&&&& context.write(split[3],1);
&&&&&&&&&&&&&&&&&&&& }
&&&&&&&&&&&&& }
&&&&&& static class MyReducer extends Reducer&Text,LongWritable, Text, LongWritable&{
&&&&&&&&&&&&&
&&&&&&&&&&&&& protected void reduce(Text k2,Iterable&LongWritable& v2,
&&&&&&&&&&&&&&&&&&&&&&&&&&& org.apache.hadoop.mapreduce.Reducer.Contextcontext)
&&&&&&&&&&&&&&&&&&&&&&&&&&& throws IOException,InterruptedException {
&&&&&&&&&&&&&&&&&&&& Long count = 0L;
&&&&&&&&&&&&&&&&&&&& for(LongWritable time :v2){
&&&&&&&&&&&&&&&&&&&&&&&&&&& count += time.get();
&&&&&&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&&&&&&& context.write(v2, newLongWritable(count));
&&&&&&&&&&&&& }
7.0&&&&& 你认为用java , streaming , pipe方式开发map/reduce , 各有哪些优点
就用过 java 和 hiveQL。
Java 写 mapreduce 可以实现复杂的逻辑,如果需求简单,则显得繁琐。
HiveQL 基本都是针对 hive 中的表数据进行编写,但对复杂的逻辑(杂)很难进行实现。写起来简单。
8.0&hive有哪些方式保存元数据,各有哪些优点
&&&&&&&&&&&&& 三种:自带内嵌数据库derby,挺小,不常用,只能用于单节点
上网上找了下专业名称:single user mode..multiuser mode...remote user mode
9.0 请简述hadoop怎样实现二级排序(就是对key和value双排序)
&&& 第一种方法是,Reducer将给定key的所有值都缓存起来,然后对它们再做一个Reducer内排序。但是,由于Reducer需要保存给定key的所有值,可能会导致出现内存耗尽的错误。
第二种方法是,将值的一部分或整个值加入原始key,生成一个组合key。这两种方法各有优势,第一种方法编写简单,但并发度小,数据量大的情况下速度慢(有内存耗尽的危险),
第二种方法则是将排序的任务交给MapReduce框架shuffle,更符合Hadoop/Reduce的设计思想。这篇文章里选择的是第二种。我们将编写一个Partitioner,确保拥有相同key(原始key,不包括添加的部分)的所有数据被发往同一个Reducer,还将编写一个Comparator,以便数据到达Reducer后即按原始key分组。
10.简述hadoop实现jion的几种方法
Map side join----大小表join的场景,可以借助distributed cache
Reduce side join
11.0 请用java实现非递归二分查询
1.&&public&class&BinarySearchClass&&
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)&{&&
&&&&&&&&&&&&midIndex&=&beginIndex&+&(endIndex&-&beginIndex)&/&2;//防止溢出&&
11.& &&&&&&&&&&&&if&(value&==&array[midIndex])&{&&
&&&&&&&&&&&&&&&&return&midI&&
13.& &&&&&&&&&&&&}&else&if&(value&&&array[midIndex])&{&&
&&&&&&&&&&&&&&&&endIndex&=&midIndex&-&1;&&
15.& &&&&&&&&&&&&}&else&{&&
&&&&&&&&&&&&&&&&beginIndex&=&midIndex&+&1;&&
17.& &&&&&&&&&&&&}&&
&&&&&&&&}&&
19.& &&&&&&&&return&-1;&&
&&&&&&&&//找到了,返回找到的数值的下标,没找到,返回-1&&&&&&&&&
21.& &&&&}&&
&&&&//start&提示:自动阅卷起始唯一标识,请勿删除或增加。&&
25.& &&&&public&static&void&main(String[]&args)&&
27.& &&&&&&&&System.out.println(&Start...&);&&
&&&&&&&&int[]&myArray&=&new&int[]&{&1,&2,&3,&5,&6,&7,&8,&9&};&&
29.& &&&&&&&&System.out.println(&查找数字8的下标:&);&&
&&&&&&&&System.out.println(binary_search(myArray,&8));&&&&&&&&&&
31.& &&&&}&&
&&&&//end&//提示:自动阅卷结束唯一标识,请勿删除或增加。&&
33.& }&&&&&
12.0 请简述mapreduce中的combine和partition的作用
答:combiner是发生在map的最后一个阶段,其原理也是一个小型的reducer,主要作用是减少输出到reduce的数据量,缓解网络传输瓶颈,提高reducer的执行效率。
partition的主要作用将map阶段产生的所有kv对分配给不同的reducer task处理,可以将reduce阶段的处理负载进行分摊
13.0 hive内部表和外部表的区别
Hive 向内部表导入数据时,会将数据移动到数据仓库指向的路径;若是外部表,数据的具体存放目录由用户建表时指定
在删除表的时候,内部表的元数据和数据会被一起删除,&
而外部表只删除元数据,不删除数据。
这样外部表相对来说更加安全些,数据组织也更加灵活,方便共享源数据。&
14. Hbase的rowKey怎么创建比较好?列簇怎么创建比较好?
rowKey最好要创建有规则的rowKey,即最好是有序的。
经常需要批量读取的数据应该让他们的rowkey连续;
将经常需要作为条件查询的关键词组织到rowkey中;
列族的创建:
按照业务特点,把数据归类,不同类别的放在不同列族
15. 用mapreduce怎么处理数据倾斜问题
本质:让各分区的数据分布均匀
可以根据业务特点,设置合适的partition策略
如果事先根本不知道数据的分布规律,利用随机抽样器抽样后生成partition策略再处理
16. hadoop框架怎么来优化
可以从很多方面来进行:比如hdfs怎么优化,mapreduce程序怎么优化,yarn的job调度怎么优化,hbase优化,hive优化。。。。。。。
17. hbase内部机制是什么
Hbase是一个能适应联机业务的数据库系统
物理存储:hbase的持久化数据是存放在hdfs上
存储管理:一个表是划分为很多region的,这些region分布式地存放在很多regionserver上
Region内部还可以划分为store,store内部有memstore和storefile
版本管理:hbase中的数据更新本质上是不断追加新的版本,通过compact操作来做版本间的文件合并
Region的split
集群管理:zookeeper& +&hmaster(职责)& + hregionserver(职责)
18. 我们在开发分布式计算job的时候,是否可以去掉reduce阶段
答:可以,例如我们的集群就是为了存储文件而设计的,不涉及到数据的计算,就可以将mapReduce都省掉。
比如,流量运营项目中的行为轨迹增强功能部分
怎么样才能实现去掉reduce阶段
去掉之后就不排序了,不进行shuffle操作了
19&hadoop中常用的数据压缩算法
如果要对数据进行压缩,最好是将原始数据转为SequenceFile& 或者 Parquet File(spark)
20. mapreduce的调度模式(题意模糊,可以理解为yarn的调度模式,也可以理解为mr的内部工作流程)
答: appmaster作为调度主管,管理maptask和reducetask
Appmaster负责启动、监控maptask和reducetask
Maptask处理完成之后,appmaster会监控到,然后将其输出结果通知给reducetask,然后reducetask从map端拉取文件,然后处理;
当reduce阶段全部完成之后,appmaster还要向resourcemanager注销自己
21. hive底层与数据库交互原理
Hive的查询功能是由hdfs + mapreduce结合起来实现的
Hive与mysql的关系:只是借用mysql来存储hive中的表的元数据信息,称为metastore
22. hbase过滤器实现原则
答:可以说一下过滤器的父类(比较过滤器,专用过滤器)
过滤器有什么用途:
增强hbase查询数据的功能
减少服务端返回给客户端的数据量
23. reduce之后数据的输出量有多大(结合具体场景,比如pi)
Sca阶段的增强日志(1.5T---2T)
过滤性质的mr程序,输出比输入少
解析性质的mr程序,输出比输入多(找共同朋友)
24. 现场出问题测试mapreduce掌握情况和hive的ql语言掌握情况
25.datanode在什么情况下不会备份数据
答:在客户端上传文件时指定文件副本数量为1
<bine出现在哪个过程
答:shuffle过程中
具体来说,是在maptask输出的数据从内存溢出到磁盘,可能会调多次
Combiner使用时候要特别谨慎,不能影响最后的逻辑结果
27. hdfs的体系结构
集群架构:&
namenode&&datanode& secondarynamenode
&(active namenode ,standby namenode)journalnode& zkfc
内部工作机制:
数据是分布式存储的
对外提供一个统一的目录结构
对外提供一个具体的响应者(namenode)
数据的block机制,副本机制
Namenode和datanode的工作职责和机制
读写数据流程
28. flush的过程
答:flush是在内存的基础上进行的,首先写入文件的时候,会先将文件写到内存中,当内存写满的时候,一次性的将文件全部都写到硬盘中去保存,并清空缓存中的文件,
29. 什么是队列
答:是一种调度策略,机制是先进先出
30. List与set的区别
答:List和Set都是接口。他们各自有自己的实现类,有无顺序的实现类,也有有顺序的实现类。
最大的不同就是List是可以重复的。而Set是不能重复的。
List适合经常追加数据,插入,删除数据。但随即取数效率比较低。
Set适合经常地随即储存,插入,删除。但是在遍历时效率比较低。
31.数据的三范式
第一范式()无重复的列
第二范式(2NF)属性完全依赖于主键& [消除部分子函数依赖]
第三范式(3NF)属性不依赖于其它非主属性& [消除传递依赖]
32.三个datanode中当有一个datanode出现错误时会怎样?
Namenode会通过心跳机制感知到datanode下线
会将这个datanode上的block块在集群中重新复制一份,恢复文件的副本数量
会引发运维团队快速响应,派出同事对下线datanode进行检测和修复,然后重新上线
33.sqoop在导入数据到mysql中,如何不重复导入数据,如果存在数据问题,sqoop如何处理?
答:FAILED&&& java.util.NoSuchElementException
此错误的原因为sqoop解析文件的字段与MySql数据库的表的字段对应不上造成的。因此需要在执行的时候给sqoop增加参数,告诉sqoop文件的分隔符,使它能够正确的解析文件字段。
hive默认的字段分隔符为'\001'
34.描述一下hadoop中,有哪些地方使用到了缓存机制,作用分别是什么?
Hbase----客户端/regionserver
35.MapReduce优化经验
答:(1.)设置合理的map和reduce的个数。合理设置blocksize
(2.)避免出现数据倾斜
(3.combine函数
(4.对数据进行压缩
(5.小文件处理优化:事先合并成大文件,combineTextInputformat,在hdfs上用mapreduce将小文件合并成SequenceFile大文件(key:文件名,value:文件内容)
(6.参数优化
36.请列举出曾经修改过的/etc/下面的文件,并说明修改要解决什么问题?
答:/etc/profile这个文件,主要是用来配置环境变量。让hadoop命令可以在任意目录下面执行。
/ect/sudoers
/etc/hosts
/etc/sysconfig/network
/etc/inittab
37.请描述一下开发过程中如何对上面的程序进行性能分析,对性能分析进行优化的过程。
38. 现有 1 亿个整数均匀分布,如果要得到前 1K 个最大的数,求最优的算法。
参见《海量数据算法面试大全》
39.mapreduce的大致流程
答:主要分为八个步骤
1/对文件进行切片规划
2/启动相应数量的maptask进程
3/调用FileInputFormat中的RecordReader,读一行数据并封装为k1v1
4/调用自定义的map函数,并将k1v1传给map
5/收集map的输出,进行分区和排序
6/reduce task任务启动,并从map端拉取数据
7/reduce task调用自定义的reduce函数进行处理
8/调用outputformat的recordwriter将结果数据输出
41.用mapreduce实现sql语 select& count (x)&from& a& group&
44.搭建hadoop集群 , master和slaves都运行哪些服务
答:master主要是运行我们的主节点,slaves主要是运行我们的从节点。
45. hadoop参数调优
46. pig&,& latin& ,& hive语法有什么不同
46. 描述Hbase,ZooKeeper搭建过程
48.hadoop运行原理
答:hadoop的主要核心是由两部分组成,HDFS和mapreduce,首先HDFS的原理就是分布式的文件存储系统,将一个大的文件,分割成多个小的文件,进行存储在多台服务器上。
Mapreduce的原理就是使用JobTracker和TaskTracker来进行作业的执行。Map就是将任务展开,reduce是汇总处理后的结果。
49.mapreduce的原理
答:mapreduce的原理就是将一个MapReduce框架由一个单独的master JobTracker和每个集群节点一个slave TaskTracker共同组成。master负责调度构成一个作业的所有任务,这些的slave上,master监控它们的执行,重新执行已经失败的任务。而slave仅负责执行由maste指派的任务。
50.HDFS存储机制
答:HDFS主要是一个分布式的文件存储系统,由namenode来接收用户的操作请求,然后根据文件大小,以及定义的block块的大小,将大的文件切分成多个block块来进行保存
51.举一个例子说明mapreduce是怎么运行的。
52.如何确认hadoop集群的健康状况
答:有完善的集群监控体系(ganglia,nagios)
Hdfs dfsadmin –report
Hdfs&haadmin& –getServiceState& nn1
53.mapreduce作业,不让reduce输出,用什么代替reduce的功能。
54.hive如何调优
答:hive最终都会转化为mapreduce的job来运行,要想hive调优,实际上就是mapreduce调优,可以有下面几个方面的调优。解决收据倾斜问题,减少job数量,设置合理的map和reduce个数,对小文件进行合并,优化时把握整体,单个task最优不如整体最优。按照一定规则分区。
55.hive如何控制权限
我们公司没做,不需要
56.HBase写数据的原理是什么?
57.hive能像关系型数据库那样建多个库吗?
答:当然能了。
58.HBase宕机如何处理
答:宕机分为HMaster宕机和HRegisoner宕机,如果是HRegisoner宕机,HMaster会将其所管理的region重新分布到其他活动的RegionServer上,由于数据和日志都持久在HDFS中,该操作不会导致数据丢失。所以数据的一致性和安全性是有保障的。
如果是HMaster宕机,HMaster没有单点问题,HBase中可以启动多个HMaster,通过Zookeeper的Master Election机制保证总有一个Master运行。即ZooKeeper会保证总会有一个HMaster在对外提供服务。
59.假设公司要建一个数据中心,你会如何处理?
先进行需求调查分析
设计功能划分
吞吐量的估算
采用的技术类型
软硬件选型
成本效益的分析
安全性,稳定性
60. 单项选择题
1.& 下面哪个程序负责& HDFS& 数据存储。 答案 C
a)NameNode&&b)Jobtracker&& c)Datanoded)secondaryNameNode &e)tasktracker
2. HDfS&中的& block& 默认保存几份? 答案 A
a)3& 份&b)2& 份 c)1& 份 d)不确定
3.& 下列哪个程序通常与& NameNode&在一个节点启动?
a)SecondaryNameNode b)DataNodec)TaskTracker d)Jobtracker e)zkfc
4. Hadoop&作者&&&&&&&& 答案D
a)Martin Fowler b)Kent Beck c)Doug cutting
5. HDFS&默认& Block Size&&答案 B&&& &
a)32MB&&b)64MB c)128MB
6.& 下列哪项通常是集群的最主要瓶颈& 答案D&
a)CPU&&&b)网络& c)磁盘& d)内存
7.& 关于 SecondaryNameNode& 哪项是正确的? 答案C
a)它是NameNode的热备&&&&
b)它对内存没有要求
c)它的目的是帮助& NameNode&合并编辑日志,减少& NameNode&启动时间
d)SecondaryNameNode& 应与& NameNode& 部署到一个节点
8.& 下列哪项可以作为集群的管理工具&& 答案& ABCD&& (此题出题有误)
a)Puppet b)Pdsh c)Cloudera Manager &d)Zookeeper
9.& 配置机架感知&的下面哪项正确&
a)如果一个机架出问题,不会影响数据读写
b)写入数据的时候会写到不同机架的& DataNode& 中
c)MapReduce&会根据机架获取离自己比较近的网络数据
10. Client&端上传文件的时候下列哪项正确& 答案BC
a)数据经过& NameNode& 传递给& DataNode
b)Client&端将文件切分为& Block,依次上传
c)Client&只上传数据到一台& DataNode,然后由& NameNode& 负责& Block& 复制工作
11.& 下列哪个是& Hadoop&运行的模式&& 答案 ABC
a)单机版& b)伪分布式&c)分布式
12. Cloudera& 提供哪几种安装& CDH& 的方法& 答案&ABCD
a)Cloudera manager b)Tar ball c)Yum d)Rpm
判断题:全部都是错误滴
13. Ganglia&不仅可以进行监控,也可以进行告警。(& )
14. Block Size& 是不可以修改的。(& )
15. Nagios&不可以监控& Hadoop&集群,因为它不提供& Hadoop&支持。(& )
16.& 如果&NameNode& 意外终止, SecondaryNameNode& 会接替它使集群继续工作。(& )
17. Cloudera CDH& 是需要付费使用的。(& )
18. Hadoop&是& Java& 开发的,所以& MapReduce&只支持& Java& 语言编写。(& )
19. Hadoop&支持数据的随机读写。(& )
20. NameNode& 负责管理& metadata, client& 端每次读写请求,它都会从磁盘中读取或则
会写入& metadata&信息并反馈& client&端。(& )
21. NameNode& 本地磁盘保存了& Block& 的位置信息。(& )
22. DataNode& 通过长连接与& NameNode& 保持通信。(& )
23. Hadoop&自身具有严&#26684;的权限管理和安全措施保障集群正常运行。(& )
24. Slave节点要存储数据,所以它的磁盘越大越好。(& )
25. hadoop dfsadmin& –report& 命令用于检测& HDFS& 损坏块。(& )
26. Hadoop&默认调度器策略为& FIFO(& )
27.& 集群内每个节点都应该配& RAID,这样避免单磁盘损坏,影响整个节点运行。(& )
28.& 因为&HDFS& 有多个副本,所以& NameNode&是不存在单点问题的。(& )
29.& 每个&map& 槽(进程)就是一个线程。(& )
30. Mapreduce& 的& input split& 就是一个& block。(&)
31. NameNode的默认Web UI& 端口是&50030,它通过& jetty& 启动的&Web& 服务。(&)
32. Hadoop&环境变量中的& HADOOP_HEAPSIZE& 用于设置所有& Hadoop& 守护线程的内存。它默认是200 GB。(& )
33.&DataNode& 首次加入&cluster& 的时候,如果& log中报告不兼容文件版本,那需要
NameNode执行“Hadoop namenode -format”操作&#26684;式化磁盘。(& )
63. 谈谈 hadoop1 和 hadoop2 的区别
hadoop1的主要结构是由HDFS和mapreduce组成的,HDFS主要是用来存储数据,mapreduce主要是用来计算的,那么HDFS的数据是由namenode来存储元数据信息,datanode来存储数据的。Jobtracker接收用户的操作请求之后去分配资源执行task任务。
在hadoop2中,首先避免了namenode单点故障的问题,使用两个namenode来组成namenode& feduration的机构,两个namenode使用相同的命名空间,一个是standby状态,一个是active状态。用户访问的时候,访问standby状态,并且,使用journalnode来存储数据的原信息,一个namenode负责读取journalnode中的数据,一个namenode负责写入journalnode中的数据,这个平台组成了hadoop的HA就是high &availableAbility高可靠。
然后在hadoop2中没有了jobtracker的概念了,统一的使用yarn平台来管理和调度资源,yarn平台是由resourceManager和NodeManager来共同组成的,ResourceManager来接收用户的操作请求之后,去NodeManager上面启动一个主线程负责资源分配的工作,然后分配好了资源之后告知ResourceManager,然后ResourceManager去对应的机器上面执行task任务。
64. 说说&#20540;对象与引用对象的区别?
65. 谈谈你对反射机制的理解及其用途?
答:java中的反射,首先我们写好的类,经过编译之后就编程了.class文件,我们可以获取这个类的.class文件,获取之后,再来操作这个类。这个就是java的反射机制。
66. ArrayList、Vector、LinkedList 的区别及其优缺点?HashMap、HashTable 的区别及其优缺点?
答:ArrayList 和Vector是采用数组方式存储数据, ,Vector由于使用了synchronized方法(线程安全)所以性能上比ArrayList要差,LinkedList使用双向链表实现存储,按序号索引数据需要进行向前或向后遍历,但是插入数据时只需要记录本项的前后项即可,所以插入数度较快!
HashMap和HashTable:Hashtable的方法是同步的,而HashMap的方法不是,Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现。HashMap是一个线程不同步的,那么就意味着执行效率高,HashTable是一个线程同步的就意味着执行效率低,但是HashMap也可以将线程进行同步,这就意味着,我们以后再使用中,尽量使用HashMap这个类。
67. 文件大小默认为 64M,改为 128M 有啥影响?
答:更改文件的block块大小,需要根据我们的实际生产中来更改block的大小,如果block定义的太小,大的文件都会被切分成太多的小文件,减慢用户上传效率,如果block定义的太大,那么太多的小文件可能都会存到一个block块中,虽然不浪费硬盘资源,可是还是会增加namenode的管理内存压力。
69. RPC 原理?
1.调用客户端句柄;执行传送参数
2.调用本地系统内核发送网络消息
3. 消息传送到远程主机
4. 服务器句柄得到消息并取得参数
5. 执行远程过程
6. 执行的过程将结果返回服务器句柄
7. 服务器句柄返回结果,调用远程系统内核
8. 消息传回本地主机
9. 客户句柄由内核接收消息
10. 客户接收句柄返回的数据
70. 对 Hadoop 有没有调优经验,没有什么使用心得?(调优从参数调优讲起)
dfs.block.size
Mapredure:
io.sort.mb
io.sort.spill.percent
mapred.local.dir
mapred.map.tasks &mapred.tasktracker.map.tasks.maximum
mapred.reduce.tasks &mapred.tasktracker.reduce.tasks.maximum
mapred.reduce.max.attempts
mapred.reduce.parallel.copies
mapreduce.reduce.shuffle.maxfetchfailures
mapred.child.java.opts
mapred.reduce.tasks.speculative.execution
<press.map.output &mapred.pression.codec
mapred.pleted.maps
72以你的实际经验,说下怎样预防全表扫描
1.应尽量避免在where 子句中对字段进行null &#20540;判断,否则将导致引擎放弃使用索引而进行全表扫描
2.应尽量避免在 where 子句中使用!=或&&操作符,否则将引擎放弃使用索引而进行全表扫
3.描应尽量避免在 where 子句中使用or 来连接条件,否则将导致引擎放弃使用索引而进行
4.in 和 not &in,用具体的字段列表代替,不要返回用不到的任何字段。in 也要慎用,否则会导致全表扫描
5.避免使用模糊查询
6.任何地方都不要使用select* from t
73. zookeeper 优点,用在什么场合
答:极大方便分布式应用的开发;(轻量,成本低,性能好,稳定性和可靠性高)
75.把公钥追加到授权文件的命令?该命令是否在 root 用户下执行?
答:ssh-copy-id
哪个用户需要做免密登陆就在哪个用户身份下执行
76. HadoopHA 集群中各个服务的启动和关闭的顺序?
77. 在 hadoop 开发过程中使用过哪些算法?其应用场景是什么?
答:排序,分组,topk,join,group
78. 在实际工作中使用过哪些集群的运维工具,请分别阐述期作用。
答:nmon&& ganglia&&&nagios
79. 一台机器如何应对那么多的请求访问,高并发到底怎么实现,一个请求怎么产生的,
在服务端怎么处理的,最后怎么返回给用户的,整个的环节操作系统是怎么控制的?
80. java 是传&#20540;还是传址?
答:引用传递。传址
81. 问:你们的服务器有多少台?
82. 问:你们服务器的内存多大?
128G或者64G的
83. hbase 怎么预分区?
建表时可以通过shell命令预分区,也可以在代码中建表做预分区
《具体命令详见笔记汇总》
84. hbase 怎么给 web 前台提供接口来访问(HTABLE可以提供对 HBase的访问,但是怎么查询同一条记录的多个版本数据)?
答:使用HTable来提供对HBase的访问,可以使用时间戳来记录一条数据的多个版本。
85. .htable API 有没有线程安全问题,在程序中是单例还是多例?&
多例:当多线程去访问同一个表的时候会有。
86. 你们的数据是用什么导入到数据库的?导入到什么数据库?
处理完成之后的导出:利用hive 处理完成之后的数据,通过sqoop 导出到 mysql 数据库
中,以供报表层使用。&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
87. 你们业务数据量多大?有多少行数据?(面试了三家,都问这个问题)
开发时使用的是部分数据,不是全量数据,有将近一亿行(8、9 千万,具体不详,一般开
发中也没人会特别关心这个问题)
88. 你们处理数据是直接读数据库的数据还是读文本数据?
将日志数据导入到 hdfs 之后进行处理
89. 你们写 hive 的 hql 语句,大概有多少条?
不清楚,我自己写的时候也没有做过统计
90. 你们提交的 job 任务大概有多少个?这些job 执行完大概用多少时间?(面试了三家,都问这个问题)
没统计过,加上测试的,会有很多
Sca阶段,一小时运行一个job,处理时间约12分钟
Etl阶段,有2千多个job,从凌晨12:00开始次第执行,到早上5点左右全部跑完
91. hive 跟 hbase 的区别是?
答:Hive和Hbase是两种基于Hadoop的不同技术--Hive是一种类SQL的引擎,并且运行MapReduce任务,Hbase是一种在Hadoop之上的NoSQL 的Key/vale数据库。当然,这两种工具是可以同时使用的。就像用Google来搜索,用FaceBook进行社交一样,Hive可以用来进行统计查询,HBase可以用来进行实时查询,数据也可以从Hive写到Hbase,设置再从Hbase写回Hive。
92. 你在项目中主要的工作任务是?
预处理系统、手机位置实时查询系统,详单系统,sca行为轨迹增强子系统,内容识别中的模板匹配抽取系统
设计、架构、技术选型、质量把控,进度节点把握。。。。。。
93. 你在项目中遇到了哪些难题,是怎么解决的?
Storm获取实时位置信息动态端口的需求
101. job 的运行流程(提交一个 job 的流程)?
102Hadoop 生态圈中各种框架的运用场景?
103. hive 中的压缩&#26684;式 RCFile、TextFile、SequenceFile &各有什么区别?
以上 3 种&#26684;式一样大的文件哪个占用空间大小..等等
采用RCfile的&#26684;式读取的数据量(373.94MB)远远小于sequenceFile的读取量(2.59GB)
2、执行速度前者(68秒)比后者(194秒)快很多
从以上的运行进度看,snappy的执行进度远远高于bz的执行进度。
在hive中使用压缩需要灵活的方式,如果是数据源的话,采用RCFile&#43;bz或RCFile&#43;gz的方式,这样可以很大程度上节省磁盘空间;而在计算的过程中,为了不影响执行的速度,可以浪费一点磁盘空间,建议采用RCFile&#43;snappy的方式,这样可以整体提升hive的执行速度。
至于lzo的方式,也可以在计算过程中使用,只不过综合考虑(速度和压缩比)还是考虑snappy适宜。
104假如:Flume 收集到的数据很多个小文件,我需要写 MR 处理时将这些文件合并
(是在 MR 中进行优化,不让一个小文件一个 MapReduce)
他们公司主要做的是中国电信的流量计费为主,专门写 MR。
105. 解释“hadoop”和“hadoop 生态系统”两个概念
109. MapReduce 2.0”与“YARN”是否等同,尝试解释说明
MapReduce 2.0& --àmapreduce &#43; yarn
110. MapReduce 2.0 中,MRAppMaster 主要作用是什么,MRAppMaster 如何实现任务
111. 为什么会产生 yarn,它解决了什么问题,有什么优势?
114. 数据备份,你们是多少份,如果数据超过存储容量,你们怎么处理?
3份,多加几个节点
115. 怎么提升多个 JOB 同时执行带来的压力,如何优化,说说思路?
&&&&&& 增加运算能力
116. 你们用 HBASE 存储什么数据?
117. 你们的 hive 处理数据能达到的指标是多少?
118.hadoop中RecorderReader的作用是什么???
1、&&在hadoop中定义的主要公用InputFormat中,哪个是默认&#20540;? FileInputFormat
2、& 两个类TextInputFormat和KeyValueInputFormat的区别是什么?
&&&&&& 答:TextInputFormat主要是用来&#26684;式化输入的文本文件的,KeyValueInputFormat则主要是用来指定输入输出的key,value类型的
3、& 在一个运行的hadoop任务中,什么是InputSplit?
&&&&&& InputSplit是InputFormat中的一个方法,主要是用来切割输入文件的,将输入文件切分成多个小文件,
&&&&&& 然后每个小文件对应一个map任务
4、& Hadoop框架中文件拆分是怎么调用的?
&&&&&& InputFormat& --&&TextInputFormat& --&RecordReader& --& LineRecordReader& --& LineReader
5、& 参考下列M/R系统的场景:hdfs块大小为64MB,输入类为FileInputFormat,有3个文件的大小分别为64KB, 65MB, 127MB
会产生多少个maptask&& 4个&&& 65M这个文件只有一个切片《原因参见笔记汇总TextInputformat源码分析部分》
8、& 如果没有自定义partitioner,那数据在被送达reducer前是如何被分区的?
&&&&&& hadoop有一个默认的分区类,HashPartioer类,通过对输入的k2去hash&#20540;来确认map输出的k2,v2送到哪一个reduce中去执行。
10、分别举例什么情况要使用 combiner,什么情况不使用?
&&&&&& 求平均数的时候就不需要用combiner,因为不会减少reduce执行数量。在其他的时候,可以依据情况,使用combiner,来减少map的输出数量,减少拷贝到reduce的文件,从而减轻reduce的压力,节省网络开销,提升执行效率
11、Hadoop中job和tasks之间的区别是什么?
Job是我们对一个完整的mapreduce程序的抽象封装
Task是job运行时,每一个处理阶段的具体实例,如map task,reduce task,maptask和reduce task都会有多个并发运行的实例
12、hadoop中通过拆分任务到多个节点运行来实现并行计算,但某些节点运行较慢会拖慢整个任务的运行,hadoop采用全程机制应对这个情况?
Speculate 推测执行
14、有可能使hadoop任务输出到多个目录中吗?如果可以,怎么做?
&&&&&& 自定义outputformat或者用multioutputs工具
15、如何为一个hadoop任务设置mappers的数量?
16、如何为一个hadoop任务设置要创建reduder的数量?
可以通过代码设置
具体设置多少个,应该根据硬件配置和业务处理的类型来决定
下面是HBASE我非常不懂的地方:
1.hbase怎么预分区?
2.hbase怎么给web前台提供接口来访问(HTABLE可以提供对HTABLE的访问,但是怎么查询同一条记录的多个版本数据)?
3.htable API有没有线程安全问题,在程序中是单例还是多例?
4.我们的hbase大概在公司业务中(主要是网上商城)大概4个表,几个表簇,大概都存什么样的数据?
下面的Storm的问题:
1.metaq消息队列 zookeeper集群 storm集群(包括zeromq,jzmq,和storm本身)就可以完成对商城推荐系统功能吗?还有没有其他的中间件?
2.storm怎么完成对单词的计数?
下文引用自神之子hadoop面试可能遇到的问题》
Q1. Name the most common InputFormats defined in&Hadoop? Which one is default ?&
Following 2 are most common InputFormats defined in&Hadoop&
- TextInputFormat
- KeyValueInputFormat
- SequenceFileInputFormat
Q2. What is the difference betweenTextInputFormatand KeyValueInputFormat class
TextInputFormat:It reads lines of text files and provides the offset of the line as key to theMapper and actual line as Value to the mapper
KeyValueInputFormat:Reads text file and parses lines into key, val pairs. Everything up to thefirst tab character is sent as key to the Mapper and the remainder of the lineis sent as value to the mapper.
Q3. What is InputSplit in&Hadoop
When a&hadoop&job is run, it splits input files into chunksand assign each split to a mapper to process. This is called Input Split&
Q4. How is the splitting of file invokedin&Hadoop&Framework &
It is invoked by the&Hadoop&framework by runninggetInputSplit()method of the Input format class (like FileInputFormat) definedby the user&
Q5. Consider case scenario: In M/R system,
&& &- HDFS block size is 64MB
&& &- Input format isFileInputFormat
&& &- We have 3 files ofsize 64K, 65Mb and 127Mb&
then how many input splits will be madeby&Hadoop&framework?
Hadoop&will make 5splits as follows&
- 1 split for 64K files&
- 2 &splits for 65Mb files&
- 2 splits for 127Mb file&
Q6. What is the purpose of RecordReaderin&Hadoop
The InputSplithas defined a slice of work,but does not describe how to access it. The RecordReaderclass actually loadsthe data from its source and converts it into (key, value) pairs suitable forreading by the Mapper. The RecordReader instance
is defined by theInputFormat&
Q7. After the Map phase finishes,the&hadoop&framework does&Partitioning, Shuffle and sort&. Explain what happens in this phase?
- Partitioning
Partitioning is the process of determiningwhich reducer instance will receive which intermediate keys and values. Eachmapper must determine for all of its output (key, value) pairs which reducerwill receive them. It is necessary that for any
key, regardless of which mapperinstance generated it, the destination partition is the same
After the first map tasks have completed,the nodes may still be performing several more map tasks each. But they alsobegin exchanging the intermediate outputs from the map tasks to where they arerequired by the reducers. This process of moving
map outputs to the reducers isknown as shuffling.
Each reduce task is responsible forreducing the values associated with several intermediate keys. The set of intermediatekeys on a single node is automatically sorted by&Hadoop&before
they are presented tothe Reducer&
Q9. If no custom partitioner is defined inthe&hadoop&then how is datapartitioned before its sent to the reducer &
The default partitioner computes a hashvalue for the key and assigns the partition based on this result&
Q10. What is a Combiner&
The Combiner is a &mini-reduce&process which operates only on data generated by a mapper. The Combiner willreceive as input all data emitted by the Mapper instances on a given node. Theoutput from the Combiner is then sent to the Reducers, instead
of the outputfrom the Mappers.
Q11. Give an example scenario where a cobiner can be usedand where it cannot be used
There can be several examples following are the mostcommon ones
- Scenario where you can use combiner
&&Getting list of distinct words in a file
- Scenario where you cannot use a combiner
&&Calculating mean of a list of numbers&
Q12.&What is job tracker
Job Tracker is the service within&Hadoop&that runs Map Reduce jobs onthe cluster
Q13. What are some typical functions ofJob Tracker
The following are some typical tasks ofJob Tracker
- Accepts jobs from clients
-&It talks to the NameNode todetermine the location of the data
-&It locates TaskTracker nodes withavailable slots at or near the data
-&It submits the work to the chosenTask Tracker nodes and monitors progress of each task by receiving heartbeatsignals from Task tracker&
Q14.&What is task tracker
Task Tracker is a node in the cluster thataccepts tasks like Map, Reduce and Shuffle operations - from a JobTracker&
Q15. Whats the relationship between Jobsand Tasks in&Hadoop
One job is broken down into one or manytasks in&Hadoop.&
Q16. Suppose&Hadoop&spawned 100 tasks for a job and one of the taskfailed. What willhadoop&do ?
It will restart the task again on someother task tracker and only if the task fails more than 4 (default setting andcan be changed) times will it kill the job
Q17.&Hadoop&achievesparallelism by dividing the tasks across many nodes, it is possible for a fewslow nodes to rate-limit the rest of the program and slow down the program.What mechanism&Hadoop&providesto
combat this &
Speculative Execution&
Q18. How does speculative execution worksin&Hadoop &
Job tracker makes different task trackersprocess same input. When tasks complete, they announce this fact to the JobTracker. Whichever copy of a task finishes first becomes the definitive copy.If other copies were executing speculatively,&Hadoop&tells
the Task Trackers to abandon the tasksand discard their outputs. The Reducers then receive their inputs fromwhichever Mapper completed successfully, first.&
Q19. Using command line in Linux, how willyou&
- see all jobs running in the&hadoop&cluster
- kill a job
-&hadoop&job-list
-&hadoop&job-kill jobid&
Q20. What is&Hadoop&Streaming &
Streaming is a generic API that allowsprograms written in virtually any language to be used asHadoop&Mapper and Reducerimplementations&
Q21. What is the characteristic of streamingAPI that makes it flexible run map reduce jobs in languages like perl, ruby,awk etc. &
Hadoop&Streamingallows to use arbitrary programs for the Mapper and Reducer phases of a MapReduce job by having both Mappers and Reducers receive their input on stdin andemit
output (key, value) pairs on stdout.
Q22. Whats is Distributed Cache in&Hadoop
Distributed Cache is a facility provided by the Map/Reduce framework to cachefiles (text, archives, jars and so on) needed by applications during executionof the job. The framework will copy the necessary files to the slave nodebefore any tasks for the job
are executed on that node.
Q23. What is the benifit of Distributedcache, why can we just have the file in HDFS and have the application read it&
This is because distributed cache is much faster. It copies the file to alltrackers at the start of the job. Now if the task tracker runs 10 or 100mappers or reducer, it will use the same copy of distributed cache. On theother hand, if you put code in file
to read it from HDFS in the MR job thenevery mapper will try to access it from HDFS hence if a task tracker run 100map jobs then it will try to read this file 100 times from HDFS. Also HDFS isnot very efficient when used like this.
Q.24 What mechanism does&Hadoop&frameworkprovides to synchronize changes made in Distribution Cache during runtime ofthe application &
This is a trick&questions.There is no such mechanism. Distributed Cache by design is read only during thetime of Job execution
Q25. Have you ever used Counters in&Hadoop.Give us an example scenario
Anybody who claims to have worked on a&Hadoop&projectis expected to use counters
Q26. Is it possible to provide multiple input to&Hadoop? If yes then how can you give multipledirectories as input to the&Hadoop&job&
Yes, The input format class provides methods to add multiple directories asinput to a&Hadoop&job
Q27. Is it possible to have&Hadoop&joboutput in multiple directories. If yes then how &
Yes, by using Multiple Outputs class
Q28. What will a&hadoop&jobdo if you try to run it with an output directory that is already present? Willit
- overwrite it
- warn you and continue
- throw an exception and exit
The&hadoop&job willthrow an exception and exit.
Q29. How can you set an arbitary number of mappers to be created for ajob in&Hadoop &
This is a trick question. You cannot set it
Q30. How can you set an arbitary number of reducers to be created for ajob in&Hadoop &
You can either do it progamatically by using method setNumReduceTasksin theJobConfclass or set it up as a configuration setting
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:207190次
积分:3345
积分:3345
排名:第7533名
原创:105篇
转载:14篇
评论:76条
文章:12篇
阅读:81146
文章:32篇
阅读:66984
文章:32篇
阅读:37637
(1)(1)(5)(5)(8)(15)(6)(7)(9)(7)(14)(26)(15)(1)

我要回帖

更多关于 hdfs 增加节点 的文章

 

随机推荐