Java读写hdfs上的avro文件
1、通过Java往hdfs写avro文件
- import java.io.File;
- import java.io.IOException;
- import java.io.OutputStream;
- import java.nio.ByteBuffer;
- import org.apache.avro.Schema;
- import org.apache.avro.file.CodecFactory;
- import org.apache.avro.file.DataFileWriter;
- import org.apache.avro.generic.GenericData;
- import org.apache.avro.generic.GenericDatumWriter;
- import org.apache.avro.generic.GenericRecord;
- import org.apache.commons.io.FileUtils;
- import org.apache.hadoop.conf.Configuration;
- import org.apache.hadoop.fs.FileSystem;
- import org.apache.hadoop.fs.Path;
- import org.apache.hadoop.io.IOUtils;
- public class HdfsAvroTest {
- public static final String SCHEMA_JSON = "{\"type\": \"record\",\"name\": \"SmallFilesTest\", "
- + "\"fields\": ["
- + "{\"name\":\""
- + "username"
- + "\",\"type\":\"string\"},"
- + "{\"name\":\""
- + "password"
- + "\", \"type\":\"string\"}]}";
- public static final Schema SCHEMA = new Schema.Parser().parse(SCHEMA_JSON);
- public static void writeToAvro(File srcPath, OutputStream outputStream)
- throws IOException {
- DataFileWriter<Object> writer = new DataFileWriter<Object>(
- new GenericDatumWriter<Object>()).setSyncInterval(100);
- writer.setCodec(CodecFactory.snappyCodec());
- writer.create(SCHEMA, outputStream);
- for (Object obj : FileUtils.listFiles(srcPath, null, false)) {
- File file = (File) obj;
- String filename = file.getAbsolutePath();
- byte content[] = FileUtils.readFileToByteArray(file);
- GenericRecord record = new GenericData.Record(SCHEMA);
- record.put("username", filename);
- record.put("password", ByteBuffer.wrap(content));
- writer.append(record);
- }
- IOUtils.cleanup(null, writer);
- IOUtils.cleanup(null, outputStream);
- }
- public static void main(String[] args) throws Exception {
- Configuration config = new Configuration();
- FileSystem hdfs = FileSystem.get(config);
- File sourceDir = new File(args[0]);
- Path destFile = new Path(args[1]);
- OutputStream os = hdfs.create(destFile);
- writeToAvro(sourceDir, os);
- }
- }
2、Java读hdfs上的avro文件
- import java.io.IOException;
- import java.io.InputStream;
- import org.apache.avro.file.DataFileStream;
- import org.apache.avro.generic.GenericDatumReader;
- import org.apache.avro.generic.GenericRecord;
- import org.apache.hadoop.conf.Configuration;
- import org.apache.hadoop.fs.FileSystem;
- import org.apache.hadoop.fs.Path;
- import org.apache.hadoop.io.IOUtils;
- public class HdfsReadAvro {
- public static void readFromAvro(InputStream is) throws IOException {
- DataFileStream<Object> reader = new DataFileStream<Object>(is,
- new GenericDatumReader<Object>());
- for (Object o : reader) {
- GenericRecord r = (GenericRecord) o;
- System.out.println(r.get("username")+ ":"+r.get("password"));
- }
- IOUtils.cleanup(null, is);
- IOUtils.cleanup(null, reader);
- }
- public static void main(String[] args) throws Exception {
- Configuration config = new Configuration();
- FileSystem hdfs = FileSystem.get(config);
- Path destFile = new Path(args[0]);
- InputStream is = hdfs.open(destFile);
- readFromAvro(is);
- }
- }
Java读写hdfs上的avro文件的更多相关文章
- Delphi调用JAVA的WebService上传XML文件(XE10.2+WIN764)
相关资料:1.http://blog.csdn.net/luojianfeng/article/details/512198902.http://blog.csdn.net/avsuper/artic ...
- hadoop(十)hdfs上传删除文件(完全分布式七)|12
集群测试 上传小文件到集群,随便选择一个小文件上传到hdfs的根目录 [shaozhiqi@hadoop102 hadoop-3.1.2]$ bin/hdfs dfs -put wcinput/wc. ...
- python读取hdfs上的parquet文件方式
在使用python做大数据和机器学习处理过程中,首先需要读取hdfs数据,对于常用格式数据一般比较容易读取,parquet略微特殊.从hdfs上使用python获取parquet格式数据的方法(当然也 ...
- 【转】Java IOUtils方式上传下载文件 on HDFS
[From]https://www.cnblogs.com/areyouready/p/9795442.html package com.css.hdfs04; import java.io.File ...
- java web图片上传和文件上传
图片上传和文件上传本质上是一样的,图片本身也是文件.文件上传就是将图片上传到服务器,方式虽然有很多,但底层的实现都是文件的读写操作. 注意事项 1.form表单一定要写属性enctype=" ...
- java读写HDFS
package cn.test.hdfs; import java.io.IOException; import java.net.URI; import java.net.URISyntaxEx ...
- java web service 上传下载文件
1.新建动态web工程youmeFileServer,新建包com,里面新建类FileProgress package com; import java.io.FileInputStream; imp ...
- 【Spark】Spark-shell案例——standAlone模式下读取HDFS上存放的文件
目录 可以先用local模式读取一下 步骤 一.先将做测试的数据上传到HDFS 二.开发scala代码 standAlone模式查看HDFS上的文件 步骤 一.退出local模式,重新进入Spark- ...
- Java读写HDFS文件
一.依赖包maven路径 <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-client --> <d ...
随机推荐
- Zabbix 创建监控项目
#1 #2 [root@nod01 zabbix_agentd.d]# pwd/etc/zabbix/zabbix_agentd.d 新建文件nod.conf [root@nod01 zabbix_a ...
- IP网络设计
一.总体规划 网络设计的分层思想 按照网络设计的分层思想,通常将网络分为:核心层.汇聚层和接入层三个部分.这三部分在功能上有明显差别 ,因此在IP设计上,有必要对这三个部分区别对待. 二.核心层 核心 ...
- [UE4]Lock Always
创建一个Widget加到视图,指定为鼠标焦点,并显示鼠标 Lock Always:叫鼠标锁定在游戏窗口内.
- [UE4]条件语句Select
select接收3个参数,输出一个值. 当条件为true时,返回输入到True节点的值. 当条件为false时,返回输入到false节点的值. select的输入和输出参数也可以是整数.float.V ...
- win7运行bat文件 一闪而过 解决 必须要将生成器放在C盘等没有中文的目录里
1.在*.bat所在的文件夹按住shift 键然后鼠标右键,选择“在此处打开命令窗口”, 2.输入bat文件名称然后回车 这样就不会自动消失(只在win7 x64 上尝试过)
- Mysql 之多实例 安装以及配置
MySQL多实例 1.什么是MySQL多实例 简单地说,Mysql多实例就是在一台服务器上同时开启多个不同的服务端口(3306.3307),同时运行多个Mysql服务进程,这些服务进程通过不同的soc ...
- RHEL6安装配置DNS服务
RHEL6安装配置DNS服务 作者:Eric 微信:loveoracle11g 安装软件包 [root@rac1 ~]# yum -y install bind bind-chroot caching ...
- jQuery+html+css-自己写的分页
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- WordPress版微信小程序1.5版本发布
这个周末对WordPress版微信小程序进行了小版本的升级,第一个版本做得比较粗糙,性能上也有些差.本次升级主要调整和优化功能包括: 1.在主页面,加入浮动按钮,用来打开侧滑导航菜单. 2.增加侧滑导 ...
- IIS 禁止回收
在IIS中找到这个站点所用的程序池,点击“高级设置...” 在打开的列表中更改以下设置: 回收 ——固定时间间隔(分钟) 改为 0 ——虚拟/专用内存限制(KB) 改为 0 进程模型 ——闲置超时(分 ...