1、通过Java往hdfs写avro文件

  1. import java.io.File;
  2. import java.io.IOException;
  3. import java.io.OutputStream;
  4. import java.nio.ByteBuffer;
  5.  
  6. import org.apache.avro.Schema;
  7. import org.apache.avro.file.CodecFactory;
  8. import org.apache.avro.file.DataFileWriter;
  9. import org.apache.avro.generic.GenericData;
  10. import org.apache.avro.generic.GenericDatumWriter;
  11. import org.apache.avro.generic.GenericRecord;
  12. import org.apache.commons.io.FileUtils;
  13. import org.apache.hadoop.conf.Configuration;
  14. import org.apache.hadoop.fs.FileSystem;
  15. import org.apache.hadoop.fs.Path;
  16. import org.apache.hadoop.io.IOUtils;
  17.  
  18. public class HdfsAvroTest {
  19.  
  20. public static final String SCHEMA_JSON = "{\"type\": \"record\",\"name\": \"SmallFilesTest\", "
  21. + "\"fields\": ["
  22. + "{\"name\":\""
  23. + "username"
  24. + "\",\"type\":\"string\"},"
  25. + "{\"name\":\""
  26. + "password"
  27. + "\", \"type\":\"string\"}]}";
  28. public static final Schema SCHEMA = new Schema.Parser().parse(SCHEMA_JSON);
  29.  
  30. public static void writeToAvro(File srcPath, OutputStream outputStream)
  31. throws IOException {
  32. DataFileWriter<Object> writer = new DataFileWriter<Object>(
  33. new GenericDatumWriter<Object>()).setSyncInterval(100);
  34. writer.setCodec(CodecFactory.snappyCodec());
  35. writer.create(SCHEMA, outputStream);
  36. for (Object obj : FileUtils.listFiles(srcPath, null, false)) {
  37. File file = (File) obj;
  38. String filename = file.getAbsolutePath();
  39. byte content[] = FileUtils.readFileToByteArray(file);
  40. GenericRecord record = new GenericData.Record(SCHEMA);
  41. record.put("username", filename);
  42. record.put("password", ByteBuffer.wrap(content));
  43. writer.append(record);
  44. }
  45. IOUtils.cleanup(null, writer);
  46. IOUtils.cleanup(null, outputStream);
  47. }
  48.  
  49. public static void main(String[] args) throws Exception {
  50. Configuration config = new Configuration();
  51. FileSystem hdfs = FileSystem.get(config);
  52. File sourceDir = new File(args[0]);
  53. Path destFile = new Path(args[1]);
  54. OutputStream os = hdfs.create(destFile);
  55. writeToAvro(sourceDir, os);
  56. }
  57. }

2、Java读hdfs上的avro文件

  1. import java.io.IOException;
  2. import java.io.InputStream;
  3.  
  4. import org.apache.avro.file.DataFileStream;
  5. import org.apache.avro.generic.GenericDatumReader;
  6. import org.apache.avro.generic.GenericRecord;
  7. import org.apache.hadoop.conf.Configuration;
  8. import org.apache.hadoop.fs.FileSystem;
  9. import org.apache.hadoop.fs.Path;
  10. import org.apache.hadoop.io.IOUtils;
  11.  
  12. public class HdfsReadAvro {
  13.  
  14. public static void readFromAvro(InputStream is) throws IOException {
  15. DataFileStream<Object> reader = new DataFileStream<Object>(is,
  16. new GenericDatumReader<Object>());
  17. for (Object o : reader) {
  18. GenericRecord r = (GenericRecord) o;
  19. System.out.println(r.get("username")+ ":"+r.get("password"));
  20. }
  21. IOUtils.cleanup(null, is);
  22. IOUtils.cleanup(null, reader);
  23. }
  24.  
  25. public static void main(String[] args) throws Exception {
  26. Configuration config = new Configuration();
  27. FileSystem hdfs = FileSystem.get(config);
  28. Path destFile = new Path(args[0]);
  29. InputStream is = hdfs.open(destFile);
  30. readFromAvro(is);
  31. }
  32. }

