Linux环境Hive安装配置及使用

转载自:YBCarry

一、Hive

Hive环境前提

  • 1)启动hdfs集群
  • 2)启动yarn集群
  • 如果想用hive的话,需要提前安装部署好hadoop集群。

二、Hive架构原理解析

三、Hive-1.2.2单机安装流程

(1) 解压apache-hive-1.2.2-bin.tar.gz安装包到目标目录下:

tar -zxvf .tar.gz -C 目标目录

(2) 为后续方便,重命名Hive文件夹:

mv apache-hive-1.2.2-bin/ hive-1.2.2

(3) 修改配置文件:

进入hive-1.2.2/conf路径,重命名配置文件:

mv hive-env.sh.template hive-env.sh

修改hive-env.sh信息:

vi hive-env.sh
# Set HADOOP_HOME to point to a specific hadoop install directory
# 指定Hadoop安装路径
HADOOP_HOME=Hadoop安装路径 # Hive Configuration Directory can be controlled by:
# 指定Hive配置文件夹
export HIVE_CONF_DIR=/XXXXXX/hive-1.2.2/conf

(4) 配置环境变量:

  • 修改配置文件:
vi /etc/profile
  • 增加以下内容:
export HIVE_HOME=hive安装路径
export PATH=$PATH:$HIVE_HOME/bin
# Hadoop环境加入Hive依赖
export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$HIVE_HOME/lib/*
  • 声明环境变量:
source /etc/profile

(5) 启动

hive

(6) 退出

quit;

(7) 配置MySQL元数据库

  • <1>. 上传mysql驱动到hive/lib
  • <2>. 在hive-1.2.2/conf路径创建配置文件hive-site.xml:
vi hive-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://主机名:3306/metastore?createDatabaseIfNotExist=true</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>root</value>
<description>username to use against metastore database</description>
</property> <property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>密码</value>
<description>password to use against metastore database</description>
</property> # 查询表时显示表头信息
<property>
<name>hive.cli.print.header</name>
<value>true</value>
</property> # 显示当前所在的数据库
<property>
<name>hive.cli.print.current.db</name>
<value>true</value>
</property>
</configuration>
  • <3>. 重启hadoop集群
  • <4>. 启动hive:hive
  • <5>. 此时mysql中自动创建metastore元数据库

四、Hive数据类型

五、Hive-DDL(Data Definition Language)

(1) 查看数据库

show databases;

(2) 创建库

create database 数据库名;

(3) 创建库(标准写法)

create database if not exists 数据库名;

(4) 创建库指定hdfs路径

create database 数据库名 location '路径';

(5) 创建表

create [external] table [if not exists] 表名(参数) [partitioned by(字段信息)] [clustered by(字段信息)] [sorted by(字段信息)]
row format ---根据行格式化
delimited fields ---分割字段
terminated by '切割符'; ---分割依据
  • external:可选操作,加上创建的是外部表,去掉创建的是管理表(内部表)
  • if not exists:可选操作,加上为标准写法
  • partitioned by(字段信息):可选操作,分区
  • clustered by(字段信息):可选操作,分桶
  • sorted by(字段信息):可选操作,排序
  • **注意:**如果指定了hdfs路径,创建的表存放于该路径下

(6) 查看表类型:

desc formatted 表名;

Table Type:

MANAGED_TABLE——内部表

EXTERNAL_TABLE——外部表

**区别:**管理表删除时hdfs中数据删除,外部表删除时hdfs中数据不删除

(7) 查询表

普通表查询:

select * from 表名;

指定列查询:

select 表名.列1, 表名.列2 from 表名;

指定列查询设置别名

select 表名.列 (as) 列别名 from 列原名;

分区表查询:

  • 全查询:

select * from 表名;

**注意:**此时查看的是整个分区表中的数据

  • 单分区查询:

select * from 表名 where 分区条件;

**注意:**此时查看的是指定分区中的数据

  • 联合查询:
    select * from 表名1 where 分区条件 union select * from 表名1 where 分区条件;
  • 常用基础查询函数:
  • 查询总行数:select count(1) from 表名;
  • 查询最大值:select max(列名) from 表名;
  • 查询最小值:select min(列名) from 表名;
  • 查询列总和:select sum(列名) from 表名;
  • 查询列平均值:select avg(列名) from 表名;
  • 查询结果只显示前n条:select * from 表名 limit n;

where——过滤:

  • 查询A列n~m之间的数据:
select * from 表名 where A>n and A<m;
select * from 表名 where A between n and m;
select * from 表名 where A in(n,m);
  • 查询A列小于n或者大于m之间的数据:select * from 表名 where A<n or A>m;
  • 查询A列不在n~m之间的数据:select * from 表名 where A not in(n,m);
  • 查询A列不为空的数据:`select * from 表名 where A is not null;

like——模糊查询(使用通配符):`

  • 查询以n开头的A列:select * from 表名 where A like 'n%';
  • 查询第二位是n的A列:select * from 表名 where A like '_n%';
  • 查询包含n的A列:select * from 表名 where A like '%n%';

group by——分组:

  • 查询按B分组的A列数据:select A,B from 表名 group by B;
  • 分组查询中用having代替where

Join操作:

  • join(内连接):只有连接的两张表中都存在与条件向匹配的数据才会被保留下来
  • left join(左外连接):保留左表数据,右表没有join上的字段显示为null
  • right join(右外连接):保留右表数据,左表没有join上的字段显示为null
  • full join(满外连接):结果会返回所有表中符合条件的所有记录,如果有字段没有符合条件用null值代替

排序:

Order By(全局排序):

  • 升序排序(可省略asc):select * from 表名 order by 列名 asc;
  • 降序排序:select * from 表名 order by 列名 desc;

Sort By(内部排序):

  • 对每个reducer端数据进行排序,若只有一个reducer端结果与全局排序相同。
  • 设置reduce个数属性(临时):set mapreduce.job.reduces = n;
  • 升序排序(可省略asc):select * from 表名 sort by 列名;
  • 降序排序:select * from 表名 sort by 列名 desc;

Distribute By:

  • distribute by控制在map端如何拆分数据给reducer端。hive会根据distribute by指定的列,对应reducer的个数进行分发,默认是采用hash算法。sort by为每个reduce产生一个排序文件。在有些情况下,需要控制某个特定行应该到哪个reducer,这通常是为了进行后续的聚集操作,distribute by刚好可以做这件事。因此,distribute by经常和sort by配合使用。
  • 先按A列进行排序再按B列进行降序排序:
  • select * from 表名 distribute by A sort by B desc;

Cluster By:

  • 若distrbute by和sort by是相同字段时,cluster by是distribute by和sort by相结合。
  • 被cluster by排序的列只能是降序,不能指定asc和desc。
  • 按A列进行排序:
select * from 表名 cluster by A;
select * from 表名 distribute by A sort by A;
上述两语句等价

(8) 分区表操作

  • 分区表在hdfs中分目录文件夹。
  • 添加单个分区:alter table 表名 add partition(新分区信息);
  • 一次添加多个分区用空格分割即可
  • 查看分区:show partitions 表名;
  • 删除分区:alter table 表名 drop partition(分区信息);
  • 修复分区:(通过hdfs上传分区文件)msck repair table dept_partitions;

(9) 分桶表操作

  • 分桶表在hdfs中分文件。
  • 适用于非常大的数据集。
  • 用户需要统计一个具有代表性的结果或反映趋势(抽样)。
  • 创建分桶表语句: clustered by(字段信息) into n buckets
  • 开启分桶:
set hive.enforce.bucketing = true; set mapreduce.job.reduces = -1;
  • 共m桶,从第n桶开始抽,查看a桶的A列数据(a<m-n):
    select * from 表名(bucket n out of a on   A);

(10) 查看数据库结构

desc database 数据库名;

(11) 添加数据库额外描述信息

alter database 数据库名 set dbproperties('key'='value');

(12) 查询数据库额外信息

desc database extended 数据库名;

(13) 查看指定的数据库(使用通配符)

show databases like 'i*';

(14) 删除空库

drop database 数据库名;

(15) 删除非空库标准写法

drop database if exists 数据库名;

(16) 删除非空库

drop database 数据库名 cascade;

(17) 删除非空库标准写法

drop database if exists 数据库名 cascade;

六、Hive-DML(Data Manipulation Language)

(1) 导入数据

  • load data [local] inpath ‘/XXXX/文件名’ into table 表名 [partition(分区位置)];
  • load data:加载数据
  • local:可选操作,加上local导入是本地Linux中的数据,去掉local那么导入的是hdfs数据
  • inpath:表示的是加载数据的路径
  • into table:表示要加载的对应表
  • partition(分区位置):可选操作,向分区表中导入数据时需要指定

(2) 向表中插入数据

insert into table 表名 partition(分区信息) values(数据内容);

(3) 向表中插入sql查询结果数据

insert overwrite table 表名 partition(分区信息) select * from 表名 where 查询条件;
create table if not exists 表名 as select * from 表名 where 查询条件;

(4) 创建表直接加载数据

create table 表名(参数) row fromat delimited fields terminated by '切割符' locatition '';

**注意:**locatition路径是hdfs文件的上一层文件夹,且文件夹内只有这一个文件。

(5) 把操作结果导出到本地linux

insert overwrite local directory '本地路径' select * from 表名;

(6) 把hive中表数据导出到hdfs中(拷贝操作)

export table 表名 to 'hdfs路径';

(7) 把hdfs数据导入到hive中(拷贝操作)

import table 表名 from 'hive路径';

(8) 清空表数据

truncate table 表名;

七、Hive命令

(1) 不登录Hive客户端直接输入命令操作:

hive -e "Hive-DDL语句(注意分号)"

(2) 直接把sql写入到文件中:

hive -f sql路径

(3) 在Hive中可以直接执行hdfs命令操作:

查看hdfs文件:

dfs -ls 路径;

查看hdfs文件内容:

dfs -cat 文件路径;

创建hdfs目录:

dfs -mkdir -p 目录路径;

上传hdfs文件:

dfs -put 文件路径 目录路径;

(4) 查看历史操作

cat ~/.hivehistory

八、UDF自定义函数

(1) 相关概念:

UDF:一进一出

UDAF:聚合函数,多进一出 e.g. count /max/avg

UDTF:一进多出

(2) 查看系统自带函数:

show functions;

(3) 查看系统自带函数示范用法:

desc function extended 函数名;

(4) UDF自定义函数使用:

  • <1>. 使用java编写函数(类继承org.apache.hadoop.hive.ql.exec.UDF),导出jar包。
  • <2>. 上传至Linux中。
  • <3>. 添加jar包:

临时添加:

  • 在Hive客户端下输入命令:add jar jar包路径;
  • 创建关联:create temporary function 别名 as "java函数类";

注册永久:

  • 修改hive-site.xml配置文件:
<property>
<name>hive.aux.jars.path</name>
<value>file://文件夹路径</value>
</property>

九、Hive压缩——大量数据节省时间

(1) Map输出阶段压缩方式:

  • 开启hive中间传输数据压缩功能:set hive.exec.compress.intermediate = true;
  • 开启map输出压缩:set mapreduce.map.output.compress = true;
  • 指定压缩编码——设置Snappy压缩方式(高版本Hive自带Snappy):
set mapreduce.map.output.compress.codec = org.apache.hadoop.io.compress.SnappyCodec;

(2) Reduce输出阶段压缩方式:

  • 开启hive输出数据压缩功能:set hive.exec.compress.output= true;
  • 开启mr输出数据压缩:set mapreduce.output.fileoutputformat.compress = true;
  • 指定压缩编码——设置Snappy压缩方式:
set mapreduce.output.fileoutputformat.compress.codec = org.apache.hadoop.io.compress.SnappyCodec;
  • 指定压缩类型块压缩:set mapreduce.output.fileoutputformat.compress.type = BLOCK;

十、Hive进阶

(1) Hive集群搭建

server端配置文件:

<configuration>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/opt/module/hive-1.2.2/warehouse</value>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
# MySQL数据库位置 <value>jdbc:mysql://bigdata01:3306/metastore?createDatabaseIfNotExist=true</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>MySQL用户名</value>
<description>username to use against metastore database</description>
</property> <property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>MySQL密码</value>
<description>password to use against metastore database</description>
</property>
</configuration>

client端配置文件:

<configuration>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/opt/module/hive-1.2.2/warehouse</value>
</property>
<property>
<name>hive.metastore.local</name>
<value>false</value>
</property>
<property>
<name>hive.metastore.uris</name>
# server端地址信息
<value>thrift://bigdata01:9083</value>
</property>
# 查询表时显示表头信息
<property>
<name>hive.cli.print.header</name>
<value>true</value>
</property>
# 显示当前所在的数据库
<property>
<name>hive.cli.print.current.db</name>
<value>true</value>
</property>
</configuration>

启动:

启动服务器端:hive --service metastore
启动客户端:hive

Linux环境Hive安装配置及使用的更多相关文章

  1. Linux环境ZooKeeper安装配置及使用

    Linux环境ZooKeeper安装配置及使用 一.ZooKeeper 1.1 zookeeper作用 1.2 zookeeper角色 1.3 zookeeper功能 二.集群规划 三.安装流程 (1 ...

  2. Linux环境Hadoop安装配置

    Linux环境Hadoop安装配置 1. 准备工作 (1)linux配置IP(NAT模式) (2)linux关闭防火墙 (3)设置主机名 (4)设置映射 (5)设置免密登录 2. 安装jdk (1)上 ...

  3. ubuntu linux环境下安装配置jdk和tomcat

    关于linux搭建服务器,ubuntu中jdk和tomcat的安装和配置 一.jdk的安装配置 1:去官网下载好自己需要的版本,注意,linux压缩文件通常以tar.gz结尾,别下载错了.本次我下载安 ...

  4. Linux环境下安装配置Mysql

    首先我们的使用的是linux的 centOS6 版本 安装mysql: 1.查看有没有安装包 yum list mysql* 2.进行安装mysql:一般我们在服务器端安装的都是服务端( mysql- ...

  5. Linux 环境下安装配置 TigerVNC Server 并启用当前会话远程服务(X0VNC)

    曾经喜欢用 RealVNC Server 实现 Linux/Windows 的远程控制,因为 RealVNC 为收费商业软件,支持文件传输,性能优化方面也做得不错.但 RealVNC 从 5.0 版本 ...

  6. Linux环境下安装配置vsftpd服务(三种认证模式)

    一.FTP简介 文件传输协议(英文:File Transfer Protocol,缩写:FTP)是用于在网络上进行文件传输的一套标准协议.它工作于网络传输协议的应用层,使用客户/服务器模式,主要是用来 ...

  7. Linux环境下安装配置JDK1.8

    最近在搞虚拟机,记录下虚拟机内java环境的搭建流程 一.下载合适版本的jdk 此处选择JDK1.8,各位同学可以根据自己的需求选择对应的版本,下载地址为: https://www.oracle.co ...

  8. 1. VMware搭建Linux环境,安装配置centos6.5

    1. 安装VMware,后新建虚拟机 2. 为我们的虚拟机挂载操作系统 3.开启我们的虚拟机,为我们的虚拟机进行安装操作系统 4.配置虚拟机连接网络 修改linux的mac地址 修改mac地址配置文件 ...

  9. Linux环境jdk安装配置

    1.jdk安装包:jdk-8u191-linux-x64.tar.gz2.拷贝 jdk-8u191-linux-x64.tar.gz 到/usr/local命令如下:cp jdk-8u191-linu ...

随机推荐

  1. java零基础之---常见java面试题

    看到别人分享的面试题,感觉蛮全面的,分享出来,慢慢研究答案. 一.Java 基础 1.JDK 和 JRE 有什么区别? 2.== 和 equals 的区别是什么? 3.两个对象的 hashCode() ...

  2. 自家公司关于git commit 的规范

    代码提交的commit info提个建议,fix的issue是哪个issue?都要有明确的链接.推荐方式:1.建立issue,说明问题的背景和原因.http://git.startdt.net/pay ...

  3. Flask 操作Mysql数据库 - flask-sqlalchemy扩展

    数据库的设置 Web应用中普遍使用的是关系模型的数据库,关系型数据库把所有的数据都存储在表中,表用来给应用的实体建模,表的列数是固定的,行数是可变的.它使用结构化的查询语言.关系型数据库的列定义了表中 ...

  4. [ABP教程]第五章 授权

    原文档 地址: Web Application Development Tutorial - Part 5: Authorization 关于此教程 在这个教程系列中,您将构建一个基于ABP的Web应 ...

  5. mysql 应用 持续更新

    1.安装方法 贴出,my.ini # MySQL Server Instance Configuration File # -------------------------------------- ...

  6. 图片质量评估论文 | 无监督SER-FIQ | CVPR2020

    文章转自:同作者微信公主号[机器学习炼丹术].欢迎交流,共同进步. 论文名称:SER-FIQ: Unsupervised Estimation of Face Image Quality Based ...

  7. Selenium WebDriver 定位之Xpath定位

    Selenium 定位之Xpath定位: 1.绝对路径定位:以/开头从根节点一直找到当前节点,不推荐使用决定路径定位方式 2.相对路径定位:使用"//"表示相对路径定位,格式:// ...

  8. 【项目实践】手把手带你搞定SSM

    以项目驱动学习,以实践检验真知 前言 现在使用Java后端开发使用的技术栈基本上比较统一:Spring + SpringMVC + Mybatis,即大家常说的SSM.虽然现在流行的做法是使用Spri ...

  9. 【Java】面向对象

    重新搞一波 复习巩固 简单记录 慕课网 imooc Java 零基础入门-Java面向对象-面向对象 都是视频课件里的. 文章目录 面向对象 什么是对象 什么是面向对象 类 什么是对象的属性和方法 类 ...

  10. innnodb_doublewrite

    有写场景下,双写缓冲确实没必要,例如,你也许像在备库上禁用双写缓冲,此外,一些文件系统,例如zfs做了同样的事,所以,没必要再让innodb做一遍. innodb_double_write=0 即可关 ...