大数据面试题

房东的猫 提交于 2019-12-20 03:38:01

第一部分选择题

1. 下面哪个程序负责 HDFS 数据存储。答案C DataNode

a)NameNode
b)Jobtracker
c)DataNode 
d)secondaryNameNode
e)tasktracker

NameNode:负责调度,比如你需要存一个640m的文件 如果按照64m分块 那么namenode就会把这10个块(这里不考虑副本)分配到集群中的datanode上 并记录对于关系 。当你要下载这个文件的时候namenode就知道在哪些节点上给你取这些数据了。。。它主要维护两个map 一个是文件到块的对应关系 一个是块到节点的对应关系。(文件分成哪些块,这些块分别在哪些节点)

 

2. HDfS 中的 block 默认保存几份? 答案A默认3分

a)3 份
b)2 份
c)1 份
d)不确定

3. 下列哪个程序通常与 NameNode 在一个节点启动?答案D

a)SecondaryNameNode
b)DataNode
c)TaskTracker
d)Jobtracker

此题分析:

hadoop的集群是基于master/slave模式,namenode和jobtracker属于master,datanode和tasktracker属于slave,master只有一个,而slave有多个SecondaryNameNode内存需求和NameNode在一个数量级上,所以通常secondary NameNode(运行在单独的物理机器上)和NameNode运行在不同的机器上。

JobTracker和TaskTracker

JobTracker 对应于 NameNode

TaskTracker 对应于 DataNode

DataNode 和NameNode 是针对数据存放来而言的

JobTracker和TaskTracker是对于MapReduce执行而言的

mapreduce中几个主要概念,mapreduce整体上可以分为这么几条执行线索:obclient,JobTracker与TaskTracker。

1、JobClient会在用户端通过JobClient类将应用已经配置参数打包成jar文件存储到hdfs,并把路径提交到Jobtracker,然后由JobTracker创建每一个Task(即MapTask和ReduceTask)并将它们分发到各个TaskTracker服务中去执行。

2、JobTracker是一个master服务,软件启动之后JobTracker接收Job,负责调度Job的每一个子任务task运行于TaskTracker上,并监控它们,如果发现有失败的task就重新运行它。一般情况应该把JobTracker部署在单独的机器上。

3、TaskTracker是运行在多个节点上的slaver服务。TaskTracker主动与JobTracker通信,接收作业,并负责直接执行每一个任务。TaskTracker都需要运行在HDFS的DataNode上。

4. Hadoop 作者 答案C Doug cutting

a)Martin Fowler
b)Kent Beck
c)Doug cutting

5. HDFS 默认 Block Size 答案B

a)32MB
b)64MB 
c)128MB

(因为版本更换较快,这里答案只供参考)

6. 下列哪项通常是集群的最主要瓶颈:答案:C磁盘

a)CPU
b)网络
c)磁盘IO 
d)内存

该题解析:

首先集群的目的是为了节省成本,用廉价的pc机,取代小型机及大型机。小型机和大型机有什么特点?

1.cpu处理能力强

2.内存够大

所以集群的瓶颈不可能是a和d

3.网络是一种稀缺资源,但是并不是瓶颈。

4.由于大数据面临海量数据,读写数据都需要io,然后还要冗余数据,hadoop一般备3份数据,所以IO就会打折扣。

7. 关于 SecondaryNameNode 哪项是正确的?答案C

a)它是 NameNode 的热备
b)它对内存没有要求
c)它的目的是帮助 NameNode 合并编辑日志,减少 NameNode 启动时间
d)SecondaryNameNode 应与 NameNode 部署到一个节点。

多选题:

8. 下列哪项可以作为集群的管理?答案:ABD

a)Puppet 
b)Pdsh 
c)Cloudera Manager
d)Zookeeper

9. 配置机架感知的下面哪项正确:答案ABC

a)如果一个机架出问题,不会影响数据读写
b)写入数据的时候会写到不同机架的 DataNode
c)MapReduce 会根据机架获取离自己比较近的网络数据


10. Client 端上传文件的时候下列哪项正确?答案B

a)数据经过 NameNode 传递给 DataNode

b)Client 端将文件切分为 Block,依次上传

c)Client只上传数据到一台DataNode,然后由NameNode负责Block复制工作

该题分析:
Client向NameNode发起文件写入的请求。

NameNode根据文件大小和文件块配置情况,返回给Client它所管理部分DataNode的信息。

Client将文件划分为多个Block,根据DataNode的地址信息,按顺序写入到每一个DataNode块中。

11. 下列哪个是 Hadoop 运行的模式:答案ABC

a)单机版 
b)伪分布式 
c)分布式

12. Cloudera 提供哪几种安装 CDH 的方法?答案:ABCD

a)Cloudera manager 
b)Tarball 
c)Yum 
d)Rpm

第二部分判断题:

13. Ganglia 不仅可以进行监控,也可以进行告警。( 正确)

分析:此题的目的是考Ganglia的了解。严格意义上来讲是正确。ganglia作为一款最常用的Linux环境中的监控软件,它擅长的的是从节点中按照用户的需求以较低的代价采集数据。但是ganglia在预警以及发生事件后通知用户上并不擅长。最新的ganglia已经有了部分这方面的功能。但是更擅长做警告的还有Nagios。Nagios,就是一款精于预警、通知的软件。通过将Ganglia和Nagios组合起来,把Ganglia采集的数据作为Nagios的数据源,然后利用Nagios来发送预警通知,可以完美的实现一整套监控管理的系统。

14. Block Size 是不可以修改的。(错误 )

分析:它是可以被修改的Hadoop的基础配置文件是hadoop-default.xml,默认建立一个Job的时候会建立Job的Config,Config首先读入hadoop-default.xml的配置,然后再读入hadoop-site.xml的配置(这个文件初始的时候配置为空),hadoop-site.xml中主要配置需要覆盖的hadoop-default.xml的系统级配置。

15. Nagios 不可以监控 Hadoop 集群,因为它不提供 Hadoop 支持。(错误 )

分析:Nagios是集群监控工具,而且是云计算三大利器之一

16. 如果 NameNode 意外终止,SecondaryNameNode 会接替它使集群继续工作。(错误 )

分析:SecondaryNameNode是帮助恢复,而不是替代,如何恢复,可以查看

17. Cloudera CDH 是需要付费使用的。(错误 )

