初识hadoop数据库
以前在学校的时候一直就想学习大数据方面的技术,包括hadoop和机器学习啊什么的,可是归根结底就是由于本身太懒了,致使没有坚持多长时间,加上一直为offer作准备,因此当时重心放在C++上面了(虽然C++也没怎么学),计划在大四下有空余时间再来慢慢学习。如今实习了,须要这方面的知识,这对于我来讲,除去校招时候投递C++职位有少量影响以外,无疑是有不少的好处。编程
因此,接下来的很长日子,我学习C++以外的不少时间都必需要花在大数据上面了。架构
那么首先呢,先来认识一下这处理大数据的hadoop工具了。框架
大数据(big data),是指没法在可承受的时间范围内用常规软件工具进行捕捉、管理和处理的数据集合。机器学习
大数据的4V特色:Volume(大量)、Velocity(高速)、Variety(多样)、Value(价值)。分布式
大数据的价值体如今如下几个方面:1)对大量消费者提供产品或服务的企业能够利用大数据进行精准营销;2) 作小而美模式的中长尾企业能够利用大数据作服务转型;3) 面临互联网压力之下必须转型的传统企业须要与时俱进充分利用大数据的价值。函数
Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户能够在不了解分布式底层细节的状况下,开发分布式程序,充分利用集群的威力进行高速运算和存储。工具
Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了处理和计算。oop
Hadoop 由许多元素构成。其最底部是 Hadoop Distributed File System(HDFS),它存储 Hadoop 集群中全部存储节点上的文件。HDFS的上一层是MapReduce 引擎,该引擎由 JobTrackers 和 TaskTrackers 组成。经过对Hadoop分布式计算平台最核心的分布式文件系统HDFS、MapReduce处理过程,以及数据仓库工具Hive和分布式数据库Hbase的介绍,基本涵盖了Hadoop分布式平台的全部技术核心。性能
HDFS
对外部客户机而言,HDFS就像一个传统的分级文件系统。它的主要目的是支持以流的形式访问写入的大型文件(PB级别)。能够建立、删除、移动或重命名文件,等等。存储在 HDFS 中的文件被分红块,块的大小(一般为 64MB)和复制的块数量在建立文件时由客户机决定。可是 HDFS 的架构是基于一组特定的节点构建的,这是由它自身的特色决定的。这些节点包括NameNode(仅一个)和DataNode。
NameNode在 HDFS 内部提供元数据服务,它负责管理文件系统名称空间和控制外部客户机的访问。NameNode 决定是否将文件映射到 DataNode 上的复制块上。NameNode 在一个称为 FsImage 的文件中存储全部关于文件系统名称空间的信息。这个文件和一个包含全部事务的记录文件(这里是 EditLog)将存储在 NameNode 的本地文件系统上。FsImage 和 EditLog 文件也须要复制副本,以防文件损坏或 NameNode 系统丢失。
DataNode为 HDFS 提供存储块, 一般以机架的形式组织,机架经过一个交换机将全部系统链接起来。DataNode 响应来自 HDFS 客户机的读写请求。它们还响应来自 NameNode 的建立、删除和复制块的命令。NameNode 依赖来自每一个 DataNode 的按期心跳(heartbeat)消息。每条消息都包含一个块报告,NameNode 能够根据这个报告验证块映射和其余文件系统元数据。若是 DataNode 不能发送心跳消息,NameNode 将采起修复措施,从新复制在该节点上丢失的块。
MapReduce
最简单的 MapReduce应用程序至少包含 3 个部分:一个 Map 函数、一个 Reduce 函数和一个 main 函数。main 函数将做业控制和文件输入/输出结合起来。在这点上,Hadoop 提供了大量的接口和抽象类,从而为 Hadoop应用程序开发人员提供许多工具,可用于调试和性能度量等。
MapReduce 自己就是用于并行处理大数据集的软件框架。MapReduce 的根源是函数型编程中的 map 和 reduce 函数。它由两个可能包含有许多实例(许多 Map 和 Reduce)的操做组成。Map 函数接受一组数据并将其转换为一个键/值对(key-value)列表,输入域中的每一个元素对应一个键/值对。Reduce 函数接受 Map 函数生成的列表,而后根据它们的键缩小键/值对列表(即键相同的键/值对合并在一块儿造成一个列表形式)。
一个表明客户机在单个主系统上启动的 MapReduce应用程序称为 JobTracker。相似于 NameNode,它是 Hadoop 集群中唯一负责控制 MapReduce应用程序的系统。在应用程序提交以后,将提供包含在 HDFS 中的输入和输出目录。JobTracker 使用文件块信息(物理量和位置)肯定如何建立其余 TaskTracker 从属任务。MapReduce应用程序被复制到每一个出现输入文件块的节点。将为特定节点上的每一个文件块建立一个唯一的从属任务。每一个 TaskTracker 将状态和完成信息报告给 JobTracker。
Hadoop是一个可以对大量数据进行分布式处理的软件框架。 Hadoop 以一种可靠、高效、可伸缩的方式进行数据处理。
Hadoop 是可靠的,由于它假设计算元素和存储会失败,所以它维护多个工做数据副本,确保可以针对失败的节点从新分布处理。
Hadoop 是高效的,由于它以并行的方式工做,经过并行处理加快处理速度。
Hadoop 仍是可伸缩的,可以处理 PB 级数据。
总结以下:
高可靠性。Hadoop按位存储和处理数据的能力值得人们信赖。
高扩展性。Hadoop是在可用的计算机集簇间分配数据并完成计算任务的,这些集簇能够方便地扩展到数以千计的节点中。
高效性。Hadoop可以在节点之间动态地移动数据,并保证各个节点的动态平衡,所以处理速度很是快。
高容错性。Hadoop可以自动保存数据的多个副本,而且可以自动将失败的任务从新分配。
低成本。与一体机、商用数据仓库以及QlikView、Yonghong Z-Suite等数据集市相比,hadoop是开源的,项目的软件成本所以会大大下降。