1、背景

部门有个需求,在网络互通的情况下,把现有的hadoop集群(未做Kerberos认证,集群名为:bd-stg-hadoop)的一些hdfs文件拷贝到新的hadoop集群(做了Kerberos认证,集群名为zp-tt-hadoop)

如果是两个都没有做安全认证的集群互传文件,使用distcp可以很快实现。在当前情况下,情况可能要复杂一些。通过查阅资料,在cdh的官网上竟然有这么神奇的一个参数可以解决这样的需求。传送门:http://www.cloudera.com/documentation/enterprise/5-5-x/topics/cdh_admin_distcp_secure_insecure.html

2、实现

2.1 Copying Data between two Insecure cluster

两个都没有做安全认证的集群,通常方法如下:

$ hadoop distcp hdfs://nn1:8020/foo/bar hdfs://nn2:8020/bar/foo

也可以通过webhdfs的方式:

$ hadoop distcp webhdfs://nn1:8020/foo/bar  webhdfs://nn2:8020/bar/foo

对于不同Hadoop版本间的拷贝,用户应该使用HftpFileSystem。 这是一个只读文件系统,所以DistCp必须运行在目标端集群上。 源的格式是

hftp://<dfs.http.address>/<path> (默认情况dfs.http.address是 <namenode>:50070)。

distcp的一些参数如下:

-i:忽略失败(不建议开启)
-log:记录日志到 <logdir>
-m:同时拷贝的最大数目(指定了拷贝数据时map的数目。请注意并不是map数越多吞吐量越大。)
-overwrite:覆盖目标(如果一个map失败并且没有使用-i选项,不仅仅那些拷贝失败的文件,这个分块任务中的所有文件都会被重新拷贝。 就像下面提到的,它会改变生成目标路径的语义,所以 用户要小心使用这个选项。)
-update:如果源和目标的大小不一样则进行覆盖
-f:使用<urilist_uri> 作为源文件列表

2.2 Copying Data between a Secure and an Insecure

在secure-cluster上的core-site.xml配置文件中添加:

<property>
<name>ipc.client.fallback-to-simple-auth-allowed</name>
<value>true</value>
</property>

然后在secure-cluster执行如下命令:

distcp webhdfs://insecureCluster webhdfs://secureCluster
distcp webhdfs://secureCluster webhdfs://insecureCluster

在我实际操作过程中,两个集群hdfs都有做ha,使用上面的命令会报错:

16/09/27 14:47:52 ERROR tools.DistCp: Exception encountered
java.lang.IllegalArgumentException: java.net.UnknownHostException: bd-stg-hadoop
at org.apache.hadoop.security.SecurityUtil.buildTokenService(SecurityUtil.java:374)
at org.apache.hadoop.security.SecurityUtil.buildTokenService(SecurityUtil.java:392)
at org.apache.hadoop.hdfs.web.WebHdfsFileSystem.initialize(WebHdfsFileSystem.java:167)
at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2643)
at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:93)
at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:2680)
at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:2662)
at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:379)
at org.apache.hadoop.fs.Path.getFileSystem(Path.java:296)
at org.apache.hadoop.tools.GlobbedCopyListing.doBuildListing(GlobbedCopyListing.java:76)
at org.apache.hadoop.tools.CopyListing.buildListing(CopyListing.java:86)
at org.apache.hadoop.tools.DistCp.createInputFileListing(DistCp.java:365)
at org.apache.hadoop.tools.DistCp.execute(DistCp.java:171)
at org.apache.hadoop.tools.DistCp.run(DistCp.java:122)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
at org.apache.hadoop.tools.DistCp.main(DistCp.java:429)
Caused by: java.net.UnknownHostException: bd-stg-hadoop

解决如下:

把bd-stg-hadoop集群名字改成了active-namenode的host再进行操作,如下:

$ hadoop distcp webhdfs://bd-stg-namenode-138/tmp/hivebackup/app/app_stg_session webhdfs://zp-tt-hadoop:8020/tmp/hivebackup/app/app_stg_session

成功执行后, 可以发现原理就是启动一个只有map的MapReduce作业来实现两个集群间的数据复制。

2.3 Copying Data between two Secure cluster

这种情况相对有些复杂了,需要Kerberos做跨域的配置。本文暂不研究讨论。

