[原文地址]

跨集群访问

发表于 2015-06-01   |  

简单总结下跨集群访问的多种方式。

跨集群访问HDFS

直接给出HDFS URI

我们平常执行hadoop fs -ls /之类的操作时,其实是读取的core-site.xml中fs.defaultFS的配置,去连接这个配置指定的NameNode。
其实可以直接给出完整的URI,即可访问不同的hdfs:

1
2
3
4
5
6
7
8
9
10
11
12
13
hadoop@inspur116:~/jxy/test/multiple_nn/hadoop-2.2.0/bin$ ./hadoop fs -ls hdfs://hadoop40.photo.163.org:8020/user
Found 17 items
drwx------ - ad hdfs 0 2015-02-09 14:48 hdfs://hadoop40.photo.163.org:8020/user/ad
drwxr-x--- - click_tracker hdfs 0 2015-01-22 16:09 hdfs://hadoop40.photo.163.org:8020/user/click_tracker
drwxr-xr-x - comic hdfs 0 2015-02-10 14:48 hdfs://hadoop40.photo.163.org:8020/user/comic
drwxr-x--- - easegame hdfs 0 2015-01-13 14:49 hdfs://hadoop40.photo.163.org:8020/user/easegame
 
hadoop@inspur116:~/jxy/test/multiple_nn/hadoop-2.2.0/bin$ ./hadoop fs -ls hdfs://backend3.photo.163.org:8020/user
Found 40 items
drwx------ - ad hdfs 0 2015-01-19 13:35 hdfs://backend3.photo.163.org:8020/user/ad
drwx------ - azkaban hdfs 0 2015-02-02 10:38 hdfs://backend3.photo.163.org:8020/user/azkaban
drwxr-x--- - blog hdfs 0 2015-02-02 10:38 hdfs://backend3.photo.163.org:8020/user/blog
drwx------ - censor hdfs 0 2015-02-10 03:00 hdfs://backend3.photo.163.org:8020/user/censor

这种方式缺点在于要知道NN的地址。如果不开启HA的话没什么问题,但开启HA后,NN的状态可能会在active和standby之间变化。如果去连接standby NN就会抛出异常。
而且这种写法也让HA失去意义了。我见过一些奇葩的用户,程序里直接写死了NN的IP地址。。。那还要HA干什么。

在客户端配置多个HA HDFS

其实就是HDFS Federation的配置。
关于HA的配置,其实完全是客户端的,跟服务端没关系,见HA集群中如何判断ActiveNN
所以可以修改客户端的hdfs-site.xml,修改以下配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<!-- hz-cluster1是本来就有的,加一个hz-cluster2 -->
<property>
<name>dfs.nameservices</name>
<value>hz-cluster1,hz-cluster2</value>
</property>
<!-- 以下是新增的hz-cluster2的HA配置 -->
<property>
<name>dfs.ha.namenodes.hz-cluster2</name>
<value>nn1,nn2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.hz-cluster2.nn1</name>
<value>hadoop40.photo.163.org:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.hz-cluster2.nn2</name>
<value>hadoop41.photo.163.org:8020</value>
</property>
<property>
<name>dfs.namenode.http-address.hz-cluster2.nn1</name>
<value>hadoop40.photo.163.org:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.hz-cluster2.nn2</name>
<value>hadoop41.photo.163.org:50070</value>
</property>
<property>
<name>dfs.client.failover.proxy.provider.hz-cluster2</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>

然后即可访问多个集群:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# fs.defaultFS是hz-cluster1,所以不指定完整URI时,访问hz-cluster1
hadoop@inspur116:~/jxy/test/multiple_nn/hadoop-2.2.0/bin$ ./hadoop fs -ls /user
Found 40 items
drwx------ - ad hdfs 0 2015-01-19 13:35 /user/ad
drwx------ - azkaban hdfs 0 2015-02-02 10:38 /user/azkaban
drwxr-x--- - blog hdfs 0 2015-02-02 10:38 /user/blog
drwx------ - censor hdfs 0 2015-02-10 03:00 /user/censor
 
