[喵咪大数据]Hive2搭建和基本操作

2024-05-31 07:18

本文主要是介绍[喵咪大数据]Hive2搭建和基本操作,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

[喵咪大数据]Hive2搭建和基本操作

说的Hadoop生态有一个不得不提的组件那就是,Hive是基于Hadoop结构化存储引擎,能够存储海量的数据,Hive提供了类SQL的方式对数据进行查询检索汇总,大大减少了早期需要使用MapReduce编程的烦扰,今天就和笔者一起来探索Hive的实际应用场景吧.

附上:
HIVE官网地址:Apache Hive TM
喵了个咪的博客:w-blog.cn

1.环境配置

hadoop集群环境需要提前配置好,可以在master上进行搭建也可以单独一台机器进行搭建这里使用一台独立的centos7.X 64位服务器进行Hive服务搭建并且连接到之前的Hadoop集群

通过oneinstack配置环境

> mkdir -p /app/install && cd /app/install
> wget http://mirrors.linuxeye.com/oneinstack-full.tar.gz
> tar -zxvf oneinstack-full.tar.gz 
# 安装选择mysql5.7 密码为 hive666
> cd oneinstack && ./install.sh

关闭防火墙(端口通讯会被拦截)

> systemctl stop firewalld.service    # 关闭firewall
> systemctl disable firewalld.service # 禁止firewall开机启动

分别修改服务器的主机名

# 最后主机名会全小写状态显示
> hostnamectl set-hostname hive

修改服务器的host 和hadoop节点建立关联

> vim /etc/hosts
192.168.1.101 hadoop-1
192.168.1.102 hadoop-2
192.168.1.103 hadoop-3

使用 Hive 需要Java 和 hadoop 环境 我们从之前的 hadoop-1 把相对应的包复制过来

> scp -r /usr/local/jdk1.8 root@192.168.1.104:/usr/local/jdk1.8
> scp -r /usr/local/hadoop-2.7.3 root@192.168.1.104:/usr/local/hadoop-2.7.3

增加java和hadoop的环境变量

# java
export JAVA_HOME=/usr/local/jdk1.8
export JRE_HOME=/usr/local/jdk1.8/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$PATH# hadoop
export HADOOP_HOME=/usr/local/hadoop-2.7.3
export HADOOP_INSTALL=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

准备hive软件包 之后需要Hive和Hbase进行结构上的管理和与Spark关联进行查询上的效率提高这里选用Hive2.3.0版本

apache-hive-2.3.0-bin.tar.gz

创建hadoop用户

> useradd -m hadoop -s /bin/bash
> passwd hadoop

2.安装配置

安装HIVE

解压安装Hive

> cd /app/install
> tar -zxvf apache-hive-2.3.0-bin.tar.gz
> mv apache-hive-2.3.0-bin /usr/local/hive-2.3.0

设置 Hive环境变量

> vim /etc/profile
# hive
export HIVE_HOME=/usr/local/hive-2.3.0
export PATH=$PATH:$HIVE_HOME/bin
# 让配置生效
> source /etc/profile

配置Hive2.X

配置文件重命名
在运行 Hive 之前需要使用以下命令修改配置文件:

> cd /usr/local/hive-2.3.0/conf
> cp hive-env.sh.template hive-env.sh
> cp hive-default.xml.template hive-site.xml
> cp hive-log4j2.properties.template hive-log4j2.properties
> cp hive-exec-log4j2.properties.template hive-exec-log4j2.properties

修改hive-env.sh因为 Hive 使用了 Hadoop, 需要在 hive-env.sh 文件中指定 Hadoop 安装路径:

> vim hive-env.sh
export JAVA_HOME=/usr/local/jdk1.8   ##Java路径
export HADOOP_HOME=/usr/local/hadoop-2.7.3   ##Hadoop安装路径
export HIVE_HOME=/usr/local/hive-2.3.0    ##Hive安装路径
export HIVE_CONF_DIR=/usr/local/hive-2.3.0/conf    ##Hive配置文件路径

在hive机器切换到hadoop用户创建hive数据存放目录

> su hadoop
# 创建HDFS目录
> hdfs dfs -mkdir -p /hive
> hdfs dfs -chmod 777  /hive
> hdfs dfs -mkdir -p /hive/warehouse
> hdfs dfs -mkdir -p /hive/tmp
> hdfs dfs -mkdir -p /hive/log
> hdfs dfs -chmod 777 /hive/warehouse
> hdfs dfs -chmod 777 /hive/tmp
> hdfs dfs -chmod 777 /hive/log

