`
jin8000608172
  • 浏览: 139876 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Hive学习笔记

阅读更多

数据分析的引擎:Hive、Pig  ----> 属于Hadoop体系结构
                Impala
Spark SQL  -----> 类似Hive

一、什么是Hive?
1、Hive是一个翻译器,把SQL语句翻译成一个MapReduce程序
2、常见的数据分析引擎:Hive、Pig、Impala、Spark SQL
3、Hive是一个基于Hadoop之上的数据分析引擎(数据仓库)
Hive       HDFS
表         目录
数据       文件
分区       目录

4、Hive支持SQL(SQL92的一个子集)


二、Apache Hive的体系结构



三、Hive的安装和配置
1、安装模式:嵌入模式             ----> 需要Hive自带的一个关系型数据库:Derby
             本地模式、远程模式   ----> 需要MySQL数据库的支持

tar -zxvf apache-hive-2.3.0-bin.tar.gz -C ~/training/
环境变量:vi ~/.bash_profile
HIVE_HOME=/root/training/apache-hive-2.3.0-bin
export HIVE_HOME

PATH=$HIVE_HOME/bin:$PATH
export PATH


2、嵌入模式
(1)使用Hive自带的Derby数据库来存储元信息
(2)Hive只支持一个连接
     创建 conf/hive-site.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
  <name>javax.jdo.option.ConnectionURL</name>
  <value>jdbc:derby:;databaseName=metastore_db;create=true</value>
</property>

<property>
  <name>javax.jdo.option.ConnectionDriverName</name>
  <value>org.apache.derby.jdbc.EmbeddedDriver</value>
</property>

<property>
  <name>hive.metastore.local</name>
  <value>true</value>
</property>

<property>
  <name>hive.metastore.warehouse.dir</name>
  <value>file:///root/training/apache-hive-2.3.0-bin/warehouse</value>
</property>
</configuration>

初始化MetaStore:
schematool -dbType derby -initSchema

日志:
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的数据模型(重要)

五、Hive的查询:就是SQL语句

六、Hive的Java API ----> 就是JDBC程序

七、Hive的自定义函数(UDF:user define function):本质就是一个Java程序




一、Hive的安装和配置:远程模式(需要MySQL数据库)
(*)在嵌入模式下,在哪个目录下执行的数据库初始化,就应该在哪个目录下执行: hive
(*)远程模式:MySQL
(1)配置MySQL的数据库:http://www.mysqlfront.de/
(2)配置hive-site.xml: JDBC的参数
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
  <name>javax.jdo.option.ConnectionURL</name>
  <value>jdbc:mysql://localhost:3306/hive?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>hiveowner</value>
</property>

<property>
  <name>javax.jdo.option.ConnectionPassword</name>
  <value>Welcome_1</value>
</property>

</configuration>
(3)把MySQL数据库的驱动放到: Hive/lib下
(4)初始化MySQL数据库
老版本的Hive:第一次运行Hive
新版本的hive:schematool -dbType mysql -initSchema


二、Hive的数据模型(重要): 表的类型 ----> 默认分隔符是:tab键
,MARTIN,SALESMAN,7698,1981/9/28,1250,1400,30


1、内部表:相当于MySQL(Oracle)中表,将数据保存到Hive自己的数据仓库的目录中: /usr/hive/warehouse
create table emp
(empno int,
ename string,
job string,
mgr int,
hiredate string,
sal int,
comm int,
deptno int
);

导入数据到表中:本地、HDFS
load语句、insert语句
load语句相当于ctrl+X

load data inpath '/scott/emp.csv' into table emp;   ----> 导入HDFS
load data local inpath '/root/temp/***' into table emp;   ----> 导入本地文件

创建表,并且指定分隔符
create table emp1
(empno int,
ename string,
job string,
mgr int,
hiredate string,
sal int,
comm int,
deptno int
)row format delimited fields terminated by ',';

创建部门表,保存部门数据
create table dept
(deptno int,
dname string,
loc string
)row format delimited fields terminated by ',';

load data inpath '/scott/dept.csv' into table dept;


2、分区表:提高查询的效率----> 查看SQL的执行计划
           分区 ----> 目录
  
(*)根据员工的部门号建立分区
create table emp_part
(empno int,
ename string,
job string,
mgr int,
hiredate string,
sal int,
comm int
)partitioned by (deptno int)
row format delimited fields terminated by ',';

往分区表中导入数据:指明分区
insert into table emp_part partition(deptno=10) select empno,ename,job,mgr,hiredate,sal,comm from emp1 where deptno=10;
insert into table emp_part partition(deptno=20) select empno,ename,job,mgr,hiredate,sal,comm from emp1 where deptno=20;
insert into table emp_part partition(deptno=30) select empno,ename,job,mgr,hiredate,sal,comm from emp1 where deptno=30;

(*)Hive SQL的执行计划
(*)补充:Oracle中的索引和执行计划
(*)问题:索引一定可以提高查询的效率吗?(数据量少,数据严重倾斜)
(*)Oracle中索引两种类型:  B树索引(默认)----> 适合:insert  update delete
                             位图索引       ----> 适合:select


3、外部表: external table 相对于内部表
(*)实验的数据
[root@bigdata11 ~]# hdfs dfs -cat /students/student01.txt
1,Tom,23
2,Mary,24
[root@bigdata11 ~]# hdfs dfs -cat /students/student02.txt
3,Mike,26

(*)定义:(1)表结构  (2)指向的路径
create external table students_ext
(sid int,sname string,age int)
row format delimited fields terminated by ','
location '/students';

(*)Oracle中的外部表
数据加载方式:
(1)Oracle SQL*Loader 工具
(2)Oracle的数据泵---> PLSQL程序的一个程序包

4、桶表:本质也是一种分区表,类似Hash分区
   桶 ----> 文件
  创建一个桶表,按照员工的职位job分桶
create table emp_bucket
(empno int,
ename string,
job string,
mgr int,
hiredate string,
sal int,
comm int,
deptno int
)clustered by (job) into 4 buckets
row format delimited fields terminated by ',';

使用桶表,需要打开一个开关
set hive.enforce.bucketing=true;

使用子查询插入数据
insert into emp_bucket select * from emp1;
  
5、视图:view
(*)视图是一个虚表,虚:视图是不存数据的
(*)优点:简化复杂的查询
(*)举例:查询部门名称、员工的姓名
create view myview
as
select dept.dname,emp1.ename
from emp1,dept
where emp1.deptno=dept.deptno;

select * from myview;

(*)补充:视图(Oracle数据库) ----> 物化视图
          如果视图可以缓存数据,提高效率

6、Hive的查询
(1)查询所有的员工信息
       select * from emp1;
  
(2)查询员工信息:员工号  姓名  薪水
       select empno,ename,sal from emp1;
  
(3)多表查询:查询部门名称、员工的姓名
select dept.dname,emp1.ename
from emp1,dept
where emp1.deptno=dept.deptno;

(4)子查询:hive只支持:from和where后面的子查询
     参考讲义的:P50

(5)内置函数:select max(sal) from emp1;

(6)条件函数  就是一个if else: 做一个报表:涨工资,总裁1000 经理800 其他400
select empno,ename,job,sal,
case job when 'PRESIDENT' then sal+1000
         when 'MANAGER' then sal+800
else sal+400
end
from emp1;


select empno,ename,job,sal,
case job when 'PRESIDENT' then sal+1000
         when 'MANAGER' then sal+800
else sal+400
end
from emp;

Oracle数据库:decode函数也是条件函数

三、Hive的Java客户端


四、Hive的自定义函数


一、Hive的Java客户端
1、JDBC:Java的标准的访问数据库的接口
启动Hive Server:  hiveserver2

java.lang.RuntimeException: org.apache.hadoop.ipc.RemoteException:User:
root is not allowed to impersonate anonymous
在老版本的Hive中,是没有这个问题的
把Hadoop HDFS的访问用户(代理用户) ---> *
core-site.xml
<property>
   <name>hadoop.proxyuser.root.hosts</name>
   <value>*</value>
</property>

<property>
   <name>hadoop.proxyuser.root.groups</name>
   <value>*</value>
</property>

2、ODBC、Thrift Client


二、Hive的自定义函数:内置函数、自定义函数(就是一个Java程序,封装我们的业务逻辑)
    UDF: user define function

1、实现关系型数据库中的concat函数: 拼加字符串
      select concat('Hello  ' ,'World') from dual;  ----> Hello World
 
2、根据员工的薪水,判断薪水的级别
(*) sal < 1000   ---> Grade A
(*) 1000<= sal < 3000 ---> Grade B
(*) sal >= 3000 ---> Grade C

3、打包
   将jar包加入hive的classpath
   add jar /root/temp/myudf.jar;
  
   创建别名(函数名称)
   create temporary function myconcat as 'demo.udf.MyConcatString';
   create temporary function checksal as 'demo.udf.CheckSalaryGrade';






























































  • 大小: 67.1 KB
分享到:
评论

相关推荐

    hive学习笔记

    hive hadoo MapReduce 介绍Hive。Hive入门,Hive学习笔记

    Hive学习笔记(更新版)

    ### Hive学习笔记(更新版) #### 一、Hive简介 Hive 是一款构建于 Hadoop 之上的数据仓库工具,旨在提供一种简单易用的方法处理存储在 Hadoop 文件系统 (HDFS) 中的大量数据集。它允许用户使用类似于 SQL 的语言...

    hive学习笔记精华版

    【Hive学习笔记精华版】 Hive是大数据处理领域中的一款重要工具,它基于Hadoop构建,主要用于数据仓库和数据分析。作为一个离线处理系统,Hive可以将结构化的数据文件映射成数据库表,允许用户使用类似SQL的查询...

    HIVE学习笔记详细教程

    HIVE学习笔记,看完整个文档,对HIVE与HADOOP的关系,就完全明白,就能直接用HIVE进行各种数据分析。hive是基于Hadoop的一个数据仓库工具,用来进行数据提取、转化、加载,这是一种可以存储、查询和分析存储在Hadoop...

    Hive 学习笔记1

    Hive 学习笔记Hive

    hive学习笔记-比较全的知识

    标题中提到的"Hive学习笔记-比较全的知识"和描述中所述"相当不错的,适合初学者,下载绝对不亏"意味着本篇文档旨在为初学者提供一个全面的学习指南,覆盖Hive的主要概念和操作。而标签"hive"确定了文档的中心主题是...

    尚硅谷大数据技术hive学习笔记

    "尚硅谷大数据技术hive学习笔记" Hive 是一个基于 Hadoop 的数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类 SQL 查询功能。 Hive 的核心是将 HQL 转化成 MapReduce 程序,通过 SQL 语言中常用的操作...

    阿里巴巴Hive学习笔记.docx

    《阿里巴巴Hive学习笔记》是基于阿里巴巴内部分享的资料,主要涵盖了Hive的基本结构、与Hadoop的关系、元数据库管理以及基本操作等方面,为初学者提供了深入理解Hive的全面指南。 1. **Hive结构** - **Hive架构**...

    Hive学习笔记整理.pdf

    Hive学习笔记整理.pdf 本文档是关于Hive学习笔记的整理,涵盖了Hive的架构、Hive和Hadoop的关系、Hive和普通关系数据库的异同、Hive的元数据库、Hive数据存储、Hive的基本操作等知识点。 1. HIVE结构 Hive的架构...

    hive学习笔记(阿里巴巴)

    hive学习笔记,大数据,数据仓库纪要.

    大数据 之 Hive 学习笔记

    大数据 之 Hive 学习笔记 ; 基本操作; 查询; 使用Hive注意点;

    完整图文版 阿里巴巴数据产品平台 大数据与云计算技术系列教程 Hadoop之Hive学习笔记(共63页).pdf

    **Hive学习笔记** Hive是由阿里巴巴数据产品平台推出的一款基于Hadoop的大数据处理工具,主要服务于大数据与云计算技术领域。Hive的核心是提供了一种类SQL(HQL)的查询语言,使得熟悉SQL的开发者能够方便地进行大...

    大数据技术知识沉淀 数据仓库学习 Hive学习笔记 共63页.pdf

    ### 大数据技术知识沉淀:Hive学习笔记 #### 1. Hive 架构 - **概述**:Hive 是一个基于 Hadoop 的数据仓库工具,它可以将结构化的数据文件映射为一张数据库表,并提供简单的 SQL 查询功能,使不熟悉 MapReduce 的...

    大数据存储与处理技术hadoop 基于hive数据仓库原理与实战 Hive学习笔记 共63页.pdf

    大数据存储与处理技术hadoop 基于hive数据仓库原理与实战 Hive学习笔记 共63页.pdf

Global site tag (gtag.js) - Google Analytics