- 浏览: 2187876 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (682)
- 软件思想 (7)
- Lucene(修真篇) (17)
- Lucene(仙界篇) (20)
- Lucene(神界篇) (11)
- Solr (48)
- Hadoop (77)
- Spark (38)
- Hbase (26)
- Hive (19)
- Pig (25)
- ELK (64)
- Zookeeper (12)
- JAVA (119)
- Linux (59)
- 多线程 (8)
- Nutch (5)
- JAVA EE (21)
- Oracle (7)
- Python (32)
- Xml (5)
- Gson (1)
- Cygwin (1)
- JavaScript (4)
- MySQL (9)
- Lucene/Solr(转) (5)
- 缓存 (2)
- Github/Git (1)
- 开源爬虫 (1)
- Hadoop运维 (7)
- shell命令 (9)
- 生活感悟 (42)
- shell编程 (23)
- Scala (11)
- MongoDB (3)
- docker (2)
- Nodejs (3)
- Neo4j (5)
- storm (3)
- opencv (1)
最新评论
-
qindongliang1922:
粟谷_sugu 写道不太理解“分词字段存储docvalue是没 ...
浅谈Lucene中的DocValues -
粟谷_sugu:
不太理解“分词字段存储docvalue是没有意义的”,这句话, ...
浅谈Lucene中的DocValues -
yin_bp:
高性能elasticsearch ORM开发库使用文档http ...
为什么说Elasticsearch搜索是近实时的? -
hackWang:
请问博主,有用solr做电商的搜索项目?
Solr中Group和Facet的用法 -
章司nana:
遇到的问题同楼上 为什么会返回null
Lucene4.3开发之第八步之渡劫初期(八)
HDFS是Hadoop生态系统的根基,也是Hadoop生态系统中的重要一员,大部分时候,我们都会使用Linux shell命令来管理HDFS,包括一些文件的创建,删除,修改,上传等等,因为使用shell命令操作HDFS的方式,相对比较简单,方便,但是有时候,我们也需要通过编程的方式来实现对文件系统的管理。
比如有如下的一个小需求,要求我们实现读取HDFS某个文件夹下所有日志,经过加工处理后在写入到HDFS上,或者存进Hbase里,或者存进其他一些存储系统。这时候使用shell的方式就有点麻烦了,所以这时候我们就可以使用编程的方式来完成这件事了,当然散仙在这里使用的是原生的Java语言的方式,其他的一些语言例如C++,PHP,Python都可以实现,散仙在这里不给出演示了,(其实散仙也不会那些语言,除了刚入门的Python) 。
下面,散仙给出代码,以供参考:
散仙用的是Hadoop1.2的版本,采用hadoop的eclipse插件在eclipse下编写调试的,下面给出截图:
下面给出一个读取某个文件夹下的所有的文件并打印内容的截图:
其实,java操作HDFS还是比较简单的,只要熟悉java IO的一些操作就可以了。
如有不到位的地方,欢迎指正!
不影响结果就行,
可以吧,你测试过没
比如有如下的一个小需求,要求我们实现读取HDFS某个文件夹下所有日志,经过加工处理后在写入到HDFS上,或者存进Hbase里,或者存进其他一些存储系统。这时候使用shell的方式就有点麻烦了,所以这时候我们就可以使用编程的方式来完成这件事了,当然散仙在这里使用的是原生的Java语言的方式,其他的一些语言例如C++,PHP,Python都可以实现,散仙在这里不给出演示了,(其实散仙也不会那些语言,除了刚入门的Python) 。
下面,散仙给出代码,以供参考:
package com.java.api.hdfs; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileStatus; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; /** * @author 三劫散仙 * Java API操作HDFS * 工具类 * * **/ public class OperaHDFS { public static void main(String[] args)throws Exception { //System.out.println("aaa"); // uploadFile(); //createFileOnHDFS(); //deleteFileOnHDFS(); //createDirectoryOnHDFS(); //deleteDirectoryOnHDFS(); // renameFileOrDirectoryOnHDFS(); //downloadFileorDirectoryOnHDFS(); readHDFSListAll(); } /*** * 加载配置文件 * **/ static Configuration conf=new Configuration(); /** * 重名名一个文件夹或者文件 * * **/ public static void renameFileOrDirectoryOnHDFS()throws Exception{ FileSystem fs=FileSystem.get(conf); Path p1 =new Path("hdfs://10.2.143.5:9090/root/myfile/my.txt"); Path p2 =new Path("hdfs://10.2.143.5:9090/root/myfile/my2.txt"); fs.rename(p1, p2); fs.close();//释放资源 System.out.println("重命名文件夹或文件成功....."); } /*** * * 读取HDFS某个文件夹的所有 * 文件,并打印 * * **/ public static void readHDFSListAll() throws Exception{ //流读入和写入 InputStream in=null; //获取HDFS的conf //读取HDFS上的文件系统 FileSystem hdfs=FileSystem.get(conf); //使用缓冲流,进行按行读取的功能 BufferedReader buff=null; //获取日志文件的根目录 Path listf =new Path("hdfs://10.2.143.5:9090/root/myfile/"); //获取根目录下的所有2级子文件目录 FileStatus stats[]=hdfs.listStatus(listf); //自定义j,方便查看插入信息 int j=0; for(int i = 0; i < stats.length; i++){ //获取子目录下的文件路径 FileStatus temp[]=hdfs.listStatus(new Path(stats[i].getPath().toString())); for(int k = 0; k < temp.length;k++){ System.out.println("文件路径名:"+temp[k].getPath().toString()); //获取Path Path p=new Path(temp[k].getPath().toString()); //打开文件流 in=hdfs.open(p); //BufferedReader包装一个流 buff=new BufferedReader(new InputStreamReader(in)); String str=null; while((str=buff.readLine())!=null){ System.out.println(str); } buff.close(); in.close(); } } hdfs.close(); } /** * 从HDFS上下载文件或文件夹到本地 * * **/ public static void downloadFileorDirectoryOnHDFS()throws Exception{ FileSystem fs=FileSystem.get(conf); Path p1 =new Path("hdfs://10.2.143.5:9090/root/myfile//my2.txt"); Path p2 =new Path("D://7"); fs.copyToLocalFile(p1, p2); fs.close();//释放资源 System.out.println("下载文件夹或文件成功....."); } /** * 在HDFS上创建一个文件夹 * * **/ public static void createDirectoryOnHDFS()throws Exception{ FileSystem fs=FileSystem.get(conf); Path p =new Path("hdfs://10.2.143.5:9090/root/myfile"); fs.mkdirs(p); fs.close();//释放资源 System.out.println("创建文件夹成功....."); } /** * 在HDFS上删除一个文件夹 * * **/ public static void deleteDirectoryOnHDFS()throws Exception{ FileSystem fs=FileSystem.get(conf); Path p =new Path("hdfs://10.2.143.5:9090/root/myfile"); fs.deleteOnExit(p); fs.close();//释放资源 System.out.println("删除文件夹成功....."); } /** * 在HDFS上创建一个文件 * * **/ public static void createFileOnHDFS()throws Exception{ FileSystem fs=FileSystem.get(conf); Path p =new Path("hdfs://10.2.143.5:9090/root/abc.txt"); fs.createNewFile(p); //fs.create(p); fs.close();//释放资源 System.out.println("创建文件成功....."); } /** * 在HDFS上删除一个文件 * * **/ public static void deleteFileOnHDFS()throws Exception{ FileSystem fs=FileSystem.get(conf); Path p =new Path("hdfs://10.2.143.5:9090/root/abc.txt"); fs.deleteOnExit(p); fs.close();//释放资源 System.out.println("删除成功....."); } /*** * 上传本地文件到 * HDFS上 * * **/ public static void uploadFile()throws Exception{ //加载默认配置 FileSystem fs=FileSystem.get(conf); //本地文件 Path src =new Path("D:\\6"); //HDFS为止 Path dst =new Path("hdfs://10.2.143.5:9090/root/"); try { fs.copyFromLocalFile(src, dst); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("上传成功........"); fs.close();//释放资源 } }
散仙用的是Hadoop1.2的版本,采用hadoop的eclipse插件在eclipse下编写调试的,下面给出截图:
下面给出一个读取某个文件夹下的所有的文件并打印内容的截图:
其实,java操作HDFS还是比较简单的,只要熟悉java IO的一些操作就可以了。
如有不到位的地方,欢迎指正!
评论
4 楼
qindongliang1922
2014-02-18
hpuyancy 写道
您好,我通过java读取本地文件系统的文件夹下的文件列表,但是输出后得到的文件列表不是有序的!会不会是编码问题?但是通过HDFS得到的文件列表却是有序的!本地读取的文件列表输出如下:
file:/home/hadoop/a/0516142310.txt
file:/home/hadoop/a/0516142313.txt
file:/home/hadoop/a/0516142308.txt
file:/home/hadoop/a/0516142311.txt
file:/home/hadoop/a/0516142309.txt
file:/home/hadoop/a/0516142312.txt
file:/home/hadoop/a/0516142310.txt
file:/home/hadoop/a/0516142313.txt
file:/home/hadoop/a/0516142308.txt
file:/home/hadoop/a/0516142311.txt
file:/home/hadoop/a/0516142309.txt
file:/home/hadoop/a/0516142312.txt
不影响结果就行,
3 楼
qindongliang1922
2014-02-18
dacoolbaby 写道
使用HDFS Api支持大量数据写入吗??
向Scribe和Flume的日志接入方式也是这样吗?
应该不是吧?
向Scribe和Flume的日志接入方式也是这样吗?
应该不是吧?
可以吧,你测试过没
2 楼
hpuyancy
2014-02-18
您好,我通过java读取本地文件系统的文件夹下的文件列表,但是输出后得到的文件列表不是有序的!会不会是编码问题?但是通过HDFS得到的文件列表却是有序的!本地读取的文件列表输出如下:
file:/home/hadoop/a/0516142310.txt
file:/home/hadoop/a/0516142313.txt
file:/home/hadoop/a/0516142308.txt
file:/home/hadoop/a/0516142311.txt
file:/home/hadoop/a/0516142309.txt
file:/home/hadoop/a/0516142312.txt
file:/home/hadoop/a/0516142310.txt
file:/home/hadoop/a/0516142313.txt
file:/home/hadoop/a/0516142308.txt
file:/home/hadoop/a/0516142311.txt
file:/home/hadoop/a/0516142309.txt
file:/home/hadoop/a/0516142312.txt
1 楼
dacoolbaby
2013-12-06
使用HDFS Api支持大量数据写入吗??
向Scribe和Flume的日志接入方式也是这样吗?
应该不是吧?
向Scribe和Flume的日志接入方式也是这样吗?
应该不是吧?
发表评论
-
Apache Flink在阿里的使用(译)
2019-02-21 21:18 1204Flink是未来大数据实时 ... -
计算机图形处理的一些知识
2018-04-25 17:46 1234最近在搞opencv来做一些 ... -
如何在kylin中构建一个cube
2017-07-11 19:06 1282前面的文章介绍了Apache Kylin的安装及数据仓 ... -
Apache Kylin的入门安装
2017-06-27 21:27 2148Apache Kylin™是一个开源的分布式分析引擎,提供 ... -
ES-Hadoop插件介绍
2017-04-27 18:07 1996上篇文章,写了使用spark集成es框架,并向es写入数据,虽 ... -
如何在Scala中读取Hadoop集群上的gz压缩文件
2017-04-05 18:51 2138存在Hadoop集群上的文件,大部分都会经过压缩,如果是压缩 ... -
如何收集项目日志统一发送到kafka中?
2017-02-07 19:07 2797上一篇(http://qindongliang.iteye. ... -
Hue+Hive临时目录权限不够解决方案
2016-06-14 10:40 4725安装Hue后,可能会分配多个账户给一些业务部门操作hive,虽 ... -
Hadoop的8088页面失效问题
2016-03-31 11:21 4457前两天重启了测试的hadoop集群,今天访问集群的8088任 ... -
Hadoop+Hbase集群数据迁移问题
2016-03-23 21:00 2527数据迁移或备份是任何 ... -
如何监控你的Hadoop+Hbase集群?
2016-03-21 16:10 4924前言 监控hadoop的框架 ... -
Logstash与Kafka集成
2016-02-24 18:44 11645在ELKK的架构中,各个框架的角色分工如下: Elastic ... -
Kakfa集群搭建
2016-02-23 15:36 2653先来整体熟悉下Kafka的一些概念和架构 (一)什么是Ka ... -
大数据日志收集框架之Flume入门
2016-02-02 14:25 4192Flume是Cloudrea公司开源的一款优秀的日志收集框架 ... -
Apache Tez0.7编译笔记
2016-01-15 16:33 2535目前最新的Tez版本是0.8,但还不是稳定版,所以大家还 ... -
Bug死磕之hue集成的oozie+pig出现资源任务死锁问题
2016-01-14 15:52 3841这两天,打算给现有的 ... -
Hadoop2.7.1和Hbase0.98添加LZO压缩
2016-01-04 17:46 26071,执行命令安装一些依赖组件 yum install -y ... -
Hadoop2.7.1配置NameNode+ResourceManager高可用原理分析
2015-11-11 19:51 3184关于NameNode高可靠需要配置的文件有core-site ... -
设置Hadoop+Hbase集群pid文件存储位置
2015-10-20 13:40 2862有时候,我们对运行几 ... -
Hadoop+Maven项目打包异常
2015-08-11 19:36 1591先简单说下业务:有一个单独的模块,可以在远程下载Hadoop上 ...
相关推荐
本文将详细讲解如何使用Java API来操作HDFS,特别是创建目录的功能。我们将探讨Hadoop的环境配置、HDFS API的使用以及具体创建目录的步骤。 首先,理解Hadoop的环境配置至关重要。在进行Java编程之前,你需要确保...
### 使用Java API访问HDFS文件的关键知识点 #### 一、HDFS概述 Hadoop Distributed File System(HDFS)是Apache Hadoop项目的核心组件之一,它为海量数据提供了高吞吐量的数据访问,非常适合大规模数据集的应用...
本文将深入探讨如何使用Java API来操作HDFS。 1. **HDFS基本概念** - **NameNode**:HDFS的主节点,负责管理文件系统的命名空间和元数据,如文件名、文件块信息等。 - **DataNode**:存储实际数据的从节点,执行...
HDFS 提供了一个 API,允许开发者使用 Java 语言编写程序来操作 HDFS 文件系统。该 API 包括了 open、read、write、close 等方法,用于读写 HDFS 文件。 使用 HDFS API 可以实现以下操作: 1. 上传本地文件:使用 ...
在Java API操作HDFS(Hadoop Distributed File System)的过程中,主要涉及了以下几个核心知识点: 1. **依赖管理**: 在进行HDFS操作时,首先需要在项目中引入Apache Hadoop的相关依赖。在Maven项目中,这通常...
在Java编程环境中,Hadoop分布式文件系统(HDFS)提供了丰富的Java API,使得开发者能够方便地与HDFS进行交互,包括文件的上传、下载、读写等操作。本篇文章将详细探讨如何使用HDFS Java API来实现文件上传的功能。 ...
在这个实验中,我们关注的是如何使用Java API来操作HDFS,而提到的"winutils&hadoop.dll"文件对于Windows环境下配置Hadoop环境至关重要。 首先,让我们了解HDFS Java API的基本操作。HDFS API主要由`org.apache....
而HDFS Java API则是开发人员与HDFS进行交互的主要接口,使得Java应用程序能够便捷地读写HDFS上的文件。本文将深入探讨HDFS Java API的原理、使用方法及其在实际应用中的最佳实践。 一、HDFS基础 1.1 HDFS架构:...
Java API是与HDFS交互的主要方式,它提供了一系列的类和方法,使得开发者能够轻松地完成文件的读写操作。主要涉及的类有`FileSystem`和`DFSClient`。 三、HDFS文件上传 1. **配置HDFS环境**:首先需要配置Hadoop的...
通过这个实验,学习者不仅能够掌握HDFS的基础操作,还能了解如何在实际项目中使用Java API与HDFS进行交互。这对于后续的大数据处理、MapReduce编程以及Hadoop生态中的其他组件(如HBase)的学习至关重要。理解HDFS的...
Java作为广泛使用的编程语言,提供了丰富的API来操作HDFS,使得开发者能够方便地进行文件的读取、写入、复制、移动等操作。本文将详细讲解如何使用Java对HDFS进行文件操作,并介绍两个相关的项目示例。 首先,Java...
Java-HDFS 客户端是 HDFS 的 Java 实现,提供了一个 Java API 来访问 HDFS。Java-HDFS 客户端可以用来开发基于 HDFS 的应用程序。 * RPCClient:RPCClient 是 Java-HDFS 客户端的主要组件,负责与 NameNode 和 ...
SparkSQL是Apache Spark的一部分,它提供了对结构化和半结构化数据进行SQL查询的能力,使得开发者可以使用SQL或者DataFrame API来处理数据。在Hadoop Distributed File System(HDFS)上运行SparkSQL,可以让用户...
通过上述API,开发者可以实现对HDFS的全面控制,进行文件的读写、目录管理,以及利用HDFS的高级特性进行大数据处理。不过,需要注意的是,所有的操作都应该确保在finally块中关闭流和文件系统,以防止资源泄漏。 ...
HDFS Java API是开发人员与HDFS进行通信的主要接口,它提供了丰富的类和方法,使得在Java程序中读写HDFS文件变得简单易行。 首先,我们需要导入Hadoop的相关库。在Java项目中,确保你的`pom.xml`或`build.gradle`...
本项目“Java-Operate-HDFS.zip_hdfs”提供了使用Java API操作HDFS的示例,帮助开发者理解如何在Java应用程序中与HDFS进行交互。下面将详细介绍HDFS的基本概念以及如何通过Java进行操作。 1. HDFS简介: HDFS是...
HDFS Java API允许开发者通过编程方式对HDFS进行高级操作,如创建、读取、修改和删除文件等。 五、HDFS Java API编程 通过Java API,学生可以实现上传本地文件到HDFS的功能。例如,使用FSDataInputStream和...
【HDFS Java API 使用详解】 在大数据处理领域,Hadoop 分布式文件系统(HDFS)扮演着核心角色。为了高效地与HDFS交互,Java API 提供了一套丰富的工具和类库,使得开发者能够方便地进行文件的读写、上传、下载、...
Java操作HDFS(Hadoop Distributed File System)是大数据处理中常见的任务,这通常涉及到使用Hadoop的Java API。为了在Java环境中与HDFS进行交互,你需要包含一系列的依赖包,这些包提供了必要的功能来读取、写入和...