今天,上海尚学堂大数据培训班毕业的一位学生去参加易普软件公司面试,应聘的职位是大数据开发。面试官问了他10个问题,主要集中在Hbase、Spark、Hive和MapReduce上,基础概念、特色、应用场景等问得多。看来,仍是很是注重基础的牢固。整个大数据开发技术,这几个技术知识点占了很大一部分。那本篇文章就着重介绍一下这几个技术知识点。html
HBase是一种构建在HDFS之上的分布式、面向列的存储系统。在须要实时读写、随机访问超大规模数据集时,可使用HBase。面试
尽管已经有许多数据存储和访问的策略和实现方法,但事实上大多数解决方案,特别是一些关系类型的,在构建时并无考虑超大规模和分布式的特色。许多商家经过复制和分区的方法来扩充数据库使其突破单个节点的界限,但这些功能一般都是过后增长的,安装和维护都和复杂。同时,也会影响RDBMS的特定功能,例如联接、复杂的查询、触发器、视图和外键约束这些操做在大型的RDBMS上的代价至关高,甚至根本没法实现。算法
HBase从另外一个角度处理伸缩性问题。它经过线性方式从下到上增长节点来进行扩展。HBase不是关系型数据库,也不支持SQL,可是它有本身的特长,这是RDBMS不能处理的,HBase巧妙地将大而稀疏的表放在商用的服务器集群上。sql
HBase 是Google Bigtable 的开源实现,与Google Bigtable 利用GFS做为其文件存储系统相似, HBase 利用Hadoop HDFS 做为其文件存储系统;Google 运行MapReduce 来处理Bigtable中的海量数据, HBase 一样利用Hadoop MapReduce来处理HBase中的海量数据;Google Bigtable 利用Chubby做为协同服务, HBase 利用Zookeeper做为对应。数据库
◆大:一个表能够有上亿行,上百万列。
◆面向列:面向列表(簇)的存储和权限控制,列(簇)独立检索。
◆稀疏:对于为空(NULL)的列,并不占用存储空间,所以,表能够设计的很是稀疏。
◆无模式:每一行都有一个能够排序的主键和任意多的列,列能够根据须要动态增长,同一张表中不一样的行能够有大相径庭的列。
◆数据多版本:每一个单元中的数据能够有多个版本,默认状况下,版本号自动分配,版本号就是单元格插入时的时间戳。
◆数据类型单一:HBase中的数据都是字符串,没有类型。编程
更多信息阅读:《Hbase简介》、《Hbase体系架构和集群安装》、《HBase数据模型》服务器
Spark是Apache的一个顶级项目,是一个快速、通用的大规模数据处理引擎。Apache Spark是一种快速、通用的集群计算系统。它提供了Java、Scala、Python和R的高级API,以及一个支持通用执行图的优化引擎。它还支持丰富的高级工具集,包括用于SQL和结构化数据处理的Spark SQL、用于机器学习的MLlib、图形处理的GraphX和Spark流。网络
Spark基于map reduce算法实现的分布式计算,拥有Hadoop MapReduce所具备的优势;但不一样于MapReduce的是Job中间输出和结果能够保存在内存中,从而再也不须要读写HDFS,所以Spark能更好地适用于数据挖掘与机器学习等须要迭代的Mapreduce的算法。架构
Spark的中间数据放到内存中,对于迭代运算效率更高。Spark更适合于迭代运算比较多的ML和DM运算。由于在Spark里面,有RDD的抽象概念。Spark比Hadoop更通用。app
Spark能够用来训练推荐引擎(Recommendation Engine)、分类模型(Classification Model)、回归模型(Regression Model)、聚类模型(Clustering Model)。
更多关于Spark的文章阅读:《【上海大数据培训】Spark集群运行、读取、写入Hbase数据》、《【上海大数据培训】Spark集群的运行过程》
◆由Facebook开源,最初用于解决海量结构化的日志数据统计问题;
◆构建在Hadoop之上的数据仓库;
◆Hive定义了一种类SQL查询语言:HQL(相似SQL但不彻底相同);
◆一般用于进行离线数据处理(采用MapReduce);
◆底层支持多种不一样的执行引擎(Hive on MapReduce、Hive on Tez、Hive on Spark);
◆支持多种不一样的压缩格式、存储格式以及自定义函数(压缩:GZIP、LZO、Snappy、BZIP2.. ;
◆存储:TextFile、SequenceFile、RCFile、ORC、Parquet ; UDF:自定义函数)。
◆简单、容易上手(提供了相似SQL查询语言HQL);
◆为超大数据集设计的计算/存储扩展能力(MR计算,HDFS存储);
◆统一的元数据管理(可与Presto/Impala/SparkSQL等共享数据)。
上图中,能够经过CLI(命令行接口),JDBC/ODBC,Web GUI 访问hive。于此同时hive的元数据(hive中表结构的定义如表有多少个字段,每一个字段的类型是什么)都存储在关系型数据库中。三种连接hive的方式最后统一通多一个Diveer 的程序将sql 转化成mapreduce的job任务去执行。
更多Hive信息阅读:《Hive是什么?Hive特色、工做原理,Hive架构,Hive与HBase联系和区别》、《Hive经常使用字符串函数汇总》、《Hive数据仓库之快速入门》
MapReduce 是一个分布式运算程序的编程框架,是用户开发“基于 hadoop 的数据分析 应用”的核心框架。MapReduce采用"分而治之"的思想,把对大规模数据集的操做,分发给一个主节点管理下的各个分节点共同完成,而后经过整合各个节点的中间结果,获得最终结果。简单地说,MapReduce就是"任务的分解与结果的汇总"。
在分布式计算中,MapReduce框架负责处理了并行编程中分布式存储、工做调度、负载均衡、容错均衡、容错处理以及网络通讯等复杂问题,把处理过程高度抽象为两个函数:map和reduce,map负责把任务分解成多个任务,reduce负责把分解后多任务处理的结果汇总起来。
◆ 海量数据在单机上处理由于硬件资源限制,没法胜任。
◆ 而一旦将单机版程序扩展到集群来分布式运行,将极大增长程序的复杂度和开发难度。
◆引入 MapReduce 框架后,开发人员能够将绝大部分工做集中在业务逻辑的开发上,而将 分布式计算中的复杂性交由框架来处理。
MapReduce核心就是map+shuffle+reducer,首先经过读取文件,进行分片,经过map获取文件的key-value映射关系,用做reducer的输入,在做为reducer输入以前,要先对map的key进行一个shuffle,也就是排个序,而后将排完序的key-value做为reducer的输入进行reduce操做,固然一个MapReduce任务能够不要有reduce,只用一个map。
更多MapReduce的文章阅读:《MapReduce设计及工做原理分析》
以上就是总结的Hbase、Spark、Hive、MapReduce的概念理解和特色,以及一些应用场景和核心机制。欢迎你们评论留言,须要相关学习资料也能够留言联系。