Hadoop
大数据概论
概念
大数据是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新的处理模式才能具有更强的决策力、洞察发现里和流程优化能力的海量、高增长率和多样化的信息资产。
主要解决:海量数据的存储和海量数据的分析计算问题。
数据单位
从小到大: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
Map阶段并行处理输入数据
Reduce阶段对Map结果进行汇总
大数据技术生态体系
图中涉及的技术名词解释如下:
Sqoop:Sqoop是一款开源的工具,主要用于在Hadoop、Hive与传统的数据库(MySql)间进行数据的传递,可以将一个关系型数据库(例如 :MySQL,Oracle 等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。
Flume:Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。
Kafka:Kafka是一种高吞吐量的分布式发布订阅消息系统,有如下特性:
通过O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能。
高吞吐量:即使是非常普通的硬件Kafka也可以支持每秒数百万的消息。
支持通过Kafka服务器和消费机集群来分区消息。
支持Hadoop并行数据加载。
Storm:Storm用于“连续计算”,对数据流做连续查询,在计算时就将结果以流的形式输出给用户。
Spark:Spark是当前最流行的开源大数据内存计算框架。可以基于Hadoop上存储的大数据进行计算。
Oozie:Oozie是一个管理Hdoop作业(job)的工作流程调度管理系统。
Hbase:HBase是一个分布式的、面向列的开源数据库。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。
Hive:Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的SQL查询功能,可以将SQL语句转换为MapReduce任务进行运行。 其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。
R语言:R是用于统计分析、绘图的语言和操作环境。R是属于GNU系统的一个自由、免费、源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具。
Mahout:Apache Mahout是个可扩展的机器学习和数据挖掘库。
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