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.*:54310 from xxx" 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的更改并不多,主要是添加防盗链的技术。可以通过时间、加解密等方法实现。
作于: 2009-5-26
本贴只是重新copy过来重新发布的而已, 在HADOOP-0.21的trunk版本, hadoop已经对StreamFile类进行改造了.
分享到:
相关推荐
### Hadoop-HDFS环境下文件上传与下载操作指南 #### 一、Windows环境下配置Hadoop环境 **1.1 下载Hadoop** 为了在Windows环境下配置Hadoop环境,首先需要下载Hadoop软件包。推荐下载Hadoop 2.7.7版本,可以从清华...
HDFS(Hadoop Distributed File System)是一种分布式文件系统,它为Hadoop的大数据处理提供了高效的存储能力。随着互联网的发展,数据量急剧增加,传统的文件系统无法满足大规模数据的存储需求。为了解决这个问题,...
### HDFS(分布式文件系统) #### HDFS写入剖析: 1. **发请求**:客户端首先向NameNode发起写文件的请求。 2. **检查**:NameNode对客户端的请求进行合法性验证,包括检查文件是否已经存在以及客户端是否有相应的...
在大数据开发领域,Hadoop作为分布式计算框架的重要代表,其HDFS(Hadoop Distributed File System)是数据存储的核心组件。为了方便开发者在IDEA(IntelliJ IDEA)环境中更加便捷地操作HDFS,专门设计了一款名为...
HDFS是Hadoop的核心组成部分,它将大文件分布在多台服务器上,通过副本机制保证数据的可靠性。在Hadoop 2.7中,HDFS主要由以下组件构成: - NameNode:管理元数据,包括文件系统命名空间和文件的块信息。NameNode的...
HDFS配置hdfs-site.xml则涉及NameNode和DataNode的相关参数,如副本数量和数据存储路径: ```xml <name>dfs.replication</name> <value>3</value> </property> <name>dfs.namenode.name.dir</name> ...
### 大数据、Hadoop与HDFS详解 ...综上所述,Hadoop及其核心组件HDFS为解决大数据处理问题提供了有效的解决方案。通过充分利用廉价商用硬件和分布式计算的优势,Hadoop已经成为当前大数据处理领域的关键技术之一。
Hadoop-HDFS,全称为Hadoop Distributed File System,是一种分布式文件系统,旨在解决大规模数据存储和处理的问题。随着大数据时代的到来,单个操作系统无法有效地管理和维护海量数据,因此,分布式文件系统如HDFS...
在所有节点上执行以下操作,把/usr/local/hadoop-0.20.2-cdh3u5的所有者,所有者组改为hadoop并su成该用户 [root@a1 ~]# chown hadoop.hadoop /usr/local/hadoop-0.20.2-cdh3u5/ -R [root@a2 ~]# chown hadoop....
1. **HDFS源码**:HDFS的源码主要位于`hadoop-hdfs-project/hadoop-hdfs`模块中,包含了NameNode、DataNode和Client等组件。NameNode负责元数据管理,DataNode负责数据存储,源码分析可以帮助我们理解其工作原理,如...
HDFS是Hadoop的核心组件之一,它设计为跨多台机器存储和处理海量数据。HDFS具有高容错性和高吞吐量的特点,确保了数据的安全性和可访问性。在Hadoop-2.7.3的版本中,HDFS已经经过了多次优化,增强了数据的可靠性和...
2. **hadoop-hdfs-project**: 包含了HDFS的所有组件,如NameNode、DataNode和Secondary NameNode,以及客户端库和HDFS工具。 3. **hadoop-mapreduce-client**: 提供了MapReduce编程接口,包括JobClient、Mapper、...
Apache Hadoop是一个开源框架,主要用于分布式存储和计算大数据集。Hadoop 3.1.0是这个框架的一个重要版本,提供了许多性能优化和新特性。在Windows环境下安装和使用Hadoop通常比在Linux上更为复杂,因为Hadoop最初...
Hadoop是大数据处理领域的一个关键框架,它由Apache软件基金会维护,主要负责分布式存储和计算。`hadoop-common-2.6.0-bin-master.zip` 是一个针对Hadoop 2.6.0版本的压缩包,特别适用于在Windows环境下进行本地开发...
HDFS为海量数据提供了高容错、高吞吐量的分布式存储,而MapReduce则负责数据的并行处理。Hadoop 2.9.1在此基础上引入了YARN(Yet Another Resource Negotiator),作为资源管理和调度器,提高了系统的灵活性和效率。...
HDFS是一个分布式文件系统,设计为跨多台计算机(节点)存储和处理大量数据,提供高容错性和高可用性。MapReduce则是一种编程模型,用于并行处理和生成大规模数据集。 在Linux环境下安装Hadoop-3.1.3时,首先需要...
Hadoop是一个开源的分布式计算框架,广泛应用于大数据处理和存储。以下是详细的步骤和注意事项,确保您能够成功地搭建起一个运行在CentOS7上的Hadoop集群。 一、系统准备 在开始安装前,确保您的CentOS7系统是最新...
Hadoop Distributed File System (HDFS)是Hadoop的核心组件之一,用于存储大规模数据集。本文将详细介绍如何在Hadoop 1.2.x版本中进行HDFS的基本配置。 #### 二、Hadoop 1.2.x安装与配置 ##### 1. 安装环境准备 -...