本文为个人期末考试复习使用
ch01 大数据概述
ch02 大数据处理架构Hadoop
2.1 配置hadoop
2.1.1 免密登录
ssh-keygen -t rsa -P ''
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
2.1.2 vim $HADOOP_HOME/etc/hadoop/core-site.xml
Hadoop Core的配置项,包含HDFS和MapReduce常用的I/O设置
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/tmp</value>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://127.0.0.1:9000</value>
</property>
</configuration>
2.1.3 vim $HADOOP_HOME/etc/hadoop/hdfs-site.xml
Hadoop 守护进程的配置项,包括namenode、SecondaryNameNode和DataNode等
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop/tmp/hdfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/tmp/hdfs/data</value>
</property>
</configuration>
2.1.4 vim $HADOOP_HOME/etc/hadoop/mapred-site.xml
此处node01即Master节点
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>node01:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>node01:19888</value>
</property>
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value>
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value>
</property>
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value>
</property>
</configuration>
2.1.5 vim $HADOOP_HOME/etc/hadoop/yarn-site.xml
此处node01即Master节点
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>node01</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
2.1.5 格式化及启动
$HADOOP_HOME/bin/hadoop namenode -format
$HADOOP_HOME/sbin/start-all.sh
$HADOOP_HOME/sbin/start-dfs.sh
$HADOOP_HOME/sbin/start-yarn.sh
2.2 第二名称节点
2.2.1 SecondaryNameNode用途
- 不是热备份
- 主要是防止日志文件EditLog过大,导致名称节点失败恢复时消耗过多时间
- 附带起到冷备份功能
2.2.2 冷备份
- SecondaryNameNode会定期和NameNode通信
- 从NameNode上获取到FsImage和EditLog文件,并下载到本地的相应目录下
- 执行EditLog和FsImage文件合并
- 将新的FsImage文件发送到NameNode节点上
- NameNode使用新的FsImage和EditLog(缩小了)
2.3
ch03 分布式文件系统HDFS
3.1 HDFS数据读写
HDFS Client 向HDFS写入数据
package edu.tyut.exam;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
public class WriteData {
public static void main(String[] args) {
try {
Configuration configuration = new Configuration();
configuration.set("fs.defaultFS", "hdfs://192.168.246.6:9000");
configuration.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");
FileSystem fs = FileSystem.get(configuration);
FSDataOutputStream os = fs.create(new Path("/user/hadoop/test.txt"));
byte[] buff = "TestData".getBytes();
os.write(buff , 0 , buff.length);
os.close();
fs.close();
}catch (Exception e){
e.printStackTrace();
}
}
}
HDFS Client 从HDFS读出数据
package edu.tyut.exam;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class ReadData {
public static void main(String [] args){
try{
Configuration conf = new Configuration();
conf.set("fs.defaultFS","hdfs://192.168.246.6:9000");
conf.set("fs.dfs.impl","org.apache.hadoop.hdfs.DistributedFileSystem");
FileSystem fs = FileSystem.get(conf);
// FSDataInputStream inputStream = fs.open(new Path("/user/hadoop/test.txt"));
// FSDataInputStream inputStream = fs.open(new Path("/user/hadoop/Hello World"));
FSDataInputStream inputStream = fs.open(new Path("/user/hadoop/input/yarn-site.xml"));
InputStreamReader reader = new InputStreamReader(inputStream);
BufferedReader bufferedReader = new BufferedReader(reader);
String s = bufferedReader.readLine();
while ( s != null ){
System.out.println(s);
s = bufferedReader.readLine();
}
// String s = bufferedReader.readLine();
// System.out.println(s);
bufferedReader.close();
fs.close();
}catch (Exception e){
e.printStackTrace();
}
}
}
ch04 分布式数据库Hbase
4.1 Hbase数据模型
HBase是稀疏的、多维度的、排序的、持久化存储的映射表
[ 行键 ,列族 , 列限定符 , 时间戳 ] ==> [ 值 ]
序号 | 详情 |
---|---|
1 | 在Hbase中 行键 、列限定符、单元格中数据 存储为 字节数组 byte[ ] |
2 | 列名都以列族作为前缀 { 列名格式为: [ 列族 : 列限定符 ] } |
3 | 列族需在表创建时定义好 |
Region 是HBase 中 负载均衡 和 数据分发 的 基本单位 | |
Region 是根据 行键 的 值域区间 划分的 | |
任何时刻, 一个Region 只能分配给 一个Region 服务器 |
4.2 Hbase与传统关系型数据库对比
角度 | 传统关系型数据库 | HBase |
---|---|---|
存储模型 | NSM | DSM |
4.3 HBase 功能组件
组件功能介绍
功能组件 | 功能 |
---|---|
库函数 | 链接到客户端 |
Master主服务器 | ① 管理和维护HBase表的分区信息 ② 维护Region服务器列表 ③ 实时监测Region服务器 ④ 处理模式变化 |
多个Region服务器 | 存储和维护分配给自己的Region [集合],处理来自客户端的读写请求 |
客户端注意事项
序号 | 详情 |
---|---|
1 | 客户端时借助于zookeeper来获得Region的位置信息,从不和Master通信 - - - > Master负载很小 |
1 | 客户端访问HBase上数据时,无需Master 参与, 客户端可以访问ZooKeeper获取-ROOT-表地址,最终到达相应的Region服务器进行数据读写 |
2 | 管理类操作 , 客户端与Master服务器 RPC |
3 | 数据读写类操作,客户端与Region服务器 RPC |
Region定位相关
序号 | 详情 |
---|---|
1 | .META.表 即 元数据表 |
2 | .META.表 的条目 :[ Region标识符 , Region 服务器标识 ] |
3 | Region 标识符 : “表名 + 开始主键 + RegionID” |
Region服务器工作原理
Region服务器时HBase的核心模块,Store则是Region服务器的核心
Region服务器(多个)
|__ Hlog(仅一个)
|__ Region(一系列)
|__ Store(多个)[对应 一个列族的存储]
| |__ MemStore(仅一个)[缓存]
| |__ StoreFile(多个)[磁盘中的文件]
|__ Store(多个)[对应 一个列族的存储]
| |__ MemStore(仅一个)
| |__ StoreFile(多个)
|__ Store(多个)[对应 一个列族的存储]
|__ MemStore(仅一个)
|__ StoreFile(多个)
4.4 HBase编程
安装HBase
- 查找镜像
docker search hbase
- 拉取镜像
docker pull harisekhon/hbase
- 运行容器
docker run -d --name hbase -p 2181:2181 -p 16010:16010 -p 16020:16020 -p 16030:16030 harisekhon/hbase
ch05 NoSQL
5.1 NoSQL 特点
- 灵活的可扩展性
- 灵活的数据模型
- 与云计算紧密结合
5.2 关系数据库无法满足WEB2.0需求
关系数据库表现方面 | 关系数据库 关键特性 在WEB 2.0 鸡肋 |
---|---|
无法满足海量数据的需求 | 不要求严格的数据事务 |
无法满足数据高并发的需求 | 不要求严格的读写实时性 |
无法满足高可扩展性和高可用性的需求 | 不包含大量复杂的SQL查询 |
5.3 NoSQL 四大类型
数据库类型 | 介绍 | 优点 | 缺点 | 产品 |
---|---|---|---|---|
键值型 | 扩展性好,灵活性好 大量写操作时性能高 | 无法存储结构化信息 条件查询效率较低 | Redis | |
列族型 | 查找速度快 可扩展性强 容易进行分布式扩展 复杂性低 | 功能较少 大都不支持强事务一致性 | BigTable、Hbase、Cassandra | |
文档型 | 性能好(高并发),灵活性高 复杂性低、数据结构灵活 数据结构灵活提供嵌入式文档功能 将经常查询的数据存储在同一个文档中 既可以根据键来构建索引 也可以根据内容构建索引 | 缺乏统一的查询语法 | MongoDB | |
图 | 灵活性高,支持复杂的图形算法 可用于构建复杂的关系图谱 | 复杂性高 只能支持一定的数据规模 | Adobe、Cisco、T-mobile |
5.4 NoSQL 三大基石
CAP | C : 一致性 | A : 可用性 | P : 分区容忍性 |
BASE | BA: 基本可用 | S 软状态 | E : 最终一致性 |
最终一致性 |
数据库事务ACID四性:
- A Atomicity 原子性
- C Consistency 一致性
- I Isolation 隔离性
- D Duration 持续性
ch06 云数据库
6.1 云数据库类型
- IaaS 基础设施即服务
- PaaS 平台即服务
- SaaS 软件即服务
6.2 云数据库特性
ch07 MapReduce
传统并行计算框架 | MapReduce | |
---|---|---|
集群架构/容错性 | 共享式(共享内存/共享存储),容错性差 | 非共享式,容错性好 |
硬件/价格/扩展性 | 刀片服务器、高速网、SAN,价格贵,扩展性差 | 普通PC机,便宜,扩展性好 |
编程/学习难度 | what-how,难 | what,简单 |
适用场景 | 实时、细粒度计算、计算密集型 | 批处理、非实时、数据密集型 |
ch08 Hadoop 2.0特性
角度 | Hadoop 1.0 存在问题 | Hadoop 2.0特性 |
---|---|---|
HDFS | 单点失效问题 | HA 高可用 |
无法实现资源隔离 | HDFS Federation 联邦 | |
MapReduce | 资源管理效率低 | YARN |
Hadoop 1.0 存在主要不足 | |
---|---|
抽象层次低,需人工编码 | |
表达能力有限 | |
开发者自己管理作业(Job)之间的依赖关系 | |
难以看到程序整体逻辑 | |
执行迭代操作效率低 | |
资源浪费(Map和Reduce分两阶段执行) | |
实时性差(适合批处理,不支持实时交互式) |
8.1 HDFS HA
- HDFS HA(High Availability)是为了解决单点故障问题
- HA集群设置两个名称节点,“活跃(Active)”和“待命(Standby)”
- 两种名称节点的状态同步,可以借助于一个共享存储系统来实现
- 一旦活跃名称节点出现故障,就可以立即切换到待命名称节点
- Zookeeper确保一个名称节点在对外服务
- 名称节点维护映射信息,数据节点同时向两个名称节点汇报信息
8.2 HDFS Federation
注意 | 说明 |
---|---|
1 | HDFS Federation 不能解决单点故障问题 ,可以很好解决 可扩展性、系统性能和隔离性 问题 |
2 | 在HDFS 2.0 , 每个名称节点部署一个后备名称节点 |
3 | HDFS Federation 拥有多个独立的命名空间 |
4 | HDFS Federation 每个 命名空间 管理属于自己的一组块 |
5 | HDFS Federation 中属于 同一 命名空间的块 构成 块池 |
6 | HDFS Federation 块池 中的 块 存储在 不同的 数据节点 |
8.3 Yet Another Resource Negotiator
MapReduce 1.0 | Yarn | 功能 |
---|---|---|
JobTrakcer | ResourceManager | 处理客户端请求 启动/监控ApplicationMaster 监控NodeManager 资源分配与调度 |
ApplicationMaster | 为应用程序申请资源,并分配给内部任务 任务调度、监控与容错 | |
TaskTracker | NodeManager | 单个节点上的资源管理 处理来自ResourceManger的命令 处理来自ApplicationMaster的命令 |
ch09 Hive
说明:
④ 是对③遍历 [查询块] 得到的操作树 进行 逻辑优化器 优化,得到 变换后的操作树
⑥ 是对⑤遍历 [操作树] 得到的MapReduce作业 进行 物理优化器 优化,得到 最终的MapReduce
ch10 Spark
ch11 流计算
11.1 流计算特征
特征 | |
---|---|
1. | 数据快速到达,潜在大小无穷无尽的 |
2. | 数据来源众多,格式复杂 |
3. | 数据量大,不关注存储 |
4. | 注重数据的整体价值 |
5. | 数据顺序颠倒、或者不完整 |
11.2 流计算系统应达到的需求
特征 | |
---|---|
1. | 高性能 |
2. | 海量式 |
3. | 实时式 |
4. | 分布式 |
5. | 易用性 |
6. | 可靠性 |
11.3 流计算处理流程
- 数据实时采集
- 数据实时计算
- 实时查询服务
11.3.1 数据实时采集
11.3.2 数据实时计算
11.3.3 实时查询服务
11.4 Storm
2014年Twitter开发的Storm开源
11.4.1 Storm特点
特征 | |
---|---|
1. | 整合性 |
2. | 简用的API |
3. | 可扩展性 |
4. | 容错性 |
5. | 可靠的消息处理 |
6. | 支持各种编程语言 |
7. | 快速部署 |
8. | 免费、开源 |
11.4.2 Storm设计
Hadoop | Storm | 说明 | |
---|---|---|---|
应用名称 | Job | Toplogy | 将Spouts 和 Bolts 组成的网络 抽象为 Toplogy[ 一个流转换图 ] |
系统角色 | JobTracker | Nimbus | 在Master 节点运行 负责在集群范围内分发代码 为Worker分配任务和监测故障 |
系统角色 | TaskTracker | Supervisor | 在Worker节点运行 根据Nimbus分配的任务来决定启动或停止Worker进程 |
组件接口 | Map / Reduce | Spout / Bolt | Streams 抽象 为无限的Tuple序列 将每个Stream的源 抽象 为Spouts 将Streams的状态转换 抽象 为Bolts |
11.4.3 Storm与SparkStreamming对比
Storm | Spark Streamming | |
---|---|---|
实时性 | 纯实时 | 准实时 |
延迟度 | 毫秒级 | 秒级 |
吞吐量 | 低 | 高 |
动态调整并行度 | 支持 | 不支持 |
11.4.3 Flink
Flink核心组件栈
组件栈 | 说明 |
---|---|
物理部署层 | Local模式 Standalone、Yarn 云服务 |
Runtime 核心层 | 流处理(DataStream API) 批处理(DataSet API) |
API & libraries层 | CEP (Complex Event Process) 基于流处理 SQL&Table库 基于流或批处理 FlinkML 基于批处理 Gelly 基于批处理 |
Flink体系架构
MapReduce体系结构