Hadoop学习笔记1 - 使用Java API访问远程hdfs集群
转载请标注原链接 http://www.cnblogs.com/xczyd/p/8570437.html
2018年3月从新司重新起航了。之前在某司过了的蛋疼三个月,也算给自己放了个小假了。
第一个小目标,从腾讯云上的hdfs集群拷贝一些文件到本地。唔唔,听上去似乎很简单的样子。
于是新建了一个Java的Maven工程,在pom.xml中添加如下依赖:
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>2.6.0</version>
</dependency>
由于腾讯云上的集群是hdfs-2.6.0版本,所以我们的客户端也用2.6.0,尽量保持一致。
不过2.6.0可不是一个好版本,因为它与任何已知的HBase版本都不能做到兼容|||- -
HBase与Hadoop的兼容性详情见http://hbase.apache.org/book.html#configuration
然后,简单百度了一下访问hdfs的Java API的写法,于是得到了下面的代码:
// 根据给定的URI和用户名,访问hdfs的配置参数
Configuration conf = new Configuration(); // 允许访问datanode时使用域名,默认使用IP
conf.set("dfs.client.use.datanode.hostname","true"); // Hadoop的用户名,应当与远端启动hdfs进程的用户名相同,或者根据hdfs的安全设置自行配置
String hdfsUserName = "root"; URI hdfsUri = null;
try {
// NameNode的访问路径
hdfsUri = new URI("hdfs://hd-nn-test-01:9000");
} catch (URISyntaxException e) {
e.printStackTrace();
} try {
// 创建FileSystem对象,并调用copyToLocalFile函数将hdfs中的一个文件拷贝到本地目录
FileSystem fs = FileSystem.get(hdfsUri, conf, hdfsUserName);
fs.copyToLocalFile(new Path("/tmp/test.txt"),
new Path("/tmp"));
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
其中加粗的那一行配置是使用外网IP访问一个同时具有内外网IP的hdfs集群时,所需要的一个特定配置。
需要添加这个配置的原因在于,客户端访问hdfs的namenode之后,获得的datanode信息全是云平台内网的IP。
如果直接用这个内网IP去访问,是无法得到hdfs的文件的。
https://hadoop.apache.org/docs/r2.8.0/hadoop-project-dist/hadoop-hdfs/HdfsMultihoming.html
这个链接中有一节专门介绍了这个问题的产生原因及解决办法。
添加这个配置的同时,还需要修改客户端的hosts文件,将云上的hdfs集群的域名与外网IP做一下映射。
这个配置在hdfs-2.6.0及以后的版本中是有效的,但是更往前的版本是否有效,还没来得及做进一步测试。
PS:其实这个坑困扰了我差不多一整天,一开始试图用SSH Tunnel来解决这个问题,未果;
又想用端口转发,也没有成功;后来想尝试nginx做反向代理,还没来得及尝试就偶然间发现了这个配置,
于是用了比较优雅的一个方式解决了此问题。
Hadoop学习笔记1 - 使用Java API访问远程hdfs集群的更多相关文章
- RocketMQ学习笔记(4)----RocketMQ搭建双Master集群
前面已经学习了RockeMQ的四种集群方式,接下来就来搭建一个双Master(2m)的集群环境. 1. 双Master服务器环境 序号 ip 用户名 密码 角色 模式 (1) 47.105.145.1 ...
- Hadoop学习笔记: MapReduce Java编程简介
概述 本文主要基于Hadoop 1.0.0后推出的新Java API为例介绍MapReduce的Java编程模型.新旧API主要区别在于新API(org.apache.hadoop.mapreduce ...
- Hadoop入门学习笔记-第三天(Yarn高可用集群配置及计算案例)
什么是mapreduce 首先让我们来重温一下 hadoop 的四大组件:HDFS:分布式存储系统MapReduce:分布式计算系统YARN: hadoop 的资源调度系统Common: 以上三大组件 ...
- K8S学习笔记之二进制的方式创建一个Kubernetes集群
0x00 单节点搭建和简述 minikube Minikube是一个工具,可以在本地快速运行一个单点的Kubernetes,尝试Kubernetes或日常开发的用户使用.不能用于生产环境. 官方地址: ...
- ELK+Kafka学习笔记之搭建ELK+Kafka日志收集系统集群
0x00 概述 关于如何搭建ELK部分,请参考这篇文章,https://www.cnblogs.com/JetpropelledSnake/p/9893566.html. 该篇用户为非root,使用用 ...
- Neo4j学习笔记(1)——使用Java API实现简单的增删改查
阅读目录 项目的创建及配置 使用嵌入式数据库 创建节点和关系 查询及更新 删除关系和节点 完整代码 参考资料 回到顶部 项目的创建及配置 因为Neo4j依赖的jar包比较多,所以推荐使用Maven来管 ...
- k8s学习笔记之二:使用kubeadm安装k8s集群
一.集群环境信息及安装前准备 部署前操作(集群内所有主机): .关闭防火墙,关闭selinux(生产环境按需关闭或打开) .同步服务器时间,选择公网ntpd服务器或者自建ntpd服务器 .关闭swap ...
- Hadoop学习笔记2 - 第一和第二个Map Reduce程序
转载请标注原链接http://www.cnblogs.com/xczyd/p/8608906.html 在Hdfs学习笔记1 - 使用Java API访问远程hdfs集群中,我们已经可以完成了访问hd ...
- Hadoop基础-HDFS集群中大数据开发常用的命令总结
Hadoop基础-HDFS集群中大数据开发常用的命令总结 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本盘博客仅仅列出了我们在实际生成环境中常用的hdfs命令,如果想要了解更多, ...
随机推荐
- vue-计算属性和侦听器
1.计算属性 模板内的表达式非常便利,但是设计它们的初衷是用于简单运算的.在模板中放入太多的逻辑会让模板过重且难以维护.例如: <div id="example"> { ...
- SQLite数据库 简介、特点、优势、局限性及使用
SQLite简介 SQLite是一个进程内的轻量级嵌入式数据库,它的数据库就是一个文件,实现了自给自足.无服务器.零配置的.事务性的SQL数据库引擎.它是一个零配置的数据库,这就体现出来SQLite与 ...
- 【调试基础】Part 1 寄存器
01 寄存器体系 02 16/32/64位寄存器
- PDF 补丁丁 0.6.0.3326 版发布(修复提取图片的问题)
新的 PDF 补丁丁已经发布. 新版本更新了 PDF 渲染引擎. 另外修复了网友提出的提取图片功能中的两个问题.
- rebar3自动编译
功能:修改完代码可以自动编译加载到VM中 必须安装的软件: Linux: inotify 链接https://github.com/rvoicilas/inotify-tools/wiki 配置: ...
- Html5 <video>实现摄像头监控问题:html5并不支持rtsp协议,所以使用vlc进行转码,将rtsp转http流,这样<video>才可以直接播放
今天在写html5中播放旷视C2摄像头视频监控的功能,查了很多资料,才发现Html5 <video>并不支持rtsp协议.后来查到使用第三方转码才得以实现. 这里把方法写下来分享给大家. ...
- JS变量的提升详解
此次说明的是var与function的变量提升 那么先看一段代码 <script type="text/javascript"> console.log(test); ...
- Vue学习Day003
事件修饰符 在事件处理程序中调用 event.preventDefault() 或 event.stopPropagation() 是非常常见的需求.尽管我们可以在方法中轻松实现这点,但更好的方式是: ...
- 2018网站Https升级完全攻略
这篇文章主要讲下HTTPs升级的全部流程,包括SSL/TLS证书获取,证书安装,网站调试(将站内http资源全部改为https+重定向等),升级成功后向谷歌webmaster和GA的重新提交新的网站. ...
- tfs增加用户
1.windows上添加用户 2.tfs对应项目添加该用户 3.注意: 要设置服务器对应的本地安全策略 从网络上允许该用户访问