Hadoop默认采用返回host的手段,给予客户端响应。在FSNamesystem端,实现了以jetty为容器的web服务,在集群中,通过HTTP可以很轻松的下载文件系统当中的某文件。不过在此,记录的不是如何下载文件,而是Hadoop未实现的几个下载功能的实现方法。
假使我们现在需要让DataNode成为我们存储系统的下载、及存储服务器。那么按照现有的Hadoop的实现,会遇到如下问题:
1. 远程机无法下载文件。
2. 远程机器无法使用flashGet、迅雷等下载工具,实现断点下载。
3. 远程机可以任意拼出HTTP地址,下载集群中的文件。
首先出现第一种情况的主要原因是,远程机无法解析Datanode的host。因为在namenode接收到web请求时,servlet默认返回的是存在该BLOCK的节点的host,那么解决的方法是返回Datanode的ip地址。这里如果在应用中,存在一个注意点,那就是在我们的集群中,我们让集群内部通信,使用各自的内网地址。然而对外返回时,使用其各个节点的公网地址。初使阶段,我尝试过让Datanode的公网地址通过注册,告知Namenode,不过这种方法有几个毛病:1. 修改hdfs的代码量巨大,2. 在公网地址改变时,需要重起节点。
朋友们如想修改代码,我这里可以提供点思路供参考,在DatanodeID中,加入一个公网地址的字段。同时实现readFied/writeFied方法。不过抱歉的是,当时调试时还是失败了。不过之前我的分存式系统居然没有出现问题,由于时间问题,所以没来的急研究,在linux及Cygwin中,put文件时未出现问题,不过Hadoop Over Ftp中,传输文件时,cast 下面的异常:
Exception in thread "IPC Client (47) connection to /192.168.3.11:54310 from dyj" java.lang.NegativeArraySizeException
at org.apache.hadoop.io.Text.readString(Text.java:401)
at org.apache.hadoop.hdfs.protocol.DatanodeInfo.readFields(DatanodeInfo.java:342)
at org.apache.hadoop.hdfs.protocol.LocatedBlock.readFields(LocatedBlock.java:133)
at org.apache.hadoop.io.ObjectWritable.readObject(ObjectWritable.java:237)
at org.apache.hadoop.io.ObjectWritable.readFields(ObjectWritable.java:66)
at org.apache.hadoop.ipc.Client$Connection.receiveResponse(Client.java:506)
at org.apache.hadoop.ipc.Client$Connection.run(Client.java:438)
问题1的解决方案是,在Namende#FSNameystem中,做一个Map,用于存各个节点的内网及公网地址。当然最好是被一个类封装,然后定义一个本地文本文件。启动NameNode时,从本地文件读入。当节点地址发生变更时,我们调用dfsadmin –refresh命令,在fsnamesystem的refreshNodes方法中,加入更新公网地址的方法,就OK了。
问题2 在保证可以下载文件之后,接下来可以扩展其他功能,如断点下载。Hadoop默认是一次性把文件读完的。要做到这一点,其实不难,只需要了解Http头信息的处理,以前调用hadoop的open(offset)方法即可。
在HTTP头信息中,主要是读取Range的头信息,关于格式,可以参考RFC文档,有更为详细的说明,那么程序也就根据规范来实现即可。那么最后主要是取得offset参数就行。
问题3 这个问题实际对hadoop的更改并不多,主要是添加防盗链的技术。可以通过时间、加解密等方法实现。
分享到:
相关推荐
1. **数据存储**: DataNode是HDFS的存储节点,负责存储实际的数据块。每个数据块由两部分组成:数据文件和元数据文件。数据文件存储实际的数据内容,元数据文件则包含数据块的长度、校验和以及时间戳等信息。 2. **...
HDFS中的RPC(Remote Procedure Call)机制是指客户端可以通过网络调用服务器端的方法,以便于实现分布式计算和存储。HDFS使用RPC机制来实现 Namenode 和 Datanode 之间的通信。 在HDFS中,RPC机制主要应用于以下几...
结合FTP服务器,可以为AI开发人员提供一个易于使用的接口,让他们无需深入理解HDFS的复杂性,就能上传、下载和管理大量的训练数据。这有助于加速AI模型的开发和迭代过程,同时确保数据的安全和可靠性。 【标签】:...
总的来说,HDFS以其可扩展性强、容错性高、成本低廉等特点,成为大数据存储解决方案的首选。对于需要处理PB级别数据的场景,HDFS提供了稳定可靠的存储能力,是构建数据仓库和分析系统的基础架构。然而,由于HDFS不...
`dfs.data.dir`则定义了DataNode存储数据块的本地路径;`hadoop.tmp.dir`用于指定Hadoop的临时文件夹路径;`dfs.replication`设置了数据块的复制因子。 2. **配置`mapred-site.xml`**: - 同样地,在`conf`目录下...
- 配置HDFS的`hdfs-site.xml`,设定NameNode和DataNode的数据存储位置及副本数量: ```xml <name>dfs.replication</name> <value>1</value> </property> <name>dfs.namenode.name.dir</name> <value>...
`OPEN`用于读取文件,`offset`用于指定读取文件的起始位置,`length`定义了要读取的数据长度,`buffersize`设置缓冲区大小,以及`noredirect`参数,用于控制是否将请求重定向到实际存储数据的DataNode。 【使用示例...
4.2 Datanode存储 312 4.2.1 Datanode升级机制 312 4.2.2 Datanode磁盘存储结构 315 4.2.3 DataStorage实现 317 4.3 文件系统数据集 334 4.3.1 Datanode上数据块副本的状态 335 4.3.2 BlockPoolSlice...
为了监控HDFS集群的健康状况,NameNode和DataNode都内置了Web服务器,允许管理员通过网页界面查看集群状态。HDFS的持续改进和新特性实现,使其在大数据处理领域保持了强大的生命力。 总结来说,HDFS是Hadoop的核心...
安装步骤包括下载 HDFS 的安装文件、解压安装文件、配置系统参数、安装 J2sdk、上传 HDFS 目录到所有服务器上等。启动步骤包括格式化 Namenode 文件系统、启动 HDFS、启动 Namenode 和 Datanode 等。 2.1 安装 ...
2. **DataNode**:是HDFS的从节点,负责存储实际的数据块。每个DataNode会定期向NameNode报告其上的块信息,同时提供数据读写服务,支持数据的冗余备份以确保高可用性。 3. **客户端**:用户通过客户端与HDFS交互,...
在大数据处理领域,Hadoop HDFS(Hadoop Distributed File System)是核心组件之一,它为大规模数据存储提供了可扩展、高容错性的解决方案。本高级教程将深入剖析HDFS的内部机制,帮助读者掌握其核心概念和实际操作...
HDFS是一个高度可扩展的文件系统,用于存储大量数据,并支持在集群环境中进行数据的分布存储。 #### 二、HDFS安装环境准备 在部署HDFS之前,需要对服务器环境进行一定的准备,确保硬件和软件满足要求。 ##### 2.1 ...
HDFS是Hadoop的核心组成部分,它将大文件分布在多台服务器上,通过副本机制保证数据的可靠性。在Hadoop 2.7中,HDFS主要由以下组件构成: - NameNode:管理元数据,包括文件系统命名空间和文件的块信息。NameNode的...
HDFS最初由Google公司的GFS(Google File System)论文启发而来,自2003年10月公开发布后,已成为大数据存储领域中不可或缺的核心技术。 HDFS的设计目标是运行在大量廉价商用机器组成的集群之上,这些机器的硬件...
在现代互联网环境中,流媒体服务已经成为用户日常娱乐的重要部分,其中“基于HDFS的视频播放”是一个关键的技术实现。HDFS(Hadoop Distributed File System)是Apache Hadoop项目的核心组件,是一个分布式文件系统...
HDFS遵循主从结构,由NameNode(主节点)负责元数据管理,DataNode(从节点)负责实际数据存储。HDFS通过将大文件分割为块并复制到多个节点,确保了数据的可用性和可靠性。 在这个基于Spring Boot的网盘应用中,...
HDFS采用主从架构,其中NameNode负责管理文件系统的命名空间以及客户端对文件的访问,而DataNode负责存储实际的数据块。 - **MapReduce**:用于处理和生成大型数据集,是一种分布式计算模型。它将复杂的任务分解成一...
此外,由于更改DataNode存储目录会暂时影响HDFS服务,因此需要在低峰时段或计划内维护期间进行。 2. **检查HDFS状态**:切换到`hdfs`用户,使用`hdfs fsck /`命令检查HDFS的健康状态。如果返回"The filesystem ...