hive的搭建及其入门一

本文深入探讨了Hive数据仓库的原理与应用,包括Hive的背景、架构、与RDBMS的对比、部署步骤、表操作及数据管理。详细介绍了如何在Hadoop生态中利用Hive进行大数据统计分析。

一、Hadoop

狭义
Hadoop是最重要最基础的一个部分
广义
Hadoop生态圈
Hadoop、Hive、Sqoop、HBase…

处理如下业务:join/group by

二、hive产生的背景

基于Hadoop处理大数据存在的弊端:
面向MapReduce麻烦
RDBMS的需求

==> Hive的产生背景
MySQL/Oracle… 统计
先创建表:表名、列名、列类型… schema(元数据/metadata)
然后再使用SQL进行相应的业务统计分析

HDFS上的文件:文本格式
按照某个分隔符(\t):第一列是什么、第二列是什么

元数据 vs 源数据
源数据:HDFS上的文件
元数据:是描述数据的数据

三、Hive概述

hive.apache.org

The Apache Hive ™ data warehouse software facilitates
reading,
writing,
managing large datasets residing
in distributed storage (HDFS/S3)
using SQL

A command line tool
and JDBC driver are provided to connect users to Hive

Facebook开源,用于解决海量结构化的日志数据统计问题
构建在Hadoop(HDFS/MapReduce/YARN)之上的数据仓库
Hive的数据是存放在HDFS之上
Hive底层执行引擎:MapReduce/Tez/Spark
只需要通过一个参数就能够切换底层的执行引擎
Hive作业提交到YARN上运行
提供了HQL查询语言
和SQL类似,但不完全相同
所谓的大数据“云化”:是一个很大项目
适用于离线处理/批处理
HDFS上的数据:文本 压缩、列式存储

SQL on Hadoop:Hive/Presto/Impala/Spark SQL…

四、Hive的优缺点

优点:SQL
缺点:
如果底层引擎是基于MR,性能必然不高

五、Hive架构

用户接口层:黑窗口、JDBC
Driver/驱动器
SQL解析:SQL ==> AST(antlr)
查询优化:逻辑/物理执行计划
UDF/SerDes:
Execution:执行
元数据:表名、所属数据库、列(名/类型/index)、表类型、表数据所在目录

id,username,password,age

Hive的数据是存放在HDFS之上
Hive的数据分为两部分:数据 + 元数据
在这里插入图片描述

六、Hive和RDBMS的对比

相同点
SQL
事务
insert/update/delete Hive-0.14才支持
针对Hive数据仓库,写比较少的,批次加载数据到Hive然后进行统计分析
不同点
体量/集群规模
延迟/时性

七、部署

https://cwiki.apache.org/confluence/display/Hive/GettingStarted
前期工作

前置
JDK8
Hadoop2.x
Linux
MySQL

CDH-5.16.2
wget http://archive.cloudera.com/cdh5/cdh/5/hive-1.1.0-cdh5.16.2.tar.gz

安装

解压
[pxj@pxj31 /opt]$tar -zxvf hive-1.1.0-cdh5.16.2.tar.gz  -C /home/pxj/app/
#### 配置环境
[pxj@pxj31 /home/pxj]$vim .bashrc 
export HIVE_HOME=/home/pxj/app/hive-1.1.0-cdh5.16.2
export PATH=${HIVE_HOME}/bin:$PATH
[pxj@pxj31 /home/pxj]$source .bashrc 
[pxj@pxj31 /home/pxj]$which hive
~/app/hive-1.1.0-cdh5.16.2/bin/hive
修改配置文件
[pxj@pxj31 /home/pxj/app/hive-1.1.0-cdh5.16.2/conf]$vim 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://pxj31:3306/pxj31_hive?createDatabaseIfNotExist=true</value>
    </property>
    <property>
      <name>javax.jdo.option.ConnectionDriverName</name>
        <value>com.mysql.jdbc.Driver</value>
        </property>
   <property>
  <name>javax.jdo.option.ConnectionUserName</name>
    <value>root</value>
    </property>
   <property>
  <name>javax.jdo.option.ConnectionPassword</name>
    <value>lenovo</value>
    </property>
    
    <property>
        <name>hive.cli.print.current.db</name>
        <value>true</value>
    </property>
    
    <property>
        <name>hive.cli.print.header</name>
        <value>true</value>
    </property>
