1.hive是一个基于hadoop之上的一个数据仓库。可以处理的数据是关系型数据 库(结构性)、本地数据、hdfs数据(非结构化的数据); 2.hive是对处理数据的mapreduce的封装平台 3.hive会提供一些简单的类sql语句来代替mapreduce执行; 4.hive是为对数据库比较数据的非专业人员准备的 5.hive的操作语句:QL语句--》HSql--》类(like)sql 6.hive在处理业务的时候有一定的局限性,只能处理一些简单的。常用 的业务,如果碰到比较复杂的业务处理时,依然需要开发人员自己的 mapreduce应用。 7.使用hive操作的数据来源可以来自不同的软件系统:本地系统、hdfs系统、亚马逊s3; 8.hive上的操作的数据格式可以由用户进行设定,否则会出现存入的数据和读取的数据显示不一致,一般都会显示为null。 9.安装配置hive的前提条件: 安装jdk 安装hadoop 安装hive 10.hive的QL语句是基于sql92规范,能够支持大部分的语法和语义,但是并不完全支持,同时也增加增加一些hive自己的QL语法规则。 11.hive的存储数据的格式以表的形式: 外部表 内部表 桶表 分区表 12.安装与配置hive 说明: 1)安装hive时,首先确保hadoop已经安装完毕并且能正确使用 2)因为hive是基于hadoop平台,安装hive之后需要进行相关配置。相关文件:hive-evn.sh和hive-site.xml 3)建议配置hive的path环境:HIVE_HOME在/etc/profile,hive有自带的一个关系型数据库derby,如果使用自带的数据库,需要进行数据库的相关配置。如果开发者想更换数据库,例如更换mysql数据库,则需要进行配置文件的修改并且需要提供mysql数据库的驱动放到hive_home/lib下。目前hive主要是支持derby和mysql数据库
安装hive的步骤: 1)解压hive-0.12.0.tar.gz simple/:tar -zxvf /usr/java/hive-0.12.0.tar.gz 2)配置hive-evn.sh 在hive的安装目录下的conf文件中修改hive-env.sh文件(如果该目录下不存在该文件,可复制如下:) cp hive-evn.sh.template hive-evn.sh(hive-env.sh文件名是固定的,不得随意修改) 复制完毕之后 vim hive-site-evn.sh 增加hadoopd的安装目录 如:HADOOP_HOME=/simple/hadoop-2.4.1 3)修改环境变量:vim /etc/profile 添加hive的安装目录和path路径 HIVE_HOME=/simple/hive-0.12.0(新添加) export PATH=$JAVA_HOME/bin:$HIVE_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH 4)source /etc/profile 5)测试hive的使用 切换到指定的目录(建议在hive的安装目录下hive-0.12.0或者hive-0.12.0/bin) 6)/>hive or ./hive
show databases;//查看所有的数据库 create database bigdata;//创建数据库 use bigdata;//指定使用数据库 create table stu(id int,name string,age int) row format delimited fieds terminated by '';//创建stu表并指定表的格式 show tables;//查看数据库中所有的表 load data local inpath '/simple/student.txt' into table stu;//从本地导入到hive的指定数据表中(导入数据) 注意:在hive中创建表要指定表的row格式,否则不能正确读取导入的数据信息 说明:1)在使用hive的时候,确保hdfs和mapreduce启动(start-all.sh) 2)hive执行的数据类型比较少,常用的类型:int samllint tinyint lagerint boolean double long string map struct 3)hive的安装目录的结果 bin:可执行的文件(二进制),例如:hive hiveserver2 hive-confing.sh等 config:hive的配置文件,里面的配置文件都是默认的配置文件,它是缺省配置服务的。如果需要自定义,配置文件需要创建一个hive-site.xml docs:hive的参考文档 lib:存放jar的地方 metastore_db:该目录是启动hive的和时候,自动生成的一个目录,是用来存放hive的元数据信息。 4)derby数据库只支持单用户链接
13.内部表 create table t1(id int); create table t1(id int) row format delimited fields terminated by '\t'; load data local inpath '/simple/xxx.txt' into table t1; 表的修改: alter table targert_tab add columns(id int); 表的删除: drop table db_name; 删除表的时候,对跟随的数据也随着丢失 drop database db_name; 在删除数据库的时候,如果数据库中存在表,不让删除;
复制一张表结构,但不导入数据: creat table carcp like car; 说明: 以上操作完毕之后,可以再浏览器中查看hdfs上的目录结构进行对比 再启动hive的时候,会在hdfs上创建一个目录:user/hive/warehouse/库/表 数据信息在hdfs上都是以目录和文件形式存在,在操作数据的时候需要hdfs和 metastore配合使用。 http://192.168.189.100:50070/user/hive/warehouse/库/表/stu.txt 如果在Windows下面远程下载stu.txt文件时,会存在访问不到linux中hdfs路径,此时 需要host的目录:c:\windows\System32\drivers\etc\hosts文件 编辑hosts文件并添加: 192.168.189.100 iflysee.hfpan.com
14.外部表 创建表: create external table external_tab(id int)row format delimited fields terminated by '/t' localtion '/out' 此处的’/out'不会在hive的仓库目录(/user/hive/warehose)中生成,而是直接在 hdfs的根目录生成(hdfs://192.168.203.100:9000/out) 加载数据: load data local inpath '/simple/xxx.txt' into table external_table; 当删除外部表的时候,metastore中元数据信息会丢失,但是外部目录中指数据不会 丢失,这说明metastore中的描述信息可以作为外部数据信息的一个引用。
15.分区表 创建表 create table t2(id int) partitioned by (day int); create table t3(rectime string,msisdn string)partitioned by(daytime string, city string) row format delimited fields terminated by ' ' stored as textfile; //加载数据到分区 load data local inpath '/simple/gps.txt' overwirte into table t3 partition(nation=‘china’); 创建完分区表之后,可以通过desc 表明查看表的结构和外部表的结构有什么不同 \>desc table_name; ok address string None year int None num int None nation string None #Partition Information #col_name data_type comment 从上面可以看出nation字段虽然是分区字段,但是也可以作为表的一个字段属性,也就是说明在操作表 的时候,该字段也可以作为参数操作。 说明:再给分区表加载数据的时候,可以通过分区字段指定分区值,那么对应的数据会在Hive的数据仓库中的数据库下创建 不同的分区路径,形如:nation='china' nation=‘usa'
查看数据: select * from table_name; select count(*) from table_name; select * from table_name where year='2014' and nation='usa'; show tables '*ca*'; show partitions table_name; 删除信息: 删除表:drop table table_name; 删除分区:alter table table_name drop partition(nantion='usa'); 分区表跟内部表删除数据原理相似,即删除元数据信息metastore时,实际数据也会随着丢失
alter table pcar add(drop) partition (nation='uk'); show partitions pcar;
16.桶表 更高效!可取样!主要用于大数据集群的取样! 桶的原理是对一个表(或者分区)进行切片,选择被切片的字段,用字段与个数的hash值进行存储入桶。 创建表: create table stu(id int,name string) clustered by(id) into 4 buckets row format delimited fields terminated by ' ';
insert into table t4 select id from t3; 桶表是对数据进行哈希取值,然后放到不同文件中存储。
加载数据:
set hive.enforce.bucketing=true; insert into table bucket_name select id from stu; insert overwirte table bucket_name select id from stu; 数据加载到桶表时,会对字段取哈希值,然后与桶的数量取模。把数据放到对应的文件中。 抽样查询: select * from bucket_name tablesample(bucket 1 out of 4 on id);
set hive.enforce.bucketing=true; select * from student tablesample(bucket 2 out of 3 on id); create table sct like student; insert overwrite table sct select * from student; 把一个hive的表导入到另一个已建hive表 insert overwrite table table_new select * from student;
17.视图 创建视图: create view v1 as select * from table_name; 删除一个视图的时候不能使用 drop table view_name; 而是使用drop view view_name;