欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

大数据私房菜--Hive架构(一)

程序员文章站 2024-03-22 12:03:22
...

文章内容输出来源:拉勾教育大前端高薪训练营

1. 数据仓库工具 – Hive

1.1 Hive概述

HDFS => 海量数据的存储
MapReduce => 海量数据的分析和处理
YARN => 集群资源的管理和作业调度

Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表
(类似于RDBMS中的表),并提供类SQL查询功能;Hive是由Facebook开源,用于解
决海量结构化日志的数据统计。

  • Hive本质是:将 SQL 转换为 MapReduce 的任务进行运算
  • 底层由HDFS来提供数据存储

**数据仓库(Data Warehouse)**是一个面向主题的、集成的、相对稳定的、反映历史变
化的数据集合,主要用于管理决策。(数据仓库之父比尔·恩门,1991年提出)。

  • 数据仓库的目的:构建面向分析的、集成的数据集合;为企业提供决策支持
  • 数据仓库本身不产生数据,数据来源与外部
  • 存储了大量数据,对这些数据的分析和处理不可避免的用到Hive

1.2 Hive架构

大数据私房菜--Hive架构(一)

  1. 用户接口 CLI(Common Line Interface)

    Hive的命令行,用于接收HQL,并返回结果; JDBC/ODBC:是指Hive的java实现,与传统数据库JDBC类似;

  2. Wen客户端 WebUI

    是指可通过浏览器访问Hive;

  3. Thrift Server

    Hive可选组件,是一个软件框架服务,允许客户端使用包括Java、C++、Ruby
    和其他很多种语言,通过 编程的方式远程访问Hive;

  4. 元数据管理(MetaStore)

    Hive将元数据存储在关系数据库中(如mysql、derby)。Hive的元数据包括:数据库名、表名及类型、字段名称及数据类型、数据所在位置等;

  5. 驱动程序(Driver)

    • 解析器 (SQLParser) :使用第三方工具(antlr)将HQL字符串转换成抽象
      语法树(AST);对AST进行语法分析,比如字段是否存在、SQL语义是否
      有误、表是否存在;
    • 编译器 (Compiler) :将抽象语法树编译生成逻辑执行计划
    • 优化器 (Optimizer) :对逻辑执行计划进行优化,减少不必要的列、使用分
      区等;
    • 执行器 (Executr) :把逻辑执行计划转换成可以运行的物理计划

1.3 Hive安装与配置

Hive安装:Hive(2.3.7) + MySQL(5.7.26)

备注:Hive的元数据默认存储在自带的 derby 数据库中,生产中多采用MySQL

1.3.1 安装准备

# hive安装包
apache-hive-2.3.7-bin.tar.gz

# MySQL安装包
mysql-5.7.26-1.el7.x86_64.rpm-bundle.tar

# MySQL的JDBC驱动程序
mysql-connector-java-5.1.46.jar

# 整体的安装步骤:
1、安装MySQL
2、安装配置Hive
3、Hive添加常用配置

1.3.2 MySQL安装

1、删除MariaDB

centos7.6自带的 MariaDB(MariaDB是MySQL的一个分支),与要安装的MySQL有
冲突,需要删除。

# 查询是否安装了mariadb
rpm -aq | grep mariadb

# 删除mariadb。-e 删除指定的套件;--nodeps 不验证套件的相互关联性
rpm -e --nodeps mariadb-libs

2、安装依赖

yum -y install perl 
yum -y install net-tools

3、安装MySQL

# 解压缩
tar xvf mysql-5.7.26-1.el7.x86_64.rpm-bundle.tar

# 依次运行以下命令
rpm -ivh mysql-community-common-5.7.26-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.26-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-compat-5.7.26-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.26-1.el7.x86_64.rpm
rpm -ivh mysql-community-devel-5.7.26-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.26-1.el7.x86_64.rpm

4、mysql配置

# 设置mysql服务自启
systemctl start mysqld.service 
# 重启mysqld
systemctl restart mysqld
# 查看初始后生成的随机密码
grep password /var/log/mysqld.log
# 登录mysql,修改管理者用户密码hie
mysql -u root -p
ALTER USER 'root'@'localhost' IDENTIFIED BY 'toor';
# 修改/etc/my.cnf配置文件
vim /etc/my.cnf
# 在 [mysqld] 下面加上这个配置
character-set-server=utf8
# 重启mysql
service mysqld restart
SHOW VARIABLES like 'character%';
# 验证
mysql> SHOW VARIABLES like 'character%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

5、创建hive用户

-- 创建用户设置口令、授权、刷新
CREATE USER 'hive'@'%' IDENTIFIED BY 'hive';
GRANT ALL ON *.* TO 'hive'@'%';
FLUSH PRIVILEGES;

1.3.3 Hive 安装

1、Hive安装包解压缩

cd /opt/packages/
tar -zxvf apache-hive-2.3.7-bin.tar.gz -C /opt/hive
cd /opt/hive
mv apache-hive-2.3.7-bin hive-2.3.7

2、修改环境变量

# 在 /etc/profile 文件中增加环境变量
export HIVE_HOME=/opt/lagou/servers/hive-2.3.7
export PATH=$PATH:$HIVE_HOME/bin

