hive基本概念

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;

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Petrichor的专栏

ubuntu: 控制&查看 进程

你也可以使用grep来对输出做管道,这样可以不需要使用其它命令就能搜索出某个进程。

954
来自专栏安恒网络空间安全讲武堂

zzcms 8.3 最新CVE漏洞分析

上次我们分析了一下zzcms 8.2版本的一些漏洞,但是很快8.3版本就推出更新了,但是在更新不久,就有新的漏洞爆了出来,那就跟随大师傅们的脚步学习一下。有关8...

1413
来自专栏Linux驱动

QT-第一个程序 Hello QT , 以及QT creator介绍

第一个程序 - Hello QT 首先写main.cpp: #include <QApplication> #include <QMainWindow> #in...

3147
来自专栏Linux驱动

Linux-ps命令(7)

名称:ps(process status) 使用权限:所有使用者 说明:显示瞬间进程 (process) 的动态 示例: 比如输入ps查看进程,如下图: ? 其...

1676
来自专栏性能与架构

Linux中Nginx的实时监控

场景 想查看Nginx的实时状态信息,如哪些请求最频繁、哪些IP访问次数多 …… 例如服务器出现带宽持续很高,就需要看下现在哪些请求的流量大 ngxto...

3526
来自专栏乐沙弥的世界

MySQL从库选项log-slave-updates未启用引发的异常

    最近核查一个基于从库复制某张特定的表到另外一个主库调整,未配置log-slave-updates导致表无法正常同步。我们的配置文件中使用了replica...

451
来自专栏菩提树下的杨过

asp.net webform中submit按钮使用不当很容易犯的一个错误

webform中默认一个页面只能有一个form,有时submit按钮使用不当会产生一些奇怪的问题。 ? 比如这是一个网站的头部搜索部分,前端人员把“搜索”按钮用...

1855
来自专栏张善友的专栏

关于gcc、glibc和binutils模块之间的关系

一、关于gcc、glibc和binutils模块之间的关系 1、gcc(gnu collect compiler)是一组编译工具的总称。它主要完成的工作任务是“...

1708
来自专栏我的博客

logstash之input配置file类型详解

监听文件变化,记录一个.sincedb的数据库文件跟踪监听文件读取位置(记录的是时间戳) 配置案例 input { file { path => ["/d...

3145
来自专栏蓝天

lsof和tcpdump常用命令

lsof用法 A.查看端口被谁占用 lsof -i:port,如:lsof -i:80 B.查看tcp监听端口 netstat -lpnt ...

522

扫码关注云+社区