社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

三、HDFS中的Java和Python API接口连接

Python开发 • 3 年前 • 418 次点击  
👇👇关注后回复 “进群” ,拉你进程序员交流群👇👇

作者丨小sen

来源丨Python之王


上次介绍了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-bin\apache-maven-3.8.1\conf\settings.xml需要设置阿里云的下载源。

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

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

<dependencies>
  <dependency>
        <groupId>org.apache.hadoopgroupId>
        <artifactId>hadoop-commonartifactId>
        <version>3.1.4version>
  dependency>
  <dependency>
        <groupId>org.apache.hadoopgroupId>
        <artifactId>hadoop-hdfsartifactId>
        <version>3.1.4version>
  dependency>
  <dependency>
      <groupId>org.apache.hadoopgroupId>
      <artifactId>hadoop-clientartifactId>
      <version>3.1.4version>
  dependency>
  <dependency>
      <groupId>junitgroupId>
      <artifactId>junitartifactId>
       <version>4.11version>
  dependency>
dependencies>

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:\\Users\\YIUYE\\Desktop')
'C:\\Users\\YIUYE\\Desktop\\hadoop-3.1.4.tar.gz'
>>> client.upload('/','C:\\Users\\YIUYE\\Desktop\\demo.txt')
>>> client.list('/')
'/demo.txt'
>>> client.list('/')
['demo.txt''hadoop-3.1.4.tar.gz']
>>> # 上传demo.txt 内容:Hello \n hdfs
>>> with client.read("/demo.txt"as reader:
...          print(reader.read())
b'Hello \r\nhdfs\r\n'

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


-End-

最近有一些小伙伴,让我帮忙找一些 面试题 资料,于是我翻遍了收藏的 5T 资料后,汇总整理出来,可以说是程序员面试必备!所有资料都整理到网盘了,欢迎下载!

点击👆卡片,关注后回复【面试题】即可获取

在看点这里好文分享给更多人↓↓

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/117551
 
418 次点击