繁体   English   中英

Hadoop:hdfs dfs -text 的倒数

[英]Hadoop: reciprocal of hdfs dfs -text

Hadoop中,在hdfs dfs -texthdfs dfs -getmerge命令允许一个从所述命令行中HDFS压缩文件,包括管道到其他命令容易地读取内容,用于处理(例如wc -l <(hdfs dfs -getmerge /whatever 2>/dev/null) )。

这些命令是否互惠,允许从命令行将内容推送到 HDFS,同时支持与上述命令相同的压缩和格式功能 hdfs dfs -put似乎只是将本地文件的原始副本复制到 HDFS,无需压缩或更改容器格式。

建议用于操作此类格式和压缩算法的命令行工具的答案也受到欢迎。 我通常会在 CompressedStream 中看到 Snappy 压缩的数据,但无法弄清楚如何从命令行将纯文本文件(每行一个数据)转换为这样的文件。 我尝试了snzip (如这个 askubuntu question 中所建议的)以及这个 snappy命令行工具,但无法使用它们中的任何一个来生成对 Hadoop 友好的 Snappy 文件(或读取 HDFS 中摄取的 Snappy 文件的内容使用阿帕奇水槽)。

hdfs dfs -text -text 似乎没有互惠,而且 WebHDFS 也不支持(解)压缩,所以我最终用 Java 编写了自己的命令行工具,用于在 Hadoop 友好的 Snappy 中将标准输入压缩为标准输出。

代码是这样的:

class SnappyCompressor {
    static void main(String[] args)
    {
        try {
            Configuration conf = new Configuration();
            CompressionCodecFactory ccf = new CompressionCodecFactory(conf);
            CompressionCodec codec =
                ccf.getCodecByClassName(SnappyCodec.class.getName());
            Compressor comp = CodecPool.getCompressor(codec);
            CompressionOutputStream compOut =
                codec.createOutputStream(System.out, comp);
            BufferedReader in =
                new BufferedReader(new InputStreamReader(System.in));
            String line;
            while( (line=in.readLine()) != null ) {
                compOut.write( line.getBytes() );
                compOut.write( '\n' );
            }
            compOut.finish();
            compOut.close();
        }
        catch( Exception e ) {
            System.err.print("An exception occured: ");
            e.printStackTrace(System.err);
        }
    }
}

使用hadoop jar <jar path> <class name>

压缩这样的文本数据,可以put到HDFS(通过如hdfs dfs -put或使用WebHDFS),然后用读取hdfs dfs -text

您可以使用 HDFS NFS,将其挂载为驱动器,并且应该能够运行 linux 命令进行交互。

https://hadoop.apache.org/docs/r2.4.1/hadoop-project-dist/hadoop-hdfs/HdfsNfsGateway.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM