Hadoop 部署之 Hive (五)

一、Hive 简介

1、什么是 Hive

  • Hive 由 Facebook 实现并开源,是基于 Hadoop 的一个数据仓库工具,可以将结构化的数据映射为一张数据库表,并提供 HQL(Hive SQL)查询功能,底层数据是存储在 HDFS 上。
  • Hive 的本质是将 SQL 语句转换为 MapReduce 任务运行,使不熟悉 MapReduce 的用户很方便地利用 HQL 处理和计算 HDFS 上的结构化的数据,适用于离线的批量数据计算。
  • Hive 依赖于 HDFS 存储数据,Hive 将 HQL 转换成 MapReduce 执行,所以说 Hive 是基于 Hadoop 的一个数据仓库工具,实质就是一款基于 HDFS 的 MapReduce 计算框架,对存储在 HDFS 中的数据进行分析和管理。

![]( http://i2.51cto.com/images/blog/201811/16/a84e82d933b69c863b72fc2290c0b7bc.png?x-oss-process=image/watermark ,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)

2、为什么使用 Hive

直接使用 MapReduce 所面临的问题:

  1、人员学习成本太高

  2、项目周期要求太短

  3、MapReduce实现复杂查询逻辑开发难度太大

为什么要使用 Hive:

  1、更友好的接口:操作接口采用类 SQL 的语法,提供快速开发的能力

  2、更低的学习成本:避免了写 MapReduce,减少开发人员的学习成本

  3、更好的扩展性:可自由扩展集群规模而无需重启服务,还支持用户自定义函数

3、Hive 的特点

  • 优点:

  1、可扩展性,横向扩展,Hive 可以自由的扩展集群的规模,一般情况下不需要重启服务 横向扩展:通过分担压力的方式扩展集群的规模 纵向扩展:一台服务器cpu i7-6700k 4核心8线程,8核心16线程,内存64G => 128G

  2、延展性,Hive 支持自定义函数,用户可以根据自己的需求来实现自己的函数

  3、良好的容错性,可以保障即使有节点出现问题,SQL 语句仍可完成执行

  • 缺点:

  1、Hive 不支持记录级别的增删改操作,但是用户可以通过查询生成新表或者将查询结 果导入到文件中(当前选择的 hive-2.3.2 的版本支持记录级别的插入操作)

  2、Hive 的查询延时很严重,因为 MapReduce Job 的启动过程消耗很长时间,所以不能 用在交互查询系统中。

  3、Hive 不支持事务(因为不没有增删改,所以主要用来做 OLAP(联机分析处理),而 不是 OLTP(联机事务处理),这就是数据处理的两大级别)。

4、Hive 的架构

![]( http://i2.51cto.com/images/blog/201811/16/36a1211a54fc63bd05826dd7f703647c.png?x-oss-process=image/watermark ,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)

二、Hive 安装

1、MySQL 安装(datanode01)

Hive 的元数据存储在 RDBMS 中,除元数据外的其它所有数据都基于 HDFS 存储。默认情 况下,Hive 元数据保存在内嵌的 Derby 数据库中,只能允许一个会话连接,只适合简单的 测试。实际生产环境中不适用,为了支持多用户会话,则需要一个独立的元数据库,使用 MySQL 作为元数据库,Hive 内部对 MySQL 提供了很好的支持。

yum install mariadb-server

2、MySQL 启动

启动数据库

systemctl start mariadb
systemctl enable mariadb

3、Hive 下载安装

# 下载安装包
wget https://mirrors.aliyun.com/apache/hive/hive-2.3.3/apache-hive-2.3.3-bin.tar.gz

# 解压安装包
tar xf apache-hive-2.3.3-bin.tar.gz
mv apache-hive-2.3.3-bin /usr/local/hive

# 创建目录
mkdir -p /home/hive/{log,tmp,job}

4、配置 Hive 环境变量

编辑文件/etc/profile.d/hive.sh,修改为如下内容:

# HIVE ENV
export HIVE_HOME=/usr/local/hive
export PATH=$PATH:$HIVE_HOME/bin

使HIVE环境变量生效。

source /etc/profile.d/hive.sh

三、Hive 配置

1、配置 metastore(datanode01)

mysql> grant all privileges on *.* to 'hive'@'%' identified by 'hive123456' with grant option;
mysql> grant all privileges on *.* to 'hive'@'datanode01' identified by 'hive123456' with grant option;

mysql> grant all privileges on *.* to 'thbl_prd_hive'@'%' identified by 'hive123456' with grant option;
mysql> grant all privileges on *.* to 'hive'@'localhost' identified by 'hive123456' with grant option;
mysql> grant all privileges on *.* to 'thbl_prd_hive'@'localhost' identified by 'hive123456' with grant option;
mysql> flush privileges;

2、配置 jdbc(datanode01)

wget http://mirrors.163.com/mysql/Downloads/Connector-J/mysql-connector-java-5.1.45.tar.gz 
tar xf mysql-connector-java-5.1.45.tar.gz
cp mysql-connector-java-5.1.45/mysql-connector-java-5.1.45-bin.jar /usr/local/hive/lib/

3、备份template配置文件(namenode01)

cd /usr/local/hive/conf
mkdir template
mv *.template template

# 安排配置文件
cp template/hive-exec-log4j2.properties.template hive-exec-log4j2.properties
cp template/hive-log4j2.properties.template hive-log4j2.properties
cp template/hive-default.xml.template hive-default.xml
cp template/hive-env.sh.template hive-env.sh

4、配置 hive-env.sh(namenode01)

编辑文件/usr/local/hive/conf/hive-env.sh,修改内容如下:

HADOOP_HOME=/usr/local/hadoop
export HIVE_CONF_DIR=/usr/local/hive/conf
export HIVE_AUX_JARS_PATH=/usr/local/hive/lib

5、配置数据仓库 hive-site.xml(namenode01)

编辑文件/usr/local/hive/conf/hive-site.xml,修改内容为如下:

<configuration>
   <property>
     <name>hive.exec.local.scratchdir</name>
     <value>/home/hive/job</value>
     <description>hive的本地临时目录,用来存储不同阶段的map/reduce的执行计划</description>
   </property>

   <property>
     <name>hive.downloaded.resources.dir</name>
     <value>/home/hive/tmp/${hive.session.id}_resources</value>
     <description>hive下载的本地临时目录</description>
   </property>

   <property>
     <name>hive.querylog.location</name>
     <value>/home/hive/log/${system:user.name}</value>
     <description>hive运行时结构化日志路径</description>
   </property>

   <property>
     <name>hive.hwi.war.file</name>
     <value>lib/hive-hwi-2.1.1.war</value>
     <description>HWI war文件路径, 与 ${HIVE_HOME}相关. </description>
   </property>

   <property>
     <name>hive.server2.logging.operation.log.location</name>
     <value>/home/hive/log/${system:user.name}/operation_logs</value>
     <description>日志开启时的,操作日志路径</description>
   </property>

<!--远程mysql元数据库-->
   <property>
     <name>hive.metastore.local</name>
     <value>false</value>
   </property>

  <property>
    <name>datanucleus.schema.autoCreateAll</name>
    <value>true</value>
    <description>启动时自动创建必要的schema</description>
  </property>

  <property>
    <name>hive.metastore.warehouse.dir</name>
    <value>/hive/warehouse</value>
    <description>Hive数据仓库在HDFS中的路径</description>
  </property>

   <property>
     <name>hive.metastore.uris</name>
     <value>thrift://datanode01:9083</value>
     <description>远程metastore的 Thrift URI,以供metastore客户端连接metastore服务端</description>
   </property>

<!--mysql元数据库配置-->
   <property>
     <name>javax.jdo.option.ConnectionDriverName</name>
     <value>com.mysql.jdbc.Driver</value>
     <description>JDBC驱动名</description>
   </property>

   <property>
     <name>javax.jdo.option.ConnectionURL</name>
     <value>jdbc:mysql://datanode01:3306/hive_db?createDatabaseIfNotExist=true</value>
     <description>JDBC连接名</description>
   </property>

   <property>
     <name>javax.jdo.option.ConnectionUserName</name>
     <value>hive</value>
     <description>连接metastore数据库的用户名</description>
   </property>

   <property>
     <name>javax.jdo.option.ConnectionPassword</name>
     <value>hive123456</value>
     <description>连接metastore数据库的密码</description>
   </property>

   <property>
     <name>hive.metastore.schema.verification</name>
     <value>false</value>
     <description>强制metastore schema的版本一致性</description>
   </property>
</configuration>

6、配置权限(namenode01)

scp /usr/local/hive/conf/* datanode01:/usr/local/hive/conf/
chmod 755 /usr/local/hive/conf/*

四、Hive 启动

1、在namenode01,启动hiveserver2

hive --service hiveserver2 &

2、在datanode01,启动metastore

hive --service metastore &

五、Hive 检查

1、JPS

[root@namenode01 ~]# jps
14512 NameNode
14786 ResourceManager
21348 RunJar
15894 HMaster
22047 Jps



[root@datanode01 ~]# jps
3509 DataNode
3621 NodeManager
1097 QuorumPeerMain
9930 RunJar
3935 HRegionServer
10063 Jps

2、hive shell

[root@namenode01 ~]# hive
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/usr/local/hive/lib/log4j-slf4j-impl-2.6.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/usr/local/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]

Logging initialized using configuration in file:/usr/local/hive/conf/hive-log4j2.properties Async: true
Hive-on-MR is deprecated in Hive 2 and may not be available in the future versions. Consider using a different execution engine (i.e. spark, tez) or using Hive 1.X releases.
hive> show tables;
OK
Time taken: 0.833 seconds
posted @ 2018-12-27 10:00  小水滴18  阅读(255)  评论(0)    收藏  举报