spring cloud 分布式Hadoop三部曲之HDFS

准备:之前我们已经部署好hadoop相关,对应的hdfs服务启动

背景:引入HDFS为后续的HBase以及Hive做准备,3部曲就绪,整体作为Hadoop核心架构体系,千万数据也是秒级!!!

1. 海量数据(日志等等)无法做到3秒内查询

2. ETL百万数据需要3小时+来迁移

3. 海量计算,我们目前都不是实时,而是先计算好(需要计算6小时的),之后再迁移数据

为了解决这些 问题就需要hadoop框架,那么这次就跟随我一起搭建hadoop框架吧。

简介:hdfs作为分布式文件系统是指,设计成适合运行在通用硬件上的分布式z文件系统。(HDFS是一个高度容错性的系统,适合部署在廉价的机器上)。HDFS能提供高吞吐量访问应用程序数据,非常适合大规模数据集上的应用。HDFS放宽了一部分POSIX约束,这样就使得可以用流的形式来访问,文件系统中的数据

hdfs是主从结构,一个HDFS集群有一个名字节点,它是一个管理文件命名空间和调节客户端访问文件的主服务器。HDFS对外开放文件命名空间并允许用户数据以文件形式存储。

内部机制是将一个文件分割成一个或多个块,这些块被存储在一组数据节点中。名字节点用来操作文件命名空间的文件或目录操作,如打开,关闭,重命名等等。它同时确定块与数据节点的映射。数据节点负责来自文件系统客户的读写请求。数据节点同时还要执行块的创建,删除,和来自名字节点的块复制指令。

HDFS原理:

block:HDFS中存储单元是每个数据块block,HDFS默认的最基本的存储单位是64M的数据块。

nameNode:元数据节点。该节点用来管理文件系统中的命名空间。负责元数据管理,与client交互进行提供元数据查询,分配数据存储节点等。就说,一个文件包含哪些数据块,分布在哪些节点上。

dataNode:是HDFS真正存储数据的地方。客户端client和元数据节点nameNode可以向数据节点请求写入或者读出数据块。datNode需要周期性的向元数据节点回报期存储的数据块信息。

secondary NameNode:从元数据节点。周期性将nameNode中的namespaceimage和edit log合并,防止log文件过大。

1.读取过程

    FileSystem对象通过RPC调用nameNode,确定文件的开头部分的块位置。对于每一块,nameNode返回,具有该块副本的

dataNode地址。这些dataNode根据他们与client的距离来排序(网络集群拓扑)。

实战效果

首先我们在pom中引入对应的包


		
			org.apache.hadoop
			hadoop-client
			3.3.0
		
		
		
		
			org.apache.hadoop
			hadoop-common
			3.3.0
		
		
		
		
			org.apache.hadoop
			hadoop-hdfs
			3.3.0
		

然后,在yml文件中,设置节点

hdfs: 
  path: hdfs://192.168.100.6
  username: root

 

实例

/**
	 * 获取HDFS文件系统对象
	 * 
	 * @return
	 * @throws Exception
	 */
	private FileSystem getFileSystem() throws Exception {
		FileSystem fileSystem = FileSystem.get(new URI(hdfsPath), getConfiguration(), hdfsName);
		return fileSystem;
	}




// 在hdfs中创建文件夹
boolean isOk = fs.mkdirs(srcPath);

 

 

 

 

 

你可能感兴趣的:(2020年数据中台)