分析:第一套付费产品是Cloudera Enterpris,Cloudera Enterprise在美国加州举行的 Hadoop 大会 (Hadoop Summit) 上公开,以若干私有管理、监控、运作工具加强 Hadoop 的功能。收费采取合约订购方式,价格随用的 Hadoop 叢集大小变动。

18. HadoopJava开发的,所以MapReduce只支持Java语言编写。(错误 )

分析:rhadoop是用R语言开发的,MapReduce是一个框架,可以理解是一种思想,可以使用其他语言开发。

19. Hadoop 支持数据的随机读写。(错 )

分析:lucene是支持随机读写的,而hdfs只支持随机读。但是HBase可以来补救。HBase提供随机读写,来解决Hadoop不能处理的问题。HBase自底层设计开始即聚焦于各种可伸缩性问题:表可以很“高”,有数十亿个数据行;也可以很“宽”,有数百万个列;水平分区并在上千个普通商用机节点上自动复制。表的模式是物理存储的直接反映,使系统有可能提高高效的数据结构的序列化、存储和检索。

20. NameNode 负责管理 metadataclient 端每次读写请求,它都会从磁盘中读取或则会写入 metadata 信息并反馈 client 端。(错误)

此题分析:

NameNode 不需要从磁盘读取 metadata,所有数据都在内存中,硬盘上的只是序列化的结果,只有每次 namenode 启动的时候才会读取。
1)文件写入
Client向NameNode发起文件写入的请求。
NameNode根据文件大小和文件块配置情况,返回给Client它所管理部分DataNode的信息。
Client将文件划分为多个Block,根据DataNode的地址信息,按顺序写入到每一个DataNode块中。

2)文件读取
Client向NameNode发起文件读取的请求。

21. NameNode本地磁盘保存了Block的位置信息。正确

分析:DataNode是文件存储的基本单元,它将Block存储在本地文件系统中,保存了Block的Meta-data,同时周期性地将所有存在的Block信息发送给NameNode。NameNode返回文件存储的DataNode的信息。
Client读取文件信息。