Java读写hdfs上的avro文件的更多相关文章

  1. Delphi调用JAVA的WebService上传XML文件(XE10.2+WIN764)

    相关资料:1.http://blog.csdn.net/luojianfeng/article/details/512198902.http://blog.csdn.net/avsuper/artic ...

  2. hadoop(十)hdfs上传删除文件(完全分布式七)|12

    集群测试 上传小文件到集群,随便选择一个小文件上传到hdfs的根目录 [shaozhiqi@hadoop102 hadoop-3.1.2]$ bin/hdfs dfs -put wcinput/wc. ...

  3. python读取hdfs上的parquet文件方式

    在使用python做大数据和机器学习处理过程中,首先需要读取hdfs数据,对于常用格式数据一般比较容易读取,parquet略微特殊.从hdfs上使用python获取parquet格式数据的方法(当然也 ...

  4. 【转】Java IOUtils方式上传下载文件 on HDFS

    [From]https://www.cnblogs.com/areyouready/p/9795442.html package com.css.hdfs04; import java.io.File ...

  5. java web图片上传和文件上传

    图片上传和文件上传本质上是一样的,图片本身也是文件.文件上传就是将图片上传到服务器,方式虽然有很多,但底层的实现都是文件的读写操作. 注意事项 1.form表单一定要写属性enctype=" ...

  6. java读写HDFS

    package cn.test.hdfs;   import java.io.IOException; import java.net.URI; import java.net.URISyntaxEx ...

  7. java web service 上传下载文件

    1.新建动态web工程youmeFileServer,新建包com,里面新建类FileProgress package com; import java.io.FileInputStream; imp ...

  8. 【Spark】Spark-shell案例——standAlone模式下读取HDFS上存放的文件

    目录 可以先用local模式读取一下 步骤 一.先将做测试的数据上传到HDFS 二.开发scala代码 standAlone模式查看HDFS上的文件 步骤 一.退出local模式,重新进入Spark- ...

  9. Java读写HDFS文件

    一.依赖包maven路径 <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-client --> <d ...

随机推荐

  1. Zabbix 创建监控项目

    #1 #2 [root@nod01 zabbix_agentd.d]# pwd/etc/zabbix/zabbix_agentd.d 新建文件nod.conf [root@nod01 zabbix_a ...

  2. IP网络设计

    一.总体规划 网络设计的分层思想 按照网络设计的分层思想,通常将网络分为:核心层.汇聚层和接入层三个部分.这三部分在功能上有明显差别 ,因此在IP设计上,有必要对这三个部分区别对待. 二.核心层 核心 ...

  3. [UE4]Lock Always

    创建一个Widget加到视图,指定为鼠标焦点,并显示鼠标 Lock Always:叫鼠标锁定在游戏窗口内.

  4. [UE4]条件语句Select

    select接收3个参数,输出一个值. 当条件为true时,返回输入到True节点的值. 当条件为false时,返回输入到false节点的值. select的输入和输出参数也可以是整数.float.V ...

  5. win7运行bat文件 一闪而过 解决 必须要将生成器放在C盘等没有中文的目录里

    1.在*.bat所在的文件夹按住shift 键然后鼠标右键,选择“在此处打开命令窗口”, 2.输入bat文件名称然后回车 这样就不会自动消失(只在win7 x64 上尝试过)

  6. Mysql 之多实例 安装以及配置

    MySQL多实例 1.什么是MySQL多实例 简单地说,Mysql多实例就是在一台服务器上同时开启多个不同的服务端口(3306.3307),同时运行多个Mysql服务进程,这些服务进程通过不同的soc ...

  7. RHEL6安装配置DNS服务

    RHEL6安装配置DNS服务 作者:Eric 微信:loveoracle11g 安装软件包 [root@rac1 ~]# yum -y install bind bind-chroot caching ...

  8. jQuery+html+css-自己写的分页

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. WordPress版微信小程序1.5版本发布

    这个周末对WordPress版微信小程序进行了小版本的升级,第一个版本做得比较粗糙,性能上也有些差.本次升级主要调整和优化功能包括: 1.在主页面,加入浮动按钮,用来打开侧滑导航菜单. 2.增加侧滑导 ...

  10. IIS 禁止回收

    在IIS中找到这个站点所用的程序池,点击“高级设置...” 在打开的列表中更改以下设置: 回收 ——固定时间间隔(分钟) 改为 0 ——虚拟/专用内存限制(KB) 改为 0 进程模型 ——闲置超时(分 ...