在emr中使用httpfs组件

httpfs是hadoop中HDFS over HTTP的实现,为HDFS的读写操作提供了统一的REST HTTP接口。在一些特定场景下非常有用,例如不同hadoop版本集群间数据拷贝, 使用httpfs作为对外提供数据访问的网关等。

httpfs组件与namenode内置的http接口都能提供webhdfs http接口,但二者不同的是httpfs可以作为独立服务部署到其他节点上,从而与namenode互相独立。

在emr V2版本中已经默认在master节点上启动了httpfs组件,无需单独部署和启动,emr V1版本或者在非emr节点的客户机中启动方式如下:

su - hadoop
/usr/local/service/hadoop/sbin/httpfs.sh start

emr中默认配置的httpfs端口为4032,启动之后即可通过下面方式进行测试:

$ curl "localhost:4032/webhdfs/v1?user.name=hadoop&op=gethomedirectory"   
{"Path":"\/user\/hadoop"}

通过hdfs客户端进行测试:

$ hdfs dfs -ls webhdfs://localhost:4032/
Found 7 items
drwxr-xr-x   - hadoop supergroup          0 2018-05-25 15:28 webhdfs://localhost:4032/apps
drwxrwx---   - hadoop supergroup          0 2018-05-31 19:06 webhdfs://localhost:4032/emr
drwxr-xr-x   - hadoop supergroup          0 2018-05-29 15:36 webhdfs://localhost:4032/hbase
drwxr-xr-x   - hadoop supergroup          0 2018-06-06 16:49 webhdfs://localhost:4032/spark-history
drwx-wx-wx   - hadoop supergroup          0 2018-05-28 15:09 webhdfs://localhost:4032/tmp
drwxr-xr-x   - hadoop supergroup          0 2018-05-28 15:06 webhdfs://localhost:4032/user
drwxr-xr-x   - hadoop supergroup          0 2018-05-31 19:04 webhdfs://localhost:4032/usr

通过python hdfs模块访问测试:

将测试代码保存至hdfs_t.py, 测试代码如下:

#!/usr/bin/env python

from hdfs import InsecureClient
client = InsecureClient('http://localhost:4032', user='hadoop')

# Read a file
with client.read('/tmp/1.txt') as reader:
    txt = reader.read()
    print txt
# Write a file
data_str =  "test hdfs write"
client.write('/tmp/2.txt', data=data_str, encoding='utf-8')

# Upload a file
client.upload('/tmp/', './testhttpfs', n_threads=5)

执行以下命令安装模块并执行测试脚本:

# 安装模块
yum -y install python-pip
pip install hdfs
# 准备测试文件
date >1.txt
hdfs dfs -put 1.txt /tmp/
# 执行测试脚本
python hdfs_t.py

webhdfs api文档参考链接:

https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/WebHDFS.html

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序员互动联盟

【编程基础】Linux环境开发效率--那些强大的命令

之前写了一篇关于linux下常用的几个命令,参考Linux入门--提高工作效率的命令。接下来接着介绍一些在linux下做开发经常使用到得命令,其中有打包压缩命令...

31150
来自专栏Linux驱动

linux下使用gcc编译运行C程序

gcc(GNU Compiler Collection)是Linux下最常用的C语言编译器,是GNU项目中符合ANSI C标准的编译系统,能够编译用C、C++和...

30990
来自专栏浪淘沙

Shell学习总结

一、基础指令     1.ls指令         ../    上级目录         ./    当前目录         ls -al     ...

17930
来自专栏xingoo, 一个梦想做发明家的程序员

CentOS6.5下安装JDK

之前一直没有完全的总结出一篇关于Linux下安装Java的过程,今天正好就整理下。 下载jdk 如果在官网下载比较慢,那么可以到我的云盘分享上,下载jdk...

24260
来自专栏深度学习之tensorflow实战篇

r安装包的详解

安装R语言的包的方法: 1. 自动安装(在线安装) 在R的控制台,输入 install.packages("gridExtra")  # 安装 gridExtr...

29450
来自专栏IT可乐

Maven详解(四)------ 常用的Maven命令

  这章我们讲讲几个常用的 Maven 命令。由于执行命令是在工程的基础上来的,所以我们要先创建一个 Maven 工程,具体如何创建,在上一篇博客已经介绍了:h...

46080
来自专栏程序猿DD

Spring Cloud构建微服务架构:消息驱动的微服务(消费分区)【Dalston版】

通过上一篇《消息驱动的微服务(消费组)》的学习,我们已经能够在多实例环境下,保证同一消息只被一个消费者实例进行接收和处理。但是,对于一些特殊场景,除了要保证单一...

35940
来自专栏农夫安全

Knock 子域名扫描工具

Knock是一款Python编写的工具,通过单词列表来枚举目标域上的子域。扫描DNS区域传输,并尝试绕过通配DNS记录。再最新版本中knockpy支持查询Vir...

75730
来自专栏python3

python3--模块和包,软件开发规范

在第一次导入某个模块时(比如my_module),会检查该模块是否已经被加载到内存中(执行文件的名称空间对应的内存),如果有则直接引用,如果没有,解释器则会查找...

11020
来自专栏张善友的专栏

Enterprise Library 4 缓存应用程序块的设计

缓存应用程序为以下目的而设计: 提供一个大小可管理的 API 集合。 允许开发人员添加标准的缓存操作到他们的应用程序中,而不用学习应用程序块的内部工作。 ...

22060

扫码关注云+社区

领取腾讯云代金券