这篇文章将为大家详细讲解有关 Hadoop 常见面试题有哪些,丸趣 TV 小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
1 hadoop 中配置文件有哪些,各自作用?
hadoop-env.sh
JAVA_HOME,HADOOP_CONF_DIR,HADOOP_LOG_DIR,HADOOP_PID_DIR,HADOOP_CLASSPATH,hadoop 相关进程 JVM 参数
其他
core-site.xml
fs.defaultFS,hadoop.tmp.dir,ha.zookeeper.quorum,io.compression.codecs,io.file.buffer.size
hdfs-site.xml
namenode 的 url 信息,dfs.name.dir,dfs.data.dir,dfs.replication,dfs.namenode.shared.edits.dir, dfs.journalnode.edits.dir,dfs.hosts.exclude
slaves
datanode 列表
mapred-site.xml
mapreduce.framework.name,mapreduce.map.output.compress.codec
yarn-site.xml
resourcemanager 信息
excludes
排除节点列表
2 hdfs 存储机制是什么
1. HDFS 开创性地设计出一套文件存储方式,即对文件分割后分别存放;2. HDFS 将要存储的大文件进行分割,分割后存放在既定的存储块(Block)中,并通过预先设定的优化处理,模式对存储的数据进行预处理,从而解决了大文件储存与计算的需求;3. 一个 HDFS 集群包括两大部分,即 NameNode 与 DataNode。一般来说,一个集群中会有一个 NameNode 和多个 DataNode 共同工作;4. NameNode 是集群的主服务器,主要是用于对 HDFS 中所有的文件及内容数据进行维护,并不断读取记录集群中 DataNode 主机情况与工作状态,并通过读取与写入镜像日志文件的方式进行存储;5. DataNode 在 HDFS 集群中担任任务具体执行角色,是集群的工作节点。文件被分成若干个相同大小的数据块,分别存储在若干个 DataNode 上,DataNode 会定期向集群内 NameNode 发送自己的运行状态与存储内容,并根据 NameNode 发送的指令进行工作;6. NameNode 负责接受客户端发送过来的信息,然后将文件存储位置信息发送给提交请求的客户端,由客户端直接与 DataNode 进行联系,从而进行部分文件的运算与操作。7. Block 是 HDFS 的基本存储单元,默认大小是 64M(hadoop2 中时 128M);8. HDFS 还可以对已经存储的 Block 进行多副本备份,将每个 Block 至少复制到 3 个相互独立的硬件上,这样可以快速恢复损坏的数据;9. 用户可以使用既定的 API 接口对 HDFS 中的文件进行操作;10. 当客户端的读取操作发生错误的时候,客户端会向 NameNode 报告错误,并请求 NameNode 排除错误的 DataNode 后后重新根据距离排序,从而获得一个新的 DataNode 的读取路径。如果所有的 DataNode 都报告读取失败,那么整个任务就读取失败;11. 对于写出操作过程中出现的问题,FSDataOutputStream 并不会立即关闭。客户端向 NameNode 报告错误信息,并直接向提供备份的 DataNode 中写入数据。备份 DataNode 被升级为首选 DataNode,并在其余 2 个 DataNode 中备份复制数据。NameNode 对错误的 DataNode 进行标记以便后续对其进行处理。
3 怎么查看,删除,移动,拷贝 hadoop 文件
hdfs dfs -text ...
hdfs dfs -rm ...
hdfs dfs -mv ...
hdfs dfs -cp ...
4 hadoop 中 combiner 作用
1、combiner 类似本地的 reduce 功能. 实现本地 key 的聚合,减清到 reduce 的 io 压力
5 mr 工作原理,距离说明 mr 是怎样运行的
不确定是不是回答这个图
6 hive 与 oracle 区别,目前 hive 不支持哪些函数(列出 5 个以上)
hive 处理数据量较大,高延迟,基于 hdfs,hql 转换成 mr 执行,不支持数据修改
oracle 处理数据量相对较小,有所有,低延迟,支持数据修改
7 hbase 常用基本命令,创建表,添加记录,查看记录,删除记录
create 表名称 , 列族名称 1 , 列名族称 2 , 列名族称 N
put 表名 , 行名 , 列名 , 值
get 表名 , 行名
delete 表名 , 行名称 , 列名称
8 见下图
// 建表
create table net_info (device_number int,lac int,ci int,imei bigint,start_time timestamp,end_time timestamp,duration int,send_bytes int,recv_bytes int,total_bytes int)
row format delimited
fields terminated by |
// 加载数据
load data local inpath /home/hadoop/text.txt into table net_info;
select * from net_info;
select sum(total_bytes) from net_info where start_time = 2014-12-31 and end_time 2015-1-1
// 顺便复习下修改列
alter table net_info change start_time start_time timestamp;
9 编写 hive 自定义函数实现 oracle 中 addmonths 函数功能,然后封装到 hive 函数库中。addmonths(data a,int b)函数功能简单说明:求传入日期 a 经过 b 月后的日期是多少?
Hive 可以允许用户编写自己定义的函数 UDF,来在查询中使用。Hive 中有 3 种 UDF: 1)UDF:操作单个数据行,产生单个数据行。 2)UDAF:操作多个数据行,产生一个数据行。 3)UDTF:操作一个数据行,产生多个数据行一个表作为输出。 用户构建的 UDF 使用过程如下: 第一步:继承 UDF 或者 UDAF 或者 UDTF,实现特定的方法。 第二步:将写好的类打包为 jar。如 hivefirst.jar。 第三步:进入到 Hive 外壳环境中,利用 add jar /home/hadoop/hivefirst.jar 注册该 jar 文件。该例实现网上找了个作参考:import org.apache.hadoop.hive.ql.exec.UDFArgumentException;
import org.apache.hadoop.hive.ql.exec.UDFArgumentLengthException;
import org.apache.hadoop.hive.ql.metadata.HiveException;
import org.apache.hadoop.hive.ql.udf.generic.GenericUDF;
import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspectorUtils;
import org.apache.hadoop.hive.serde2.objectinspector.primitive.IntObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorFactory;
import org.apache.hadoop.hive.serde2.objectinspector.primitive.StringObjectInspector;
import org.joda.time.LocalDate;
import org.joda.time.format.DateTimeFormat;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
public class AddMonth extends GenericUDF {
@Override
public ObjectInspector initialize(ObjectInspector[] arguments) throws UDFArgumentException { if (arguments.length != 2) { throw new UDFArgumentLengthException( The function add_month(local_date, months_to_add) requires 2 arguments.
}
ObjectInspector localDateVal = arguments[0];
ObjectInspector monthsToAddVal = arguments[1];
if (!(localDateVal instanceof StringObjectInspector)) { throw new UDFArgumentException( First argument must be of type String (local_date as String)
}
if (!(monthsToAddVal instanceof IntObjectInspector)) { throw new UDFArgumentException( Second argument must be of type int (Month to add)
}
return PrimitiveObjectInspectorFactory.writableStringObjectInspector;
}
@Override
public Object evaluate(DeferredObject[] arguments) throws HiveException { String localDateVal = (String) ObjectInspectorUtils.copyToStandardJavaObject(arguments[0].get(),
PrimitiveObjectInspectorFactory.javaStringObjectInspector);
IntWritable monthsToAddVal = (IntWritable) ObjectInspectorUtils.copyToStandardJavaObject(arguments[1].get(),
PrimitiveObjectInspectorFactory.javaIntObjectInspector);
LocalDate localDate = null;
try { localDate = LocalDate.parse(localDateVal, DateTimeFormat.forPattern( yyyy-MM-dd));
} catch (Exception ex) {
return null;
}
return new Text(localDate.plusMonths(monthsToAddVal.get().toString());
}
@Override
public String getDisplayString(String[] arguments) { assert (arguments.length == 2);
return add_month( + arguments[0] + , + arguments[1] + )
}
}
10 利用 spark 编写搜索日志分析:用户在 0 点 -12 点的搜索量。搜索路径存放路径为 /input/data.txt。文件用竖线分割,第一列为时间字段。日志内容如下:
关于“Hadoop 常见面试题有哪些”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。