[英]Hadoop: reciprocal of hdfs dfs -text
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 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.