22. Hadoop自身具有严格的权限管理和安全措施保障集群正常运行。(错误

hadoop只能阻止好人犯错,但是不能阻止坏人干坏事

23. Slave节点要存储数据,所以它的磁盘越大越好。( 错误)

分析:一旦Slave节点宕机,数据恢复是一个难题

24. hadoop dfsadmin –report命令用于检测 HDFS 损坏块。(错误 )

25. Hadoop默认调度器策略为FIFO(正确 )

26. 集群内每个节点都应该配RAID,这样避免单磁盘损坏,影响整个节点运行。(错误)

分析:首先明白什么是RAID,可以参考百科磁盘阵列。这句话错误的地方在于太绝对,具体情况具体分析。题目不是重点,知识才是最重要的。因为hadoop本身就具有冗余能力,所以如果不是很严格不需要都配备RAID。具体参考第二题。

27. 因为HDFS有多个副本,所以NameNode是不存在单点问题的。(错误 )

28. 每个map槽就是一个线程。(错误 )

分析:首先我们知道什么是map 槽,map 槽->map slotmap slot 只是一个逻辑值 ( org.apache.hadoop.mapred.TaskTracker.TaskLauncher.numFreeSlots ),而不是对应着一个线程或者进程

29. Mapreduceinput split就是一个 block(错误 )

30. NameNodeWeb UI端口是50030,它通过jetty启动的Web服务。(错误 )

31. Hadoop 环境变量中的 HADOOP_HEAPSIZE 用于设置所有 Hadoop 守护线程的内存。它默认是 200 GB( 错误)

hadoop为各个守护进程(namenode,secondarynamenode,jobtracker,datanode,tasktracker)统一分配的内存在hadoop-env.sh中设置,参数为HADOOP_HEAPSIZE,默认为1000M。

32DataNode首次加入cluster的时候,如果log中报告不兼容文件版本,那需要 NameNode执行“Hadoop namenode -format”操作格式化磁盘。(错误 )

分析:

首先明白介绍,什么ClusterID

ClusterID

添加了一个新的标识符ClusterID用于标识集群中所有的节点。当格式化一个Namenode,需要提供这个标识符或者自动生成。这个ID可以被用来格式化加入集群的其他Namenode。

有的同学问题的重点不是上面分析内容:内容如下:

这个报错是说明 DataNode 所装的Hadoop版本和其它节点不一致,应该检查DataNode的Hadoop版本

 

第三部分简答题:

 1.Hadoop集群可以运行的3个模式?

单机(本地)模式

伪分布式模式
全分布式模式
2. 单机(本地)模式中的注意点?

在单机模式(standalone)中不会存在守护进程,所有东西都运行在一个JVM上。这里同样没有DFS,使用的是本地文件系统。单机模式适用于开发过程中运行MapReduce程序,这也是最少使用的一个模式。
3. 伪分布模式中的注意点?
伪分布式(Pseudo)适用于开发和测试环境,在这个模式中,所有守护进程都在同一台机器上运行。
4. VM是否可以称为Pseudo
不是,两个事物,同时Pseudo只针对Hadoop。
5. 全分布模式又有什么注意点?
全分布模式通常被用于生产环境,这里我们使用N台主机组成一个Hadoop集群,Hadoop守护进程运行在每台主机之上。这里会存在Namenode运 行的主机,Datanode运行的主机,以及task tracker运行的主机。在分布式环境下,主节点和从节点会分开。
6. Hadoop是否遵循UNIX模式?
是的,在UNIX用例下,Hadoop还拥有“conf”目录。
7. Hadoop安装在什么目录下?
Cloudera和Apache使用相同的目录结构,Hadoop被安装在cd/usr/lib/hadoop-0.20/。
8. NamenodeJob trackertask tracker的端口号是?
Namenode,70;Job tracker,30;Task tracker,60。
9. Hadoop的核心配置是什么?
Hadoop的核心配置通过两个xml文件来完成:1,hadoop-default.xml;2,hadoop-site.xml。这些文件都使用xml格式,因此每个xml中都有一些属性,包括名称和值,但是当下这些文件都已不复存在。
10. 那当下又该如何配置?
Hadoop现在拥有3个配置文件:1,core-site.xml;2,hdfs-site.xml;3,mapred-site.xml。这些文件都保存在conf/子目录下。
11. RAM的溢出因子是?
溢出因子(Spill factor)是临时文件中储存文件的大小,也就是Hadoop-temp目录。
12. fs.mapr.working.dir只是单一的目录?
fs.mapr.working.dir只是一个目录。
13. hdfs-site.xml3个主要属性?

dfs.name.dir决定的是元数据存储的路径以及DFS的存储方式(磁盘或是远端)
dfs.data.dir决定的是数据存储的路径
fs.checkpoint.dir用于第二Namenode
14. 如何退出输入模式?
退出输入的方式有:1,按ESC;2,键入:q(如果你没有输入任何当下)或者键入:wq(如果你已经输入当下),并且按下Enter。
15. 当你输入hadoopfsck /造成“connection refused java exception’”时,系统究竟发生了什么?
这意味着Namenode没有运行在你的VM之上。
16. 我们使用UbuntuCloudera,那么我们该去哪里下载Hadoop,或者是默认就与Ubuntu一起安装?
这个属于Hadoop的默认配置,你必须从Cloudera或者Edureka的dropbox下载,然后在你的系统上运行。当然,你也可以自己配置,但 是你需要一个Linux box,Ubuntu或者是Red Hat。在Cloudera网站或者是Edureka的Dropbox中有安装步骤。
17. “jps”命令的用处?
这个命令可以检查Namenode、Datanode、Task Tracker、 Job Tracker是否正常工作。
18. 如何重启Namenode

点击stop-all.sh,再点击start-all.sh。
键入sudo hdfs(Enter),su-hdfs (Enter),/etc/init.d/ha(Enter),及/etc/init.d/hadoop-0.20-namenode start(Enter)。
19. Fsck的全名?
全名是:File System Check。
20. 如何检查Namenode是否正常运行?
如果要检查Namenode是否正常工作,使用命令/etc/init.d/hadoop-0.20-namenode status或者就是简单的jps。
21. mapred.job.tracker命令的作用?
可以让你知道哪个节点是Job Tracker。
22. /etc /init.d命令的作用是?
/etc /init.d说明了守护进程(服务)的位置或状态,其实是LINUX特性,和Hadoop关系不大。
23. 如何在浏览器中查找Namenode
如果你确实需要在浏览器中查找Namenode,你不再需要localhost:8021,Namenode的端口号是50070。
24. 如何从SU转到Cloudera
从SU转到Cloudera只需要键入exit。
25. 启动和关闭命令会用到哪些文件?
Slaves及Masters。
26. Slaves由什么组成?
Slaves由主机的列表组成,每台1行,用于说明数据节点。
27. Masters由什么组成?
Masters同样是主机的列表组成,每台一行,用于说明第二Namenode服务器。
28. hadoop-env.sh是用于做什么的?
hadoop-env.sh提供了Hadoop中. JAVA_HOME的运行环境。
29. Master文件是否提供了多个入口?
是的你可以拥有多个Master文件接口。
30. Hadoop-env.sh文件当下的位置?
hadoop-env.sh现在位于conf。
31. Hadoop_PID_DIR中,PID代表了什么?
PID代表了“Process ID”。
32. /var/hadoop/pids用于做什么?
/var/hadoop/pids用来存储PID。
33. hadoop-metrics.properties文件的作用是?
hadoop-metrics.properties被用做“Reporting”,控制Hadoop报告,初始状态是“not to report”。
34. Hadoop需求什么样的网络?
Hadoop核心使用Shell(SSH)来驱动从节点上的服务器进程,并在主节点和从节点之间使用password-less SSH连接。
35. 全分布式环境下为什么需求password-less SSH
这主要因为集群中通信过于频繁,Job Tracker需要尽可能快的给Task Tracker发布任务。
36. 这会导致安全问题吗?
完全不用担心。Hadoop集群是完全隔离的,通常情况下无法从互联网进行操作。与众不同的配置,因此我们完全不需要在意这种级别的安全漏洞,比如说通过互联网侵入等等。Hadoop为机器之间的连接提供了一个相对安全的方式。
37. SSH工作的端口号是?
SSH工作的端口号是NO.22,当然可以通过它来配置,22是默认的端口号。
38. SSH中的注意点还包括?
SSH只是个安全的shell通信,可以把它当做NO.22上的一种协议,只需要配置一个密码就可以安全的访问。
39. 为什么SSH本地主机需要密码?
在SSH中使用密码主要是增加安全性,在某些情况下也根本不会设置密码通信。
40. 如果在SSH中添加key,是否还需要设置密码?
是的,即使在SSH中添加了key,还是需要设置密码。
41. 假如Namenode中没有数据会怎么样?
没有数据的Namenode就不能称之为Namenode,通常情况下,Namenode肯定会有数据。
42. Job Tracker宕掉时,Namenode会发生什么?
当Job Tracker失败时,集群仍然可以正常工作,只要Namenode没问题。
43. 是客户端还是Namenode决定输入的分片?
这并不是客户端决定的,在配置文件中以及决定分片细则。
44. 是否可以自行搭建Hadoop集群?
是的,只要对Hadoop环境足够熟悉,你完全可以这么做。
45. 是否可以在Windows上运行Hadoop
你最好不要这么做,Red Hat Linux或者是Ubuntu才是Hadoop的最佳操作系统。在Hadoop安装中,Windows通常不会被使用,因为会出现各种各样的问题。因此,Windows绝对不是Hadoop的推荐系统。

46.列出安装Hadoop流程步骤

a) 创建hadoop账号

b) 更改ip

c) 安装Java 更改/etc/profile 配置环境变量

d) 修改host文件域名

e) 安装ssh 配置无密码登录

f) 解压hadoop

g) 配置hadoop  conf下面的配置文件

h) Hadoop namenode -format  格式化

i) Start 启动

47.列出hadoop集群启动中的所有进程和进程的作用

a) Namenode 管理集群  记录namenode文件信息

b) Secondname 可以做备份  对一定范围内的数据做快照

c) Datanode  存储数据

d) Jobtarcker 管理任务  分配任务

e) Tasktracker   执行任务

48.启动报nameNode错误 如何解决

a) 检查hdfs有没有启动成功

b) 检查输入文件是不是存在

49.写出下列执行命令 

杀死一个job

Hadoop job -list  取得job id

Hadoop job kill job id

删除hdfs上的 /temp/aa 目录

Hadoop -daemon。Sh start datanode 

