什么是分布式文件系统?为什么需要分布式文件系统?

如果文件系统可以管理用网络连接的很多个存储单元,叫分布式文件系统. 分布式文件系统提供了数据可扩展性,容错性,高并发. 这些是传统文件系统不具有的.

Hadoop getting started

为什么用Hadoop? Hadoop 的 4 个What 和 How.

  

Hadoop 的主要Goal:

  1. 可扩展来增加 node

  2. 容错,Node down 可以很容易recover

  3. 可以读取各种格式的数据(structured, unstructured)

  4. 把task 分配到不同node,具有并行计算能力

Hadoop 生态系统:

接下来先将整个Hadoop 生态系统,然后讲主要模块(HDFS分布式存储, YARN提供调度和资源管理, MapReduce并行计算) ,最后讲云计算(IaaS, PaaS, SaaS), 此外还有什么时候不适用 Hadoop.

Hadoop生态系统:

前面已经提到了HDFS 是管理分布式存储的, YARN 是负责调度和管理资源的,MapReduce 是做分布式计算的,用户只需要写两个函数就可以实现分布式计算了.

  

MapReduce 支持的数据model 有限,Hive 和 Pig 是分别针对 SQL-Like query 和 dataflow 类型数据的,可以理解为对MapReduce的扩展.

  

Giraph 用来处理大规模图表.

  

Storm, Spark, Flink 是内存处理大数据的技术.

Strom for streaming data analysis. Spark for in-memory data analysis.

  

HBase, Cassandra, MongoDB 来处理一些不适合放在关系型数据库的数据,比如 key-value 数据,Sparse tables 数据. 这些都属于 NoSQL 数据库.

  

有了上面介绍的这么多模块,需要一个统一的集中管理工具来管理,就是Zookeeper.

  

这么多工具,如果自己来安排配置其实挺麻烦的,所有就有一些公司提供了集成的预装好的core工具集合,并对production env提供Support. 比如 Cloudera, MAPR, Hortonworks.

  

讲完了整个生态系统,接下来分别讲模块.

HDFS:

HDFS 怎么提供扩张性和可靠性? 以及它的两个关键模块 NameNode 和 DataNode.

  

HDFS 默认每一块数据放三份拷贝来提供可靠性. HDFS支持多种数据类型, 读和写时都需要提供数据类型.

HDFS由两种node 组成, Name Node (一般一个cluster就一个)和 Data Node (每个machine都是一个 data node).

YARN: Resource manager for Hadoop

1. Resource manager and node manager

  

2. Appliacation Master 就像一个谈判人员, 从resource manager 协调资源,让node manager 来负责执行。

  

3. Container: 可以把它看做资源的抽象.

  

MapReduce:

计算分三步:Map -> Shuffle and Sort -> Reduce

下面图片用了WordCount 例子来显示这三个步骤

  

  

  

全局图

  

哪些情况不适合使用MapReduce: 因为每次都需要读取Input数据,所有Input数据不能随时变化,还有task 不能有先后依赖,还有MR 算完了才出结果也就不适合交互型的task.

  

什么情况下Hadoop使用或者不适用?

适用的场景包括了数据量比较大,数据格式多样等

不适用的场景:小数据量;一些数据之间有依赖的高级算法也不适用

云计算:

把基础架构交给云服务商,团队只需要关注应用.

IaaS: 比如 Amazon EC2, 阿里云

PaaS: Microsoft Azure, Google App Engine

SaaS: Dropbox

Value from Hadoop:

最新文章

  1. java单例的几种实现方法
  2. android bitmap和数据流的互转
  3. 轻量级Image Library
  4. 原生javascript封装ajax和jsonp
  5. ASP.NET中的Image和ImageButton控件
  6. ecshop
  7. oracle学习笔记(一)配置监听
  8. Windows Server 2012 R2里十个极好的新功能
  9. smarty模板执行原理
  10. Eclipse中安装Jdk和配置Python
  11. Oberon程序设计—目录
  12. Java中显示图片的方法
  13. MyBatis从入门到放弃六:延迟加载、一级缓存、二级缓存
  14. Django之组件--forms
  15. Html ul、dl、ol 标签
  16. 【APP测试(Android)】--功能
  17. 【译】第41节---EF6-事务
  18. android getWidth()和getMeasuredWidth()方法的区别
  19. Linux多线程--使用互斥量同步线程【转】
  20. MATLAB 正则表达式(一)(转)

热门文章

  1. spring上下文和springMVC上下文的关系
  2. 三 Struts2 添加返回数据
  3. pyinstaller 打包selenium脚本 取消cmd
  4. loss函数和cost函数
  5. mybatis从mapper接口跳转到相应的xml文件的eclipse插件
  6. 分享数百个 HT 工业互联网 2D 3D 可视化应用案例
  7. HTTP常见错误返回状态代码
  8. 通过sort()方法实现升序和降序排列
  9. 基本环境安装: Centos7+Java+Hadoop+Spark+HBase+ES+Azkaban
  10. [转帖]Ansible批量远程管理Windows主机(部署与配置)