# 执行并生效
source /etc/profile

3、修改Hive配置

vim $HIVE_HOME/conf/hive-site.xml 增加以下内容

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
  <!-- hive元数据的存储位置 -->
  <property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://mr00:3306/hivemetadata?createDatabaseIfNotExist=true&amp;useSSL=false</value>     
    <description>JDBC connect string for a JDBC metastore</description>
  </property>
  <!-- 指定驱动程序 -->
  <property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>com.mysql.jdbc.Driver</value>
    <description>Driver class name for a JDBC metastore</description>
  </property>
  <!-- 连接数据库的用户名 -->
  <property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>hive</value>
    <description>username to use against metastore database</description>
  </property>
  <!-- 连接数据库的口令 -->
  <property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>hive</value>    
    <description>password to use against metastore database</description>
  </property>
</configuration>

jdbc的连接串,如果没有 useSSL=false 会有大量警告
在xml文件中 & 表示 &

4、拷贝 MySQL JDBC 驱动程序

将 mysql-connector-java-5.1.46.jar 拷贝到 $HIVE_HOME/lib

cp mysql-connector-java-5.1.46.jar $HIVE_HOME/lib

5、初始化元数据库

schematool -dbType mysql -initSchema

6、启动Hive,执行命令

# 启动hive服务之前,请先启动hdfs、yarn的服务
[aaa@qq.com conf]# hive
hive> show functions;

1.3.4 Hive属性设置

数据存储位置

<property>
    <!-- 数据默认的存储位置(HDFS) -->
    <name>hive.metastore.warehouse.dir</name>
    <value>/user/hive/warehouse</value>
    <description>location of default database for the warehouse</description>
</property>

显示当前库

<property>
    <!-- 在命令行中,显示当前操作的数据库 -->
    <name>hive.cli.print.current.db</name>
    <value>true</value>
    <description>Whether to include the current database in the Hive prompt</description>
</property>

显示表头属性

<property>
    <!-- 在命令行中,显示数据的表头 -->
    <name>hive.cli.print.header</name>
    <value>true</value>
</property>

本地模式

<property>
    <!-- 操作小规模数据时,使用本地模式,提高效率 -->
    <name>hive.exec.mode.local.auto</name>
    <value>true</value>
    <description>Let Hive determine whether to run in local mode automatically</description>
</property>

备注:当 Hive 的输入数据量非常小时,Hive 通过本地模式在单台机器上处理所有
的任务。对于小数据集,执行时间会明显被缩短。当一个job满足如下条件才能真正
使用本地模式:

  • job的输入数据量必须小于参数:hive.exec.mode.local.auto.inputbytes.max
    (默认128MB)
  • job的map数必须小于参数:hive.exec.mode.local.auto.tasks.max (默认4)
  • job的reduce数必须为0或者1

Hive的日志文件

Hive的log默认存放在 /tmp/root 目录下(root为当前用户名);这个位置可以修
改。

vi $HIVE_HOME/conf/hive-log4j2.properties
# 添加以下内容:
property.hive.log.dir = /opt/lagou/servers/hive-2.3.7/logs

参数配置

-- 查看全部参数
hive> set;
-- 查看某个参数
hive> set hive.exec.mode.local.auto;
hive.exec.mode.local.auto=false

参数配置的三种方式:

1、用户自定义配置文件(hive-site.xml)
2、启动hive时指定参数(-hiveconf)
3、hive命令行指定参数(set)
配置信息的优先级:
set > -hiveconf > hive-site.xml > hive-default.xml

1.3.4.1 启动时指定参数值

启动Hive时,可以在命令行添加 -hiveconf param=value 来设定参数,这些设定仅
本次启动有效

# 启动时指定参数
hive -hiveconf hive.exec.mode.local.auto=true
# 在命令行检查参数是否生效
hive> set hive.exec.mode.local.auto;
hive.exec.mode.local.auto=true

1.3.4.2 命令行修改参数

可在 Hive 命令行中使用SET关键字设定参数,同样仅对本次启动有效

hive> set hive.exec.mode.local.auto=false;
hive> set hive.exec.mode.local.auto;
hive.exec.mode.local.auto=false

1.3.5 Hive命令

  1. hive命令
usage: hive
 -d,--define <key=value>          Variable substitution to apply to Hive
                                  commands. e.g. -d A=B or --define A=B
    --database <databasename>     Specify the database to use
 -e <quoted-query-string>         SQL from command line
 -f <filename>                    SQL from files
 -H,--help                        Print help information
    --hiveconf <property=value>   Use value for given property
    --hivevar <key=value>         Variable substitution to apply to Hive
                                  commands. e.g. --hivevar A=B
 -i <filename>                    Initialization SQL file
 -S,--silent                      Silent mode in interactive shell
 -v,--verbose                     Verbose mode (echo executed SQL to the
                                  console)
  1. 退出Hive命令行
exit; quit;
  1. 在命令行执行shell命令 / dfs命令
hive> ! ls;
hive> ! clear;
hive> dfs -ls / ;

文章内容输出来源:拉勾教育大前端高薪训练营