大数据技术原理及应用学习笔记(一)

学习内容

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

你可能感兴趣的:(大数据技术原理及应用学习笔记(一))