</configuration>
[pxj@pxj31 /home/pxj/app/hive-1.1.0-cdh5.16.2/conf]$cp hive-env.sh.template  hive-env.sh
[pxj@pxj31 /home/pxj/app/hive-1.1.0-cdh5.16.2/conf]$vim hive-env.sh
HADOOP_HOME=/home/pxj/app/hadoop
 拷贝驱动

[pxj@pxj31 /opt]$sudo mv mysql-connector-java-5.1.27-bin.jar ~/app/hive-1.1.0-cdh5.16.2/lib/
启动
[pxj@pxj31 /home/pxj/app/hive-1.1.0-cdh5.16.2/lib]$hive
which: no hbase in (/home/pxj/app/hive-1.1.0-cdh5.16.2/bin:/home/pxj/app/hadoop/bin:/home/pxj/app/hadoop/sbin:/usr/java/jdk1.8.0_121/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/pxj/.local/bin:/home/pxj/bin)
19/12/15 01:04:22 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

Logging initialized using configuration in jar:file:/home/pxj/app/hive-1.1.0-cdh5.16.2/lib/hive-common-1.1.0-cdh5.16.2.jar!/hive-log4j.properties
WARNING: Hive CLI is deprecated and migration to Beeline is recommended.
hive (default)> show databases;
OK
database_name
default
Time taken: 31.063 seconds, Fetched: 1 row(s)

八、创建表

hive (default)> create table stu(id int, name string, age int);
OK
Time taken: 4.357 seconds
hive (default)> 

查看表结构的四种方法

hive (default)> desc stu;
OK
col_name    data_type   comment
id                      int                                         
name                    string                                      
age                     int                                         
Time taken: 0.869 seconds, Fetched: 3 row(s)
hive (default)> desc extended stu;
OK
col_name    data_type   comment
id                      int                                         
name                    string                                      
age                     int                                         
         
