虽然HDFS提供了distcp的远程拷贝工具,在同版本之间拷贝很方便,功能也很强大。但是,在跨版本、跨 运维机制时,它就不可用了。另外,HDFS也专门为跨版本提供了hftp协议,提供只读功能,但是该功能也有个致命缺陷,即需要配置被拷贝集群的所有节点的hosts,因为这个协议走的是HDFS的web管理接口,里面每个数据节点都是以hostname对外提供服务,所以,不配置hosts是不行的。但是在一些大公司,运维制度很苛刻,root的密码是不对非运维人员提供的,甚至普通用户的密码也不对外,更别人让他们去配置那么多的hosts,这是要走申请和授权的,太麻烦。再者,在大公司,hadoop的集群比较多,版本也不一样,总不能每次都去配置成千上万的hosts,不易维护。
至此,跨版本拷贝HDFS的需求应运而生,但实现该目标有以下四点:
1、同一进程内实现跨版本数据的读和写;
2、全内存交换数据,不写磁盘;(一是因为效率低,二是没有这么大的磁盘[数据文件很大,上T的都有])
3、拷贝目录时的递归拷贝;
4、拷贝数据的完整性和一致性。
这就也对应了四点需要解决的问题:
1、在同一进程内,如何在面对不同集群版本时加载对应的jar,这需要实现自定制的类加载机制;
2、多线程并发控制,缓存利用,带宽利用,保证高效拷贝;
3、分清拷贝目录和文件的区别,同时保证在目标集群保存该目录下结构的一致性;
4、对目录拷贝时,对个别出错文件的处理方案;源端和目的端的压缩机制、文件格式等
为了方便应用和扩展,我个人设计开发了一套跨版本拷贝的JAVA拷贝工具,处于对公司技术保密制度的尊重和落实,这里我就不发布实现的源码了,但是具体思路可以分享一下。
1、首要解决自定制的类加载器,普通实现是继承URLClassLoader,但是有个问题,单纯通过它去加载指定jar包,然后显示反射需要的类时,是完全没问题的,但是当显示调用的类内部调用别的类时(及内部隐士调用),依然会导致版本错乱(因为不同HDFS版本依赖有些不同版本的第三方jar,默认类加载器在类路径下按照先后顺序加载,当出现重名类时,取第一个jar的),因此,首要解决累加器;
2、定义上层接口,定义create、open、delete等文件操作方法,以及一些辅助功能如递归目录等;
3、为工具稳定和维护增加日志、监控和自运维功能设计,如重试等
4、子类中用到Hadoop的中类时,全反射机制实现,重点关注是子类自己申明的还是继承至父类、处理数组、流关闭等;
5、双缓冲队列,谨记,该“双缓冲”与常规双缓冲是有区别的,因此这是流式读取,顺序不能乱。
6、命令行易用参数设计,可配置化设计等
做到上述这些,那么一个结构简单却功能强大、稳定的工具就诞生了。
另外,部署时,记得工具中的hadoop配置文件应该从线上拷贝过来或者从源集群的客户端中拷贝,还有就是要记得在跨用户、用户组时,部署主机的安全配置机制和源集群的安全验证机制要保持一致。
设计、研发和测试该工具,我用了1.5天,现在在线上运行一切正常,符合预期。表扬一下自己和感谢一下现实环境下的“变态”需求催生了自我创新。
相关推荐
自从诞生HDFS开始,相关的性能压测工具就出现了,其中一些堪称经典之作更是检验HDFS性能的必用神器。例如Terasort,Slive,DFSIO,下面我就这几个工具的共同点和各自的特点做一个简单分析。
#资源达人分享计划#
3、HDFS的使用(读写、上传、下载、遍历、查找文件、整个目录拷贝、只拷贝文件、列出文件夹下文件、删除文件及目录、获取文件及文件夹属性等)-java 网址:...
人工智能-hdfs
[hadoop] 将关系数据库导入到HDFS的工具 Sqoop
windows平台下的HDFS文件浏览器,就像windows管理器一样管理你的hdfs文件系统。现在官网已经停止更新这款软件。具体配置如下: HDFS配置页面及端口http://master:50070 配置HDFS服务器 配置WebHDFS HDFS Explorer...
Facebook开发HDFS和HBase的新进展
HDFS客户端工具,可以通过操作客户端实现将windows本地资源上传到HDFS,也可以方便的下载、删除等操作。
Java idea 开发工具 hadoop-hdfs插件。 idea hadoop-hdfs插件,和eclipse上一样的Hadoop hdfs的插件功能一样;端口分别为50020和9000,不用点测试直接点应用即可 idea插件 hadoop hdfs
大数据HDFS二次开发.pdf
HDFS是Hadoop分布式计算的存储基础。HDFS具有高容错性,可以部署在通用硬件设备上,适合数据密集型应用,并且提供对数据读写的高吞 吐量。HDFS能 够提供对数据的可扩展访问,通过简单地往集群里添加节点就可以解决...
hdfs远程操作工具HDFS+Explorer.hdfs
大数据开发:HDFS数据节点与名称节点的通信机制.docx
第1章 HDFS 1 1.1 HDFS概述 1 1.1.1 HDFS体系结构 1 1.1.2 HDFS基本概念 2 1.2 HDFS通信协议 4 1.2.1 Hadoop RPC接口 4 ...5.5 HDFS常用工具 549 5.5.1 FsShell实现 550 5.5.2 DFSAdmin实现 552
《Hadoop大数据开发实战》教学教案—03HDFS分布式文件系统.pdf
hdfs 文件的上传,hdfs fs -put /文件名
hadoop的hdfs的工具类,基于hadoop的2.6.4的开发的工具类,hadoop的namenode的ha模式过几天上传
适合刚接触hadoop的学生或小白,内容包括HDFS shell操作及HDFS Java API编程 有图片有代码
Java管理hdfs文件和文件夹的工具类,最近版本hadoop2.4。
并安装好HBASE进行程序的开发,步骤详细完整,在相关过程中配有完整代码和解释,全程无误,只需复制粘贴即可,小白新手按步骤一步一步来也能操作成功并进行HDFS和HBASE程序开发!!!喜欢请关注本人空间动态,并会...