大数据概论

概念

大数据是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新的处理模式才能具有更强的决策力、洞察发现里和流程优化能力的海量、高增长率和多样化的信息资产。

主要解决:海量数据的存储和海量数据的分析计算问题。

数据单位

从小到大:bit、Byte、KB、MB、GB、TB、PB、EB、ZB、YB、BB、NB、DB

特点

  • 大量(Volume)

  • 高速(Velocity)

  • 多样(Variety) 结构化数据和非结构化数据

  • Value(低价值密度) 价值密度的高低与数据总量的大小成反比,需要快速对有价值数据“提纯”

从Hadoop框架讨论大数据生态

Hadoop是什么

是一个由Apache基金会所开发的分布式系统基础架构。

主要解决海量数据的存储和海量数据的分析计算问题。

广义上来说,Hadoop通常是指一个更广泛的概念——Hadoop生态圈。

发展历史

1. Hadoop创始人:Doug Cutting

2. 2001年年底Lucene成为Apache基金会的一个子项目。

3. 学习和模仿Google解决这些问题的办法∶微型版Nutch。

4. Google在大数据方面的三篇论文:

- GFS-->HDFS

- Map-Reduce-->MR

- BigTable-->HBase

5. 2003-2004年,Google公开了部分GFS和MapReduce思想的细节,以此为基础Doug Cutting等人用了2年业余时间实现了DFS和MapReduce机制,使Nutcht性能飙升。

6. 2005年Hadoop 作为 Lucene的子项目Nutch的一部分正式引入Apache基金会。

7. 2005年3月,Map-Reduce和Nutch Distributed File System(NDFS)分别被纳入到Hadoop项目中,Hadoop就此正式诞生,标志着大数据时代来临。

Hadoop发行版本

Hadoop三大发行版本:Apache、Cloudera、Hortonworks。

Apache

最原始(最基础)的版本,对于入门学习最好。

Cloudera

在大型互联网企业中用的较多。

Cloudera产品主要为CDH,Cloudera Manager,Cloudera Support。

  • CDH是Cloudera的Hadoop发行版,完全开源,比Apache Hadoop在兼容性,安全性,稳定性上有所增强。

  • Cloudera Manager是集群的软件分发及管理监控平台,可以在几个小时内部署好一个Hadoop集群,并对集群的节点及服务进行实时监控。Cloudera Support即是对Hadoop的技术支持。

  • Cloudera的标价为每年每个节点4000美元。Cloudera开发并贡献了可实时处理大数据的Impala项目。

Hortonworks

文档较好。

主打产品是Hortonworks Data Platform(HDP),也同样是100%开源的产品,HDP除常见的项目外还包括了Ambari,一款开源的安装和管理系统。

Hadoop组成

Hadoop1.x和2.x的区别

在1.x时代,MapReduce同时处理业务逻辑运算和资源的调度,耦合性较大;在2.x时代,增加了Yarn,Yarn只负责资源的调度,MapReduce只负责运算。

HDFS架构

英文全称:Hadoop Distributed File System

  • NameNode

    存储文件的元数据,如文件名,文件目录结构,文件属性以及每个文件的块列表和块所在的DataNode等。

  • DataNode

    在本地文件系统存储文件块数据以及块数据的校验和。

  • Secondary NameNode

    用来监控HDFS状态的辅助后台程序,每隔一段时间获取HDFS元数据的快照。

YARN架构

MapReduce架构

MapReduce将计算过程分为两个阶段:Map和Reduce

  1. Map阶段并行处理输入数据

  2. Reduce阶段对Map结果进行汇总

大数据技术生态体系

