我正在寻找一种替代方法来压缩文件以提高读/写性能,而我探索的途径之一是通过使用Snappy压缩。
到目前为止,它是如此出色,并且已经能够将其放入HDFS并使用-text命令对其进行解压缩以查看其值。真正的问题发生在我尝试将数据导入到配置单元中时。
当我将数据导入hive时,我会创建一个简单的外部表,并设置参数以读取Snappy压缩文件...
SET hive.exec.compress.output=true;
SET mapred.output.compression.codec=org.apache.hadoop.io.compress.SnappyCodec;
SET mapred.output.compression.type=BLOCK;
CREATE EXTERNAL TABLE IF NOT EXISTS test(...
..
)
LOCATION '/user/.../'
当我从测试中运行SELECT COUNT(*)时;我得到正确的行值;但是,如果我运行SELECT * FROM test limit 100;我所看到的只是NULL值。为什么会这样呢?有什么想法吗?
最佳答案
在这种情况下,您的hive生成的mapreduce程序无法找到快照库,因此它们无法解压缩数据。为此,请尝试在hive auxpath中添加snappy.jar,该库可在sqoop的lib目录中找到。 hive 为您的查询生成的MapReduce程序的日志和配置,以检查是否在mapreduce中加载了snappy.jar文件。
设置Hive auxpath需要使用以下参数启动Hive Shell:
hive --auxpath
希望这些回答您的问题。
关于sql - 使用Sqoop和Snappy压缩从Hive读取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25129138/