阅读 81

Hive 系列 - 架构和基本概念

1. 架构原理

hive架构图.png
  1. 2用户接口:Client

    CLI(hive shell)、JDBC/ODBC(java访问hive)、WEBUI(浏览器访问hive)

  2. 元数据:Metastore

    元数据包括:表名、表所属的数据库(默认是default)、表的拥有者、列/分区字段、表的类型(是否是外部表)、表的数据所在目录等;

    默认存储在自带的derby数据库中,推荐使用MySQL存储Metastore

  3. Hadoop

    使用HDFS进行存储,使用MapReduce进行计算。

  4. 驱动器:Driver

    (1)解析器(SQL Parser):将SQL字符串转换成抽象语法树AST,这一步一般都用第三方工具库完成,比如antlr;对AST进行语法分析,比如表是否存在、字段是否存在、SQL语义是否有误。

    (2)编译器(Physical Plan):将AST编译生成逻辑执行计划。

    (3)优化器(Query Optimizer):对逻辑执行计划进行优化。

    (4)执行器(Execution):把逻辑执行计划转换成可以运行的物理计划。对于Hive来说,就是MR/Spark。

Hive通过给用户提供的一系列交互接口,接收到用户的指令(SQL),使用自己的Driver,结合元数据(MetaStore),将这些指令翻译成MapReduce,提交到Hadoop中执行,最后,将执行返回的结果输出到用户交互接口。

2. HiveJDBC访问

2.1 启动hiveserver服务

 bin/hiveserver2

2.2 启动beeline

bin/beeline
Beeline version 1.2.1 by Apache Hive
beeline>

2.3 启动hiveserver2

beeline> !connect jdbc:hive2://hadoop102:10000(回车)
Connecting to jdbc:hive2://hadoop102:10000
Enter username for jdbc:hive2://hadoop102:10000: (直接回车)
Enter password for jdbc:hive2://hadoop102:10000: (直接回车)
Connected to: Apache Hive (version 1.2.1)
Driver: Hive JDBC (version 1.2.1)
Transaction isolation: TRANSACTION_REPEATABLE_READ
0: jdbc:hive2://hadoop102:10000> show databases;
+----------------+--+
| database_name  |
+----------------+--+
| default        |
| hive_db2       |
+----------------+--+

2.4 Hive常用交互命令

 bin/hive -help
usage: hive
 -d,--define <key=value>          Variable subsitution 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 subsitution 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. “-e”不进入hive的交互窗口执行sql语句

    bin/hive -e "select id from student;"
    
  2. “-f”执行脚本中sql语句

    hive -f /opt/module/datas/hivef.sql  > /opt/module/datas/hive_result.txt
    

2.5 Hive其他命令操作

  1. 退出hive窗口:

    hive(default)>exit;
    hive(default)>quit;
    

    在新版的hive中没区别了,在以前的版本是有的:

    exit:先隐性提交数据,再退出;

    quit:不提交数据,退出;

  1. 在hive cli命令窗口中如何查看hdfs文件系统

    hive(default)>dfs -ls /;
    
  2. 在hive cli命令窗口中如何查看本地文件系统

    hive(default)>! ls /opt/module/datas;
    
  3. 查看在hive中输入的所有历史命令

    (1)进入到当前用户的根目录

    (2)查看. hivehistory文件

    cat .hivehistory
    

2.6 参数配置方式

  1. 查看当前所有的配置信息

    hive>set;
    
  2. 参数的配置三种方式

    (1) 配置文件方式 hive-site.xml

    注意:用户自定义配置会覆盖默认配置。另外,Hive也会读入Hadoop的配置,因为Hive是作为Hadoop的客户端启动的,Hive的配置会覆盖Hadoop的配置。配置文件的设定对本机启动的所有Hive进程都有效。

    (2) 命令行参数方式

    启动Hive时,可以在命令行添加-hiveconf param=value来设定参数。

    例如:

    bin/hive -hiveconf mapred.reduce.tasks=10;
    

    (3)参数声明方式

    可以在HQL中使用SET关键字查看参数设置和设定参数

    hive (default)> set mapred.reduce.tasks;
    
    hive (default)> set mapred.reduce.tasks=100;
    

3. Hive数据类型

3.1 基本数据类型

Hive数据类型 Java数据类型 长度 例子
TINYINT byte 1byte有符号整数 20
SMALINT short 2byte有符号整数 20
INT int 4byte有符号整数 20
BIGINT long 8byte有符号整数 20
BOOLEAN boolean 布尔类型,true或者false TRUE FALSE
FLOAT float 单精度浮点数 3.14159
DOUBLE double 双精度浮点数 3.14159
STRING string 字符系列。可以指定字符集。可以使用单引号或者双引号。 ‘now is the time’ “for all good men”
TIMESTAMP 时间类型
BINARY 字节数组

3.2 集合数据类型

数据类型 描述 语法示例
STRUCT 和c语言中的struct类似,都可以通过“点”符号访问元素内容。例如,如果某个列的数据类型是STRUCT{first STRING, last STRING},那么第1个元素可以通过字段.first来引用。 struct()
MAP MAP是一组键-值对元组集合,使用数组表示法可以访问数据。例如,如果某个列的数据类型是MAP,其中键->值对是’first’->’John’和’last’->’Doe’,那么可以通过字段名[‘last’]获取最后一个元素 map()
ARRAY 数组是一组具有相同类型和名称的变量的集合。这些变量称为数组的元素,每个数组元素都有一个编号,编号从零开始。例如,数组值为[‘John’, ‘Doe’],那么第2个元素可以通过数组名[1]进行引用。 Array()

建表的字段解释

row format delimited fields terminated by ','  -- 列分隔符
collection items terminated by '_'      --MAP STRUCT 和 ARRAY 的分隔符(数据分割符号)
map keys terminated by ':'              -- MAP中的key与value的分隔符
lines terminated by '\n';                   -- 行分隔符

3.3 类型转化

Hive的原子数据类型是可以进行隐式转换的,类似于Java的类型转换,例如某表达式使用INT类型,TINYINT会自动转换为INT类型,但是Hive不会进行反向转化,例如,某表达式使用TINYINT类型,INT不会自动转换为TINYINT类型,它会返回错误,除非使用CAST操作。

  1. 隐式类型转换规则如下

    (1)任何整数类型都可以隐式地转换为一个范围更广的类型,如TINYINT可以转换成INT,INT可以转换成BIGINT。

    (2)所有整数类型、FLOAT和STRING类型都可以隐式地转换成DOUBLE。

    (3)TINYINT、SMALLINT、INT都可以转换为FLOAT。

    (4)BOOLEAN类型不可以转换为任何其它的类型。

  2. 可以使用CAST操作显示进行数据类型转换

    例如CAST('1' AS INT)将把字符串'1' 转换成整数1;如果强制类型转换失败,如执行CAST('X' AS INT),表达式返回空值 NULL。

作者:Rex_2013

原文链接:https://www.jianshu.com/p/dfaefc62d88a

文章分类
后端
文章标签
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