hadoop@inspur116:~/jxy/test/multiple_nn/hadoop-2.2.0/bin$ ./hadoop fs -ls hdfs://hz-cluster1/user
Found 40 items
drwx------ - ad hdfs 0 2015-01-19 13:35 hdfs://hz-cluster1/user/ad
drwx------ - azkaban hdfs 0 2015-02-02 10:38 hdfs://hz-cluster1/user/azkaban
drwxr-x--- - blog hdfs 0 2015-02-02 10:38 hdfs://hz-cluster1/user/blog
drwx------ - censor hdfs 0 2015-02-10 03:00 hdfs://hz-cluster1/user/censor
 
hadoop@inspur116:~/jxy/test/multiple_nn/hadoop-2.2.0/bin$ ./hadoop fs -ls hdfs://hz-cluster2/user
Found 17 items
drwx------ - ad hdfs 0 2015-02-09 14:48 hdfs://hz-cluster2/user/ad
drwxr-x--- - click_tracker hdfs 0 2015-01-22 16:09 hdfs://hz-cluster2/user/click_tracker
drwxr-xr-x - comic hdfs 0 2015-02-10 14:48 hdfs://hz-cluster2/user/comic
drwxr-x--- - easegame hdfs 0 2015-01-13 14:49 hdfs://hz-cluster2/user/easegame

好处就是利用了HA,一台NN挂掉时不用改配置。

利用ViewFs

官方文档

这个功能本来是用于HDFS Federation的,但也可以用于多集群。
类似linux的mount命令,将多个hdfs挂载到不同的目录。在hdfs-site.xml中加上相关配置:

1
2
3
4
5
6
7
8
9
<property>
<name>fs.viewfs.mounttable.dummyCluster.link./binjiang</name>
<value>hdfs://hz-cluster1/</value>
<!-- 这里用了HA的配置,也可以写死NN地址 -->
</property>
<property>
<name>fs.viewfs.mounttable.dummyCluster.link./xiaoshan</name>
<value>hdfs://hz-cluster2/</value>
</property>

修改core-site.xml的配置:

1
2
3
4
<property>
<name>fs.defaultFS</name>
<value>viewfs://dummyCluster</value>
</property>

然后即可访问多个集群:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
hadoop@inspur116:~/jxy/test/multiple_nn/hadoop-2.2.0/bin$ ./hadoop fs -ls /
Found 2 items
-r--r--r-- - da@HADOOP.HZ.NETEASE.COM lofter_apache 0 2015-02-10 18:57 /binjiang
-r--r--r-- - da@HADOOP.HZ.NETEASE.COM lofter_apache 0 2015-02-10 18:57 /xiaoshan
 
hadoop@inspur116:~/jxy/test/multiple_nn/hadoop-2.2.0/bin$ ./hadoop fs -ls /binjiang/user
Found 40 items
drwx------ - ad hdfs 0 2015-01-19 13:35 /binjiang/user/ad
drwx------ - azkaban hdfs 0 2015-02-02 10:38 /binjiang/user/azkaban
drwxr-x--- - blog hdfs 0 2015-02-02 10:38 /binjiang/user/blog
drwx------ - censor hdfs 0 2015-02-10 03:00 /binjiang/user/censor
 
# 也可以写完整的URI,否则就用fs.defaultFS的配置
hadoop@inspur116:~/jxy/test/multiple_nn/hadoop-2.2.0/bin$ ./hadoop fs -ls viewfs://dummyCluster/xiaoshan/user
Found 17 items
drwx------ - ad hdfs 0 2015-02-09 14:48 viewfs://dummyCluster/xiaoshan/user/ad
drwxr-x--- - click_tracker hdfs 0 2015-01-22 16:09 viewfs://dummyCluster/xiaoshan/user/click_tracker
drwxr-xr-x - comic hdfs 0 2015-02-10 14:48 viewfs://dummyCluster/xiaoshan/user/comic
drwxr-x--- - easegame hdfs 0 2015-01-13 14:49 viewfs://dummyCluster/xiaoshan/user/easegame
 
# 这里其实是跨集群的copy,但背后细节被隐藏了
hadoop@inspur116:~/jxy/test/multiple_nn/hadoop-2.2.0/bin$ ./hadoop fs -cp /binjiang/tmp/hadoop /xiaoshan/tmp

上面的例子中只有一个虚拟集群dummyCluster。其实也可以虚拟多个集群,每个虚拟集群可以挂载任意多hdfs,只要路径不冲突即可。还可以挂载子目录。具体不展开了,参考官方文档。

一些问题