一些复杂的查询或操作会使用的MR程序,应为执行MR程序需要tmp目录中的yarn权限所有如果不是以hadoop用户权限执行不然会有如下异常

org.apache.hadoop.security.AccessControlException: Permission denied: user=hive, access=EXECUTE, inode="/tmp/hadoop-yarn/staging/hive/.staging":hadoop:supergroup:drwx------
# 解决方式
> hdfs dfs -chmod -R 777 /tmp

将 hive-site.xml 文件中以下几个配置项的值设置成上一步中创建的几个路径。

> vim /usr/local/hive-2.3.0/conf/hive-site.xml
<property><name>hive.exec.scratchdir</name><value>/hive/tmp</value><description>HDFS root scratch dir for Hive jobs which gets created with write all (733) permission. For each connecting user, an HDFS scratch dir: ${hive.exec.scratchdir}/&lt;username&gt; is created, with ${hive.scratch.dir.permission}.</description></property><property><name>hive.metastore.warehouse.dir</name><value>/hive/warehouse</value><description>location of default database for the warehouse</description></property>
<property><name>hive.querylog.location</name><value>/hive/log</value><description>Location of Hive run time structured log file</description></property>

Hive Metastore

默认情况下, Hive 的元数据保存在内嵌的 Derby 数据库里, 但一般情况下生产环境会使用 MySQL 来存放 Hive 元数据。
创建数据库和用户
假定你已经安装好 MySQL。下面创建一个 hive 数据库用来存储 Hive 元数据,且数据库访问的用户名和密码都为 hive。

mysql -u root -p
mysql> CREATE DATABASE hive;
mysql> USE hive;
mysql> CREATE USER 'hive'@'localhost' IDENTIFIED BY 'hive';
mysql> GRANT ALL ON hive.* TO 'hive'@'localhost' IDENTIFIED BY 'hive';
mysql> GRANT ALL ON hive.* TO 'hive'@'%' IDENTIFIED BY 'hive';
mysql> FLUSH PRIVILEGES;
mysql> quit;

修改hive-site.xml需要在 hive-site.xml 文件中配置 MySQL 数据库连接信息。

> vim /usr/local/hive-2.3.0/conf/hive-site.xml
<property><name>javax.jdo.option.ConnectionURL</name><value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true&amp;characterEncoding=UTF-8&amp;useSSL=false</value></property><property><name>javax.jdo.option.ConnectionDriverName</name><value>com.mysql.jdbc.Driver</value></property><property><name>javax.jdo.option.ConnectionUserName</name><value>hive</value></property><property><name>javax.jdo.option.ConnectionPassword</name><value>hive</value></property>

初始化Hive

在命令行运行 hive 命令时必须保证以下两点:
HDFS 已经启动。
MySQL Java 连接器添加到 $HIVE_HOME/lib 目录下。我安装时使用的是 mysql-connector-java-5.1.42.jar。

> cd /usr/local/hive-2.3.0/lib
> wget http://download.softagency.net/mysql/Downloads/Connector-J/mysql-connector-java-5.1.42.zip
> unzip mysql-connector-java-5.1.42.zip
> cp mysql-connector-java-5.1.42/mysql-connector-java-5.1.42-bin.jar /usr/local/hive-2.3.0/lib/
> rm -rf mysql-connector-java-5.1.42.zip

从 Hive 2.1 版本开始, 我们需要先运行 schematool 命令来执行初始化操作。

schematool -dbType mysql -initSchema

最后会输出

schemaTool completed

我们可以通过数据库查看终端查看hive库中已经存在部分内容
要使用 Hive CLI(Hive command line interface), 可以在终端输入以下命令:

hive> show tables;
OK
Time taken: 0.839 seconds

如果报出异常