Detailed Table Information  Table(tableName:stu, dbName:default, owner:pxj, createTime:1576343220, lastAccessTime:0, retention:0, sd:StorageDescriptor(cols:[FieldSchema(name:id, type:int, comment:null), FieldSchema(name:name, type:string, comment:null), FieldSchema(name:age, type:int, comment:null)], location:hdfs://pxj31:9000/user/hive/warehouse/stu, inputFormat:org.apache.hadoop.mapred.TextInputFormat, outputFormat:org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat, compressed:false, numBuckets:-1, serdeInfo:SerDeInfo(name:null, serializationLib:org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe, parameters:{serialization.format=1}), bucketCols:[], sortCols:[], parameters:{}, skewedInfo:SkewedInfo(skewedColNames:[], skewedColValues:[], skewedColValueLocationMaps:{}), storedAsSubDirectories:false), partitionKeys:[], parameters:{transient_lastDdlTime=1576343220}, viewOriginalText:null, viewExpandedText:null, tableType:MANAGED_TABLE, ownerType:USER)  
Time taken: 0.081 seconds, Fetched: 5 row(s)
hive (default)> desc formatted stu;
OK
col_name    data_type   comment
col_name              data_type               comment             
         
id                      int                                         
name                    string                                      
age                     int                                         
         
 Detailed Table Information         
Database:               default                  
OwnerType:              USER                     
Owner:                  pxj                      
CreateTime:             Sun Dec 15 01:07:00 CST 2019     
LastAccessTime:         UNKNOWN                  
Protect Mode:           None                     
Retention:              0                        
Location:               hdfs://pxj31:9000/user/hive/warehouse/stu    
Table Type:             MANAGED_TABLE            
Table Parameters:        
    transient_lastDdlTime   1576343220          
         
 Storage Information        
SerDe Library:          org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe   
InputFormat:            org.apache.hadoop.mapred.TextInputFormat     
OutputFormat:           org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat   
Compressed:             No                       
Num Buckets:            -1                       
Bucket Columns:         []                       
Sort Columns:           []                       
Storage Desc Params:         
    serialization.format    1                   
Time taken: 0.388 seconds, Fetched: 29 row(s)
hive (default)> show create table stu;
OK
createtab_stmt
CREATE TABLE `stu`(
  `id` int, 
  `name` string, 
  `age` int)
ROW FORMAT SERDE 
  'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe' 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
  'hdfs://pxj31:9000/user/hive/warehouse/stu'
TBLPROPERTIES (
  'transient_lastDdlTime'='1576343220')
Time taken: 0.986 seconds, Fetched: 14 row(s)

插入数据

insert into stu values(1,'pk',30);

查询数据

hive (default)> select * from stu;
OK
stu.id  stu.name    stu.age
1   pk  30
Time taken: 0.336 seconds, Fetched: 1 row(s)

所在的目录

hdfs://pxj31:9000/user/hive/warehouse/stu
hive.metastore.warehouse.dir:/user/hive/warehouse
stu:表的名字
表的完整路径是: ${hive.metastore.warehouse.dir}/tablename

九、Hive的完整执行日志:

cd H I V E H O M E c p h i v e − l o g 4 j . p r o p e r t i e s . t e m p l a t e h i v e − l o g 4 j . p r o p e r t i e s h i v e . l o g . d i r = HIVE_HOME cp hive-log4j.properties.template hive-log4j.properties hive.log.dir= HIVEHOMEcphivelog4j.properties.templatehivelog4j.propertieshive.log.dir={java.io.tmpdir}/${user.name}
hive.log.file=hive.log

j a v a . i o . t m p d i r / {java.io.tmpdir}/ java.io.tmpdir/{user.name}/${hive.log.file}
/tmp/hadoop/hive.log

十、Hive配置属性

全局:$HIVE_HOME/hive-site.xml中
临时/当前session:仅对当前session生效
查看当前的属性:set key;
修改当前的属性:set key=value;
hive -hiveconf hive.cli.print.current.db=true

十一、Hive中交互式命令

-e:不需要进入hive命令后,就可以跟上sql语句查询
-f:执行指定文件(内容是SQL语句)

拓展:基于Hive的离线统计/数据仓库
把SQL封装到shell脚本中去,使用hive -e “query sql…”
定时调度:crontab

十二、Hive中的数据抽象

Hive中的表(stu)必须要归属于某个数据库(default)
Database
包含了0到N张表
每个db对应HDFS上的一个文件夹
default==>/user/hive/warehouse

十三、创建数据库

CREATE (DATABASE|SCHEMA) [IF NOT EXISTS] database_name
[COMMENT database_comment]
[LOCATION hdfs_path]
[WITH DBPROPERTIES (property_name=property_value, …)];

CREATE DATABASE IF NOT EXISTS ruozedata_hive;

自己创建的Hive数据库的存放目录规则:
${hive.metastore.warehouse.dir}/dbname.db
/user/hive/warehouse/pxj_hive.db

CREATE DATABASE IF NOT EXISTS pxj_data LOCATION '/pxj/directory'    ;
hive (default)> dfs -ls /pxj
              > ;
Found 1 items
drwxr-xr-x   - pxj supergroup          0 2019-12-15 01:19 /pxj/directory
hive (default)> 
hive (default)> CREATE DATABASE IF NOT EXISTS pxj_data LOCATION '/pxj/directory'
              > ;
OK
Time taken: 0.144 seconds
hive (default)> dfs -ls /pxj
              > ;
Found 1 items
drwxr-xr-x   - pxj supergroup          0 2019-12-15 01:19 /pxj/directory
hive (default)>  CREATE DATABASE IF NOT EXISTS pxj_hive3 COMMENT 'this is pxj database' WITH DBPROPERTIES('creator'='pk', 'date'='9012-12-30');;
OK
Time taken: 0.069 seconds

十四、删除数据库

DROP (DATABASE|SCHEMA) [IF EXISTS] database_name [RESTRICT|CASCADE];
hive (default)> drop database pxj_data;
OK
Time taken: 0.911 seconds
hive (default)> drop database pxj_hive3;
OK
Time taken: 0.212 seconds

慎用:强制性删除数据库需要使用cascade关键字;
CASCADE(了解即可,慎用): one2many == 1 db 对 多 table

十五、基本数据类型

HDFS上的文件来说:string
数值类型:int bigint float double decimal
字符串类型:string 90%
布尔类型:boolean: true/false
日期类型:date timestamp …

分隔符
delimiter code
^A \001 字段之间的分隔符
\n \n 记录分隔符
^B \002 ARRAY/STRUCT (Hive中的复杂数据类型)
^C \003 key/value of MAP (Hive中的复杂数据类型)

1,pk,30
1$$$ p k pk pk$$$30

create table stu2(id int, name string, age int) row format delimited fields terminated by ‘,’;
insert into stu2 values(1,‘pk’,30);
把/user/hive/warehouse/stu/000000_0下载到本地,查看数据的内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值