加入一个新的节点或删除一个节点  刷新集群状态的命令

50.列出你所知道的调度器 说明其工作方法

a) Fifo schedular 默认的调度器  先进先出

b) Capacity schedular  计算能力调度器  选择占用内存小  优先级高的

c) Fair schedular 调肚脐  公平调度器  所有job 占用相同资源

51.你认为java streating pipe开发map reduce优缺点

a) Java 编写map reduce可以实现复杂的逻辑  如果需求简单  则显得繁琐

b) Hivesql 基本都是针对Hive中表数据进行编写  对复杂的逻辑很难实现

52.Hive 有哪些保存元数据的方式 并有哪些特点

a) 内存数据库  derby

b) 本地MySQL 常用

c) 远程mysql 

53.简述hadoop实现join的及各种方式

1) reduce side join是一种最简单的join方式,其主要思想如下:

在map阶段,map函数同时读取两个文件File1和File2,为了区分两种来源的key/value数据对,对每条数据打一个标签(tag),比如:tag=0表示来自文件File1,tag=2表示来自文件File2。即:map阶段的主要任务是对不同文件中的数据打标签。

在reduce阶段,reduce函数获取key相同的来自File1和File2文件的value list, 然后对于同一个key,对File1和File2中的数据进行join(笛卡尔乘积)。即:reduce阶段进行实际的连接操作。

2) map side join

之所以存在reduce side join,是因为在map阶段不能获取所有需要的join字段,即:同一个key对应的字段可能位于不同map中。Reduce side join是非常低效的,因为shuffle阶段要进行大量的数据传输。

Map side join是针对以下场景进行的优化:两个待连接表中,有一个表非常大,而另一个表非常小,以至于小表可以直接存放到内存中。这样,我们可以将小表复制多份,让每个map task内存中存在一份(比如存放到hash table中),然后只扫描大表:对于大表中的每一条记录key/value,在hash table中查找是否有相同的key的记录,如果有,则连接后输出即可。

为了支持文件的复制,Hadoop提供了一个类DistributedCache,使用该类的方法如下:

(1)用户使用静态方法DistributedCache.addCacheFile()指定要复制的文件,它的参数是文件的URI(如果是HDFS上的文件,可以这样:hdfs://namenode:9000/home/XXX/file,其中9000是自己配置的NameNode端口号)。JobTracker在作业启动之前会获取这个URI列表,并将相应的文件拷贝到各个TaskTracker的本地磁盘上。(2)用户使用DistributedCache.getLocalCacheFiles()方法获取文件目录,并使用标准的文件读写API读取相应的文件。

3) SemiJoin

SemiJoin,也叫半连接,是从分布式数据库中借鉴过来的方法。它的产生动机是:对于reduce side join,跨机器的数据传输量非常大,这成了join操作的一个瓶颈,如果能够在map端过滤掉不会参加join操作的数据,则可以大大节省网络IO。

实现方法很简单:选取一个小表,假设是File1,将其参与join的key抽取出来,保存到文件File3中,File3文件一般很小,可以放到内存中。在map阶段,使用DistributedCache将File3复制到各个TaskTracker上,然后将File2中不在File3中的key对应的记录过滤掉,剩下的reduce阶段的工作与reduce side join相同。

54.Java 非递归 二分查找

1. public class BinarySearchClass  

2. {  

3.   

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) {  

10.             midIndex = beginIndex + (endIndex - beginIndex) / 2;//防止溢出  

11.             if (value == array[midIndex]) {  

12.                 return midIndex;  

13.             } else if (value < array[midIndex]) {  

14.                 endIndex = midIndex - 1;  

15.             } else {  

16.                 beginIndex = midIndex + 1;  

17.             }  

18.         }  

19.         return -1;  

20.         //找到了,返回找到的数值的下标,没找到,返回-1         

21.     }  

22.   

23.   

24.     //start 提示:自动阅卷起始唯一标识,请勿删除或增加。  

25.     public static void main(String[] args)  

26.     {  

27.         System.out.println("Start...");  

28.         int[] myArray = new int[] { 1, 2, 3, 5, 6, 7, 8, 9 };  

29.         System.out.println("查找数字8的下标:");  

30.         System.out.println(binary_search(myArray, 8));          

31.     }  

 

55.Combiner partition的作用

combine分为map端和reduce端,作用是把同一个key的键值对合并在一起,可以自定义的。
combine函数把一个map函数产生的<key,value>对(多个key,value)合并成一个新的<key2,value2>.将新的<key2,value2>作为输入到reduce函数中
这个value2亦可称之为values,因为有多个。这个合并的目的是为了减少网络传输。

partition是分割map每个节点的结果,按照key分别映射给不同的reduce,也是可以自定义的。这里其实可以理解归类。
我们对于错综复杂的数据归类。比如在动物园里有牛羊鸡鸭鹅,他们都是混在一起的,但是到了晚上他们就各自牛回牛棚,羊回羊圈,鸡回鸡窝。partition的作用就是把这些数据归类。只不过在写程序的时候,mapreduce使用哈希HashPartitioner帮我们归类了。这个我们也可以自定义。
shuffle就是map和reduce之间的过程,包含了两端的combine和partition。
Map的结果,会通过partition分发到Reducer上,Reducer做完Reduce操作后,通过OutputFormat,进行输出
shuffle阶段的主要函数是fetchOutputs(),这个函数的功能就是将map阶段的输出,copy到reduce 节点本地

56.俩个文件用Linux命令完成下列工作

a) 俩个文件各自的ip数和综述

b) 出现在b文件没有出现在a文件的ip

c) 那个name的次数和他对一个的ip

 

57.hive内部表和外部表区别

1、在导入数据到外部表,数据并没有移动到自己的数据仓库目录下,也就是说外部表中的数据并不是由它自己来管理的!而表则不一样;
2、在删除表的时候,Hive将会把属于表的元数据和数据全部删掉;而删除外部表的时候,Hive仅仅删除外部表的元数据,数据是不会删除的!
那么,应该如何选择使用哪种表呢?在大多数情况没有太多的区别,因此选择只是个人喜好的问题。但是作为一个经验,如果所有处理都需要由Hive完成,那么你应该创建表,否则使用外部表!

58.Hbase rowkey怎么创建比较好 ,列祖怎么创建比较好

