1.简单描述你对Hadoop集群SafeMode模式的理解?
集群处于安全模式,不能执行重要操作(写操作),集群属于只读状态;但严格来说,只 是保证HDFS元数据信息的访问,而不保证文件的访问;集群启动完成后,自动退出安 全模式,如果集群处于安全模式,想要完成写操作,需要离开安全模式
查看安全模式状态:bin/hdfs dfsadmin -safemode get
进入安全模式状态:bin/hdfs dfsadmin -safemode enter
离开安全模式状态:bin/hdfs dfsadmin -safemode leave
等待安全模式状态:bin/hdfs dfsadmin -safemode wait
对全新创建的HDFS集群,NameNode启动后不会进入安全模式,因为没有Block信息
2.hadoop集群中如何设置黑名单和白名单?作用分别是什么?
添加到白名单的主机节点,都允许访问NameNode,不在白名单的主机节点,会被退出
创建white.hosts文件:文件中添加的主机名为白名单
在hdfs-site.xml配置文件中增加white.hosts属性,并分发文件
在黑名单上面的主机都会被强制退出
创建black.hosts文件:文件中添加的主机名为黑名单
在hdfs-site.xml配置文件中增加black.hosts属性,并分发文件
3.是否可以在Windows上运行Hadoop?
不能
4.在MapReduce处理任务时,简单描述经过哪节基本流程?
第一个阶段的MapTask并发实例,完全并行运行,互不相干
第二个阶段的ReduceTask并发实例互不相干,但是他们的数据依赖于上一个阶段的所 有MapTask并发实例的输出
MapReduce编程模型只能包含一个Map阶段和一个Reduce阶段,如果用户的业务逻辑 非常复杂,那就只能多个MapReduce程序,串行运行
5.简答描述以下TextInputFormat怎么进行文件切分?
拿到文件之后,默认情况下切片的切块大小是块大小128M,如果文件大于128M,那 就看文件是否大于128 M的1.1倍(140.8M),如果不大于就不切分,如果大于,就按照 128M大小进行切分
6.假如Namenode中没有数据会怎么样?
将SecondaryNameNode中数据拷贝到NameNode存储数据的目录
使用-importCheckpoint选项启动NameNode守护进程,从而将SecondaryNameNode中 数据拷贝到NameNode目录中
7.如何实现服务器之间的免密登录(便捷版),SSH采用的是什么加密?
生成公钥和私钥:ssh-keygen -t rsa
将公钥拷贝到要免密登录的目标机器上
SSH采用的是非对称加密
8.简单描述MapReduce不合适对哪些场景的使用,其实问得就是他得缺点?
MapReduce的缺点:不擅长实时计算,不擅长流式计算,不擅长DAG(有向图)计算
9.MapReduce的基本数据类型包括哪些?
BooleanWritable、ByteWritable、IntWritable、FloatWritable、LongWritable、DoubleWritable、 TextWritable、MapWritable、ArrayWritable
10.yarn有哪几部分组成,作用分别是什么?调度器主要有哪三种,hadoop默认的是哪一种?
由ResourceManager、NodeManager、ApplicationMaster和Container等组件构成;
ResourceManager:处理客户端请求、监控NodeManager、启动或监控ApplicationMaster、 资源的分配与调度
NodeManager:管理单个节点上的资源、处理来自ResourceManager的命令、处理来自 ApplicationMaster的命令
ApplicationMaster:负责数据的切分、为应用程序申请资源并分配给内部的任务、任务的 监控与容错
Container:Container是YARN中的资源抽象,它封装了某个节点上的多维度资源,如内 存、CPU、磁盘、网络等。
FIFO、Capacity Scheduler(容量调度器)和Fair Scheduler(公平调度器)
Hadoop默认的资源调度器是Capacity Scheduler(容量调度器)
11.如果需要在namenode节点群起集群,你需要如何配置?
必须实现服务器之间的免密登录
修改hadoop2.7.2文件夹下的etc/hadoop/slaves文件
12.简单描述Shuffle过程环形缓冲区的作用?
Key、value从map()方法输出,被outputcollector收集通过getpartitioner()方法获取分区 号,在进入环形缓冲区。默认情况下,环形缓冲区大小值为100M。当map输入的数据 进入环形缓冲区的量达到80MB以上时,开始执行溢写过程,溢写过程中如果有其他数 据进入,由剩余的20%反向写入。溢写过程会根据key、value先进行分区,之后进行排 序,最终maptask溢写文件经过归并排序后落入本地磁盘,reduceTask将多个mapTask 下相同分区的数据copy到不同的reduceTask中进行归并排序后一次读取一组数据给 reduce()函数
13.Mapreduce执行过程中,在执行Reduce Task之前主要做哪些工作?
计算MapTask数量,文件的切分,向环形区写入数据,之后对文件进行分区快排,溢 出到文件(分区且区内有序),之后进行归并排序
14.hdfs-site.xml的3个主要属性?
指定HDFS副本数量:dfs.replication
指定SecondaryNameNode:dfs.namenode.secondary.http-address
指定DataNode:dfs.datanode.address
15.Hadoop完全分布式模式有什么注意点?
设计集群:将namenode、datanode、resourcemanager、nodemanager、historyserver 放在不同服务器上
设置namenode节点所在的服务器地址和临时文件的存储目录(core-site.xml)
配置文件的副本数(hdfs-site.xml)
配置mapred-site.xml和yarn-site.xml
集群中的其他节点和hadoop01上的配置保持一致
16.Hadoop集群可以运行的3个模式?
本地运行模式、伪分布式运行模式和完全分布式运行模式
17.用一句话总结Combiner的作用和意义?并说明使用它的前提?
Combiner的意义就是对每一个MapTask的输出进行局部汇总,以减小网络传输量
18.用shell脚本完成如下功能,求极值,根据输入数据,输出最大,最小值(达到手写的程度)
#!/bin/bash
min=$1
max=$1
for i in "$@"
do
if [ $min -gt $i ]
then
min=$i
fi
if [ $max -lt $i ]
then
max=$i
fi
done
echo "最大值为" $max
echo "最小值为" $min
19.编写一个最基本的wordcount单词统计的mapreduce(达到手写的程度,可以参照上课的代码样例)
public class WcMapper extends Mapper<LongWritable, Text, Text, IntWritable> {
private Text keyText = new Text();
private IntWritable one = new IntWritable(1);
@Override
protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
String line = value.toString();
String [] fileds = line.split(" ");
for (String filed : fileds) {
keyText.set(filed);
context.write(keyText, one);
}
}
}
public class WcReducer extends Reducer<Text, IntWritable, Text, IntWritable> {
private IntWritable total = new IntWritable();
@Override
protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
int sum = 0;
for (IntWritable value : values) {
sum += value.get();
}
total.set(sum);
context.write(key, total);
}
}
public class WcDriver {
public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
Job job = Job.getInstance(new Configuration());
job.setJarByClass(WcDriver.class);
job.setMapperClass(WcMapper.class);
job.setReducerClass(WcReducer.class);
job.setMapOutputKeyClass(Text.class);
job.setMapOutputValueClass(IntWritable.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
FileInputFormat.setInputPaths(job, new Path(args[0]));
FileOutputFormat.setOutputPath(job, new Path(args[1]));
boolean b = job.waitForCompletion(true);
System.exit(b ? 0 : 1);
}
}
20.列出常用的hdfs 命令(至少10个,并说明命令的作用)
本地文件àHDFS:
-put:将本地数据上传至hdfs
-copyFromLocal:将本地文件数据拷贝到hdfs
-moveFromLocal:将本地文件数据移动到hdfs,成功后本地数据会删除
-appendToFile:追加一个文件到已经存在的文件末尾
HDFS与HDFS之间:
-ls:查看hdfs文件目录
-mkdir:在HDFS上创建目录
-rm:删除文件或者文件夹
-rmr:递归删除
-cp:从一个目录拷贝文件至另一目录
-mv:在HDFS目录中移动文件
-chown:修改文件所属用户权限
-chmod:修改文件所属读写权限
-du -h:文件夹暂用的空间大小
-df -h:查看系统分区情况
-cat:查看文件
HFDSà本地:
-get:从hdfs下载文件至本地
-getmerge:合并hdfs目录下的文件至本地
-copyToLocal:从hdfs拷贝文件至本地
21.列出常用的10个linux命令,并说明它们的作用
查看当前网络IP:ifconfig
修改IP地址:vim /etc/ssconfig/network-scripts/ifcfg-eth0
启动防火墙:servicer network start
关闭iptables服务的自启动:chkconfig iptables off
创建空文件:touch 文件名
添加新用户:useradd 用户名
显示登陆用户的用户名:who am i
改变权限:chmod 421 文件或目录
查看系统中的所有进程:ps -aux
查询所安装的rpm软件包:rpm -qa | grep rpm软件包