Hadoop面试题
1、把数据仓库从传统关系数据库转到hadoop有什么优势?
- 原关系存储方式昂贵
- 空间有限
- hadoop支持结构化(例如 RDBMS),非结构化(例如 images,PDF,docs )和半结构化(例如 logs,XMLs)的数据可以以可扩展和容错的方式存储在较便宜的商品机器中。
- 可以通过批处理作业和近实时(即,NRT,200 毫秒至 2 秒)流(例如 Flume 和 Kafka)来摄取数据。
- 数据可以使用诸如 Spark 和 Impala 之类的工具以低延迟(即低于 100 毫秒)的能力查询。
- 可以存储以兆兆字节到千兆字节为单位的较大数据量。
2、大数据解决方案的关键步骤是什么?
提取数据,存储数据(即数据建模)和处理数据(即数据加工,数据转换和查询数据)。
3、下面哪个程序负责 HDFS 数据存储。
a)NameNode b)Jobtracker c)Datanode d)SecondaryNameNode e)Tasktracker
答案C datanode
4、 下列哪个程序通常与 NameNode 在一个节点启动?
a)SecondaryNameNode b)DataNode c)TaskTracker d)Jobtracker
答案D
分析:
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执行而言的
5、关于 SecondaryNameNode 哪项是正确的?
a)它是 NameNode 的热备 b)它对内存没有要求
c)它的目的是帮助 NameNode 合并编辑日志,减少 NameNode 启动时间
d)SecondaryNameNode 应与 NameNode 部署到一个节点
6、NameNode和DataNode作用是什么?
NameNode管理文件系统的元数据,DataNode存储实际的数据。客户端Client通过同NameNode和DataNodes的交互访问文件系统。客户端联系NameNode以获取文件的元数据,而真正的文件I/O操作是直接和DataNode进行交互的。
NameNode负责管理文件系统的命名空间、集群配置信息和存储块的复制等。NameNode会将文件系统的Meta-data存储在内存中,这些信息主要包括了文件信息、每一个文件对应的文件块的信息和每一个文件块在DataNode的信息等
DataNode是文件存储的基本单元,它将Block存储在本地文件系统中,保存了Block的Meta-data,同时周期性地将所有存在的Block信息发送给NameNode。
注意:client直接和datanode交互哦
http://www.aboutyun.com/thread-5845-1-1.html
7、讲一下Client读取DFS文件的顺序流
1) Client向NameNode发起文件读取的请求。
2) NameNode返回文件存储的DataNode的信息。
3) Client读取文件信息。
8、讲一下Client写入DFS文件的顺序流
1) Client向NameNode发起文件写入的请求。
2) NameNode根据文件大小和文件块配置情况,返回给Client它所管理部分DataNode的信息。
3) Client将文件划分为多个Block,根据DataNode的地址信息,按顺序写入到每一个DataNode块中。
9、hadoop主要的端口都有啥
- 默认端口 设置位置
- 9000 namenode
- 8020 namenode
- 8021 JT RPC
- 50030 mapred.job.tracker.http.address JobTracker administrative web GUI
- 50070 dfs.http.address NameNode administrative web GUI
- 50010 dfs.datanode.address DataNode control port
- 50020 dfs.datanode.ipc.address DataNode IPC port, used for block transfer
- 50060 mapred.task.tracker.http.address Per TaskTracker web interface
- 50075 dfs.datanode.http.address Per DataNode web interface
- 50090 dfs.secondary.http.address Per secondary NameNode web interface
10、DFS文件系统中如何查看文件的命令是?
hadoop fs -cat /user/output/outfile
11、把文件系统中的文件存入DFS文件系统的命令是?
hadoop fs -put /home/file.txt /user/input
12、把DFS文件系统的文件目录写到本地文件系统目录的命令是?
hadoop fs -get /user/localfile/ /home/hadoop_dir/
13、Hadoop 的核心配置文件是什么?
Hadoop 的核心配置通过两个 xml 文件来完成:1,hadoop-default.xml;2,hadoop-site.xml。
14、hadoop的三种调度器分别是什么?
1) 默认调度器FIFO
hadoop中默认的调度器,采用先进先出的原则
2) 计算能力调度器CapacityScheduler
选择占用资源小,优先级高的先执行
3) 公平调度器FairScheduler
同一队列中的作业公平共享队列中所有资源
15、简单介绍一下hive
hive存的是和hdfs的映射关系,hive是逻辑上的数据仓库,实际操作的都是hdfs上的文件,HQL就是用sql语法来写的mr程序。
可以看做是一次写入多次读取的操作,可以看成是ETL工具。
16、Sqoop是什么?
hadoop生态圈上的数据传输工具。
可以将关系型数据库的数据导入非结构化的hdfs、hive或者bbase中,也可以将hdfs中的数据导出到关系型数据库或者文本文件中。
使用的是mr程序来执行任务,使用jdbc和关系型数据库进行交互。
import原理:通过指定的分隔符进行数据切分,将分片传入各个map中,在map任务中在每行数据进行写入处理没有reduce。
export原理:根据要操作的表名生成一个java类,并读取其元数据信息和分隔符对非结构化的数据进行匹配,多个map作业同时执行写入关系型数据库
17、聊聊MapReduce
离线计算框架,过程分为split map shuffle reduce四个过程
架构节点有:Jobtracker TaskTracker
Split将文件分割,传输到mapper,mapper接收KV形式的数据,经过处理,再传到shuffle过程。
Shuffle先进行HashPartition或者自定义的partition,会有数据倾斜和reduce的负载均衡问题;再进行排序,默认按字典排序;为减少mapper输出数据,再根据key进行合并,相同key的数据value会被合并;最后分组形成(key,value{})形式的数据,输出到下一阶段,Reduce输入的数据就变成了,key+迭代器形式的数据,再进行处理。
18、聊聊Hadoop性能调优?
调优可以通过系统配置、程序编写和作业调度算法来进行。
hdfs的block.size可以调到128/256(网络很好的情况下,默认为64)
调优的大头:
mapred.map.tasks、mapred.reduce.tasks设置mr任务数(默认都是1)
mapred.tasktracker.map.tasks.maximum每台机器上的最大map任务数
mapred.tasktracker.reduce.tasks.maximum每台机器上的最大reduce任务数
mapred.reduce.slowstart.completed.maps配置reduce任务在map任务完成到百分之几的时候开始进入
这个几个参数要看实际节点的情况进行配置,reduce任务是在33%的时候完成copy,要在这之前完成map任务,(map可以提前完成)
mapred.compress.map.output,mapred.output.compress配置压缩项,消耗cpu提升网络和磁盘io
合理利用combiner
注意重用writable对象
19、hive中如何添加分区?
可以通过改变表格将分区添加到表格中。让我们假设我们有一个名为 员工 的表,其中包含Id,Name,Salary,Designation等字段。
以下查询用于将分区添加到employee表。
hive> ALTER TABLE employee
> ADD PARTITION (year=’2013’)
> location '/2012/part2012';
20、如何向hive中插入数据
在hive中,一般使用LOAD DATA插入数据,数据来源一般为两种,一种是从本地文件系统,第二种是从hadoop文件系统。
LOCAL是标识符指定本地路径,它是可选的;
OVERWRITE 是可选的,覆盖表中的数据;
PARTITION 也是可选的。
测试:
将下列数据插入到employee表中,数据格式为每个字段中间使用tab分割,每行使用回车,存储到一个txt文件中,
1201 Gopal 45000 Technical manager
1202 Manisha 45000 Proof reader
1203 lisong 50000 what is you 1204 xiaohau 88888 abcdefg 1205 xiaoming 99999 hehehehe
执行导入语句:
LOAD DATA LOCAL INPATH '/home/hadoop/HivePy/employee.txt' OVERWRITE INTO TABLE userdb.employee;