图中涉及的技术名词解释如下:

  1. Sqoop:Sqoop是一款开源的工具,主要用于在Hadoop、Hive与传统的数据库(MySql)间进行数据的传递,可以将一个关系型数据库(例如 :MySQL,Oracle 等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。

  2. Flume:Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。

  3. Kafka:Kafka是一种高吞吐量的分布式发布订阅消息系统,有如下特性:

    1. 通过O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能。

    2. 高吞吐量:即使是非常普通的硬件Kafka也可以支持每秒数百万的消息。

    3. 支持通过Kafka服务器和消费机集群来分区消息。

    4. 支持Hadoop并行数据加载。

  4. Storm:Storm用于“连续计算”,对数据流做连续查询,在计算时就将结果以流的形式输出给用户。

  5. Spark:Spark是当前最流行的开源大数据内存计算框架。可以基于Hadoop上存储的大数据进行计算。

  6. Oozie:Oozie是一个管理Hdoop作业(job)的工作流程调度管理系统。

  7. Hbase:HBase是一个分布式的、面向列的开源数据库。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。

  8. Hive:Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的SQL查询功能,可以将SQL语句转换为MapReduce任务进行运行。 其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。

  9. R语言:R是用于统计分析、绘图的语言和操作环境。R是属于GNU系统的一个自由、免费、源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具。

  10. Mahout:Apache Mahout是个可扩展的机器学习和数据挖掘库。

  11. ZooKeeper:Zookeeper是Google的Chubby一个开源的实现。它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护、名字服务、 分布式同步、组服务等。ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。

推荐系统框架图

安装Hadoop

1. 安装JDK

查询是否安装过Java

 $ rpm -qa | grep java

卸载JDK

 $ sudo rpm -e jdk名

在/opt目录下创建module、software文件夹

 $ sudo mkdir module
 $ sudo mkdir software

修改module、software文件夹的所有者为Administrator

 $ sudo chown Administrator:Administrator software/ module/

复制jdk的压缩包到/opt/software中,并解压到/opt/module

配置jdk

/etc/profile中添加如下内容

 ##JAVA_HOME
 export JAVA_HOME=/opt/module/jdk1.8.0_144
 export PATH=$PATH:$JAVA_HOME/bin

测试是否配置成功

 $ java -version

如果出现-bash java:command not found

运行source /ect/profile后再测试。

2. 安装Hadoop

复制hadoop的压缩包到/opt/software中,并解压到/opt/module

配置hadoop

/etc/profile中添加如下内容

 ##HADOOP_HOME
 export HADOOP_HOME=/opt/module/hadoop-2.7.2
 export PATH=$PATH:$HADOOP_HOME/bin
 export PATH=$PATH:$HADOOP_HOME/sbin

hadoop重要目录

bin目录:存放对Hadoop相关服务(HDFS,YARN)进行操作的脚本

etc目录:Hadoop的配置文件目录,存放Hadoop的配置文件

lib目录:存放Hadoop的本地库(对数据进行压缩解压缩功能)

sbin目录:存放启动或停止Hadoop相关服务的脚本

share目录:存放Hadoop的依赖jar包、文档、和官方案例

Hadoop运行模式

本地运行模式

官方Grep案例

查找并显示给定正则表达式的每个匹配项,输出被写入给定的输出目录。

/opt/module/hadoop下新建input

 $ mkdir input

etc/hadoop/下的所有以.xml结尾的文件拷贝到input

 $ cp etc/hadoop/*.xml input/

执行

 $ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar grep input/ output 'dfs[a-z.]+'

查看结果

 $ cat output/*

结果为

 1   dfsadmin

官方WordCount案例

统计个数。

/opt/module/hadoop下新建wcinput

 $ mkdir wcinput

创建文件wc.input

 $ touch wc.input

编辑wc.input

 $ vim wc.input 

wc.input输入内容,比如如下内容

 huawei
 xiaomi
 oppo
 vivo
 huawei
 huawei
 xiaomi
 oneplus
 lenovo
 lenovo
 huawei
 honor

执行

 $ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount wcinput/ wcoutput/

查看结果

 $ cat wcoutput/*

结果为

 honor   1
 huawei  4
 lenovo  2
 oneplus 1
 oppo    1
 vivo    1
 xiaomi  2