Hadoop Hive 搭建

Hadoop Hive 搭建

一、说明

Hive底层的执行引擎有:MapReduce、Tez、Spark
    Hive on MapReduce
    Hive on Tez
    Hive on Spark

压缩:GZIP、LZO、Snappy、BZIP2..
存储:TextFile、SequenceFile、RCFile、ORC、Parquet
UDF:自定义函数


二、Hive环境搭建
  
  注意事项:

        1、首先Hadoop 需要先搭建起来已经启动。参考: Hadoop HDFS环境搭建Hadoop YARN 搭建
        2、事先已经安装好Mysql,并默认创建了 sparksql 表
        3、假如Hive  安装目录为/www/instl/hive/hive-1.1.0-cdh5.7.0
        4、以上说明假设已经全部符合条件

  步骤:
【1】Hive下载并解压到/www/instl/hive

[root@dnsdomainname /]#  tar -zxvf hive-1.1.0-cdh5.7.0.tar.gz -C  /www/instl/hive

【2】配置 环境变量(/etc/profile)中

export HIVE_HOME=/www/instl/hive/hive-1.1.0-cdh5.7.0
export PATH=$HIVE_HOME/bin:$PATH
    生效   source /etc/profile

【3】进行hive文件的配置
    
在/www/instl/hive/hive-1.1.0-cdh5.7.0/conf下修改 hive-env.xml

HADOOP_HOME=/www/instl/hadoop/hadoop-2.6.0-cdh5.7.0/

   在/www/instl/hive/hive-1.1.0-cdh5.7.0/conf下创建 hive-site.xml

<configuration>
    <property>
          <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc: mysql:// hadoop000 : 3306/sparksql?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>hge123!@#</value>
    </property>
</configuration>
【4】拷贝mysql驱动包mysql-connector-java-5.1.42-bin.jar到$HIVE_HOME/lib/

【5】启动hive:    运行hive之前首先要确保meta store服务(sql服务)已经启动
     $HIVE_HOME/bin/hive 或者hive -S 。

【6】测试

   (1) 创建表

create table hive_wordcount(context string);

此时    hive_wordcount 的元数据储存在Mysql 当中

(2) 加载数据到 sparksql 库中

load data local inpath '/home/hadoop/data/hello.txt' into table hive_wordcount;
  此时,hive 数据默认储存在HDFS 上的/user/hive/warehouse/hive_wordcount1 中

(3)查询

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

lateral view explode(): 是把每行记录按照指定分隔符进行拆解

hive ql提交执行以后会生成mr作业,并在yarn上运行


(4)其他例子

create table emp(
empno int,
ename string,
job string,
mgr int,
hiredate string,
sal double,
comm double,
deptno int
) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';

create table dept(
deptno int,
dname string,
location string
) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';

load data local inpath '/home/hadoop/data/emp.txt' into table emp;
load data local inpath '/home/hadoop/data/dept.txt' into table dept;

求每个部门的人数
select deptno, count(1) from emp group by deptno;

执行hive --service hwi  命令可在 http://140.143.236.169:9999/ 中查看Web UI

三、Hive 远程服务

   该服务就如mysql 中,启动mysql的服务,只有启动了这个服务,远程客户端才能连接到Hive 数据库操作数据。启动方式:
hive --service hiveserver



四、 Hive的数据存储

Hive的数据分为表数据和元数据,表数据是Hive中表格(table)具有的数据;而元数据是用来存储表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。下面分别来介绍。
1、Hive的数据存储
在让你真正明白什么是hive 博文中我们提到Hive是基于Hadoop分布式文件系统的,它的数据存储在Hadoop分布式文件系统中。Hive本身是没有专门的数据存储格式,也没有为数据建立索引,只需要在创建表的时候告诉Hive数据中的列分隔符和行分隔符,Hive就可以解析数据。所以往Hive表里面导入数据只是简单的将数据移动到表所在的目录中(如果数据是在HDFS上;但如果数据是在本地文件系统中,那么是将数据复制到表所在的目录中)。
Hive中主要包含以下几种数据模型:Table(表),External Table(外部表),Partition(分区),Bucket(桶)(本博客会专门写几篇博文来介绍分区和桶)。
【1】内部表:Hive中的表和关系型数据库中的表在概念上很类似,每个表在HDFS中都有相应的目录用来存储表的数据,这个目录可以通过${HIVE_HOME}/conf/hive-site.xml配置文件中的 hive.metastore.warehouse.dir属性来配置,这个属性默认的值是/user/hive/warehouse(这个目录在 HDFS上),我们可以根据实际的情况来修改这个配置。如果我有一个表wyp,那么在HDFS中会创建/user/hive/warehouse/wyp 目录(这里假定hive.metastore.warehouse.dir配置为/user/hive/warehouse);wyp表所有的数据都存放在这个目录中。这个例外是外部表。
内部表简单示例:
创建数据文件: test_inner_table.txt
创建表: create table test_inner_table (key string);
加载数据: LOAD DATA LOCAL INPATH 'filepath' INTO TABLE test_inner_table;
查看数据: select * from test_inner_table;
删除表: drop table test_inner_table;
【2】外部表:Hive中的外部表和表很类似,但是其数据不是放在自己表所属的目录中,而是存放到别处,这样的好处是如果你要删除这个外部表,该外部表所指向的数据是不会被删除的,它只会删除外部表对应的元数据;而如果你要删除表,该表对应的所有数据包括元数据都会被删除。
外部表简单示例:
创建数据文件: test_external_table.txt
创建表: create external table test_external_table (key string);
加载数据: LOAD DATA INPATH   filepath   INTO TABLE test_inner_table;
查看数据: select * from test_external_table;
删除表: drop table test_external_table;
【3】分区:在Hive中,表的每一个分区对应表下的相应目录,所有分区的数据都是存储在对应的目录中。比如wyp 表有dt和city两个分区,则对应dt=20131218,city=BJ对应表的目录为/user/hive/warehouse /dt=20131218/city=BJ,所有属于这个分区的数据都存放在这个目录中。
分区表简单示例:
创建数据文件: test_partition_table.txt
创建表: create table test_partition_table (key string) partitioned by (dt string);
加载数据: LOAD DATA INPATH   filepath   INTO TABLE test_partition_table partition (dt= 2006 );
查看数据: select * from test_partition_table;
删除表: drop table test_partition_table;
【4】桶:对指定的列计算其hash,根据hash值切分数据,目的是为了并行,每一个桶对应一个文件(注意和分区的区别)。比如将wyp表id列分散至16个桶中,首先对id列的值计算hash,对应hash值为0和16的数据存储的HDFS目录为:/user /hive/warehouse/wyp/part-00000;而hash值为2的数据存储的HDFS 目录为:/user/hive/warehouse/wyp/part-00002。
桶的简单示例:
      创建数据文件: test_bucket_table.txt
创建表: create table test_bucket_table (key string) clustered by (key) into 20 buckets
      加载数据: LOAD DATA INPATH   filepath   INTO TABLE test_bucket_table
      查看数据: select * from test_bucket_table;     set hive.enforce.bucketing = true;
  【5】Hive的视图
视图与传统数据库的视图类似。视图是只读的,它基于的基本表,如果改变,数据增加不会影响视图的呈现;如果删除,会出现问题。如果不指定视图的列,会根据select语句后的生成。
      示例: create view test_view as select * from test
来看下Hive数据抽象结构图

从上图可以看出,表是在数据库下面,而表里面又要分区、桶、倾斜的数据和正常的数据等;分区下面也是可以建立桶的。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

野狼e族

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值