hadoop输出lzo文件并添加索引

public static void main(String[] args) throws Exception {
        Configuration conf = new Configuration();

        conf.set("mapred.job.tracker", Constants.HADOOP_MAIN_IP + Constants.MAO_HAO + Constants.HADOOP_MAIN_PORT);

        if (args.length != 3) {
            System.err.println("Usage: Data Deduplication <in> <out> <reduceNum>");
            System.exit(2);
        }
        Job job = new Job(conf, "ETLTld Job");
        job.setJarByClass(ETLTldMain.class);

        job.setMapperClass(ETLTldMapper.class);
        job.setReducerClass(ETLTldReducer.class);

        job.setInputFormatClass(LzoTextInputFormat.class);

        job.setNumReduceTasks(Integer.parseInt(args[2]));

        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(Text.class);

        FileInputFormat.addInputPath(job, new Path(args[0]));
        FileOutputFormat.setOutputPath(job, new Path(args[1]));

        FileOutputFormat.setCompressOutput(job, true);
        FileOutputFormat.setOutputCompressorClass(job, LzopCodec.class);
        int result = job.waitForCompletion(true) ? 0 : 1;

        if (result == 0) {
            LzoIndexer lzoIndexer = new LzoIndexer(conf);
            lzoIndexer.index(new Path(args[1]));
            System.exit(result);
        } else if(result == 1){
            System.exit(result);
        }

    }

如果已经有了lzo文件,可以采用如下方法添加索引:

bin/yarn jar /module/cloudera/parcels/GPLEXTRAS-5.4.0-1.cdh5.4.0.p0.27/lib/hadoop/lib/hadoop-lzo-0.4.15-cdh5.4.0.jar com.hadoop.compression.lzo.DistributedLzoIndexer /user/hive/warehouse/cndns.db/ods_cndns_log/dt=20160803/node=alicn/part-r-00000.lzo

lzo格式默认是不支持splitable的,需要为其添加索引文件,才能支持多个map并行对lzo文件进行处理。

【参考】http://blog.csdn.net/wisgood/article/details/17080361

时间: 2024-10-26 14:05:53

hadoop输出lzo文件并添加索引的相关文章

7.跟我学solr---对文件数据添加索引

简介 solr可以对文件数据进行解析,提取可索引内容进行建立索引,底层实现是依赖apache Tika的,Tika利用现有的解析类库,从不同格式的文档中(例如HTML,PDF,Doc),侦测和提取出元数据和结构化内容,然后交由solr建立索引. 添加文件数据索引例子 首先要保证你的solr版本在1.4以上,然后进入到进入到文件所在的目录,然后使用curl命令,把文件数据添加到solr中即可. cd site/html curl "http://localhost:8080/solr/update

python读取csv文件并添加索引

对于csv文件进行处理一个重要的步骤是为数据添加索引,方便后续的数据操作,这里我们使用pandas库中的read_csv()函数,在读取csv数据的同时可以对其添加行索引和列索引. import pandas as pd obj=pd.read_csv('testdata.csv') print(obj) read_csv()不对属性进行设置的缺省状态下,对于csv文件进行读取操作后,即使原来的数据存在索引,也会自动添加数字的行索引和列索引. obj=pd.read_csv('testdata.

【转】MapReduce读取lzo文件

1.读lzo文件 需要添加以下代码,并导入lzo相关的jar包 job.setInputFormatClass(LzoTextInputFormat.class); 2.写lzo文件 lzo格式默认是不支持splitable的,需要为其添加索引文件,才能支持多个map并行对lzo文件进行处理 如果希望reduce输出的是lzo格式的文件,添加下面的语句        FileOutputFormat.setCompressOutput(job, true);        FileOutputF

hadoop mapreduce lzo

import com.hadoop.compression.lzo.LzoIndexer; import com.hadoop.compression.lzo.LzopCodec; FileOutputFormat. setCompressOutput( job, true); // 设置压缩 FileOutputFormat. setOutputCompressorClass( job, LzopCodec.class ); // 选择压缩类型 result = job .waitForCom

Hadoop配置lzo和lzop

在使用flume采集日志写入到hdfs时,用到了lzo压缩算法,这个算法将让保存的文件缩小为原文件的三分之一.由于此压缩算法不是hadoop默认的,需要另外安装,下面记录下,全文主要参考文末博文完成. 编译安装lzo和lzop 注意,有多少个节点,就安装多个少!注意,有多少个节点,就安装多个少!注意,有多少个节点,就安装多个少! lzo 先编译安装lzo. (1)编译需要使用gcc和g++,需要提前安装好,这个在安装ruby也需要用到. # yum安装 [[email protected] /k

Hadoop之HDFS文件操作

摘要:Hadoop之HDFS文件操作常有两种方式,命令行方式和JavaAPI方式.本文介绍如何利用这两种方式对HDFS文件进行操作. 关键词:HDFS文件    命令行     Java API HDFS是一种分布式文件系统,为MapReduce这种框架下的海量数据分布式处理而设计. Hadoop之HDFS文件操作常有两种方式,一种是命令行方式,即Hadoop提供了一套与Linux文件命令类似的命令行工具:另一种是JavaAPI,即利用Hadoop的Java库,采用编程的方式操作HDFS的文件.

hadoop对于压缩文件的支持及算法优缺点

hadoop对于压缩文件的支持及算法优缺点   hadoop对于压缩格式的是透明识别,我们的MapReduce任务的执行是透明的,hadoop能够自动为我们 将压缩的文件解压,而不用我们去关心. 如果我们压缩的文件有相应压缩格式的扩展名(比如lzo,gz,bzip2等),hadoop就会根据扩展名去选择解码器解压. 压缩格式 工具 算法 文件扩展名 多文件 可分割性 DEFLATE 无 DEFLATE .deflate 不 不 gzip gzip DEFLATE .gz 不 不 ZIP zip

Hadoop对小文件的解决方案

小文件指的是那些size比HDFS的block size(默认64M)小的多的文件.任何一个文件,目录和block,在HDFS中都会被表示为一个object存储在namenode的内存中, 每一个object占用150 bytes的内存空间.所以,如果有10million个文件, 每一个文件对应一个block,那么就将要消耗namenode 3G的内存来保存这些block的信息.如果规模再大一些,那么将会超出现阶段计算机硬件所能满足的极限. 控制小文件的方法有: 1.应用程序自己控制 2.arc

教你在Linux中如何用命令或手动修改文件来添加一个用户

教你在Linux中如何使用命令或手动修改文件添加一个用户 首先我们从一个例子进行引入:添加一个happy用户,基本组为happy(5200),附加组为luzhi. 一.用命令的方法实现: groupadd -g 5200 happy useradd -u 5200 -g happy -G luzhi  happy passwd happy su - happy 这样就这个用户就创建成功了. 下面来演示一下: 验证系统中是否存在happy用户,从输出看是没有存在happy用户的. 2.我们先建一个