Hbase的特性以及你怎么设计rowkey和columnFamily ,怎么去建一个table?
因为hbase是列式数据库,列非表schema的一部分,所以在设计初期只需要考虑rowkey 和 columnFamily即可,rowkey有位置相关性,所以如果数据是练习查询的,最好对同类数据加一个前缀,而每个columnFamily实际上在底层是一个文件,那么文件越小,查询越快,所以经常一起查询的列设计到一个列簇,但是列簇不宜过多
Redis,传统数据库,hbase,hive 每个之间的区别?
Redis是缓存,围绕着内存和缓存说
Hbase是列式数据库,存在hdfs上,围绕着数据量来说
Hive是数据仓库,是用来分析数据的,不是增删改查数据的
Mapreduce 一些流程,经过哪些步骤?
Map—combiner—partition—sort—copy—sort—grouping—reduce
多线程锁?
Lock锁:
死锁:
flume不采集Nginx日志,通过Logger4j采集日志,优缺点是什么?
优点:Nginx的日志格式是固定的,但是缺少sessionid,通过logger4j采集的日志是带有sessionid的,而session可以通过redis共享,保证了集群日志中的同一session落到不同的tomcat时,sessionId还是一样的,而且logger4j的方式比较稳定,不会宕机。
缺点:不够灵活,logger4j的方式和项目结合过于紧密,而flume的方式比较灵活,拔插式比较好,不会影响项目性能
flume和kafka采集日志区别,采集日志时中间停了,怎么记录之前的日志?
Flume采集日志是通过流的方式直接将日志收集到存储层,而kafka试讲日志缓存在kafka集群,待后期可以采集到存储层。
Flume采集中间停了,可以采用文件的方式记录之前的日志,而kafka是采用offset的方式记录之前的日志
多线程实现方式Thread和Runnable的区别?
在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口;Thread类是在java.lang包中定义的。一个类只要继承
了Thread类同时覆写了本类中的run()方法就可以实现多线程操作了,但是一个类只能继承一个父类,这是此方法的局限
在程序开发中只要是多线程肯定永远以实现Runnable接口为主,因为实现Runnable接口相比继承Thread类有如下好处:
避免点继承的局限,一个类可以继承多个接口。
适合于资源的共享
描述一下hadoop中,有哪些地方使用了缓存机制,作用分别是什么?
在mapreduce提交job的获取id之后,会将所有文件存储到分布式缓存上,这样文件可以被所有的mapreduce共享
实时数据统计会用到哪些技术,它们各自的应用场景及区别是什么?
flume:日志收集系统,主要用于系统日志的收集
kafka:消息队列,进行消息的缓存和系统的解耦
storm:实时计算框架,进行流式的计算。