学习内容
TB–PB–EB—ZB–YB
数据采集-----数据存储-----数据计算--------- 数据分析-----------数据挖掘-----数据可视化
HDFS MapReduce离线计算 Hive(数据仓库) Miner
HBase Spark迭代计算
Storm实时计算
Flink 批处理和流处理
Flume
Kafka
Hue
Oozie
data-------information---------knowledge----–wisdom
port Miner Farmer
大数据的核心内容两个方面:
数据存储
数据计算
Hadoop1.0
数据存储:HDFS
数据计算:MapReduce
一个数据块的大小64M
1PB/64MB=??多少个数据块
Hadoop2.0
数据存储HDFS
数据计算:MapReduce
YARN:(离线计算、实时计算、迭代计算、批处理和流处理统一起来进行管理达到资源共享)
Zookeeper:分布式协调服务,保证系统高可用HA
一个数据块的大小128M
1PB/128MB=???
Goole发表了三篇论文:
GFS:goole File System----> HDFS 分布式文件系统
MapReduce-----------------> MapReduce离线计算框架
Bigtable------------------>HBase非关系行数据库(NoSQL)
HDFS:分布式文件系统
文件是按照分块存储、每个块的大小是128M(Hadoop2.0)、
1PB的的一个文件:一个文件名字、文件长度、文件属主、文件属组、文件权限(读写执行wrx)统称为元数据(meta data)
多少个数据块、块的位置;
元数据----占用一定空间---内存空间(有限的)
1PB的1万个文件:一万个文件名字,每个文件是不是都有属主、属组、文件权限、数据块、数据块位置统称为元数据(meta data)
元数据----占用一定空间---内存空间(有限的)
特点:按照块来进行存储,副本的存储机制,每个副本大小是3
流式的进行访问,适合存储大数据,不适合存储小数据、不适合随机访问、低延迟读取
一、HDFS的架构
二、HDFS的应用场景
三、HDFS的角色
(1)client进行读写操作
FileSystem-父类或者基类或超类
|
|
Distribute FileSystem-子类
|
定义一个子类的实例
DFileSystem fs = new DFileSystem()
fs.open()
fs.create()
fs.read()
Path path = new Path()
Configuration conf = new Configuration()
DFSOutputStream dfsops = new DFSOutputStream()
DFSInputStream dfsips = new DFSInputStream()
Inputstream-----OutputStream
字节输入流----------字节输出流
InputstreamReader-----OutputStreamWriter
字符输入流-----字符输出流
FSDataInputStream-----FSDataOutputStream
文件输入流-------------文件输出流
RPC协议:Remote Process Call远程过程调用
x=input("请输入一个三位数:")
怎样来进行读操作?
怎样来进行写操作?
(2)NameNode名称节点:存放元数据,元数据存放在内存空间NameSpace
(3)dataNode数据节点:存放数据
四、HDFS关键特性
(1)HA高可靠性
(2)元数据持久化
注意:ActiveNameNode StandbyNameNode
SecondaryNameNode:SecondaryNameNode辅助StandbyNameNode进行元数据合并操作,减少NameNode的启动时间
(3)联邦机制
NameNode1 NameNode2 NameNode3
Namespace1 NameSpace2 NameSpace3
blockpool blockpool blockpool
------------------------------------------
| pool |
|-----------------------------------------
------------------------------------------------------
------------------------------------------
| |
| |
------------------------------------------
产生原因:单Active NN的架构使得HDFS在集群扩展性和性能上都有潜在的问题,
当集群大到一定程度后,NN进程使用的内存可能会达到上百G,
NN成为了性能的瓶颈。
应用场景:超大规模文件存储。如互联网公司存储用户行为数据、
电信历史数据、语音数据等超大规模数据存储。
此时NameNode的内存不足以支撑如此庞大的集群。
常用的估算公式为1G对应1百万个块,按缺省块大小计算的话,大概是128T (这个估算比例是有比较大的富裕的,其实,即使是每个文件只有一个块,所有元数据信息也不会有1KB/block)。
Federation简单理解:
(1)各NameNode负责自己所属的目录。
与Linux挂载磁盘到目录类似,此时每个NameNode只负责整个hdfs集群中部分目录。
如NameNode1负责/database目录,
那么在/database目录下的文件元数据都由NameNode1负责。
各NameNode间元数据不共享,每个NameNode都有对应的standby。
(2)块池(block pool):属于某一命名空间(NS)的一组文件块。
(3)联邦环境下,每个namenode维护一个命名空间卷(namespace volume),
包括命名空间的元数据和在该空间下的文件的所有数据块的块池。
(4)namenode之间是相互独立的,
两两之间并不互相通信,
一个失效也不会影响其他namenode。
(5)datanode向集群中所有namenode注册,
为集群中的所有块池存储数据。
NameSpace(NS):命名空间。
HDFS的命名空间包含目录、文件和块。
可以理解为NameNode所属的逻辑目录。
(4)数据存储---分级存储--标签存储
配置DataNode使用标签存储:
用户需要通过数据特征灵活配置HDFS文件数据块的存储节点。
通过设置HDFS目录/文件对应一个标签表达式,
同时设置每个Datanode对应一个或多个标签,
从而给文件的数据块存储指定了特定范围的Datanode。
当使用基于标签的数据块摆放策略,
为指定的文件选择DataNode节点进行存放时,
会根据文件的标签表达式选择出将要存放的Datanode节点范围,
然后在这些Datanode节点范围内,选择出合适的存放节点。
支持用户将数据块的各个副本存放在指定具有不同标签的节点,
如某个文件的数据块的2个副本放置在标签L1对应节点中,
该数据块的其他副本放置在标签L2对应的节点中。
支持选择节点失败情况下的策略,如随机从全部节点中选一个。
简单的说:给DataNode设置标签,被存储的数据也有标签。
当存储数据时,数据就会存储到标签相同的DataNode中。
图中/Hbase数据就会存储到A、B 、D中。
(5)数据同分布colocation
(6)数据完整性保障
a:数据副本重建
b:
c:
d:
五 HDFS shell
Linux文件系统:
区分管理员用户和普通的用户
管理员用户具有所有权限:root最高权限 如果id为0000就是管理员
普通用户:每个普通用户在自己的家目录下面拥有最多权限 cd ~
(1)建立一个文件夹 mkdir hbjjxy
(2)进入一个目录
进入一个目录: cd hbjjxy
回到当前目录的父目录:cd ..
在该目录中创建一个文件:touch bigdata.txt
编辑文件: vim bigdata.txt
打开这个文件之后,按下键盘的i键进入编辑模式
输入一系列内容
再按下键盘的esc键,进入命令行模式
输入:q!不保存强制退出
输入:wq!保存再强制退出
输入:wq 保存退出
(3)创建一系列用户
创建一个张三用户:adduser zhangsan
修改张三用户密码:passwd zhangsan
删除张三这个用户:adddel zhangsan
(4)创建文件aa.txt
touch aa.txt
创建目录 aa
mkdir aa
将文件aa.txt 移动到目录aa中
mv ./aa.txt /aa
将aa.txt这个文件重命名
cp ./aa/aa.txt aa.txt.bak
删除文件 rm aa.txt
递归进行删除:rm aa 只能删除空目录
递归删除 rm -r /aa/*
强制删除:rm -rf /bb/
(5)改变一个文件的属主
chown lisi:lisi /tmp/aa/
(6)改变一个文件的属组
chown :wangwu /tmp/bb
(7)改变文件的权限
touch cc.txt
chmod 777 cc.txt
chmod u+x cc.txt
chmod g-x cc.txt
chmod a-w cc.txt
Hadoop文件系统HDFS的命令:
(1)在hdfs上创建一个文件夹
hdfs dfs -mkdir /tmp/hbjjxy88
(3)在hdfs上的文件夹中创建一文件
hdfs dfs -touchz /tmp/hbjjxy88/bigdata88.txt
(4)在linux文件系统中,也就是本地创建一个文件夹/tmp/hhjjxy
mkdir /tmp/hhjjxy
(4)在linux文件系统中,也就是本地创建一个文bigdata.txt
cd /tmp/hhjjxy
touch bigdata.txt
echo "Hello student,welcome to learn bigdata!!" > bigdata.txt
(5)需要将本地文件上传到hdfs文件系统中
hdfs dfs -put /tmp/hhjjxy/bigdata.txt /tmp/bigdata88/
(6)查看hdfs文件系统hhjjxy88目录下面内容
hdfs dfs -ls /tmm/hhjjxy88/
(7)查看hdfs文件系统中上传的bigdata.txt文件的内容
hsdfs dfs -cat /tmp/hhjjxy88/bidata.txt
(8)将hdfs文件系统中的bigdata88.txt这个文件下载到本地
hdfs dfs -get /tmp/hhjjxy88/bigdata88.txt /tmp/hhjjxy/
(7)查看本地Linux系统的hhjjxy目录内容
ls /tmp/hhjjxy/
查看刚下载到本地中的文件的内容
cat /tmp/hhjjxy/bigdata88.txt
(8)在hdfs文件系统中创建一个文件bigdata99.txt
hdfs dfs -touchz /tmp/bigdata88/bigdata99.txt
(9)在hdfs文件系统中删除文件bigdata99.txt
hdfs dfs -rm /tmp/bigdata88/bigdata99.txt
(10)在hdfs文件系统中改变文件的属主
hdfs dfs -chown zhangsan:zhangsan /tmp/bigdata88/bigdata10.txt