一、大数据介绍
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 Cutting2004年 - 最初版本实施2008年 - 成为Apache顶级项目
Hadoop发行版本
社区版:Apache HadoopCloudera发行版:CDHHortonworks发行版:HDP
6.Hadoop的优缺点
高扩展性,可伸缩高可靠性
多副本机制,容错高 低成本无共享架构灵活,可存储任意类型数据开源,社区活跃
7.hadoop与传统关系型数据库的对比
RDBMShadoop
格式写数据时要求读数据时要求速度读数据时速度快写数据时速度快数据监管标准结构化任意结构数据数据处理有限的处理能力强大的处理能力数据类型结构化数据结构化、半结构化、非结构化应用场景交互式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
八、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处理,文件需可分割
SequenceFileAvro FileRCFile&ORCFileParquet 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
();
}
}