美文网首页
Hive简介

Hive简介

作者: 机灵鬼鬼 | 来源:发表于2018-09-26 16:49 被阅读0次

    什么是Hive

    1)由facebook开源的,最初用于解决海量结构化的日志数据统计问题。

    2)构建在Hadoop之上的数据仓库。

    3)Hive定义了一种类SQL的查询语言:HQL(类sql但不完全相同),在离线处理的中非常受欢迎,到目前为止还很受欢迎。

    4)目前Hive的底层执行引擎有多种:MapReduce、Tez、Spark

    Hive on MapReduce

    Hive on Tez

    Hive on Spark

    5)支持多种不同的压缩格式(gzip、lzo、snappy、bzip2)、存储格式(TextFile、SequenceFile、RCFile、ORC、Parquet)以及自定义函数(UDF函数,就是当hive内置函数不能满足我们的需求时,做的补充和扩展)。

    为什么要使用Hive(只用写sql就可以完成大数据的计算和查询)

    1)简单、容易上手(提供了类似SQL的查询语言HQL)

    2)为超大的数据集设计的计算和存储扩展能力(MR计算,HDFS存储)

    3)统一的元数据管理(可与Presto/Impala/SparkSql等共享数据)

    Hive的架构

    hive只需要配置在一个节点就行了,因为他只是个客户端

    Hive的环境搭建

    下载

    版本:hive-1.1.0-cdh5.7.0
    安装包下载地址:   http://archive.cloudera.com/cdh5/cdh/5/

    下载方式wget http://archive.cloudera.com/cdh5/cdh/5/hive-1.1.0-cdh5.7.0.tar.gz

    安装

    tar -xvf hive-1.1.0-cdh5.7.0.tar.gz

    配置环境变量

    vi /etc/profile

    生效配置文件source /etc/profile

    export HIVE_HOME=/usr/hive/hive-1.1.0-cdh5.7.0

    export PATH=$HADOOP_HOME/bin:$SPARK_HOME/bin:$JAVA_HOME/bin:$HIVE_HOME/bin:$PATH

    这里需要把hadoop的根目录配置到hive的配置文件里面$HIVE_HOME/conf/hive-env.sh

    事先安装mysql服务(远程机器或者本地机器都可以)

    在$HIVE_HOME/conf添加hive-site.xml配置

    <property>

    <name>javax.jdo.option.ConnectionURL</name>

    <value>jdbc:mysql://server110:3306/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>root</value>

    </property>

    把mysql的驱动mysql-connector-java-5.1.6.jar包放入到$HIVE_HOME/lib下。

    启动

    $HIVE_HOME/bin/hive

    创建表

    在hive.apache.org中看到hive wiki,在wiki页面找到DDL那里面详细的介绍的表的各种操作。

    create table table_name(col_name data_type [comment col_comment])

    例子:创建一个名字为hive_wordcnt的表,一个字段为string类型的名字叫context。

    create table hive_wordcnt(context string) ;

    查看hive中的所有表:show tables;

    查看hive表的内容:select * from hive_wordcnt;

    这时候,你肯定会有疑问?

    hive创建的表存放在哪里了?答案:他是在hive链接的mysql数据库中,hive实例里面有个tbls表,里面包含了我们建的表信息。表里的字段信息存放在columns_v2表中。

    SELECT * FROM tbls

    SELECT * FROM columns_v2

    如何把hdfs或者本地磁盘的数据文件的数据加载到hive中呐?

    答案:在hive的官方网站上hive.apache.org中找到hive wiki页面找到DML里面有加载数据的方式。

    结构:LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename 如果是加载本地磁盘的文件需要带上中括号的LOCAL,如果是加载hdfs里的文件就要去掉LOCAL。

    Hive 3.0之前的加载操作是纯数据复制/移动操作,可将数据文件移动到与Hive表对应的位置。

    filepath可以是:

    1)相对路径,如 project/data1

    2)一条绝对的道路,如 /user/hive/project/data1

    3)带有scheme的完整URI和(可选)权限,例如 hdfs://namenode:9000/user/hive/project/data1

    加载hdfs的数据进入hive:

    load data inpath 'hdfs://10.6.24.143:8020/xxx/emp.txt' into table emp;

    加载本地磁盘的数据进入hive:

    load data local inpath '/usr/hadoop/testdata/partitionerData.txt' into table hive_wordcnt;

    数据加载进来了,我们要hive表里的数据进行计算查看他们的word count的逻辑。sql如下:

    select word,count(1) from hive_wordcnt lateral view explode(split(context,' ')) wc  as word group by word; 

    lateral view explode():这个函数的意思是把每行记录按照指定分隔符进行拆解。

    执行上面的hive sql,就可以会在底层转化成mapreduce作业,并在yarn上运行,如下图:

    案例操练,加深我们对hive的印象

    员工表和部门表的操作:

    创建员工表:

    DROP TABLE IF EXISTS emp;

    create table emp(

    empno int,

    empname string,

    job string,

    mgr int,

    hiredate string,

    sal double,

    comm double,

    deptno int    

    ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';   //这里指定字段与字段之间的分隔符

    创建部门表

    DROP TABLE IF EXISTS dept;

    create table dept(

    deptno int,

    deptname string,

    addr string

    ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';

    加载数据到hive表

    load data local inpath '/usr/hadoop/testdata/emp.txt' into table emp;

    如果数据加载错了,就要重新加载,使用OVERWRITE覆盖关键字

    load data local inpath '/usr/hadoop/testdata/emp.txt' OVERWRITE into table emp;

    load data local inpath '/usr/hadoop/testdata/dept.txt' into table dept;

    查看下两张表的数据是否正常:

    做个简单的统计

    1)求每个部门的人数

    select deptno,count(1) from emp group by deptno;

    2)左链接查询,显示员工的工号、名字、所属部门地址

    select p.empno,p.empname,dt.addr from emp p left join dept dt on p.deptno=dt.deptno;

    删除hive表的数据

    delect:用于删除特定行条件

    Hive 0.14之前用另外一种方式:insert overwrite table emp select * from emp where empno!=1001;

    Hive 0.14开始可以使用DELETE、UPDATE ,删除只能在支持ACID的表上执行。

    DELETE FROM tablename [WHERE expression]

    TRUNCATE:truncate用于删除所有的行,这个行为在hive元存储删除数据是不可逆的

    truncate table tablename;

    相关文章

      网友评论

          本文标题:Hive简介

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