Exception in thread "main" java.lang.IllegalArgumentException: java.net.URISyntaxException: Relative path in absolute URI: ${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D

需要将 hive-site.xml 中的 system:java.io.tmpdir {system:user.name} 分别替换成 /tmp 和 ${user.name}

3.基本操作

创建库

CREATE DATABASE语句

// 创建库如果存在则不创建
CREATE DATABASE IF NOT EXISTS userdb;m
// 创建数据库如果存在则会报错
CREATE SCHEMA userdb;

下面的查询用于验证数据库列表:

hive> SHOW DATABASES;
default
userdb

删除数据库

// 删除库如果存在则不删除
DROP DATABASE IF EXISTS userdb;
// 删除数据库必须要删除完其中的表草能删除
DROP DATABASE IF EXISTS userdb CASCADE;
// 删除数据库
DROP SCHEMA userdb;

选择数据库

USE userdb;

Hive创建表

最简单的方式创建表

CREATE TABLE IF NOT EXISTS employee ( eid int, name String, salary String, destination String);

通过COMMENT可以增加一个备注可以给整表或字段

CREATE TABLE IF NOT EXISTS employee ( eid int COMMENT 'eid details', name String, salary String, destination String)
COMMENT 'Employee details';
CREATE TABLE IF NOT EXISTS employee ( eid int, name String, salary String, destination String)
COMMENT 'Employee details'
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ' '
STORED AS TEXTFILE;

通过TERMINATED可以指定了字段的分隔符为\t分列是\n,所以load数据的时候,load的文本也要为\t分隔\n分行,否则加载后为NULL。hive只支持单个字符的分隔符,hive默认的分隔符是\001

存储类型Hive具有三类自带存储类型TEXTFILE和SEQUENCEFILE,RCFILE可以通过STORED指定
- TEXTFIEL:默认格式,数据不做压缩,磁盘开销大,数据解析开销大。
- SEQUENCEFILE:SequenceFile是Hadoop API提供的一种二进制文件支持,其具有使用方便、可分割、可压缩的特点。
- RCFILE:RCFILE是一种行列存储相结合的存储方式。首先,其将数据按行分块,保证同一个record在一个块上,避免读一个记录需要读取多个block。其次,块数据列式存储,有利于数据压缩和快速的列存取。RCFILE文件示例:
相比TEXTFILE和SEQUENCEFILE,RCFILE由于列式存储方式,数据加载时性能消耗较大,但是具有较好的压缩比和查询响应。数据仓库的特点是一次写入、多次读取,因此,整体来看,RCFILE相比其余两种格式具有较明显的优势

下面的查询用于查看当前库表列表:

hive> SHOW TABLES;
OK
employee

查看表信息

desc formatted employee;
desc employee;

删除表

DROP TABLE IF EXISTS employee;

Alter Table 语句

修改表名称

ALTER TABLE employee RENAME TO emp;

Change 语句

修改字段名称和字段类型

# 修改name为ename 类型不变还是String
ALTER TABLE employee CHANGE name ename String;
# 修改salary名称不变 类型修改为Double
ALTER TABLE employee CHANGE salary salary Double;

增加了一个列名dept在employee表中

ALTER TABLE employee ADD COLUMNS ( dept STRING COMMENT 'Department name');

插入数据

重新创建employee表,在本地文件系统准备文本sample.txt

vim /home/hive/sample.txt
1201 Gopal 45000 Technicalmanager
1202 Manisha 45000 Proofreader
1203 Masthanvali 40000 Technicalwriter
1204 Kiran 40000 HrAdmin
1205 Kranthi 30000 OpAdmin

加载给定文本插入表中(LOAD DATA只是把文件复制到指定的目录下,多次操作只会保留最后一次)

LOAD DATA LOCAL INPATH '/home/hive/sample.txt'
OVERWRITE INTO TABLE employee;

插入单条数据(消耗时间很长,可以结合Hbase来达到实时增加数据)

INSERT INTO TABLE employee values(12,"1","1","1");

查询是否插入成功

select * from employee;
OK
12      1       1       1
1201    Gopal   45000   Technicalmanager
1202    Manisha 45000   Proofreader
1203    Masthanvali     40000   Technicalwriter
1204    Kiran   40000   HrAdmin
1205    Kranthi 30000   OpAdmin
Time taken: 0.063 seconds, Fetched: 5 row(s)

Select

相关查询操作可以参考
Hive内置运算符 - Hive教程™
Hive内置函数 - Hive教程™
Hive视图和索引 - Hive教程™
HiveQL Select Where - Hive教程™
HiveQL Select Order By - Hive教程™
HiveQL Select Group By - Hive教程™
HiveQL Select Join - Hive教程™

4 总结

Hive可以以结构化的方式来存储数据还可以使用SQL的方式来检索出你所需要的数据集给开发人员带来了不少方便,但是Hive也存在问题,单条记录增加繁琐,速度相对比较慢,但是在Hadoop生态中还有一个大家经常使用到的组件那就是Hbase,下节我们就一同来学习Hbase的使用.

注:笔者能力有限有说的不对的地方希望大家能够指出,也希望多多交流!

这篇关于[喵咪大数据]Hive2搭建和基本操作的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1017553

相关文章

使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)

