您的位置:首页 > 运维架构

Hadoop快速实战(一)——基本概念

2017-02-08 10:18 246 查看

一、什么是Hadoop

The Apache hadoop project develops open-source software for reliable,scalable,distributed computing
所以hadoop首先是个项目,这个项目专门开发软件,开发可靠地,可扩展的,用于分布式计算的软件。


解决问题:

海量数据的存储(HDFS)

海量数据的分析(MapReduce)

资源管理调度(YARN)

作者:Doug Cutting

Google的三篇论文
—GFS
—MapReduce
—BigTableDoug
受谷歌的启发,Cutting通过java对其分别实现,就是早期版本的hadoop。


如今的hadoop生态非常的丰富



“去IOE化”

什么是“IOE”。

IBM:服务器供应商

Oracle:数据库生产商

EMC:存储阵列服务

这三家公司代表了所在行业的最高水平,随着互联网的快速发展,用户量的不断扩增,很容易就会达到软硬件的瓶颈,而这三家公司的服务收费非常的贵。

于是有了这样的一种思考:如果我要盖一栋大楼,为什么要请世界上最好的大力士,而不是请100个农民工呢?

于是hadoop可以将多台廉价机器协作起来堪比一台小型机,而廉价机器实际上要比小型机真的便宜太多了。



大数据&云计算

云计算被炒的很热,目前落地的云计算技术就是虚拟化,说白了就BAT现在对外租售服务器的业务。

而他和大数据恰恰相反,大数据是聚合服务器处理海量问题,而虚拟化则是把服务器分割后独立使用。



二、Hadoop组件和文件系统概念

版本

Apache

官方版本(2.4.1) 2.6

Cloudera

使用下载最多的版本,稳定,有商业支持,在Apache的基础上打上了一些patch。推荐使用。

HDP(Hortonworks Data Platform)

Hortonworks公司发行版本。

hadoop核心(狭义)

HDFS:Hadoop Distributed File System 分布式文件系统

YARN:Yet Another Resource Negotiator 资源管理调度系统

MapReduce:分布式运算框架

注意:YARN中的资源,指的是硬件资源,例如:cpu、内存、磁盘IO等,YARN就是调用这些资源为上层的运算服务。简单说:我们根据MapReduce提供的API写一些程序,这些程序是分布式计算的,那么它会分配到不同的机器上跑,那么怎么分配,就是YARN说了算。跑起来的程序是分析数据用的,数据来自于HDFS

HDFS

什么是文件系统?

将底层的磁盘扇区封装起来,对外提供统一的文件存储管理接口。windows中的NTFS是本地文件管理系统,简单说就是,我的电脑只能管理我本地磁盘的文件内容,不能管理到其他磁盘的文件。而HDFS是分布式文件系统,也就是说对外提供的接口感觉应该是一个磁盘,实际上磁盘上的内容是分布式存储在不同服务器上的。

为什么要用HDFS

如果经常使用局域网络的人知道,其实windows系统本身就有类似于分布式文件系统的管理方式,就是共享。共享的方式就非常类似于我们所阐述的分布式文件系统,我们可以用多台机器作为不同的文件存储目录。



但是这种方式问题重重

1. 某一特定文件的存储过于集中,导致并发性能差。比如我在software中放了一部电影,那么同时有10个人都来下载这部电影,那么其他三台服务就闲置了,而software所在服务器则压力很大。

2. 风险大,比如software所在服务器坏了,那么software服务就整个挂掉。

3. 不同服务器之间文件如果要交换,非常麻烦。

所以我们需要一套全新的分布式文件系统

HDFS原理



namenode节点:

集群中的磁盘分为两种角色,其中一个就是namenode,他是用来存储不同的存储内容的路径。因为每部分内容不止存储一次,所以需要单独记录

datanode节点:

用来存储文件的block。一个大文件,HDFS会对其拆分成多个block,然后分别多次存储。

实现机制:

1、文件是被切块存储在多台服务器上,存储在各台服务器的本地文件系统中

2、客户端不需要关心分布式存储细节,hdfs提供了一个抽象统一的目录树

3、每一个文件块保存多个副本

4、hdfs中的文件和具体实际存储位置之间的对应关系交由专门的服务器管理——namenode

优点:

1、容量可以线性扩展

2、副本机制:存储可靠性高,吞吐量增大

3、通过namenode节点,客户端访问文件就只需要指定hdfs路径,而不需要知道文件真实存储是怎样的

MapReduce

移动数据:指把数据移动到某个指定的服务器上进行运算
移动运算:指把运算方式移动到某个有数据的服务器上进行运算


基本思想:

1、将一个业务处理需求分成两个阶段来进行,map阶段,reduce阶段

2、将分布式计算中面临的公共的问题封装成框架来实现(jar包的分发,任务的启动,任务的容错,调度,中间结果的分组传递。。。)

3、应用开发人员只需要关心业务逻辑

mapreduce只是分布式运算框架的一种实现,类似的框架还有很多,比如storm(流式计算)、spark(内存迭代计算)。前者通常用于离线运算,后者常用于实时运算

离线运算:数据已经确定了,剩下的就是运算了
实时运算:数据在不断变化不断增加,运算也要与之相对应。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息