hadoop集群间的hdfs文件拷贝的更多相关文章

  1. 相同版本的CDH集群间迁移hdfs以及hbase

    前言 由于项目数据安全的需要,这段时间看了下hadoop的distcp的命令使用,不断的纠结的问度娘,度娘告诉我的结果也让我很纠结,都是抄来抄去, 还好在牺牲大量的时间的基础上还终于搞出来了,顺便写这 ...

  2. hadoop集群搭建(hdfs)

    (搭建hadoop集群的前提是服务器已成功安装jdk以及服务器之间已设置免密码登录,服务器之间的免密码登录可参考<linux服务器间ssh免密码登录>) 1.下载hadoop安装包 wge ...

  3. (转)hadoop 集群间数据迁移

    hadoop集群之间有时候需要将数据进行迁移,如将一些保存的过期文档放置在一个小集群中进行保存. 使用的是社区提供的功能,distcp.用法非常简单: hadoop distcp hdfs://nn1 ...

  4. hadoop集群中的日志文件

    hadoop存在多种日志文件,其中master上的日志文件记录全面信息,包括slave上的jobtracker与datanode也会将错误信息写到master中.而slave中的日志主要记录完成的ta ...

  5. hadoop集群中的日志文件 分类: A1_HADOOP 2015-02-28 20:37 680人阅读 评论(0) 收藏

    hadoop存在多种日志文件,其中master上的日志文件记录全面信息,包括slave上的jobtracker与datanode也会将错误信息写到master中.而slave中的日志主要记录完成的ta ...

  6. hadoop的基本概念 伪分布式hadoop集群的安装 hdfs mapreduce的演示

    hadoop 解决问题: 海量数据存储(HDFS) 海量数据的分析(MapReduce) 资源管理调度(YARN)

  7. Hadoop集群上使用JNI,调用资源文件

    hadoop是基于java的数据计算平台,引入第三方库,例如C语言实现的开发包将会大大增强数据分析的效率和能力. 通常在是用一些工具的时候都要用到一些配置文件.资源文件等.接下来,借一个例子来说明ha ...

  8. Hadoop 集群搭建和维护文档

    一.前言 -- 基础环境准备 节点名称 IP NN DN JNN ZKFC ZK RM NM Master Worker master1 192.168.8.106 * * * * * * maste ...

  9. Hadoop集群配置(最全面总结)

    Hadoop集群配置(最全面总结) 通常,集群里的一台机器被指定为 NameNode,另一台不同的机器被指定为JobTracker.这些机器是masters.余下的机器即作为DataNode也作为Ta ...

随机推荐

  1. iOS网络编程笔记——社交网络编程

    社交网络编程主要使用iOS提供的social框架,目前social框架主要分为两个类: (1)SLComposeViewController提供撰写社交信息(如微博信息)的视图控制器,由iOS系统提供 ...

  2. 【Android】TextView文字长度测量和各种Paddding解析

    老规矩,先上张图 o,这篇好像是分析篇,没有效果图.不管了,位置占着,老规矩不能坏,下面开始正文. *** 这篇博客会讲得比较杂: TextView里各部分的大小该怎么测量? 如何计算每行文字的长度? ...

  3. Angular2之管道学习笔记

    管道.可以把一个输出流与另一个输入流连接起来.类似 linux.gulp都有应用. 在Angular2中使用管道非常方便.Angular2中本身提供了一些内置管道.当然也可以自定义管道. 文档链接:h ...

  4. java iframe 嵌套,session失效重新登录页面嵌套问题

    将后台跳转改写成 PrintWriter out = response.getWriter(); out.println("<html>");    out.print ...

  5. centos下编译phantomjs2.0

    phantomjs是一个无头浏览器,可以用来做测试和爬虫,但是因为有一些问题没有解决,所以官网不提供2.0版本的binary包,所以要自己编译. 1.安装需要的依赖: sudo yum -y inst ...

  6. String 类的实现(3)引用计数实现String类

    我们知道在C++中动态开辟空间时是用字符new和delete的.其中使用new test[N]方式开辟空间时实际上是开辟了(N*sizeof(test)+4)字节的空间.如图示其中保存N的值主要用于析 ...

  7. WPF之路三:视频的播放

    同图片一样,把视频资源复制到文件夹路径下,修改资源属性复制到输出目录"始终复制",生成操作改为“内容”, 把<MediaElement  Name="myVid&q ...

  8. 在IIS上部署你的ASP.NET Core项目

    概述 与ASP.NET时代不同,ASP.NET Core不再是由IIS工作进程(w3wp.exe)托管,而是使用自托管Web服务器(Kestrel)运行,IIS则是作为反向代理的角色转发请求到Kest ...

  9. 这辈子只能碰到一次! 记一次SSL无故被撤消!

    SSL证书刚更新一切都那么正常, 突然有一天网站不能访问了, Chrome浏览器提示有风险, 没有继续访问链接,没有,没有, 重要的事情说三遍, 于是乎赶紧加班查原因, 发展浏览器报的错误是证书撤消( ...

  10. Node.js 安装配置介绍

    Node.js 安装配置 本章节我们将向大家介绍在window和Linux上安装Node.js的方法. 本安装教程以Node.js v6.10.1 LTS(长期支持版本)版本为例. Node.js安装 ...