最近面试面试题,回答自己总结的,有不对的地方欢迎大家留言指正
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.sizehdfs-site.xml namenode的url信息,dfs.name.dir,dfs.data.dir,dfs.replication,dfs.namenode.shared.edits.dir, dfs.journalnode.edits.dir,dfs.hosts.excludeslaves datanode列表mapred-site.xml mapreduce.framework.name,mapreduce.map.output.compress.codecyarn-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] + ")"; }}