上面所有例子中的配置,都是客户端的。只在当前客户端生效。好处是不需要服务端改配置(一般要重启),用户可以自己选择。
如果两边集群的认证方式不同(比如一个kerberos一个simple),是否能访问没测试过。
在我们的配置中,两边的集群用的是同样的KDC,所以用户信息是相通的,hdfs权限也是相通的。如果用了两个KDC,是否能访问没测试过。
上述配置中的hz-cluster1/hz-cluster2等字符串,其实用户也可以换成任意值,都是客户端配置。

跨集群YARN

跨集群跑YARN任务是可行的,但有些限制。NM在跑任务时也是hdfs客户端,如果想让NM能访问不同hdfs的数据,就要加上面说过的那些配置(多个HA配置或ViewFs)。简言之,要改服务端配置。
如果不改服务端配置,就只能写死NN地址。
注意,任务提交到哪个YARN集群只跟当前客户端的yarn-site.xml有关。跟访问哪个hdfs无关。
理论上YARN集群和hdfs集群可以是完全不同的物理机。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 以下都是以滨江集群的客户端为例
 
# 可以运行。输入数据在滨江集群,输出写到萧山集群
hadoop@inspur116:~/jxy/test/multiple_nn/hadoop-2.2.0/bin$ ./hadoop jar ../share/hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jar wordcount /tmp/hadoop hdfs://hadoop40.photo.163.org:8020/tmp/multiple_nn
 
# 可以运行。输入是萧山集群的,任务在滨江集群运行,输出写到滨江。
hadoop@inspur116:~/jxy/test/multiple_nn/hadoop-2.2.0/bin$ ./hadoop jar ../share/hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jar wordcount hdfs://hadoop40.photo.163.org/user/comic/mobile/hadoop /tmp/multiple_nn
 
# 和上一条命令是一样效果。服务端有hz-cluster1的配置。
hadoop@inspur116:~/jxy/test/multiple_nn/hadoop-2.2.0/bin$ ./hadoop jar ../share/hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jar wordcount hdfs://hadoop40.photo.163.org/user/comic/mobile/hadoop hdfs://hz-cluster1/tmp/multiple_nn
 
# 运行失败。只有当前客户端知道hz-cluster2指的是哪台机器,服务端没这个配置
hadoop@inspur116:~/jxy/test/multiple_nn/hadoop-2.2.0/bin$ ./hadoop jar ../share/hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jar wordcount hdfs://hz-cluster2/user/comic/mobile/hadoop /tmp/multiple_nn
 
# 运行失败。理由同上。
hadoop@inspur116:~/jxy/test/multiple_nn/hadoop-2.2.0/bin$ ./hadoop jar ../share/hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jar wordcount /tmp/hadoop hdfs://hz-cluster2/tmp/multiple_nn

distcp命令的本质也是提交一个MR,所以也受上述规则的限制。
如果修改服务端的配置,应该就可以用hz-cluster2了,没试过。要修改所有节点的配置文件,代价比较大。

Hadoop 跨集群访问的更多相关文章

  1. Hadoop跨集群迁移数据(整理版)

    1. 什么是DistCp DistCp(分布式拷贝)是用于大规模集群内部和集群之间拷贝的工具.它使用Map/Reduce实现文件分发,错误处理和恢复,以及报告生成.它把文件和目录的列表作为map任务的 ...

  2. 大数据实操2 - hadoop集群访问——Hadoop客户端访问、Java API访问

    上一篇中介绍了hadoop集群搭建方式,本文介绍集群的访问.集群的访问方式有两种:hadoop客户端访问,Java API访问. 一.集群客户端访问 Hadoop采用C/S架构,可以通过客户端对集群进 ...

  3. 中国联通改造 Apache DolphinScheduler 资源中心,实现计费环境跨集群调用与数据脚本一站式访问

    截止2022年,中国联通用户规模达到4.6亿,占据了全中国人口的30%,随着5G的推广普及,运营商IT系统普遍面临着海量用户.海量话单.多样化业务.组网模式等一系列变革的冲击. 当前,联通每天处理话单 ...

  4. Hive跨集群迁移

    Hive跨集群迁移数据工作是会出现的事情, 其中涉及到数据迁移, metastore迁移, hive版本升级等. 1. 迁移hdfs数据至新集群hadoop distcp -skipcrccheck ...

  5. 实现Kubernetes跨集群服务应用的高可用

    在Kubernetes 1.3版本,我们希望降低跨集群跨地区服务部署相关的管理和运营难度.本文介绍如何实现此目标. 注意:虽然本文示例使用谷歌容器引擎(GKE)来提供Kubernetes集群,您可以在 ...

  6. 暑假第二弹:基于docker的hadoop分布式集群系统的搭建和测试

    早在四月份的时候,就已经开了这篇文章.当时是参加数据挖掘的比赛,在计科院大佬的建议下用TensorFlow搞深度学习,而且要在自己的hadoop分布式集群系统下搞. 当时可把我们牛逼坏了,在没有基础的 ...

  7. 使用Docker在本地搭建Hadoop分布式集群

    学习Hadoop集群环境搭建是Hadoop入门必经之路.搭建分布式集群通常有两个办法: 要么找多台机器来部署(常常找不到机器) 或者在本地开多个虚拟机(开销很大,对宿主机器性能要求高,光是安装多个虚拟 ...

  8. 一脸懵逼学习Hadoop分布式集群HA模式部署(七台机器跑集群)

    1)集群规划:主机名        IP      安装的软件                     运行的进程master    192.168.199.130   jdk.hadoop      ...

  9. 基于zookeeper的高可用Hadoop HA集群安装

    (1)hadoop2.7.1源码编译 http://aperise.iteye.com/blog/2246856 (2)hadoop2.7.1安装准备 http://aperise.iteye.com ...

