为什么用mapFIle不能正常打印
问题描述:
这里是SequenceFile,可以打印出文件的内容
但是改了一下代码,就没有打印出来
相关代码:
package com.imooc.mr; 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.MapFile; import org.apache.hadoop.io.SequenceFile; import org.apache.hadoop.io.Text; import java.io.File; /** * 小文件解决方案之MapFile */ public class SmallFileMap { public static void main(String[] args) throws Exception { //生成MapFile文件 write("D:\\samllFile","/mapFile"); //读取MapFile文件 read("/mapFile"); } /** * 生成MapFile文件 * @param inputDir 输入目录-window目录 * @param outputDir 输出目录-hdfs目录 * @throws Exception */ private static void write(String inputDir,String outputDir) throws Exception { //创建一个配置对象 Configuration conf = new Configuration(); //指定HDFS的地址 conf.set("fs.defaultFS", "hdfs://bigdata01:9000"); //获取操作HDFS的对象 FileSystem fileSystem = FileSystem.get(conf); //删除HDFS上的输出文件 fileSystem.delete(new Path(outputDir), true); /*构造opt数组,有两个参数 第一个是key的类型 第二个是value的类型 */ SequenceFile.Writer.Option[] opts = new SequenceFile.Writer.Option[]{ MapFile.Writer.keyClass(Text.class), MapFile.Writer.valueClass(Text.class) }; //创建了一个witer实例 MapFile.Writer writer = new MapFile.Writer(conf, new Path(outputDir), opts); //指定需要压缩的文件目录 File inputDirPath = new File(inputDir); if (inputDirPath.isDirectory()) { //获取目录中的文件 File[] files = inputDirPath.listFiles(); //迭代文件 for (File file : files) { //获取文件的全部内容 String content = FileUtils.readFileToString(file, "UTF-8"); //获取文件名 String fileName = file.getName(); Text key = new Text(fileName); Text value = new Text(content); writer.append(key,value); } } writer.close(); } /** * 读取MapFile文件 * @param inputDir MapFile文件路径 * @throws Exception */ public static void read(String inputDir) throws Exception{ //创建一个配置对象 Configuration conf = new Configuration(); //指定HDFS的地址 conf.set("fs.defaultFS", "hdfs://bigdata01:9000"); //创建阅读器 MapFile.Reader reader = new MapFile.Reader(new Path(inputDir), conf); Text key = new Text(); Text value = new Text(); //循环读取数据 while (reader.next(key, value)) { //输出文件名称 System.out.print("文件名:"+key.toString()+","); //输出文件内容 System.out.println("文件内容:" + value.toString()); } reader.close(); } }
5
收起
正在回答 回答被采纳积分+1
大数据工程师 2024 版
- 参与学习 1151 人
- 提交作业 5961 份
- 解答问题 1144 个
不用Java初级内容充数!不用与大数据岗位无关内容占课时!我们做的就是“精华版”大数据课程
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星