hadoop:hdfs dfs-text的倒数

2nc8po8w  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(713)

在hadoop中 hdfs dfs -text 以及 hdfs dfs -getmerge 命令允许人们从命令行轻松地读取hdfs中压缩文件的内容,包括管道到其他处理命令(例如。 wc -l <(hdfs dfs -getmerge /whatever 2>/dev/null) ).
这些命令之间是否存在相互作用,允许从命令行将内容推送到hdfs,同时支持与上述命令相同的压缩和格式特性? hdfs dfs -put 看起来只是将本地文件的原始副本复制到hdfs,没有压缩或容器格式更改。
建议使用命令行工具来操作这些格式和压缩算法的答案也很受欢迎。我通常在compressedstream中看到snappy压缩数据,但不知道如何从命令行将一个纯文本文件(每行一个基准)转换成这样的文件。我尝试了snzip(正如在askubuntu问题中所建议的)以及这个snapy命令行工具,但是不能使用它们中的任何一个来生成hadoop友好的snapy文件(或者使用apacheflume读取hdfs中摄取的snapy文件的内容)。

1cklez4t

1cklez4t1#

似乎没有相互作用 hdfs dfs -text 而且webhdfs也不支持(de)压缩,所以我最终用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 .

pbossiut

pbossiut2#

您可以使用hdfs-nfs,将其装载为驱动器,并且应该能够运行linux命令进行交互。
https://hadoop.apache.org/docs/r2.4.1/hadoop-project-dist/hadoop-hdfs/hdfsnfsgateway.html

相关问题