HBase是一个分布式的、面向列的数据库,它和一般关系型数据库的最大区别是:HBase很适合于存储非结构化的数据,还有就是它基于列的而不是基于行的模式。

既然HBase是采用KeyValue的列存储,那Rowkey就是KeyValue的Key了,表示唯一一行。Rowkey也是一段二进制码流,最大长度为64KB,内容可以由使用的用户自定义。数据加载时,一般也是根据Rowkey的二进制序由小到大进行的。

HBase是根据Rowkey来进行检索的,系统通过找到某个Rowkey (或者某个 Rowkey 范围)所在的Region,然后将查询数据的请求路由到该Region获取数据。HBase的检索支持3种方式:

(1) 通过单个Rowkey访问,即按照某个Rowkey键值进行get操作,这样获取唯一一条记录;

(2) 通过Rowkey的range进行scan,即通过设置startRowKey和endRowKey,在这个范围内进行扫描。这样可以按指定的条件获取一批记录;

(3) 全表扫描,即直接扫描整张表中所有行记录。

HBASE按单个Rowkey检索的效率是很高的,耗时在1毫秒以下,每秒钟可获取1000~2000条记录,不过非key列的查询很慢。

59.Hadoop框架中怎么优化

Storm用于处理高速、大型数据流的分布式实时计算系统。为Hadoop添加了可靠的实时数据处理功能
Spark采用了内存计算。从多迭代批处理出发,允许将数据载入内存作反复查询,此外还融合数据仓库,流处理和图形计算等多种计算范式。Spark构建在HDFS上,能与Hadoop很好的结合。它的RDD是一个很大的特点。
Hadoop当前大数据管理标准之一,运用在当前很多商业应用系统。可以轻松地集成结构化、半结构化甚至非结构化数据集。

60.Hbase内部是什么机制

在HBase 中无论是增加新行还是修改已有的行,其内部流程都是相同的。HBase 接到命令后存下变化信息,或者写入失败抛出异常。默认情况下,执行写入时会写到两个地方:预写式日志(write-ahead log,也称HLog)和MemStore(见图2-1)。HBase 的默认方式是把写入动作记录在这两个地方,以保证数据持久化。只有当这两个地方的变化信息都写入并确认后,才认为写动作完成。

MemStore 是内存里的写入缓冲区,HBase 中数据在永久写入硬盘之前在这里累积。当MemStore 填满后,其中的数据会刷写到硬盘,生成一个HFile。HFile 是HBase 使用的底层存储格式。HFile 对应于列族,一个列族可以有多个HFile,但一个HFile 不能存储多个列族的数据。在集群的每个节点上,每个列族有一个MemStore。

大型分布式系统中硬件故障很常见,HBase 也不例外。设想一下,如果MemStore还没有刷写,服务器就崩溃了,内存中没有写入硬盘的数据就会丢失。HBase 的应对办法是在写动作完成之前先写入WAL。HBase 集群中每台服务器维护一个WAL 来记录发生的变化。WAL 是底层文件系统上的一个文件。直到WAL 新记录成功写入后,写动作才被认为成功完成。这可以保证HBase 和支撑它的文件系统满足持久性。大多数情况下,HBase 使用Hadoop 分布式文件系统(HDFS)来作为底层文件系统。

如果HBase 服务器宕机,没有从MemStore 里刷写到HFile 的数据将可以通过回放WAL 来恢复。你不需要手工执行。Hbase 的内部机制中有恢复流程部分来处理。每台HBase 服务器有一个WAL,这台服务器上的所有表(和它们的列族)共享这个WAL。

你可能想到,写入时跳过WAL 应该会提升写性能。但我们不建议禁用WAL,除非你愿意在出问题时丢失数据。如果你想测试一下,如下代码可以禁用WAL:
注意:不写入WAL 会在RegionServer 故障时增加丢失数据的风险。关闭WAL,出现故障时HBase 可能无法恢复数据,没有刷写到硬盘的所有写入数据都会丢失。

61.我们在开发分布式计算job的是不是可以去掉reduce

由于MapReduce计算输入和输出都是基于HDFS文件,所以大多数公司的做法是把mysql或sqlserver的数据导入到HDFS,计算完后再导出到常规的数据库中,这是MapReduce不够灵活的地方之一。 MapReduce优势在于提供了比较简单的分布式计算编程模型,使开发此类程序变得非常简单,像之前的MPI编程就相当复杂。

狭隘的来讲,MapReduce是把计算任务给规范化了,它可以等同于小和尚中Worker的业务逻辑部分。 MapReduce把业务逻辑给拆分成2个大部分,Map和Reduce,可以先在Map部分把任务计算一半后,扔给Reduce部分继续后面的计算。 当然在Map部分把计算任务全做完也是可以的。

如果把小明产品经理的需求放到Hadoop来做,其处理流程大致如下:

1. 把100G数据导入到HDFS

2. 按照Mapreduce的接口编写处理逻辑,分Map、Reduce两部分。

3. 把程序包提交到Mapreduce平台上,存储在HDFS里。

4. 平台中有个叫Jobtracker进程的角色进行分发任务。 这个类似小和尚的Master负载调度管理。

5. 如果有5台机器进行计算的话,就会提前运行5个叫TaskTracker的slave进程。 这类似小和尚worker的分离版,平台把程序和业务逻辑进行分离了, 简单来说就是在机器上运行个独立进程,它能动态加载、执行jar或dll的业务逻辑代码。

6. Jobtracker把任务分发到TaskTracker后,TaskTracker把开始动态加载jar包,创建个独立进程执行Map部分,然后把结果写入到HDFS上。

7. 如果有Reduce部分,TaskTracker会创建个独立进程把Map输出的HDFS文件,通过RPC方式远程拉取到本地,拉取成功后,Reduce开始计算后续任务。

8. Reduce再把结果写入到HDFS中

9. 从HDFS中把结果导出。

62.Mapreduce调度模式

MapReduce是hadoop提供一个可进行分布式计算的框架或者平台,显然这个平台是多用户的,每个合法的用户可以向这个平台提交作业,那么这就带来一个问题,就是作业调度。

      任何调度策略都考虑自己平台调度需要权衡的几个维度,例如操作系统中的进程调度,他需要考虑的维度就是资源(CPU)的最大利用率(吞吐)和实时性,操作系统对实时性的要求很高,所以操作系统往往采用基于优先级的、可抢占式的调度策略,并且赋予IO密集型(相对于计算密集型)的进程较高的优先级,扯的有点远。

      回到hadoop平台,其实MapReduce的作业调度并没有很高的实时性的要求,本着最大吞吐的原则去设计的,所以MapReduce默认采用的调度策略是FIFO(基于优先级队列实现的FIFO,不是纯粹的FIFO,这样每次h),这种策略显然不是可抢占式的调度,所以带来的问题就是高优先级的任务会被先前已经在运行并且还要运行很久的低优先级的作业给堵塞住。

63.Hive底层和数据库交互原理

Hive和Hbase有各自不同的特征:hive是高延迟、结构化和面向分析的,hbase是低延迟、非结构化和面向编程的。Hive数据仓库在hadoop上是高延迟的。Hive集成Hbase就是为了使用hbase的一些特性。

        Hive集成HBase可以有效利用HBase数据库的存储特性,如行更新和列索引等。在集成的过程中注意维持HBase jar包的一致性。Hive集成HBase需要在Hive表和HBase表之间建立映射关系,也就是Hive表的列(columns)和列类型(column types)与HBase表的列族(column families)及列限定词(column qualifiers)建立关联。每一个在Hive表中的域都存在于HBase中,而在Hive表中不需要包含所有HBase中的列。HBase中的RowKey对应到Hive中为选择一个域使用:key来对应,列族(cf:)映射到Hive中的其它所有域,列为(cf:cq)。

64.Datanode在什么情况下不备份

在配置文件中datanode的数量设置为1时

65.Hdfs体系结构

我们首先介绍HDFS的体系结构,HDFS采用了主从(Master/Slave)结构模型,一个HDFS集群是由一个NameNode和若干个DataNode组成的。其中NameNode作为主服务器,管理文件系统的命名空间和客户端对文件的访问操作;集群中的DataNode管理存储的数据。HDFS允许用户以文件的形式存储数据。从内部来看,文件被分成若干个数据块,而且这若干个数据块存放在一组DataNode上。NameNode执行文件系统的命名空间操作,比如打开、关闭、重命名文件或目录等,它也负责数据块到具体DataNode的映射。DataNode负责处理文件系统客户端的文件读写请求,并在NameNode的统一调度下进行数据块的创建、删除和复制工作。图1-3给出了HDFS的体系结构。

NameNode和DataNode都被设计成可以在普通商用计算机上运行。这些计算机通常运行的是GNU/Linux操作系统。HDFS采用Java语言开发,因此任何支持Java的机器都可以部署NameNode和DataNode。一个典型的部署场景是集群中的一台机器运行一个NameNode实例,其他机器分别运行一个DataNode实例。当然,并不排除一台机器运行多个DataNode实例的情况。集群中单一的NameNode的设计则大大简化了系统的架构。NameNode是所有HDFS元数据的管理者,用户数据永远不会经过NameNode。

 

66.简要描述如何安装配置apache的一个开源hadoop,只描述即可,无需列出具体步骤,列出具体步骤更好。

答:1)使用root账户登录

2) 修改IP

3) 修改host主机名

4) 配置SSH免密码登录

5) 关闭防火墙

6)  安装JDK

7) 解压hadoop安装包

8) 配置hadoop的核心文件 hadoop-env.sh,core-site.xml , mapred-site.xml , hdfs-site.xml

9) 配置hadoop环境变量

10) 格式化 hadoop namenode-format

11) 启动节点 start-all.sh

 

67. 请列出正常的hadoop集群中hadoop都分别需要启动 哪些进程,他们的作用分别都是什么,请尽量列的详细一些。

       答:namenode:负责管理hdfs中文件块的元数据,响应客户端请求,管理datanode上文件block的均衡,维持副本数量

Secondname:主要负责做checkpoint操作;也可以做冷备,对一定范围内数据做快照性备份。

Datanode:存储数据块,负责客户端对数据块的io请求

Jobtracker :管理任务,并将任务分配给 tasktracker。

Tasktracker: 执行JobTracker分配的任务。

 

Resourcemanager

Nodemanager

Journalnode

Zookeeper

Zkfc

 

68请写出以下的shell命令 

(1)杀死一个job

(2)删除hdfs上的 /tmp/aaa目录

(3)加入一个新的存储节点和删除一个节点需要执行的命令

答:(1)hadoop job –list   得到job的id,然后执      行 hadoop job  -kill  jobId就可以杀死一个指定jobId的job工作了。

(2)hadoop fs  -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

 

69.请列出你所知道的hadoop调度器,并简要说明其工作方法

答:Fifo schedular :默认,先进先出的原则

Capacity schedular :计算能力调度器,选择占用最小、优先级高的先执行,依此类推。

Fair schedular:公平调度,所有的 job 具有相同的资源。

 

70.请列出你在工作中使用过的开发mapreduce的语言

答:java,hive,(python,c++)hadoop streaming

 

71.当前日志采样格式为

           a , b , c , d

           b , b , f , e

           a , a , c , f        

请你用最熟悉的语言编写mapreduce,计算第四列每个元素出现的个数

 

答:

public class WordCount1 {

         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 = new Configuration();

                  FileSystem fileSystem = FileSystem.get(conf);

                  if(fileSystem.exists(new Path(OUT_PATH))){}

                  fileSystem.delete(new Path(OUT_PATH),true);

                  Job job = new Job(conf,WordCount1.class.getSimpleName());

                  //1.0读取文件,解析成key,value对

                  FileInputFormat.setInputPaths(job,new Path(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 extends Mapper<LongWritable, Text, Text, LongWritable>{

                  @Override

                  protected void map(LongWritable k1, Text v1,

                                   org.apache.hadoop.mapreduce.Mapper.Context context)

                                   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.Context context)

                                   throws IOException, InterruptedException {

                          Long count = 0L;

                          for(LongWritable time : v2){

                                   count += time.get();

                          }

                          context.write(v2, new LongWritable(count));

                  }

         }

}

72.你认为用java streaming pipe方式开发map/reduce 各有哪些优点

就用过 java 和 hiveQL。

Java 写 mapreduce 可以实现复杂的逻辑,如果需求简单,则显得繁琐。

HiveQL 基本都是针对 hive 中的表数据进行编写,但对复杂的逻辑(杂)很难进行实现。写起来简单。

 

73.  hive有哪些方式保存元数据,各有哪些优点

