Hive运行机制与原理

运行原理

Hive可以作为单机的交互式进程使用,如运行HIVE_HOME/bin/hive打开的交互式进程,该进程不需要服务进程(自带服务功能)。还可以作为服务(hiveserver2,服务模式,端口默认10000,web端口10002),此时用hive自带客户端HIVE_HOME/bin/beeline(还有Web客户端Hue)。Hive Server2可以配置Zookeeper,实现HA高可用。Hive2.x不再只支持hive-on-mr,未来可能不支持,建议使用spark或tez。Hive可以启动多个hiveserver2,使用Zookeeper做协调,和HBase相似,客户端访问Zookeeper。

Hql和MySQL命令相似。简单的计算,不需要生成MapReduce任务,举例:

select * from t1;
show databases;
use db1;
show tables;

Hive默认有一个default库,在warehouse顶级目录,创建的其他库在此目录下。默认选择default库。

存储格式

Hive支持的存储格式包括:文本文件,列式存储文件,二进制文件,文件可以使用压缩。下面是关于格式和压缩的使用和说明(经过安装snappy的两个版本最后还是不能使用功能snappy,应该需要重新编译hadoop,可使用cdh的方案,省事,权限、兼容等一系列都给弄好了):

# Hadoop默认不支持snappy压缩,可以将支持的HADOOP_HOME/lib/native目录下的文件拷贝到自己的该目录下。
hadoop checknative # 命令查看支持内容,snappy默认是false。
hdfs getconf -confkey  io.compression.codecs # 查看配置参数的值,默认值无法查到,可到https://hadoop.apache.org/docs/r2.7.6->Configuration下面去找。
vim ${HADOOP_HOME}/etc/hadoop/core-site.xml # 编辑文件以至此压缩格式等,参见下面文件修改详情。
vim ${HADOOP_HOME}/etc/hadoop/mapred-site.xml # 编辑文件以至此压缩格式等,参见下面文件修改详情。

# 然后安装snappy
# 查看$HADOOP_HOME/lib/native下内容(原始):
-rw-r--r--. 1 20415 101 1123566 418 2018 libhadoop.a
-rw-r--r--. 1 20415 101 1486932 418 2018 libhadooppipes.a
lrwxrwxrwx. 1 20415 101      18 418 2018 libhadoop.so -> libhadoop.so.1.0.0
-rwxr-xr-x. 1 20415 101  673620 418 2018 libhadoop.so.1.0.0
-rw-r--r--. 1 20415 101  581856 418 2018 libhadooputils.a
-rw-r--r--. 1 20415 101  364916 418 2018 libhdfs.a
lrwxrwxrwx. 1 20415 101      16 418 2018 libhdfs.so -> libhdfs.so.0.0.0
-rwxr-xr-x. 1 20415 101  229193 418 2018 libhdfs.so.0.0.0

# 安装cmake
cd cmake-3.13.4 && ./bootstrap # 运行安装检查
make && make install # 编译和安装,make install将文件放到了/usr/local/bin下。
# 安装snappy,下载了snappy1.1.3和当前最新1.1.7,下面安装的是新版本
cd /root/packages && tar -zxf snappy-1.1.3.tar.gz && cd snappy-1.1.3
mkdir build # 创建一个目录用于cmake生成构建文件和配置文件
cd build && cmake ../ && make # 这一套编译完毕
make install # 安装,到/usr/local/lib64/libsnappy.a文件
# 又安装了snappy-1.1.3
cd /root/packages/snappy-1.1.3 && ./configure
make && make install # 安装到/usr/local/lib/libsnappy开头的文件(.la/.a/.so/.so.1/.so.1.3.0)

# Hive使用压缩:库文件和Hive命令都要设置
cp /usr/local/lib64/libsnappy.a /usr/local/hadoop/hadoop-2.7.6/lib/native/ # 首先库文件
# 执行hive命令:set hive.exec.compress.intermediate=true;(默认是false不使用压缩)中间传输数据启用压缩,这个还要求mapreduce.map.output.compress设为true及相关压缩器设置(前面已设置好,也可在hive中临时设置:set mapreduce.map.output.compress=true;),还需要设置set hive.exec.compress.output=true;(默认是false不使用压缩)输出启用压缩,这个还要求mapreduce.output.fileoutputformat.compress设为true(前面已设置好)。

# 最后折腾了半天hadoop的snappy压缩还是不能用,应该需要重新编译,使用带snappy参数的方式。暂时还是使用默认的压缩方式吧(需要将mapred-site.xml中的带有codec的设为org.apache.hadoop.io.compress.DefaultCodec)。

Hadoop下的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.BZip2Codec,
    org.apache.hadoop.io.compress.SnappyCodec
  </value>
  <description>支持的压缩格式,默认是空</description>
</property>

Hadoop下的mapred-site.xml配置文件修改内容如下:

<property>
  <name>mapreduce.map.output.compress</name>
  <value>true</value>
  <description>mapper输出启用压缩,默认是false</description>
</property>
<property>
  <name>mapreduce.map.output.compress.codec</name>
  <value>org.apache.hadoop.io.compress.SnappyCodec</value>
  <description>mapper输出使用的压缩器,默认是org.apache.hadoop.io.compress.DefaultCodec</description>
</property>
<property>
  <name>mapreduce.output.fileoutputformat.compress</name>
  <value>true</value>
  <description>reducer输出启用压缩,默认是false</description>
</property>
<property>
  <name>mapreduce.output.fileoutputformat.compress.codec</name>
  <value>org.apache.hadoop.io.compress.SnappyCodec</value>
  <description>reducer输出使用的压缩器,默认是org.apache.hadoop.io.compress.DefaultCodec</description>
</property>
<property>
  <name>mapreduce.output.fileoutputformat.compress.type</name>
  <value>BLOCK</value>
  <description>reducer输出最终按块压缩,默认是RECORD按行</description>
</property>
`
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值