Hadoop 部署之 Hive

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 中的数据进行分析和管理。

技术分享图片

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 的架构

技术分享图片

二、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

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

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配置文件

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

编辑文件/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

编辑文件/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>hive12345</value>
     <description>连接metastore数据库的密码</description>
   </property>

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

</configuration>

6、配置权限

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

[[email protected] ~]# jps
14512 NameNode
14786 ResourceManager
21348 RunJar
15894 HMaster
22047 Jps

[[email protected] ~]# jps
3509 DataNode
3621 NodeManager
1097 QuorumPeerMain
9930 RunJar
3935 HRegionServer
10063 Jps

2、hive shell

[[email protected] ~]# 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

以上是关于Hadoop 部署之 Hive 的主要内容,如果未能解决你的问题,请参考以下文章

Hadoop 部署之环境准备

hadoop生态之hive

鲲鹏BigData Pro解决方案中Hive组件的部署

hive安装部署及使用

部署单机版的hadoop+hive小记

在apache hadoop2.6 上部署hive 并将hive数据源存储于Mysql