一纵两横
一纵两横的思维
即学习一个新学科时,可以看其一纵,其整个历史至今的发展过程。然后看其两横,一横是不同人对于其的评价即定义,还有一横是不同学科或领域与其的联系和区别。抓住这一纵两横的思维,可以帮助我们快速了解一个新的学科或者一个新的领域。
在了解一件自己完全没有涉足过的事情之前,笔者喜欢使用“一纵两横”的思维去学习了解,这样能够快速的帮助自己构建知识体系。所谓的“一纵”,就是事物本身的历史发展,从最开始的诞生到当今的发展情况,可能有的人会觉得无聊或者没有必要,但笔者想告诉读者的是,这是进入一个事物领域的最基本素质,能够很好地体现着专业素养。而所谓的“两横”,就是一方面比较该领域里不同的专家学者或者提出者(创造者),以及其他领域的人对于该事物的阐述理解或者评价态度;另一方面就是比较已有领域学科或者相近领域学科和该事物的异同点或者联系与区别。但完成了这“一纵两横”后,不仅是从本质上了解事物,同时也和自己已有的知识架构联系在一起,有了自己的一些理解感悟。
大数据起源背景!
笔者第一次正式接触大数据,是阅读维克托的《大数据时代》,当然是翻译的中文版,是浙江人民出版社的,在《大数据时代》书中提到,大数据的发展来源,大数据的特征,著者维克托传递出大数据时代来临了的信号,同时我们数据的思考和应用都应该有巨大的思想变革,这样才能适应大数据时代的发展。
书中对大数据的三个核心思想:
- 数据不是随机样本,而是全部数据
- 数据不是精确性,而是混杂性
- 数据间不是因果关系,而是相关关系
维克托围绕着三个核心思想,阐述了我们思维、生活以及商业的变革,同时笔者有点小感悟,那就是我们的学习或者教育是不是也需要变革,针对这三个核心思想对我们学习或者教育进行改革,当然这不是我们重点,这就当做是笔者在抛砖引玉 (自恋一下 ̂_ ̂)。
既然大数据这个概念能够催生,那么在实际的生活必然有着对应的实际应用。那么这又是这样的情况了?这就聊到了 hadoop 框架的产生背景了,进入 21 世纪以来,随着信息技术和信息社会的高速发展,信息或者数据在不断地增长,而且是超几何的疯狂增长。特别是在 Web2.0 时代,人们对于信息的产生和索取需求在疯狂增长,这样在浏览器端产生的数据在 TB 级别或者 PB 级别在增长,亿万网民用户的浏览数据记录以及日夜增长的网站,这些海量数据如何进行存储和分析计算,就成为摆在我们的面前,同时也是 Google 这样的搜索引擎公司天然就需要面对的现实和需要解决的问题。
Google-Alphabet 的新老三篇文章,被称之为大数据领域的三驾马车:
- 2003 年发表文章 <GFS:The Google File System>
- 2004 年发表文章 <MapReduce:Simlifed Data Processing on Large Clusters>
- 2006 年发表文章 <BigTable:A Distrbuted Stroage System for Structured Data>
- 2010 年发表文章 <Dremel: Interactive Analysis of Web-Scale Datasets>
- 2010 年发表文章 <Pregel: A System for Large-Scale Graph Processing>
- Google 老三架马车: GFS、 MapReduce、 BigTable
- Google 新三架马车: Dremel、 Pregel、 Caffeine
大数据的应用开发框架,你一定听过 Hadoop,对就是它!Hadoop 是 Apache(这样说应该不准确,就先这样理解) 基于 Google 的前三篇文章实现的开源框架,现在是 Apache 下一个顶级项目。大家可以访问官网看一看:Hadoop Apache官网
Hadoop 的起源背景之 GFS
大数据解决本质问题之一,就是对海量的数据如何进行存储。
海量的数据并不是传统的 MB 或者 GB 级数据,而是 TB、 PB 级的数据概念。或许你没有啥直观的感觉,我们用数据来进行表明一下:
- 8bit = 1Byte
- 210Byte = 1024Byte = 1KB
- 220KB = 1024KB = 1MB
- 230KB = 1024KB = 1GB
- 240GB = 1024GB = 1TB
- 250TB = 1024TB = 1PB
- 260PB = 1024PB = 1EB
- 270EB = 1024EB = 1ZB
简单来说, 1.2ZB 字节数据,如果储存在只读光盘上,那么这些光盘可以堆成五堆,每一堆都可以伸到月球。公元前 3 世纪,埃及的托勒密二世竭力收集了当时所有的书写作品,全部储存在亚历山大图书馆,代表着当时世界上所有的知识量,但是在数字数据洪流涌向世界后,每一个人都可以获取大量的数据信心,相当与当时压力山大图书馆储存的数据总量的 320 倍。从上面的小故事就可以知道,现在数字信息的庞大,如此海量的数据需要储存,传统的磁盘阵列储存已经无法满足这样的需求了,毕竟磁盘阵列价格是昂贵的。这就需要低成本、高效率、高可靠的储存设计。
2003 年, Google 发表了 文章,解决了这个问题。在文章中阐述了解决海量数据储存的设计思想。同时在 Apache 下Lucene 的子项目研究下,实现了海量数据的存储设计:分布式文件系统,也就是 HDFS(Hadoop Distributed File System)。
Hadoop 的起源背景之 MapReduce
大数据解决本质问题之二,就是海量数据如何进行计算。
在编程计算里,有并行编程计算框架,有过了解的人就知道,这并不是什么新兴的技术。同样 Google 在 2004 年发表了 <MapReduce: Simplifed Data Processing on Large Clusters> 文章,文章阐述了基于分布式储存的海量数据并行计算解决方案思想。开源社区 Apache 的 Hadoop 项目研究实现了MapReduce 并行计算框架,将计算与数据在本地进行,将数据分为 Map 和Reduce 阶段。简单阐述就是 MapReduce 编程模型:把一个大任务拆分成小任务,再进行汇总。
Hadoop 的起源背景之 BigTable
大数据解决本质问题之三,就是对于海量的数据进行分析处理
数据在储存后,其作用就是提供检索和查阅,这才是搜索引擎的功效,也是Google 的强大技术支持。那么提高查询和利用数据的效率就是需要解决的重点。到这里就需要有一定的数据库相关知识 (建议可以查阅一下关于数据库的起源以及历史发展),数据库的产生就是为了查询和利用数据的效率提高,然而现有的数据库并不能满足基于分布式储存的需求。结构化的数据库 (SQL) 和非结构化的数据 (NoSQL)。
Google 工程师在 2006 年发表了 <Bigtable: A Distributed Storage System for Structured Data> 文章,文中阐述了基于分布式储存的数据库设计思想。就这样数据库时代从关系型数据库进入了非关系型数据库时代,一张大表 BigTable 设计思想, BigTable 就是把所有的数据保存到一张表中,同时采用冗余方式 (提高效率和可靠性,这种冗余的方式是最常用的手段,无论是在通信领域,或者自然语言处理领域、语音处理等等), 基于其设计思想就开源实现了基于 HDFS 的非关系型数据库(NoSQL 数据库) HBase。
小提示:其实在我们常用的云盘或者网盘,其主要的设计思想就是这样的,笔者常用的百度网盘也就类似于这样分布式的储存。笔者建议感兴趣的读者,可以阅读 Google 的三篇文章,最好是原文 (虽然笔者的英文很烂),这样我们就更能理解其设计思想的精髓。
Hadoop 环境搭建
Hadoop 分布式集群简介!
引言:学习大数据,就需要自己搭建 Hadoop 的运行环境,这对于新手而言是一项困难的工作,特别是对于 Liunx 操作不熟悉的读者而言,更是一大难题。但是学习部署自己的 Hadoop 环境是学习大数据的必经之路,也是必会技能之一。接下来跟笔者一起来搭建 Hadoop 集群环境吧!当然在 Windows 下也是支持部署 hadoop 的,不过这并不适合实际生产的需求,同时 Windows 不如 Liunx 性能稳定等等因素,一次是来自 Apache 官网对于开发平台的简介。
GNU/Linux is supported as a development and production platform. Hadoop has been demonstrated on GNU/Linux clusters with 2000 nodes.Windows is also a supported platform but the followings steps are for Linux only. To set up Hadoop on Windows, see wiki page.
支持 GNU / Linux 作为开发和生产平台。已经在具有 2000 个节点的GNU / Linux 集群上演示了 Hadoop。 Windows 也是受支持的平台,但以下步骤仅适用于 Linux。要在 Windows 上设置 Hadoop,请参阅 Wiki 页面。
在学习大数据之前,我们应该知道对于 Hadoop 的环境搭建,有着三种方式:
- 本地模式,就是单机版的 Hadoop,笔者觉得完全没有必要,因为 Hadoop的储存原理本就是分布式的概念,同时不具备 HDFS,只能测试 MapReduce程序。
- 全分布式集群,就是对每一个必须的节点都采用一个独立的主机,拥有独立的 IP 地址,真正意义的分布式集群概念,完全达到 Hadoop 的实际应用要求。
- 伪分布式集群,我们学习最常用的一个环境搭建。就是采用一个主机,但是配置多个拥有独立的虚拟节点,满足 Hadoop 分布式的逻辑概念。具备 Hadoop 的所有功能,在单机上模拟一个分布式的环境。这也是我们在学习中建议采用的方式,因为笔者使用的是 Windows7 系统,故而需要借助虚拟机。
搭建 Hadoop 环境准备
- 安装虚拟机 VMWare、 Linux 操作系统。
- 配置主机名和 I 静态 IP 地址、免密码登录设置。
- 约定安装目录: /liwei/hadoop。
- 配置好 JDK 的环境变量、准备好 Hadoop 安装包。
- 了解 Hadoop 的目录结构以及对应的作用。