hadoop - 从现有的 snapy 文件创建一个配置单元表

标签 hadoop hive hdfs

我是 Hadoop 和 Hive 的新手。我正在使用 hadoop 2.7.0hive 1.1.1 .

我有一些 snappy 格式的文件。我已将它们复制到我的 hdfs 中。我想知道: 1. 如何使用 hdfs 中的那些文件创建一个配置单元表。 2. 如何配置 hadoop 以处理 snappy 文件。

编辑:我尝试了以下操作:

1.修改core-site.xml :

<property>
    <name>io.compression.codecs</name>
    <value>org.apache.hadoop.io.compress.GzipCodec,
           org.apache.hadoop.io.compress.DefaultCodec,
           org.apache.hadoop.io.compress.SnappyCodec
    </value>
</property>

2.修改mapred-site.xml :

<property>
    <name>mapreduce.map.output.compress</name>
    <value>true</value>
</property>

<property>
    <name>mapred.map.output.compress.codec</name>
    <value>org.apache.hadoop.io.compress.SnappyCodec</value>
</property>


<property>
    <name>mapreduce.admin.user.env</name>
    <value>LD_LIBRARY_PATH=/Users/8417/repos/hadoop_ecosystem/hadoop-2.7.0/lib/native</value>
</property>
  1. 已安装 snappy brew install snappy .

  2. cp /usr/local/Cellar/snappy/<version>/lib/snappy.* to $HADOOP_HOME/lib/snappy

  3. cp /usr/local/Cellar/snappy/<version>/lib/snappy.* /Library/Java/Home/jre/lib .

6.新增以下环境变量:

export JAVA_LIBRARY_PATH="$HADOOP_HOME/lib/native"
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HADOOP_HOME/lib/native
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"

但我无法让它发挥作用。我收到以下错误:

Machine:native user$ hadoop fs -text hive/part-00000.snappy 
15/09/24 19:25:14 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Exception in thread "main" java.lang.UnsatisfiedLinkError: org.apache.hadoop.util.NativeCodeLoader.buildSupportsSnappy()Z
    at org.apache.hadoop.util.NativeCodeLoader.buildSupportsSnappy(Native Method)
    at org.apache.hadoop.io.compress.SnappyCodec.checkNativeCodeLoaded(SnappyCodec.java:63)
    at org.apache.hadoop.io.compress.SnappyCodec.getDecompressorType(SnappyCodec.java:192)
    at org.apache.hadoop.io.compress.CodecPool.getDecompressor(CodecPool.java:178)
    at org.apache.hadoop.io.compress.CompressionCodec$Util.createInputStreamWithCodecPool(CompressionCodec.java:157)
    at org.apache.hadoop.io.compress.SnappyCodec.createInputStream(SnappyCodec.java:162)
    at org.apache.hadoop.fs.shell.Display$Text.getInputStream(Display.java:163)
    at org.apache.hadoop.fs.shell.Display$Cat.processPath(Display.java:102)
    at org.apache.hadoop.fs.shell.Command.processPaths(Command.java:317)
    at org.apache.hadoop.fs.shell.Command.processPathArgument(Command.java:289)
    at org.apache.hadoop.fs.shell.Command.processArgument(Command.java:271)
    at org.apache.hadoop.fs.shell.Command.processArguments(Command.java:255)
    at org.apache.hadoop.fs.shell.Command.processRawArguments(Command.java:201)
    at org.apache.hadoop.fs.shell.Command.run(Command.java:165)
    at org.apache.hadoop.fs.FsShell.run(FsShell.java:287)
    at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
    at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:84)
    at org.apache.hadoop.fs.FsShell.main(FsShell.java:340)


Machine:native user$ hadoop checknative
15/09/24 19:41:16 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Native library checking:
hadoop:  false 
zlib:    false 
snappy:  false 
lz4:     false 
bzip2:   false 
openssl: false 
15/09/24 19:41:16 INFO util.ExitUtil: Exiting with status 1

最佳答案

确保你已经安装了 snappy 并且你的 hadoop 能够“看到”它:

hadoop checknative
...
snappy:  true /usr/lib64/libsnappy.so.1
...

还要确保文件的扩展名是“.snappy”。差不多就是这样。

启动 hive 或 beeline 并创建您的表:

create external table t1(f1 int, ...) location '/path/to/dir/with/snappy/files';

关于hadoop - 从现有的 snapy 文件创建一个配置单元表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32761410/

相关文章:

apache-spark - 根据CSV分号分隔数据在HIVE中创建表

hadoop - 使用Multiple Outputs Mapreduce将数据写入多个文件

linux - Hadoop错误日志jvm sqoop

hadoop - 映射后的多个(独立)reduce 函数

regex - 删除标点符号,但不是全部

hadoop - 如何在 "insert"脚本中设置输出文件的数量或大小?

hadoop - 启动 hiveserver2

hadoop - 我可以在ozie中将py spark作为shell工作运行吗?

hadoop - HDFS- block 大小和每分钟100 MB的文件复制

mysql - 如何使用 Sqoop 从 MySQL 增量导入到 Hive?