              三种:自带内嵌数据库derby,挺小,不常用,只能用于单节点

mysql常用

上网上找了下专业名称:single user mode..multi user mode...remote user mode

 

74. 请简述hadoop怎样实现二级排序(就是对keyvalue双排序)

       第一种方法是,Reducer将给定key的所有值都缓存起来,然后对它们再做一个Reducer内排序。但是,由于Reducer需要保存给定key的所有值,可能会导致出现内存耗尽的错误。

第二种方法是,将值的一部分或整个值加入原始key,生成一个组合key。这两种方法各有优势,第一种方法编写简单,但并发度小,数据量大的情况下速度慢(有内存耗尽的危险),

第二种方法则是将排序的任务交给MapReduce框架shuffle,更符合Hadoop/Reduce的设计思想。这篇文章里选择的是第二种。我们将编写一个Partitioner,确保拥有相同key(原始key,不包括添加的部分)的所有数据被发往同一个Reducer,还将编写一个Comparator,以便数据到达Reducer后即按原始key分组。

 

75.简述hadoop实现jion的几种方法

Map side join----大小表join的场景,可以借助distributed cache

Reduce side join

 

76 请用java实现非递归二分查询

public class BinarySearchClass  

{  

  

    public static int binary_search(int[] array, int value)  

    {  

        int beginIndex = 0;// 低位下标  

        int endIndex = array.length - 1;// 高位下标  

        int midIndex = -1;  

        while (beginIndex <= endIndex) {  

            midIndex = beginIndex + (endIndex - beginIndex) / 2;//防止溢出  

            if (value == array[midIndex]) {  

                return midIndex;  

            } else if (value < array[midIndex]) {  

                endIndex = midIndex - 1;  

            } else {  

                beginIndex = midIndex + 1;  

            }  

        }  

        return -1;  

        //找到了,返回找到的数值的下标,没找到,返回-1         

    }  

  

  

    //start 提示:自动阅卷起始唯一标识,请勿删除或增加。  

    public static void main(String[] args)  

    {  

        System.out.println("Start...");  

        int[] myArray = new int[] { 1, 2, 3, 5, 6, 7, 8, 9 };  

        System.out.println("查找数字8的下标:");  

        System.out.println(binary_search(myArray, 8));          

    }  

    //end //提示:自动阅卷结束唯一标识,请勿删除或增加。  

}     

 

77. 请简述mapreduce中的combinepartition的作用

答:combiner是发生在map的最后一个阶段,其原理也是一个小型的reducer,主要作用是减少输出到reduce的数据量,缓解网络传输瓶颈,提高reducer的执行效率。

partition的主要作用将map阶段产生的所有kv对分配给不同的reducer task处理,可以将reduce阶段的处理负载进行分摊

 

78. hive内部表和外部表的区别

Hive 向内部表导入数据时,会将数据移动到数据仓库指向的路径;若是外部表,数据的具体存放目录由用户建表时指定

在删除表的时候,内部表的元数据和数据会被一起删除, 

而外部表只删除元数据,不删除数据。

这样外部表相对来说更加安全些,数据组织也更加灵活,方便共享源数据。 

 

79. HbaserowKey怎么创建比较好?列簇怎么创建比较好?

答:

rowKey最好要创建有规则的rowKey,即最好是有序的。

经常需要批量读取的数据应该让他们的rowkey连续;

将经常需要作为条件查询的关键词组织到rowkey中;

 

列族的创建:

按照业务特点,把数据归类,不同类别的放在不同列族

 

80. mapreduce怎么处理数据倾斜问题

本质:让各分区的数据分布均匀

可以根据业务特点,设置合适的partition策略

如果事先根本不知道数据的分布规律,利用随机抽样器抽样后生成partition策略再处理

 

81. hadoop框架怎么来优化

答:

可以从很多方面来进行:比如hdfs怎么优化,mapreduce程序怎么优化,yarn的job调度怎么优化,hbase优化,hive优化。。。。。。。

 

82. hbase内部机制是什么

答:

Hbase是一个能适应联机业务的数据库系统

物理存储:hbase的持久化数据是存放在hdfs上

存储管理:一个表是划分为很多region的,这些region分布式地存放在很多regionserver上

Region内部还可以划分为store,store内部有memstore和storefile

版本管理:hbase中的数据更新本质上是不断追加新的版本,通过compact操作来做版本间的文件合并

Region的split

集群管理:zookeeper  +  hmaster(职责)  + hregionserver(职责)

 

83. 我们在开发分布式计算job的时候,是否可以去掉reduce阶段

答:可以,例如我们的集群就是为了存储文件而设计的,不涉及到数据的计算,就可以将mapReduce都省掉。

比如,流量运营项目中的行为轨迹增强功能部分

怎么样才能实现去掉reduce阶段

84.  hadoop中常用的数据压缩算法

答:

Lzo

Gzip

Default

Snapyy

如果要对数据进行压缩,最好是将原始数据转为Sequence File  或者 Parquet File(spark)

85. mapreduce的调度模式(题意模糊,可以理解为yarn的调度模式,也可以理解为mr的内部工作流程)

答: appmaster作为调度主管,管理maptask和reducetask

Appmaster负责启动、监控maptask和reducetask

Maptask处理完成之后,appmaster会监控到,然后将其输出结果通知给reducetask,然后reducetask从map端拉取文件,然后处理;

当reduce阶段全部完成之后,appmaster还要向resourcemanager注销自己

86. hive底层与数据库交互原理

答:Hive的查询功能是由hdfs + mapreduce结合起来实现的

Hive与mysql的关系:只是借用mysql来存储hive中的表的元数据信息,称为metastore

