程序员简述大数据Hadoop常见问题
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了程序员简述大数据Hadoop常见问题,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含11675字,纯文字阅读大概需要17分钟。
内容图文
![程序员简述大数据Hadoop常见问题](/upload/InfoBanner/zyjiaocheng/621/bfd1e4876ce74d7294a333029e674cf6.jpg)
近期有不少刚刚接触或者是刚参加大数据培训的小伙伴询问Hadoop常见问题有哪些,下面是简单整理的一些内容,现在分享给大家,希望对小伙伴们有所帮助。
1、现在企业中使用Hadoop版本主要是1.x还是2.x?
目前百度,腾讯,阿里为主的互联网公司都是以hadoop。
a.X为基准版本的,当然每个公司都会进行自定义的二次开发以满足不同的集群需求。
b.X在百度内部还没有正式使用,还是以1.X为主,不过百度针对1.X的问题开发了HCE系统(HadoopC++Expand系统)。
补充:Hadoop2.x在其他公司应用的很多,比如京东等。
2、以后想从事大数据方面工作,算法要掌握到什么程度,算法占主要部分吗?
首先,如果要从事大数据相关领域的话,hadoop是作为工具来使用的,首先需要掌握使用方法。可以不用深入到hadoop源码级别细节。
然后就是对算法的理解,往往需要设计到数据挖掘算法的分布式实现,而算法本身你还是需要理解的,例如常用的k-means聚类等。
3、现在spark,storm越来越火,谷歌也发布了Cloud Dataflow,是不是Hadoop以后主要应该学习hdfs和yarn,而且以后Hadoop程序员的主要做的就是把这些东西打包,只提供接口让普通的程序员也能使用,就像Cloudera和Google一样?
这位同学,你多虑了,hadoop和spark,strom是解决不同的问题,不存在哪个好那个坏,要学习Hadoop还是以主流的hadoop-1.X为版本,2.X最主要的就是多了yarn框架,很好理解的。如果你是hadoop本身研发建议都看,如果你是hadoop应用相关研发,看主流的1.X就行。
4、小白问一句,大数据处理都是服务器上安装相关软件吗,对程序有什么影响呢,集群、大数据是属于运维的工作内容还是攻城狮的呢?
传统的程序只能运行在单机上,而大数据处理这往往使用分布式编程框架编写,例如hadoopmapreduce,只能运行在hadoop集群平台上。
运维的责任:保证集群,机器的稳定性和可靠性
hadoop系统本身研发:提高Hadoophttps://cyzhuti.com/集群的性能,增加新功能。
大数据应用:把hadoop作为工具,去实现海量数据处理或者相关需求。
5、大的文件拆分成很多小的文件后,怎样用Hadoop进行高效的处理这些小文件?以及怎样让各个节点尽可能的负载均衡?
a.怎样用Hadoop进行高效的处理这些小文件?
hadoop在处理大规模数据时是很高效的,但是处理大量的小文件时就会因为系统资源开销过大而导致效率较低,针对这样的问题,可以将小文件打包为大文件,例如使用SequcenFile文件格式,例如以文件签名为key,文件内容本身为https://cyzhuti.com/ks/19.htmlvalue写成SequcenFile文件的一条记录,这样多个小文件就可以通过SequcenFile文件格式变为一个大文件,之前的每个小文件都会映射为SequcenFile文件的一条记录。
b.怎样让各个节点尽可能的负载均衡?
在hadoop集群中负载均衡是非常关键的,这种情况的导致往往是因为用户的数据分布的并不均衡,而计算资源槽位数确实均衡分布在每个节点,这样在作业运行时非本地任务会有大量的数据传输,从而导致集群负载不均衡,因此解决不均衡的要点就是将用户的数据分布均衡,可以使用hadoophttps://cyzhuti.com/ks/17.html内置的balancer脚本命令。
对于因为资源调度导致的不均衡则需要考虑具体的调度算法和作业分配机制。
一、.hdfs写文件的步骤
答案:
(1)client向NameNode申请上传…/xxx.txt文件
(2)NN向client响应可以上传文件
(3)Client向NameNode申请DataNode
(4)NN向Client返回DN1,DN2,DN3https://cyzhuti.com/ks/15.html
(5)Client向DN1,DN2,DN3申请建立文件传输通道
(6)DN3,DN2,DN1依次响应连接
(7)Client向DN1上传一个block,DN1向DN2,DN3冗余文件
大数据面试题整理
二、hdfs读取文件步骤
答案:
(1)client向NN请求下载…/xxx.txt文件
(2)NN向clienthttps://cyzhuti.com/ks/13.html返回文件的元数据
(3)Client向DN1请求访问读数据blk_1
(4)DN1向Client传输数据
(5)Client向DN2请求访问读数据blk_2
(6)DN2向Client传输数据
大数据面试题整理
大数据面试题整理
三、hadoop的shufflehttps://cyzhuti.com/ks/11.html过程
1.Map端的shuffle
Map端会处理输入数据并产生中间结果,这个中间结果会写到本地磁盘,而不是HDFS。每个Map的输出会先写到内存缓冲区中,当写入的数据达到设定的阈值时,系统将会启动一个线程将缓冲区的数据写到磁盘,这个过程叫做spill。
在spill写入之前,会先进行二次排序,首先根据数据所属的partition进行排序,然后每个partition中的数据再按key来排序。partition的目是将记录划分到不同的Reducer上去,以期望能够达到负载均衡,以后的Reducer就会根据partition来读取自己对应的数据。接着运行combiner(如果设置了的话),combiner的本质也是一个Reducer,其目的是对将要写入到磁盘上的文件先进行一次处理,这样,写入到磁盘的数据量就会减少。最后将数据写到本地磁盘产生spill文件https://cyzhuti.com/ks/9.html (spill文件保存在{mapred.local.dir}指定的目录中,Map任务结束后就会被删除)。
最后,每个Map任务可能产生多个spill文件,在每个Map任务完成前,会通过多路归并算法将这些spill文件归并成一个文件。至此,Map的shuffle过程就结束了。
2.Reduce端的shuffle
Reduce端的shuffle主要包括三个阶段,copy、sort(merge)和reduce。
首先要将Map端产生的输出文件拷贝到Reduce端,但每个Reducer如何知道自己应该处理哪些数据呢?因为Map端进行partition的时候,实际上就相当于指定了每个https://cyzhuti.com/ks/7.htmlReducer要处理的数据(partition就对应了Reducer),所以Reducer在拷贝数据的时候只需拷贝与自己对应的partition中的数据即可。每个Reducer会处理一个或者多个partition,但需要先将自己对应的partition中的数据从每个Map的输出结果中拷贝过来。
接下来就是sort阶段,也成为merge阶段,因为这个阶段的主要工作是执行了归并排序。从Map端拷贝到Reduce端的数据都是有序的,所以很适合归并排序。最终在Reduce端生成一个较大的文件作为Reduce的输入。
最后就是Reduce过程了,在这个过程中产生了最终的输出结果,并将其写到HDFS上。
四、fsimage和edit的区别?
当NN,SN要进行数据同步时叫做checkpoint时就用到了fsimagehttps://cyzhuti.com/ks/5.html与edit,fsimage是保存最新的元数据的信息,当fsimage数据到一定的大小事会去生成一个新的文件来保存元数据的信息,这个新的文件就是edit,edit会回滚最新的数据。
五、简单说一下hadoop的map-reduce模型
首先maptask会从本地文件系统读取数据,转换成key-value形式的键值对集合,使用的是hadoop内置的数据类型,如Text,Longwritable等。
将键值对集合输入mapper进行业务处理过程,将其转化成需要的key-value再输出。
之后会进行一个partition分区操作,默认使用的是https://cyzhuti.com/ks/21.htmlhashpartitioner,可以通过重写hashpartitioner的getPartition方法来自定义分区规则。
之后会对key进行sort排序,grouping分组操作将相同key的value合并分组输出,在这里可以使用自定义的数据类型,重写WritableComparator的Comparator方法来自定义排序规则,重写RawComparator的compara方法来自定义分组规则。
之后进行一个combiner归约操作,就是一个本地的reduce预处理,以减小shuffle,reducer的工作量。
Reducetask会用过网络将各个数据收集进行reduce处理,最后将数据保存或者显示,结束整个job。
六、运行hadoop集群需要哪些守护进程?
DataNode,NameNode,TaskTracker和JobTracker都是运行Hadoop集群需要的守护进程。
七、hadoop的TextInputFormat作用是什么,如何自定义实现?
InputFormat会在map操作之前对数据进行两方面的预处理。
1.是getSplitshttps://cyzhuti.com/ks/23.html,返回的是InputSplit数组,对数据进行Split分片,每片交给map操作一次。
2.是getRecordReader,返回的是RecordReader对象,对每个Split分片进行转换为key-value键值对格式传递给map常用的InputFormat是TextInputFormat,使用的是LineRecordReader对每个分片进行键值对的转换,以行偏移量作为键,行内容作为值。
自定义类继承InputFormat接口,重写createRecordReader和isSplitable方法在createRecordReader中可以自定义分隔符https://cyzhuti.com/ks/15.html。
八、hadoop和spark都是并行计算,那么他们有什么相同和区别?
两者都使用mr模型来进行并行计算,hadoop的一个作业称为job,job里面分为maptask和reducetask,每个task都是在自己的进程中运行的,当task结束时,进程也会结束。
Spark用户提交的任务称为application,一个application对应一个SparkContext,app中存在多个job,没触发一个action操作就会产生一个job。
这些job可以并行或者串行执行,每个餐饮job有多个stage,stage是shuffle过程中DAGSchaduler通过RDD之间的依赖关系划分job而来的,每个stage里面有多个task,组成taskset有TaskSchaduler分发到各个executor中执行,executor的生命周期是和application一样的,即使没有job运行也是存在的,所以task可以快速启动读取内存进行计算的。
Hadoop的job只有map和reduce操作,表达能力比较欠缺而且在mr过程中会重复的读写hdfs,造成大量的io操作,多个job需要自己管理关系。
Spark的迭代计算都是在内存中进行的,教育API中提供了大量的RDD操作join,groupby等,而且通过DAG图可以实现良好的容错。
九、为什么要用flume导入hdfs,hdfs的架构是怎样的?
Flume可以实时的导入数据到hdfs中,当hdfs上的文件达到一个指定大小的时候会形成一个文件,或者超时所指定时间的话也形成一个文件。
文件都是存储在datanode上的,namenode存储着datanode的元数据信息,而namenode的元数据信息是存在内存中的,所以当文件切片很小或者很多的时候会卡死。
十、MR程序运行的时候会有什么比较常见的问题?
比如说作业中大部分都完成了,但是总有几个reduce一直在运行。
这是因为这几个幼儿reduce中的处理的数据要远远大于其他的reduce,可能是对键值对任务划分的不均匀造成的数据倾斜。
解决的方法可以在分区的时候重新定义分区规则对于value数据很多的key可以进行拆分、均匀打散等处理,或者是在map端的combiner中进行数据预处理的操作。
十一、简单说一下hadoop和spark的shuffle服装过程
Hadoop:map端保存分片数据,通过网络收集到reduce端。
Spark:spark的shuffle是在DAGSchedular划分Stage的时候产生的,TaskSchedular要分发Stage到各个worker的executor。减少shuffle可以提高性能。
十二、hive中存放的是什么?
表。
存的是和hdfs的映射关系,hive是逻辑上的数据仓库,实际操作的都是hdfs上的文件,HQL就是用SQL语法来写的MR程序。
十三、Hive与关系型数据库的关系?
没有关系,hive是数据仓库酒店,不能和数据库一样进行实时的CRUD操作。
是一次写入多次读取的操作,可以看成是ETL的工具。
十四、Flume的工作及时是什么?
核心概念是agent,里面包括source,channel和sink三个组件。
Source运行在日志收集节点进行日志采集,之后临时存储在channel中,sink负责将channel中的数据发送到目的地。
只有发送成功channel中的数据才会被删除。
首先书写flume配置文件,定义零售agent、source、channel和sink然后将其组装,执行flume-ng命令。
十五、Hbase行键列族的概念,物理模型,表的设计原则?
行键:是hbase表自带的,每个行键对应一条数据。
列族:是创建表时指定的,为列的集合,每个列族作为一个文件单独存储,存储的数据都是字节数组,其中数据可以有很多,通过时间戳来区分。
物理模型:整个hbase表会拆分成多个region,每个region记录着行键的起始点保存在不同的节点上,查询时就是对各个节点的并行查询,当region很大时使用.META表存储各个region的起始点,-ROOT又可以存储.META的起始点。
Rowkey的设计原则:各个列族数据平衡,长度原则、相邻原则,创建表的时候设置表放入regionserver缓存中,避免自动增长和时间,使用字节数组代替string美容,最大长度64kb,最好16字节以内,按天分表,两个字节散列,四个字节存储时分毫秒。
列族的设计原则:尽可能少(按照列族进行存储,按照region进行读取,不必要的io操作),经常和不经常使用的两类数据放入不同列族中,列族名字尽可能短。
十六、请列出正常的hadoop集群中hadoop都分别需要启动哪些进程,他们的作用分别都是什么,请尽量列的详细一些。
namenode:负责管理hdfs中文件块的元数据,响应客户端请求,管理datanode上文件block的均衡,维持副本数量
Secondname:主要负责做checkpoint操作;也可以做冷备,对一定范围内数据做快照性备份。
Datanode:存储数据块,负责客户端对数据块的io请求
Jobtracker:管理任务,并将任务分配给https://www.6666pl.com/jiaju tasktracker。
Tasktracker:执行JobTracker分配的任务。
Resourcemanager、Nodemanager、Journalnode、Zookeeper、Zkfc
十七、请说明hive中SortBy、OrderBy、ClusterBy,DistributeBy各代表什么意思?
orderby:会对输入做全局排序,因此只有一个reducer(多个reducer无法保证全局有序)。只有一个reducer,会导致当输入规模较大时,需要较长的计算时间。
sortby:不是全局排序,其在数据进入reducer前完成排序。
distributeby:按照指定的字段对数据进行划分输出到不同的reduce中。
clusterby:汽车除了具有distributeby的功能外还兼具sortby的功能。
十八、HBase简单读写流程?
读:
找到要读数据的region所在的RegionServer,然后按照以下顺序进行读取:先去BlockCache读取,若BlockCache没有,则到Memstore读取,若Memstore中没有,则到HFile中去读。
写:
找到要写数据的region所在的RegionServer,然后先将数据写到WAL(Write-AheadLogging,预写日志系统)中,然后再将数据写到Memstore等待刷新,回复客户端写入完成。
十九、HBase的特点是什么?
(1)hbase是一个分布式的基于列式存储的数据库,基于hadoop的HDFS存储,zookeeper进行管理。
(2)hbase适合存储半结构化或非结构化数据,对于数据结构字段不够确定或者杂乱无章很难按一个概念去抽取的数据。
(3)hbase为null的记录不会被存储。
(4)基于的表包括rowkey,时间戳和列族。新写入数据时,时间戳更新,同时可以查询到以前的版本。
(5)hbase是主从结构。Hmaster作为主节点,hregionserver作为从节点。
二十、请描述如何解决Hbase中region太小和region太大带来的结果。
Region过大会发生多次compaction,将数据读一遍并写一遍到hdfs上,占用io,region过小会造成多次split,region会下线,影响访问服务,调整hbase.heregion.max.filesize为256m。
内容总结
以上是互联网集市为您收集整理的程序员简述大数据Hadoop常见问题全部内容,希望文章能够帮你解决程序员简述大数据Hadoop常见问题所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。