随机推荐

  1. Java全栈程序员之08:MAVEN+JAVA配置

    从Spring3.0开始,Spring支持以Java配置的方式来代替XML配置.这一点说起来其实有点可笑,XML配置的方式最初被创建出来就是为了让配置与程序员无关.可是最终我们发现,绝大多数的那些配置 ...

  2. CentOS7+Hadoop2.7.2(HA高可用+Federation联邦)+Hive1.2.1+Spark2.1.0 完全分布式集群安装

    1 2 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 2.9.1 2.9.2 2.9.2.1 2.9.2.2 2.9.3 2.9.3.1 2.9.3.2 2.9.3.3 2. ...

  3. OpenCV3 for python3 学习笔记3-----用OpenCV3处理图像2

    3.5.Canny边缘检测 OpenCV提供了Canny边缘检测函数来识别边缘.它有5个步骤:使用高斯滤波器对图像进行去噪.计算梯度.在边缘上使用最大抑制(NMS).在检测到的边缘上使用双阀值去除 假 ...

  4. SSE图像算法优化系列二十五:二值图像的Euclidean distance map(EDM)特征图计算及其优化。

    Euclidean distance map(EDM)这个概念可能听过的人也很少,其主要是用在二值图像中,作为一个很有效的中间处理手段存在.一般的处理都是将灰度图处理成二值图或者一个二值图处理成另外一 ...

  5. 【PMP】项目整合管理

    项目整合的七个过程组: 制定项目章程 制定项目管理计划 指导语管理项目工作 管理项目知识 监控项目工作 实施整体变更控制 结束项目或阶段 1.制定项目章程 1.1 定义 制定项目章程是编写一份正式批准 ...

  6. vim:放弃hjkl

    vim放弃使用hjkl,可以加快文本的编辑速度,不信,看我摘录的文章:http://vimcasts.org/blog/2013/02/habit-breaking-habit-making/ Wor ...

  7. 【OpenFOAM案例】03 Docker安装OpenFOAM

    "工欲善其事必先利其器",软件装不上,讲再多的使用技巧也是白搭.近期不少留言说OpenFOAM不容易安装,今天来谈谈如何在Linux下利用Docker安装OpenFOAM. Lin ...

  8. idea 下 encodings.xml 的正确位置

    在多个module存在的情况下 encodings.xml在 project 下的.idea 下面         这个就是最父级project

  9. WordPress 安装插件导致 HTTP 500 内部服务器错误的问题

      春节这几天忙着过节,一直没有看网站,今天登陆上来看到插件有更新,点开更新后,悲剧发生了.页面就无法加载,出现错误无法加载了,着实让我慌了慌(想到重来就郁闷) Chrome:该网页无法正常工作www ...

  10. ASP.NET Web Forms - 网站导航(Sitemap 文件)

    [参考]ASP.NET Web Forms - 导航 ASP.NET 带有内建的导航控件. 网站导航 维护大型网站的菜单是困难而且费时的. 在 ASP.NET 中,菜单可存储在文件中,这样易于维护.文 ...