脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Python - HDFS中的Java和Python API接口连接

HDFS中的Java和Python API接口连接

2021-04-15 00:53Python之王小sen Python

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

HDFS中的Java和Python API接口连接

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

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

Java API

 

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

HDFS中的Java和Python API接口连接

在对应的D:\apache-maven-3.8.1-bin\apache-maven-3.8.1\conf\settings.xml需要设置阿里云的下载源。

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

HDFS中的Java和Python API接口连接

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

  1. <dependencies> 
  2.   <dependency> 
  3.         <groupId>org.apache.hadoop</groupId> 
  4.         <artifactId>hadoop-common</artifactId> 
  5.         <version>3.1.4</version> 
  6.   </dependency> 
  7.   <dependency> 
  8.         <groupId>org.apache.hadoop</groupId> 
  9.         <artifactId>hadoop-hdfs</artifactId> 
  10.         <version>3.1.4</version> 
  11.   </dependency> 
  12.   <dependency> 
  13.       <groupId>org.apache.hadoop</groupId> 
  14.       <artifactId>hadoop-client</artifactId> 
  15.       <version>3.1.4</version> 
  16.   </dependency> 
  17.   <dependency> 
  18.       <groupId>junit</groupId> 
  19.       <artifactId>junit</artifactId> 
  20.       <version>4.11</version> 
  21.   </dependency> 
  22. </dependencies> 

HDFS文件上传

 

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

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

  1. import org.apache.hadoop.conf.Configuration; 
  2. import org.apache.hadoop.fs.FileSystem; 
  3. import org.apache.hadoop.fs.Path; 
  4. import org.junit.Test; 
  5. import java.net.URI; 
  6. public class main { 
  7.  
  8.     @Test 
  9.     public void testPut() throws Exception { 
  10.         //   获取FileSystem类的方法有很多种,这里只写一种(比较常用的是使URI) 
  11.         Configuration configuration = new Configuration(); 
  12.         // user是Hadoop集群的账号,连接端口默认9000 
  13.         FileSystem fileSystem = FileSystem.get( 
  14.                 new URI("hdfs://192.168.147.128:9000"), 
  15.                 configuration, 
  16.                 "hadoop"); 
  17.         // 将f:/stopword.txt 上传到 /user/stopword.txt 
  18.         fileSystem.copyFromLocalFile( 
  19.                 new Path("f:/stopword.txt"), new Path("/user/stopword.txt")); 
  20.         fileSystem.close(); 
  21.     } 

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

HDFS中的Java和Python API接口连接

HDFS文件下载

 

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

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

  1. @Test 
  2. public void testDownload() throws Exception { 
  3.     Configuration configuration = new Configuration(); 
  4.     FileSystem fileSystem = FileSystem.get( 
  5.             new URI("hdfs://192.168.147.128:9000"), 
  6.             configuration, 
  7.             "hadoop"); 
  8.     fileSystem.copyToLocalFile( 
  9.             false
  10.             new Path("/user/stopword.txt"), 
  11.             new Path("stop.txt"), 
  12.             true); 
  13.     fileSystem.close(); 
  14.     System.out.println("over"); 

Python API

 

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

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

  1. >>> from hdfs.client import Client 
  2. >>> #2.X版本port 使用50070  3.x版本port 使用9870 
  3. >>> client = Client('http://192.168.147.128:9870')   
  4. >>> client.list('/')   #查看hdfs /下的目录 
  5. ['hadoop-3.1.4.tar.gz'
  6. >>> client.makedirs('/test'
  7. >>> client.list('/'
  8. ['hadoop-3.1.4.tar.gz''test'
  9. >>> client.delete("/test"
  10. True 
  11. >>> client.download('/hadoop-3.1.4.tar.gz','C:\\Users\\YIUYE\\Desktop'
  12. 'C:\\Users\\YIUYE\\Desktop\\hadoop-3.1.4.tar.gz' 
  13. >>> client.upload('/','C:\\Users\\YIUYE\\Desktop\\demo.txt'
  14. >>> client.list('/'
  15. '/demo.txt' 
  16. >>> client.list('/'
  17. ['demo.txt''hadoop-3.1.4.tar.gz'
  18. >>> # 上传demo.txt 内容:Hello \n hdfs 
  19. >>> with client.read("/demo.txt"as reader: 
  20. ...          print(reader.read()) 
  21. b'Hello \r\nhdfs\r\n' 

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

【原文地址】:https://mp.weixin.qq.com/s/nUikb7_wVSSSSy6qPMG4WQ

延伸 · 阅读

精彩推荐