《使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)》在现代软件开发中,处理JSON数据是一项非常常见的任务,无论是从API接口获取数据,还是将数据存储为JSON格式,解析... 目录1. 背景介绍1.1 jsON简介1.2 实际案例2. 准备工作2.1 环境搭建2.1.1 添加

MySQL中删除重复数据SQL的三种写法

《MySQL中删除重复数据SQL的三种写法》:本文主要介绍MySQL中删除重复数据SQL的三种写法,文中通过代码示例讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下... 目录方法一:使用 left join + 子查询删除重复数据(推荐)方法二:创建临时表(需分多步执行,逻辑清晰,但会

Java实现任务管理器性能网络监控数据的方法详解

《Java实现任务管理器性能网络监控数据的方法详解》在现代操作系统中,任务管理器是一个非常重要的工具,用于监控和管理计算机的运行状态,包括CPU使用率、内存占用等,对于开发者和系统管理员来说,了解这些... 目录引言一、背景知识二、准备工作1. Maven依赖2. Gradle依赖三、代码实现四、代码详解五

详谈redis跟数据库的数据同步问题

《详谈redis跟数据库的数据同步问题》文章讨论了在Redis和数据库数据一致性问题上的解决方案,主要比较了先更新Redis缓存再更新数据库和先更新数据库再更新Redis缓存两种方案,文章指出,删除R... 目录一、Redis 数据库数据一致性的解决方案1.1、更新Redis缓存、删除Redis缓存的区别二

Redis事务与数据持久化方式

《Redis事务与数据持久化方式》该文档主要介绍了Redis事务和持久化机制,事务通过将多个命令打包执行,而持久化则通过快照(RDB)和追加式文件(AOF)两种方式将内存数据保存到磁盘,以防止数据丢失... 目录一、Redis 事务1.1 事务本质1.2 数据库事务与redis事务1.2.1 数据库事务1.

Mycat搭建分库分表方式

《Mycat搭建分库分表方式》文章介绍了如何使用分库分表架构来解决单表数据量过大带来的性能和存储容量限制的问题,通过在一对主从复制节点上配置数据源,并使用分片算法将数据分配到不同的数据库表中,可以有效... 目录分库分表解决的问题分库分表架构添加数据验证结果 总结分库分表解决的问题单表数据量过大带来的性能

Java汇编源码如何查看环境搭建

《Java汇编源码如何查看环境搭建》:本文主要介绍如何在IntelliJIDEA开发环境中搭建字节码和汇编环境,以便更好地进行代码调优和JVM学习,首先,介绍了如何配置IntelliJIDEA以方... 目录一、简介二、在IDEA开发环境中搭建汇编环境2.1 在IDEA中搭建字节码查看环境2.1.1 搭建步

Oracle Expdp按条件导出指定表数据的方法实例

《OracleExpdp按条件导出指定表数据的方法实例》:本文主要介绍Oracle的expdp数据泵方式导出特定机构和时间范围的数据,并通过parfile文件进行条件限制和配置,文中通过代码介绍... 目录1.场景描述 2.方案分析3.实验验证 3.1 parfile文件3.2 expdp命令导出4.总结

更改docker默认数据目录的方法步骤

《更改docker默认数据目录的方法步骤》本文主要介绍了更改docker默认数据目录的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1.查看docker是否存在并停止该服务2.挂载镜像并安装rsync便于备份3.取消挂载备份和迁

不删数据还能合并磁盘? 让电脑C盘D盘合并并保留数据的技巧

《不删数据还能合并磁盘?让电脑C盘D盘合并并保留数据的技巧》在Windows操作系统中,合并C盘和D盘是一个相对复杂的任务,尤其是当你不希望删除其中的数据时,幸运的是,有几种方法可以实现这一目标且在... 在电脑生产时,制造商常为C盘分配较小的磁盘空间,以确保软件在运行过程中不会出现磁盘空间不足的问题。但在