 87. hbase过滤器实现原则

答:可以说一下过滤器的父类(比较过滤器,专用过滤器)

过滤器有什么用途:

增强hbase查询数据的功能

减少服务端返回给客户端的数据量

88. reduce之后数据的输出量有多大(结合具体场景,比如pi

Sca阶段的增强日志(1.5T---2T)

过滤性质的mr程序,输出比输入少

解析性质的mr程序,输出比输入多(找共同朋友)

89. 现场出问题测试mapreduce掌握情况和hiveql语言掌握情况

 

90.datanode在什么情况下不会备份数据

答:在客户端上传文件时指定文件副本数量为1

 

91.combine出现在哪个过程

答:shuffle过程中具体来说,是在maptask输出的数据从内存溢出到磁盘,可能会调多次Combiner使用时候要特别谨慎,不能影响最后的逻辑结果

 

92. hdfs的体系结构

答:集群架构: 

namenode   datanode  secondarynamenode

 (active namenode ,standby namenode) journalnode  zkfc

 

内部工作机制:

数据是分布式存储的

对外提供一个统一的目录结构

对外提供一个具体的响应者(namenode)

数据的block机制,副本机制

Namenode和datanode的工作职责和机制

读写数据流程

 

93. flush的过程

答:flush是在内存的基础上进行的,首先写入文件的时候,会先将文件写到内存中,当内存写满的时候,一次性的将文件全部都写到硬盘中去保存,并清空缓存中的文件,

 

94. 什么是队列

答:是一种调度策略,机制是先进先出

 

95.数据的三范式

答:
第一范式()无重复的列

第二范式(2NF)属性完全依赖于主键  [消除部分子函数依赖]
第三范式(3NF)属性不依赖于其它非主属性  [消除传递依赖]

 

96.三个datanode中当有一个datanode出现错误时会怎样?

答:

Namenode会通过心跳机制感知到datanode下线

会将这个datanode上的block块在集群中重新复制一份,恢复文件的副本数量

会引发运维团队快速响应,派出同事对下线datanode进行检测和修复,然后重新上线

 

97.描述一下hadoop中,有哪些地方使用到了缓存机制,作用分别是什么?

答:

Shuffle中

Hbase----客户端/regionserver

 

98.MapReduce优化经验

答:(1.)设置合理的map和reduce的个数。合理设置blocksize

)避免出现数据倾斜

combine函数

对数据进行压缩

小文件处理优化:事先合并成大文件,combineTextInputformat,在hdfs上用mapreduce将小文件合并成SequenceFile大文件(key:文件名,value:文件内容)

参数优化

 

99.请列举出曾经修改过的/etc/下面的文件,并说明修改要解决什么问题?

答:/etc/profile这个文件,主要是用来配置环境变量。让hadoop命令可以在任意目录下面执行。

/ect/sudoers

/etc/hosts

/etc/sysconfig/network

/etc/inittab

 

100.请描述一下开发过程中如何对上面的程序进行性能分析,对性能分析进行优化的过程。

 

101.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将结果数据输出

 

102.搭建hadoop集群 masterslaves都运行哪些服务

答:master主要是运行我们的主节点,slaves主要是运行我们的从节点。

 

103. pig  ,  latin  ,  hive语法有什么不同

 

104.hadoop运行原理

答:hadoop的主要核心是由两部分组成,HDFS和mapreduce,首先HDFS的原理就是分布式的文件存储系统,将一个大的文件,分割成多个小的文件,进行存储在多台服务器上。

Mapreduce的原理就是使用JobTracker和TaskTracker来进行作业的执行。Map就是将任务展开,reduce是汇总处理后的结果。

 

105.mapreduce的原理

答:mapreduce的原理就是将一个MapReduce框架由一个单独的master JobTracker和每个集群节点一个slave TaskTracker共同组成。master负责调度构成一个作业的所有任务,这些的slave上,master监控它们的执行,重新执行已经失败的任务。而slave仅负责执行由maste指派的任务。

 

106.HDFS存储机制

答:HDFS主要是一个分布式的文件存储系统,由namenode来接收用户的操作请求,然后根据文件大小,以及定义的block块的大小,将大的文件切分成多个block块来进行保存

 

107.举一个例子说明mapreduce是怎么运行的。

Wordcount

 

108.如何确认hadoop集群的健康状况

答:有完善的集群监控体系(ganglia,nagios)

Hdfs dfsadmin –report

Hdfs  haadmin  –getServiceState  nn1

 

109.mapreduce作业,不让reduce输出,用什么代替reduce的功能。

 

110.hive如何调优

答:hive最终都会转化为mapreduce的job来运行,要想hive调优,实际上就是mapreduce调优,可以有下面几个方面的调优。解决收据倾斜问题,减少job数量,设置合理的map和reduce个数,对小文件进行合并,优化时把我整体,单个task最优不如整体最优。按照一定规则分区。

 

hive如何控制权限

我们公司没做,不需要

 

111.HBase写数据的原理是什么?

答:

 

112.hive能像关系型数据库那样建多个库吗?

答:当然能了。

 

113.HBase宕机如何处理

答:宕机分为HMaster宕机和HRegisoner宕机,如果是HRegisoner宕机,HMaster会将其所管理的region重新分布到其他活动的RegionServer上,由于数据和日志都持久在HDFS中,该操作不会导致数据丢失。所以数据的一致性和安全性是有保障的。

如果是HMaster宕机,HMaster没有单点问题,HBase中可以启动多个HMaster,通过Zookeeper的Master Election机制保证总有一个Master运行。即ZooKeeper会保证总会有一个HMaster在对外提供服务。

 

114.假设公司要建一个数据中心,你会如何处理?

先进行需求调查分析

设计功能划分

架构设计

吞吐量的估算

采用的技术类型

软硬件选型

成本效益的分析

项目管理

扩展性

安全性,稳定性

 

115hivehbase的区别是?

 

共同点:
1.hbase与hive都是架构在hadoop之上的。都是用hadoop作为底层存储

区别:
2.Hive是建立在Hadoop之上为了减少MapReduce jobs编写工作的批处理系统,HBase是为了支持弥补Hadoop对实时操作的缺陷的项目 。
3.想象你在操作RMDB数据库,如果是全表扫描,就用Hive+Hadoop,如果是索引访问,就用HBase+Hadoop 。
4.Hive query就是MapReduce jobs可以从5分钟到数小时不止,HBase是非常高效的,肯定比Hive高效的多。
5.Hive本身不存储和计算数据,它完全依赖于HDFS和MapReduce,Hive中的表纯逻辑。
6.hive借用hadoop的MapReduce来完成一些hive中的命令的执行
7.hbase是物理表,不是逻辑表,提供一个超大的内存hash表,搜索引擎通过它来存储索引,方便查询操作。
8.hbase是列存储。
9.hdfs作为底层存储,hdfs是存放文件的系统,而Hbase负责组织文件。
10.hive需要用到hdfs存储文件,需要用到MapReduce计算框架。

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!