赞
踩
准备:之前我们已经部署好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中引入对应的包
- <!--引入hadoop-client Jar包 -->
- <dependency>
- <groupId>org.apache.hadoop</groupId>
- <artifactId>hadoop-client</artifactId>
- <version>3.3.0</version>
- </dependency>
-
- <!-- 引入hadoop-common Jar包 -->
- <dependency>
- <groupId>org.apache.hadoop</groupId>
- <artifactId>hadoop-common</artifactId>
- <version>3.3.0</version>
- </dependency>
-
- <!-- 引入hadoop-hdfs Jar包 -->
- <dependency>
- <groupId>org.apache.hadoop</groupId>
- <artifactId>hadoop-hdfs</artifactId>
- <version>3.3.0</version>
- </dependency>
然后,在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);
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。