HDFS中的Java和Python API接口连接
上次介绍了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:\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 hdfs >>> with client.read("/demo.txt") as reader: ... print(reader.read()) b'Hello hdfs '
相对于Java API,Python API连接实在简单。
您可能也感兴趣:
官方微博/微信

每日头条、业界资讯、热点资讯、八卦爆料,全天跟踪微博播报。各种爆料、内幕、花边、资讯一网打尽。百万互联网粉丝互动参与,TechWeb官方微博期待您的关注。

想在手机上看科技资讯和科技八卦吗?
想第一时间看独家爆料和深度报道吗?
请关注TechWeb官方微信公众帐号:
1.用手机扫左侧二维码;
2.在添加朋友里,搜索关注TechWeb。
为您推荐
必应聊天放宽限制:每轮会话最多支持30次交流 每日上限增至300次
富士康计划2024年4月前在印度卡纳塔克邦生产iPhone
苹果数据显示iOS 16普及率超过80% iPadOS 16超过70%
Meta抢在苹果之前发布最新一代VR头显Quest 3
博通第二财季营收87亿美元 营收净利润同比仍保持增长
iPhone 15 Pro系列设计细节曝光:1.55mm极窄边框+弧边处理手感完美
再创历史新高 比亚迪5月新能源车销量24.02万辆
外媒称国内电动汽车电池制造商已在扩展韩国市场
丰田将向北卡罗来纳州新电池厂再投资21亿美元 投资总额达59亿美元
更多
- 当红齐天集团重磅发布“四大平台”战略 首款5G超轻薄VR头显亮相
- 水滴公司2023年Q1营收6.06亿元 净利润4973万元
- 云集2023年第一季度总营收1.787亿元
- 英特尔发布公测版“英特尔® Developer Cloud for the Edge”硬件平台
- 京东618开门红成绩:首购新用户同比增长超30%
- 马化腾要收紧队形?腾讯张军回应:外部群聊天,不是跟公司内部说的
- 陈睿:“B站UP主停更潮”系误导 UP主商业化过去一年得到很大加强
- 华为光产品线金志国:已与近50家省份运营商发布了FTTR-B套餐
- 抖音新规:禁止公益类账号变现
- 腾势汽车5月交付11005辆 D9登顶MPV单月销量冠军
更多
- 英特尔计划在韩国首尔建设一个数据中心开发实验室
- 半导体部件供应稳定等推动 5月份韩国汽车销量同比大增17.1%
- 现代汽车5月份销售2.3万辆电动汽车 连续4个月超过2万辆
- 必应聊天放宽限制:每轮会话最多支持30次交流 每日上限增至300次
- 富士康计划2024年4月前在印度卡纳塔克邦生产iPhone
- 苹果数据显示iOS 16普及率超过80% iPadOS 16超过70%
- Meta抢在苹果之前发布最新一代VR头显Quest 3
- 博通第二财季营收87亿美元 营收净利润同比仍保持增长
- 起亚计划2030年在欧洲销售超过50万辆电动汽车 占年度销量近三分之一
- LG新能源和现代汽车集团将斥资43亿美元在美合建一家电池厂