一、大数据介绍
1. 什么是大数据
大数据是指无法在一定时间内用常规软件工具对其内容进行抓取、管理和处理的数据集合。
身边的大数据:微信、qq、抖音都是大数据。
2. 大数据的特征
4V特征
- Volume(大数据量): 90% 的数据是过去两年产生
- Velocity(速度快): 数据增长速度快,时效性高
- Variety(多样化): 数据种类和来源多样化
结构化数据、半结构化数据、非结构化数据 - Value(价值密度低): 需挖掘获取数据价值
固有特征
- 时效性
- 不可变性
3. 大数据分布式计算
介绍:大数据的分布式计算是将较大的数据分成小的部分进行处理。
传统分布式计算 | 新的分布式计算 - Hadoop | |
---|---|---|
计算方式 | 将数据复制到计算节点 | 在不同数据节点并行计算 |
可处理数据量 | 小数据量 | 大数据量 |
CPU性能限制 | 受CPU限制较大 | 受单台设备限制小 |
提升计算能力 | 提升单台机器计算能力 | 扩展低成本服务器集群 |
4.hadoop介绍
Hadoop是一个开源分布式系统架构
- 分布式文件系统HDFS——解决大数据存储
- 分布式计算框架MapReduce——解决大数据计算
- 分布式资源管理系统YARN
处理海量数据的架构首选
非常快得完成大数据计算任务
已发展成为一个Hadoop生态圈
5.hadoop版本的介绍
Hadoop起源于搜索引擎Apache Nutch
- 创始人:Doug Cutting
- 2004年 - 最初版本实施
- 2008年 - 成为Apache顶级项目
Hadoop发行版本
- 社区版:Apache Hadoop
- Cloudera发行版:CDH
- Hortonworks发行版:HDP
6.Hadoop的优缺点
- 高扩展性,可伸缩
- 高可靠性
- 多副本机制,容错高
- 低成本
- 无共享架构
- 灵活,可存储任意类型数据
- 开源,社区活跃
7.hadoop与传统关系型数据库的对比
RDBMS | hadoop | |
---|---|---|
格式 | 写数据时要求 | 读数据时要求 |
速度 | 读数据时速度快 | 写数据时速度快 |
数据监管 | 标准结构化 | 任意结构数据 |
数据处理 | 有限的处理能力 | 强大的处理能力 |
数据类型 | 结构化数据 | 结构化、半结构化、非结构化 |
应用场景 | 交互式OLAP分析ACID事务处理企业业务系统 | 处理非结构化数据海量数据存储计算 |
二、hadoop生态系统
三、zookeeper简介
1. zookeeper介绍
zookeeper是一个分布式应用程序协调服务
- 解决分布式集群中应用系统的一致性问题。
2.zookeeper提供的功能
配置管理、命名服务、分布式同步、队列管理、集群管理等
3.zookeeper性能
- 全局数据一致
- 可靠性、顺序性、实时性
- 数据更新原子性
4.zookeeper集群
角色:Leader、Follower、Observer
**leader:**领导式集群 hadoop1
**Follower:**跟随者模式hadoop2.0
**Observer:**观察者模式(减少yarn向namenode汇报的次数)
四、hadoop架构
1. HDFS(Hadoop Distributed File System)
- 分布式文件系统,解决分布式存储
2. MapReduce
- 分布式计算框架
3. YARN
- 分布式资源管理系统
- 在Hadoop 2.x中引入
4. Common(不常用)
- 支持所有其他模块的公共工具程序
五、HDFS
1. HDFS特点
HDFS优点
- 支持处理超大文件
- 可运行在廉价机器上
- 高容错性
- 流式文件写入(好处:并不要求文件一直在,也不要求文件读完了再删,但是没读完就删,可能会造成数据不全)
HDFS缺点
- 不适合低延时数据访问场景
- 不适合小文件存取场景(解决方案:1.用流的方式合并成大文件,2.用hbase)
- 不适合并发写入(也是流的特性)(读可以并发),文件随机修改场景。
2. HDFS命令
基本格式
hdfs dfs -cmd<args>
hadoop fs -cmd<args>(已过时)
命令和Linux相似
-ls 查看
-mkdir 新建文件夹
-put 上传
-rm 删除
-help 帮助
六、dfsadmin命令用于管理HDFS集群
命令 | 描述 |
---|---|
hdfs dfsadmin -report | 返回集群的状态信息 |
hdfs dfsadmin -safemode enter/leave | 进入和离开安全模式 |
hdfs dfsadmin -saveNamespace | 保存集群的名字空间 |
hdfs dfsadmin -rollEdits | 回滚编辑日志 |
hdfs dfsadmin -refreshNodes | 刷新节点 |
hdfs dfsadmin -getDatanodeInfo node1:8010 | 获取数据节点信息 |
hdfs dfsadmin -setQuota 10 /hdfs | 设置文件目录配额 |
七、使用HDFS shell处理移动通讯数据
- 创建存放数据文件的目录
hdfs dfs -mkdir /hdfs/shell
hdfs dfs -ls /hdfs/shell
- 将通讯数据上传到HDFS并查看
hdfs dfs -put /home/hadoop/data/mobile.txt /hdfs/shell
hdfs dfs -text /hdfs/shell/mobile.txt
- 下载文件到本地
hdfs dfs -get /hdfs/shell/mobile.txt /home/hadoop
- 统计目录下文件大小
hdfs dfs -du /hdfs/shell
- 删除移动数据文件和目录
hdfs dfs -rm /hdfs/shell/mobile.txt
hdfs dfs -rmr /hdfs
#rmr递归删除目录下所有子目录和文件,生产环境中慎用
八、HDFS角色
Client:客户端
NameNode (NN):元数据节点
- 管理文件系统的Namespace/元数据(控制目录树)
- 一个HDFS集群只有一个Active的NN
DataNode (DN):数据节点
- 数据存储节点,保存和检索Block
- 一个集群可以有多个数据节点
Secondary NameNode (SNN):从元数据节点
- 合并NameNode的edit logs到fsimage文件中
- 辅助NN将内存中元数据信息持久化
九、HDFS架构
以hdfs dfs -put 文件 目录
为例
注意:
- 在想DataNode写入数据块的时候,一边往内存里写,一边传输下一个DataNode
- 在传输的过程中,是以packet形式进行传输的,默认大小64KB
- 在传输第二个数据块的时候重复以上的所有操作
十、HDFS副本机制
Block:数据块
- HDFS最基本的存储单元
- 默认块大小:128M(2.x)
副本机制
- 作用:避免数据丢失
- 副本数默认为3
- 存放机制:
- 一个在本地机架节点
- 一个在同一个机架不同节点
- 一个在不同机架的节点
十一、HDFS高可用
在1.x版本中
- 存在Namenode单点问题
在2.x版本中
- 解决:HDFS Federation方式,共享DN资源
- Active Namenode
- 对外提供服务
- Standby Namenode
- Active故障时可切换为Active
十二、HDFS文件格式
HDFS支持以不同格式存储所有类型的文件
- 文本、二进制
- 未压缩、压缩
为了最佳的Map-Reduce处理,文件需可分割
- SequenceFile
- Avro File
- RCFile&ORCFile
- Parquet File
十三、java实现HDFS文件的几个操作
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.junit.Test;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
/**
* @Author LYQ
* @Date 2020/7/2
* @Description
*/
public class HdfsClient {
//创建一个文件夹
@Test
public void testMkdirs() throws URISyntaxException, IOException, InterruptedException {
//1.创建配置文件
Configuration conf= new Configuration();
//2.获取文件系统
FileSystem fs = FileSystem.get(new URI("hdfs://192.168.222.101:9000"),conf,"root");
//3.调用API操作
fs.mkdirs(new Path("/hdfs"));
//4.关闭资源
fs.close();
}
//上传一个文件
@Test
public void testCopyFromLocalFile() throws URISyntaxException,IOException,InterruptedException{
//1.创建配置文件
Configuration conf=new Configuration();
//2.获取文件系统
FileSystem fs=FileSystem.get(new URI("hdfs://192.168.222.101:9000"),conf,"root");
//3.调用API操作
fs.copyFromLocalFile(new Path("D:\\jarFile\\log4j.properties"),new Path("/hdfs"));
//4.关闭资源
fs.close();
}
//下载一个文件
@Test
public void testCopyToLocalFile() throws URISyntaxException,IOException,InterruptedException{
//1.创建配置文件
Configuration conf=new Configuration();
//2.获取文件系统
FileSystem fs=FileSystem.get(new URI("hdfs://hadoop1:9000"),conf,"root");
//3.调用API操作
fs.copyToLocalFile(new Path("/hdfs"),new Path("E:\\"));
//4.关闭资源
fs.close();
}
//删除文件夹
@Test
public void testDelete() throws URISyntaxException, IOException,InterruptedException{
//1.创建配置文件
Configuration conf=new Configuration();
//2.获取文件系统
FileSystem fs=FileSystem.get(new URI("hdfs://192.168.222.101:9000"),conf,"root");
//3.调用API操作
//b:代表是否递归删除
fs.delete(new Path("/hdfs"),true);
//4.关闭资源
fs.close();
}
}