`
david.org
  • 浏览: 155638 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

HADOOP-HDFS DataNode变身为存储/下载服务器

阅读更多
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类进行改造了.
分享到:
评论
1 楼 yangfuchao418 2010-03-04  
不错,回复内容太短

相关推荐

    hadoop安装

    在所有节点上执行以下操作,把/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....

    hadoop-管理

    1.处理hadoop的datanode宕机 cd path/to/hadoop 走到hadoop的bin目录 ./hadoop-daemon.sh start datanode ./hadoop-daemon.sh start tasktracker 2.处理hadoop的namenode宕机 ./hadoop-daemon.sh start namenode...

    Hadoop-2.8.0分布式安装手册

     本文的目的是为当前最新版本的Hadoop 2.8.0提供最为详细的安装说明,以帮助减少安装过程中遇到的困难,并对一些错误原因进行说明,hdfs配置使用基于QJM(Quorum Journal Manager)的HA。本文的安装只涉及了hadoop-...

    第3集-Hadoop环境搭建 - linux(centos7) - 安装配置hadoop2.7.7.pdf

    Hadoop是Apache基金会下的一个开放源代码项目,主要用于大数据存储和处理。Hadoop核心组件包括HDFS(Hadoop Distributed File System)、MapReduce和YARN(Yet Another Resource Negotiator)。HDFS是一种分布式文件...

    hadoop-2.7.2.rar

    hadoop-2.7.2安装包,解压至/opt/...启动HDFS只需要敲入命令行:sbin/hadoop-daemon.sh start|stop namenode|datanode|secondarynamenode 启动YARN: sbin/yarn-daemon.sh start|stop resourcemanager|nodemanager

    hadoop-hdfs:Hadoop分布式文件系统hdfs代码分析

    hadoop-hdfs Hadoop分布式文件系统hdfs代码分析目录介绍Datanode-数据块基本结构主要介绍了HDFS中第二关系块结构,数据块到数据中断的映射关系。退役-中断退款主要介绍了数据异步下线取消机制。INode-文件目录结构...

    python 零基础学习篇-07.HDFS的命令行户端基本操作--DATANODE存储文件块的观察.mp4

    python 零基础学习篇-07.HDFS的命令行户端基本操作--DATANODE存储文件块的观察.mp4

    hadoop-2.4.1安装软件包以及教程jdk.zip

    先上传hadoop的安装包到服务器上去/home/hadoop/ 注意:hadoop2.x的配置文件$HADOOP_HOME/etc/hadoop 伪分布式需要修改5个配置文件 3.1配置hadoop 第一个:hadoop-env.sh vim hadoop-env.sh #第27行 export ...

    Hadoop02---HDFS基础(HDFS原理 java客户端).md

    自己的笔记,仅供参考,包含HDFS的启动停止,HDFS基本原理(上传文件、连接校验,下载文件,数据存储位置,通信机制,namenode和DataNode职责,元数据工作机制),java端操作HDFS的基本方法

    ansible-hdfs:用于安装 Cloudera HDFS 的 Ansible 角色

    角色变量hdfs_version - HDFS 版本hdfs_cloudera_distribution - Cloudera 发行版(默认: cdh5.4 ) hdfs_conf_dir - HDFS 的配置目录(默认: /etc/hadoop/conf ) hdfs_namenode - 确定节点是否为 HDFS NameNode ...

    Hadoop集群安装

    Hadoop集群安装的详细说明文档, 實作七: Hadoop 叢集安裝 前言 您手邊有兩台電腦,假設剛剛操作的電腦為"主機一" ,另一台則為"主機二" 。則稍後的環境如下 • 管理Data的身份 管理Job的身份 "主機一" namenode ...

    Ubuntu_Hadoop分布部署.docx

    <value>file:/usr/local/hadoop-3.2.2/hadoop_data/hdfs/datanode</value> </property> </configuration> 4. 配置`mapred-site.xml`文件。在`mapred-site.xml`文件中,添加以下配置: <name>mapreduce....

    Hadoop HDFS分布式文件系统 常用命令汇总

    Hadoop HDFS分布式文件系统是大数据存储和处理的核心组件。作为一个分布式文件系统,HDFS提供了高可靠性、高可扩展性和高性能的存储解决方案。在使用HDFS时,经常需要执行一些基本操作,例如拷贝文件、查看目录内容...

    hadoop3.3.3-winutils

    Hadoop3.x在组成上没有变化Hadoop Distributed File System,简称HDFS,是一个分布式文件系统。 (1)NameNode(nn):存储文件的元数据,如文件名,文件目录结构,文件属性(生成时间、副本数、文件权限),以及每...

    Hadoop存储系统HDFS的文件是分块存储.docx

    Hadoop存储系统HDFS的文件是分块存储,每个文件块默认大小为32MB。 T F 评测结果:答案正确(5 分) 1-2 HDFS系统采用NameNode定期向DataNode发送心跳消息,用于检测系统是否正常运行。 T F

    1-1-HDFS+and+YARN.pdf

    (1)HDFS集群:负责海量数据的存储,集群中的角色主要有 NameNode / DataNode/SecondaryNameNode。 (2)YARN集群:负责海量数据运算时的资源调度,集群中的角色主要有 ResourceManager /NodeManager (3)...

    外网无法访问HDFS org.apache.hadoop.hdfs.BlockMissingException: Could not obtain block

    今天使用自己的电脑,使用外网操作阿里云服务器上的HDFS。 报错 org.apache.hadoop.hdfs.BlockMissingException: Could not obtain block 2、百度结果 参考 ...

    Hadoop_HDFS和MapReduce架构浅析_郝树魁.pdf

    在简述Hadoop namenode、datanode运行模式的基础上,重点介绍了Hadoop MapReduce的工作机制,并以作业提交、作业初始化、任务分配、任务执行和任务进度更新等流程介绍了Job Client、JobTracker、TaskTracker和HDFS在...

    大数据hadoop,centos7的安装

    格式化文件系统(仅第一次执行即可,不要重复执行):hdfs/hadoop namenode -format 启动hdfs: sbin/start-dfs.sh 验证是否启动成功: jps DataNode SecondaryNameNode NameNode 浏览器访问方式: ...

    【大数据】Hadoop常用启动命令.pdf

    包括NameNode、 Secondary NameNode、DataNode、JobTracker、 TaskTrack start-dfs.sh 启动Hadoop HDFS守护进程NameNode、SecondaryNameNode和DataNode stop-dfs.sh 停⽌Hadoop HDFS守护进程NameNode、...

Global site tag (gtag.js) - Google Analytics