8. Hive基础

作者: 奉先 | 来源:发表于2017-02-20 00:30 被阅读1024次

    1. Hive基本介绍和基础:

    Facebook公司最早完成并开源了hive框架,可以将sql语句直接翻译成MapReduce程序。Hive是基于Hadoop的一个数据仓库工具,可以将结构化数据文件映射成一张表,并提供类似SQL的查询功能。Hive相当于一个客户端。

    1. Hive框架的作用:

    (1)可以让不懂java的数据分析人员使用hadoop进行数据分析;

    (2)MapReduce开发非常繁琐复杂,使用hive可以提高效率。

    (3)统一的元数据管理,可与impala/spark共享元数据。

    2. Hive基础:

    (1)使用HQL作为查询接口;使用MapReduce进行计算;数据存储在HDFS上;运行在Yarn上。

    (2)Hive比较灵活和可扩展性,支持UDF和多种文件格式。

    (3)Hive适合离线数据分析(批量处理、延时要求很大)

    2. SQL on Hadoop框架:

    Hive是一种最常见、使用最为广泛的SQL on Hadoop框架。还包括几个其他常见的sql on hadoop框架:

    1. Presto:

    最早由Facebook开源,国内京东使用比较广泛。

    2. Drill:

    3. impala:

    由Cloudera公司提供,基于内存的。hive是基于硬盘的。

    4. Spark SQL:

    3. Hive架构:

    Hive可以作为ETL工具(有一个常见的开源ETL工具,kettle)、报表工具 和数据分析工具。Hive可以访问HBase数据。Hive没有专门的数据存储格式。

    Hive 体系结构

    (1)客户端:CLI:

    Hive的使用场景中,99%的情况使用CLI,JDBC比较少用(因为Hive主要是用作离线分析的)。

    (2)元数据MetaStore(企业一般使用MySQL;为了避免单点故障,搭建HA、主从结构): 存储数据库、表名、字段等。Spark、Impala也有自己的MetaStore,并且可以和Hive的MetaStore共享。

    (3)驱动器Driver:

    解析器、编译器、优化器、执行器。

    (4)使用MapReduce计算

    (5)数据存储在HDFS上。

    由于Hive只是一个客户端,在安装时,我们可以在Hadoop集群中,选择一台安装Hive。Hive没有集群的概念,但是可以搭建Server/Client端。

    4. Hive的安装:

    1. 安装Java和Hadoop环境:

    我们使用 “5.分布式集群环境” 的结果,Java和Hadoop环境已经安装好。

    2.下载、解压hive源文件:

    我使用的版本是:apache-hive-0.13.1-bin.tar.gz 。解压文件:

    $ tar zxf apache-hive-0.13.1-bin.tar.gz -C /opt/modules/

    3. 修改配置文件、安装测试:

    (1)根据模板生成配置文件:

    $ cp hive-default.xml.template hive-site.xml

    $ cp hive-env.sh.template hive-env.sh

    (2)在hive-env.sh中添加环境变量:

    需要添加JAVA_HOME、HADOOP_HOME 和 HIVE_HOME环境变量:

    export JAVA_HOME=/opt/modules/jdk1.7.0_67

    export HADOOP_HOME=/opt/modules/hadoop-2.5.0

    export HIVE_CONF_DIR/opt/modules/apache-hive-0.13.1-bin/conf

    (3)添加HIVE_HOME系统环境变量

    # vi /etc/profile

    #HIVE HOME

    HIVE_HOME=/opt/modules/apache-hive-0.13.1-bin

    添加$HIVE_HOME/bin到PATH变量。

    (4)按照Hive官方文档配置:

    $ bin/hdfs dfs -mkdir /tmp

    $ bin/hdfs dfs -mkdir -p /user/hive/warehouse

    $ bin/hdfs dfs -chmod g+w /tmp

    $ bin/hdfs dfs -chmod g+w /user/hive/warehouse

    /tmp目录是hive仓库的临时目录,例如在Load文件到hive表中时,要先把文件放在临时目录/tmp中,再挪到Hive表对应的目录中。

    /user/hive/warehouse  是仓库的主目录。

    (5)测试hive:

    直接输入命令hive进入:

    hive> show databases;                                    #开始时,系统给默认创建一个数据库,叫做default。

    hive> create database pma;

    hive> use pma;

    hive> create table students(id int,name String);

    hive> show tables;

    在创建了表之后,在HDFS上可以看到这个表的目录结构:/user/hive/warehouse/pma.db/students    

    Hive会在数据库名后加上“.db”,作为数据库这一级别的目录。数据库、数据表(包括后边介绍的分区)在Hive中其实都是目录。

    (6)其他常用的Hive的命令:

    hive> desc database pma;

    hive> desc pma.students;

    hive> desc extended pma.students;

    hive> desc formatted pma.students;

    hive> show functions;

    hive> desc function instr;

    desc formatted是比较有用的命令,可以获取表的很多信息。

    Linux家目录下.hivehistory文件保存了我们输入过的hive命令:

    $ cat /home/natty/.hivehistory

    5. 修改元数据库为MySQL:

    上一章节,使用的是默认的Derby数据库。在企业中,几乎使用的都是MySQL,所以这里介绍安装MySQL作为MetaStore。

    1. 切换到root安装MySQL Client 和Server rpm包:

    首先,删除系统中已经安装的MySQL rpm包:

    # rpm -qa | grep mysql

    # rpm -e --nodeps mysql-libs-5.1.66-2.el6_3.x86_64

    其中,-e表示卸载rpm包, --nodeps 表示强制删除,不考虑依赖。

    现在,就可以安装rpm包了。

    # rpm -ivh MySQL-client-5.6.24-1.el6.x86_64.rpm MySQL-server-5.6.24-1.el6.x86_64.rpm

    # rpm -qa | grep -i mysql

    2. 登陆Mysql

    MySQL安装完成后,root密码保存在 /root/.mysql_secret中。

    # cat /root/.mysql_secret

    启动 mysql 服务:

    # service mysql start

    root用户登陆MySQL,修改root密码:

    # mysql -uroot -pES5KZsKZRZQ6OaVU

    mysql> set password=password('123456');

    3. hive关联MySQL数据库:

    hive官方文档中 “Setting Up Metastore”有关于配置MySQL的介绍。

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

    (2)获取mysql jdbc驱动jar包:

    解压mysql驱动压缩包,获取mysql驱动jar包:

    $ tar zxf mysql-connector-java-5.1.27.tar.gz -C ./mysql-connector/

    将驱动jar包拷贝到 $HIVE_HOME/lib下:

    $ cp mysql-connector-java-5.1.27-bin.jar /opt/modules/apache-hive-0.13.1-bin/lib/

    (3)MySQL数据库授权用户:

    mysql> grant all privileges on *.* to root@"hadoop-senior01.pmpa.com" identified by "123456";

    mysql> flush privileges;

    对所有数据库的权限赋予,在hadoop-senior01.pmpa.com主机上以用户名root和密码123456登陆的用户。

    4 . 登陆Hive测试:

    我再次使用hive命令登陆Hive,这时候Hive会自动在MySQL中创建metastore等 元数据信息。

    这时,我们再次登陆到MySQL,可以查看到metastore库(保存Hive元数据信息的库),并且可以看到这库下的一些表。

    6. Hive基本操作:

    1. 简单测试:

    基本操作实验过程:创建一个表,加载外部文件进入表中(文件字段以逗号分隔),查询该表。

    (1)创建表:

    hive> create table student (id int,name string)

           > row format delimited

           > fields terminated by ',';

    (2)加载外部文件入表:

    hive> load data local inpath '/home/natty/students.txt' overwrite into table student;

    其中local项、overwrite项是可选择项。

    (3)确认加载:

    hive> select * from student;

    2. Hive Shell常用命令:

    了解Hive Shell的所有命令 可以使用 -h选项(下面例子配置的$HIVE_HOME/bin 到Path):

    $ hive -h

    下面列举几个常用的选项:

    -e选项可以直接接查询的sql:

    $ hive -e "select * from pmdw.student;"

    $ hive -e "select * from pmdw.student;" > student.output

    -f选项,可以执行一个SQL脚本(包含多个SQL语句):

    $ hive -f dw_student.sql

    --hiveconf 选项,可以指定一些在你打开的这个hive CLI Session有效的一些配置项参数,例如,我们可以配置$HIVE_HOME/conf/hive-log4j.properties下的一个配置项。hive.root.logger=INFO,DRFA , 默认输出日志是INFO级别,可以修改成DEBUG级别来输出。

    $ hive --hiveconf hive.root.logger=DEBUG,DRFA

    3. 常用的配置属性:

    (1)数据仓库的位置:

    默认配置在“/user/hive/warehouse”,可以在hive-site.xml配置。配置项是hive.metastore.warehouse.dir。

    (2)运行日志信息位置:

    启用log4j.properties文件:

    $ cp -a hive-log4j.properties.template hive-log4j.properties

    配置hive.log.dir项,指定一个绝对路径。

    hive.log.dir=/opt/modules/apache-hive-0.13.1-bin/logs

    如果想修改日志显示级别,修改项  hive.root.logger :

    (3)显示当前查询的库信息,表头信息:

    修改配置文件 hive-site.xml 以下两个选项,值修改为“true”

    hive.cli.print.header

    hive.cli.print.current.db

    显示效果如下:

    Hive配置显示头信息

    (4)查看当前所有的配置信息:

    使用set命令来查看或者修改。 修改只在会话级别生效。

    hive (pmdw)> set;

    4. 在Hive CLI中使用HDFS和Linux命令:

    (1)与HDFS交互:

    在Hive CLI中,直接使用dfs命令与HDFS交互:

    hive (pmdw)> dfs -ls /;

    hive (pmdw)> dfs -text /output01/part*;

    (2)与Linux交互:

    使用感叹号! 后边接linux命令即可。

    hive (default)> !pwd;

    hive (default)> !ls / ;

    (3)启动hiveserver2服务:

    $ hive --service hiveserver2

    7.Hive数据类型:

    Hive除了一些基本的数据类型(常用的是int,bigint,double,string),还有复杂数据类型:map、Array、Struct等等。

    8. Hive建表:

    在Hive中,经常使用的表包括 管理表(内部表)、外部表 和分区表。

    在建表时,主要关注下面的信息(要注意先后的顺序一定不可以乱):

    CREATE [EXTERNAL] TABLE [db_name.]table_name

    [(col_name data_type [COMMENT col_comment], ... [constraint_specification])]

    [PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]

    [ROW FORMAT row_format]

    [STORED AS file_format]

    [LOCATION hdfs_path]

    [AS select_statement];

    下面举两个例子建emp和dept表:

    1. 外部表和内部表的区别:

    内部表(管理表)在删除时,会一并删除元数据和HDFS文件,也就是删除表结构的同时也删除数据。但是外部表在删除时,只删除元数据,不删除HDFS文件(数据)。

    2. 外部表使用场景:

    有几个业务部分都需要用到表table1,到某个时间,如果业务部门1不再使用table1,则业务部门1删除这个表即可,不会删除HDFS文件,业务部门2和3还可以看HDFS的数据。

    3. 分区表业务场景:

    (1)分时段存放日志,例如每小时保存一次日志,每小时一个分区。

    (2)提高查询速度,类似于RDMS的索引。

    4. 创建表的三种方式:

    (1)直接使用CREATE语句创建表;          只创建表结构,之后加载数据。

    (2)CREATE TABLE tbl2 as SELECT ...      有表结构也有数据。

    (3)CREATE TABLE tbl3 like tbl4              只有表结构没有数据。  

    相关文章

      网友评论

        本文标题:8. Hive基础

        本文链接:https://www.haomeiwen.com/subject/inlswttx.html