分享好友 资讯首页 频道列表

HDFS中的Java和Python API接口连接

2021-04-15 00:015010

上次介绍了HDFS的简单操作,今天进入HDFS中的Java和Python的API操作,后面可能介绍Scala的相关的。

在讲Java API之前介绍一下使用的IDE——IntelliJ IDEA ,我本人使用的是2020.3 x64的社区版本。

Java API

创建maven工程,关于Maven的配置,在IDEA中,Maven下载源必须配置成阿里云。

政府采购

在对应的D:apache-maven-3.8.1-binapache-maven-3.8.1confsettings.xml需要设置阿里云的下载源。

下面创建maven工程,添加常见的依赖

政府采购

添加hadoop-client依赖,版本最好和hadoop指定的一致,并添加junit单元测试依赖。

            org.apache.hadoop         hadoop-common         3.1.4               org.apache.hadoop         hadoop-hdfs         3.1.4             org.apache.hadoop       hadoop-client       3.1.4             junit       junit       4.11      HDFS文件上传

在这里编写测试类即可,新建一个java文件:main.java

这里的FileSyste一开始是本地的文件系统,需要初始化为HDFS的文件系统

import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import org.junit.Test; import java.net.URI; public class main {      @Test     public void testPut() throws Exception {         //   获取FileSystem类的方法有很多种,这里只写一种(比较常用的是使URI)         Configuration configuration = new Configuration();         // user是Hadoop集群的账号,连接端口默认9000         FileSystem fileSystem = FileSystem.get(                 new URI("hdfs://192.168.147.128:9000"),                 configuration,                 "hadoop");         // 将f:/stopword.txt 上传到 /user/stopword.txt         fileSystem.copyFromLocalFile(                 new Path("f:/stopword.txt"), new Path("/user/stopword.txt"));         fileSystem.close();     } } 

在对应的HDFS中,就会看见我刚刚上传的机器学习相关的停用词。

政府采购
HDFS文件下载

由于每次都需要初始化FileSystem,比较懒的我直接使用@Before每次加载。

HDFS文件下载的API接口是copyToLocalFile,具体代码如下。

@Test public void testDownload() throws Exception {     Configuration configuration = new Configuration();     FileSystem fileSystem = FileSystem.get(             new URI("hdfs://192.168.147.128:9000"),             configuration,             "hadoop");     fileSystem.copyToLocalFile(             false,             new Path("/user/stopword.txt"),             new Path("stop.txt"),             true);     fileSystem.close();     System.out.println("over"); }  Python API

下面主要介绍hdfs,参考:https://hdfscli.readthedocs.io/

我们通过命令pip install hdfs安装hdfs库,在使用hdfs前,使用命令hadoop fs -chmod -R 777 / 对当前目录及目录下所有的文件赋予可读可写可执行权限。

>>> from hdfs.client import Client >>> #2.X版本port 使用50070  3.x版本port 使用9870 >>> client = Client('http://192.168.147.128:9870')   >>> client.list('/')   #查看hdfs /下的目录 ['hadoop-3.1.4.tar.gz'] >>> client.makedirs('/test') >>> client.list('/') ['hadoop-3.1.4.tar.gz', 'test'] >>> client.delete("/test") True >>> client.download('/hadoop-3.1.4.tar.gz','C:UsersYIUYEDesktop') 'C:UsersYIUYEDesktophadoop-3.1.4.tar.gz' >>> client.upload('/','C:UsersYIUYEDesktopdemo.txt') >>> client.list('/') '/demo.txt' >>> client.list('/') ['demo.txt', 'hadoop-3.1.4.tar.gz'] >>> # 上传demo.txt 内容:Hello   hdfs >>> with client.read("/demo.txt") as reader: ...          print(reader.read()) b'Hello  hdfs ' 

相对于Java API,Python API连接实在简单。

 

反对 0
举报 0
收藏 0
打赏 0
评论 0
一篇关于HDFS的快照讲解
一个snapshot(快照)是一个全部文件系统、或者某个目录在某一时刻的镜像,

0评论2021-10-14345

因HIVE 元数据与HDFS上的数据不一致引起的问题的修复
前言 大家好,我是明哥! 本片博文是“大数据问题排查系列”之一,讲述某HIVE SQL 作业因为 HIVE 中的�

0评论2021-09-06471

Hdfs 相对路径与静态代码块引起的问题
  前言   HIVE 作为大数据生态的数仓解决方案,因为历史的原因在很多行业很多公司都有着广泛�

0评论2021-07-30400

大数据开发-HDFS入门
今天带来的是全新的章节,大数据开发-HDFS,作为Hadoop生态系统的一个重要组成部分,其存在不可或缺,基础的才是最重要的,而HDFS就是这样一个存在。下面就开始HDFS的学习。

0评论2021-04-14452

大数据基础:HDFS介绍
当数据需要跨机器存储,统一管理分布在集群上的文件系统统称为分布式文件系统。 Hodoop使用HDFS(Hadoop Distributed File System)作文存储系统。HDFS使用多台计算机存储文件,对外提供统一操作文件的接口。

0评论2021-04-01583