简单描述你对Hadoop集群SafeMode模式的理解?
集群处于安全模式,不能执行重要操作(写操作),集群属于只读状态。但是严格来说,只是保证HDFS元数据信息的访问,而不保证文件的访问。集群启动完成后,自动退出安全模式, 如果集群处于安全模式,想要完成写操作,需要离开安全模式。 (1)bin/hdfs dfsadmin -safemode get (功能描述:查看安全模式状态) (2)bin/hdfs dfsadmin -safemode enter (功能描述:进入安全模式状态) (3)bin/hdfs dfsadmin -safemode leave (功能描述:离开安全模式状态) (4)bin/hdfs dfsadmin -safemode wait (功能描述:等待安全模式状态)。 对于全新创建的HDFS集群,NameNode启动后不会进入安全模式,因为没有Block信息。
hadoop集群中如何设置黑名单和白名单?作用分别是什么?
添加到白名单的主机节点,都允许访问NameNode,不在白名单的主机节点,会被退出
创建white.hosts文件:文件中添加的主机名为白名单
在hdfs-site.xml配置文件中增加white.hosts属性,并分发文件
在黑名单上面的主机都会被强制退出
创建black.hosts文件:文件中添加的主机名为黑名单
在hdfs-site.xml配置文件中增加black.hosts属性,并分发文件
是否可以在Windows上运行Hadoop?不能
在MapReduce处理任务时,简单描述经过哪节基本流程?
第一个阶段的MapTask并发实例,完全并行运行,互不相干
第二个阶段的ReduceTask并发实例互不相干,但是他们的数据依赖于上一个阶段的所有MapTask并发实例的输出
MapReduce编程模型只能包含一个Map阶段和一个Reduce阶段,如果用户的业务逻辑非常复杂,那就只能多个MapReduce程序,串行运行
简答描述以下TextInputFormat怎么进行文件切分?
拿到文件之后,默认情况下切片的切块大小是块大小128M,如果文件大于128M,那 就看文件是否大于128 M的1.1倍(140.8M),如果不大于就不切分,如果大于,就按照 128M大小进行切分
假如Namenode中没有数据会怎么样?
将SecondaryNameNode中数据拷贝到NameNode存储数据的目录
使用-importCheckpoint选项启动NameNode守护进程,从而将SecondaryNameNode中 数据拷贝到NameNode目录中
如何实现服务器之间的免密登录(便捷版),SSH采用的是什么加密?
SSH 为 [url=https://baike.baidu.com/item/Secure%20Shell]Secure Shell[/url] 的缩写,是一个网络安全协议,ssh-keygen -t rsa 可以生成公钥和私钥,要实现免密登录我们需要将本机的公钥通过 ssh-copy-id 主机名 将公钥给其他服务器
简单描述MapReduce不合适对哪些场景的使用,其实问得就是他得缺点:
MapReduce的缺点:不擅长实时计算,不擅长流式计算,不擅长DAG(有向图)计算
MapReduce的基本数据类型包括哪些?
BooleanWritable、ByteWritable、IntWritable、FloatWritable、LongWritable、DoubleWritable、 TextWritable、MapWritable、ArrayWritable
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(容量调度器)
如果需要在namenode节点群起集群,你需要如何配置?
必须实现服务器之间的免密登录
修改hadoop2.7.2文件夹下的etc/hadoop/slaves文件
简单描述Shuffle过程环形缓冲区的作用?
key,value从map()方法输出,被outputcollector收集通过getpartitioner()方法获取分区号,在进入环形缓冲区。默认情况下,环形缓冲区大小值为100MB。当map输入的数据进入环形缓冲区的量达到80MB以上时,那么开始执行溢写过程,溢写过程中如果有其他数据进入,那么由剩余的百分之20反向写入。溢写过程会根据key,value先进行分区,后进行排序,最终maptask溢写文件经过归并排序后落入本地磁盘,reduceTask将多个mapTask下相同分区的数据copy到不同的reduceTask中进行归并排序后一次读取一组数据给reduce()函数。
Mapreduce执行过程中,在执行Reduce Task之前主要做哪些工作?
计算MapTask数量,文件的切分,向环形区写入数据,之后对文件进行分区快排,溢 出到文件(分区且区内有序),之后进行归并排序
hdfs-site.xml的3个主要属性?
指定HDFS副本数量:dfs.replication
指定SecondaryNameNode:dfs.namenode.secondary.http-address
指定DataNode:dfs.datanode.address
Hadoop完全分布式模式有什么注意点?
设计集群:将namenode、datanode、resourcemanager、nodemanager、historyserver 放在不同服务器上
设置namenode节点所在的服务器地址和临时文件的存储目录(core-site.xml)
配置文件的副本数(hdfs-site.xml)
配置mapred-site.xml和yarn-site.xml
集群中的其他节点和hadoop01上的配置保持一致
Hadoop集群可以运行的3个模式?
本地运行模式、伪分布式运行模式和完全分布式运行模式
用一句话总结Combiner的作用和意义?并说明使用它的前提?
Combiner的意义就是对每一个MapTask的输出进行局部汇总,以减小网络传输量。
用shell脚本完成如下功能,求极值,根据输入数据,输出最大,最小值(达到手写的程度
#!/bin/bash
min=$1
max=$
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
编写一个最基本的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);
}
}
列出常用的hdfs 命令(至少10个,并说明命令的作用)
Hadoop fs | hdfs dfs 命令分类 本地文件 -> HDFS -put 将本地数据上传至hdfs -copyFromLocal 将本地文件数据拷贝到hdfs -moveFromLocal 将本地文件数据移动到hdfs,成功后本地数据会删除 -appendToFile 追加一个本地文件到hdfs已经存在的文件末尾 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拷贝文件至本地
列出常用的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软件包