hive之核心知识点

hive之核心知识点,第1张

hive的语法和sql语法大部分是是相同的,下面我们来挨个写出来:

1,简单介绍存储原理:

hive和hdfs交互,以及和本地linux交互,分为本地文件和hdfs文件,要说他们的区别,底层都是存在磁盘上,要说区别的话,hdfs分布式文件管理系统,有它独有的文件存储结构也即是能够和分布式文件进行交互的独有存储方式,Linux本地文件存储知识单纯的在Linux *** 作系统存储的文件,所以hive的作用就是和linux本地以及linux上hdfs文件两者进行交互,我可以把本地的文件上传到hive文件中,当然hive只是处理hdfs上文件的一个工具,但是hive也有自己独有的文件存储,表的结构信息,创建的表信息,都在hive文件夹中当然是存储在hdfs上的。

2,语法:

1,把本地的文件加载到hive创建的表中(比如:create table tb_user(id int ,name string ); )在hive中创建的是有结构的表,然后通过命令:load data local inpath ' 路径 ' into table 创建的表名;

2,加载hdfs上的文件到hive中:load data inpath 'hdfs上的路径' into table 创建的表

3,导出hive表到hdfs上:export table 表名 to 'hdfs路径' ;

4,把hdfs上的表导入到hive表中:import table (hive表 )from (hdfs上的表);(import table tb_kk from '/data/a')当导入的表不存在会自动创建这张表,用于备份,或者数据转移,表的字段名和导入的字段名一样。

5,通过查询hive表中的数据并把查询的数据导出到本地:insert overwrite local directory '本地路径' select from student;

6通过查询hive表中的数据并把查询的数据导出到hdfs上:insert overwrite directory 'hdfs上的路径'

select from student;

7, 把查询的结果插入到 当前的hive表中 : insert overwrite table student partition(month='201708') select id, name from student where month='201709';

8,创建表并加载查询到的数据:create table if not exists tb_text as select from tb_text;(as 关键字 同样)

9,创建表时通过Location指定加载数据路径:create table tb_text (id int , name string ) row format delimited fields terminated by ‘,’ location '/hdfs上的目录',(记住是目录)。

10,创建分区表,分区表就是能够把不同的数据分开来存放,在查询的时候只需要查询指定的分区就行,这样子能够加快查询效率:create table tb_text (id int ,name string ) partitioned by (month string) (//这里我用month来作为分区条件,分区字段不能是表中已经存在的字段,可以将分区字段看成表的伪列,不参与真实字段的 ) row format delimited fields terminated by ',' ;看一下加载数据到分区表的列子,更好地理解一下,load data local inpath '/opt/module/datas/depttxt' into table defaultdept_partition partition(month='201709');//最后就是给伪列字段赋予分区值,也就是分区的文件名。

11,查看表结构,这个需要了解清楚:desc tb_text 查看基本表信息,desc formatted tb_text ,查看详细信息。

12,当数据库存在数据强制删除时可以用:drop database db_hive cascade;

13,当数据库不存在数据:drop database db_hive;

14,默认创建的表为管理表,也称之为内部表,数据和表结构是在一起的,也就是说,当我删除表的时候,底层数据也会跟着一起删除,设计成这样要求一张表代表一份数据,保证数据的安全性。

15,外部表为只存储表的元数据和结构信息,存储的是表的路径,删除外部表不会删除内部数据,只会把表的元数据信息删除了,不影响数据本身,通常用作共享数据,设计外部表的语法为:create external table tb_text(id int ,name string);

16,创建表的时候复制表结构:create table tb_text like tb_text01;

3,外部表和内部表的转化:

1,修改内部表为外部表:alter table tb_text set tblproperties('EXTERNAL'='TRUE');

2,修改外部表为内部表:alter table tb_text set tblproperties('EXTERNAL'='FALSE'); -- 要求KV的大小写,('EXTERNAL'='TRUE')和('EXTERNAL'='FALSE')为固定写法,区分大小写!

Hive 是基于Hadoop 构建的一套数据仓库分析系统,它提供了丰富的SQL查询方式来分析存储在Hadoop 分布式文件系统中的数据,可以将结构化的数据文件映射为一张数据库表,并提供完整的SQL查询功能,可以将SQL语句转换为MapReduce任务进行运行,通过自己的SQL 去查询分析需要的内容,这套SQL 简称Hive SQL,使不熟悉mapreduce 的用户很方便的利用SQL 语言查询,汇总,分析数据。而mapreduce开发人员可以把己写的mapper 和reducer 作为插件来支持Hive 做更复杂的数据分析。
它与关系型数据库的SQL 略有不同,但支持了绝大多数的语句如DDL、DML 以及常见的聚合函数、连接查询、条件查询。HIVE不适合用于联机online)事务处理,也不提供实时查询功能。它最适合应用在基于大量不可变数据的批处理作业。
HIVE的特点:可伸缩(在Hadoop的集群上动态的添加设备),可扩展,容错,输入格式的松散耦合。
Hive 的官方文档中对查询语言有了很详细的描述,请参考:>#hive相关资料

#>

首先我们要了解Java语言和Linux *** 作系统,这两个是学习大数据的基础,学习的顺序不分前后。

大数据

Java :只要了解一些基础即可,做大数据不需要很深的Java 技术,学java SE 就相当于有学习大数据基础。

Linux:因为大数据相关软件都是在Linux上运行的,所以Linux要学习的扎实一些,学好Linux对你快速掌握大数据相关技术会有很大的帮助,能让你更好的理解hadoop、hive、hbase、spark等大数据软件的运行环境和网络环境配置,能少踩很多坑,学会shell就能看懂脚本这样能更容易理解和配置大数据集群。还能让你对以后新出的大数据技术学习起来更快。

Hadoop:这是现在流行的大数据处理平台几乎已经成为大数据的代名词,所以这个是必学的。Hadoop里面包括几个组件HDFS、MapReduce和YARN,HDFS是存储数据的地方就像我们电脑的硬盘一样文件都存储在这个上面,MapReduce是对数据进行处理计算的,它有个特点就是不管多大的数据只要给它时间它就能把数据跑完,但是时间可能不是很快所以它叫数据的批处理。

Zookeeper:这是个万金油,安装Hadoop的HA的时候就会用到它,以后的Hbase也会用到它。它一般用来存放一些相互协作的信息,这些信息比较小一般不会超过1M,都是使用它的软件对它有依赖,对于我们个人来讲只需要把它安装正确,让它正常的run起来就可以了。

Mysql:我们学习完大数据的处理了,接下来学习学习小数据的处理工具mysql数据库,因为一会装hive的时候要用到,mysql需要掌握到什么层度那你能在Linux上把它安装好,运行起来,会配置简单的权限,修改root的密码,创建数据库。这里主要的是学习SQL的语法,因为hive的语法和这个非常相似。

Sqoop:这个是用于把Mysql里的数据导入到Hadoop里的。当然你也可以不用这个,直接把Mysql数据表导出成文件再放到HDFS上也是一样的,当然生产环境中使用要注意Mysql的压力。

Hive:这个东西对于会SQL语法的来说就是神器,它能让你处理大数据变的很简单,不会再费劲的编写MapReduce程序。有的人说Pig那它和Pig差不多掌握一个就可以了。

Oozie:既然学会Hive了,我相信你一定需要这个东西,它可以帮你管理你的Hive或者MapReduce、Spark脚本,还能检查你的程序是否执行正确,出错了给你发报警并能帮你重试程序,最重要的是还能帮你配置任务的依赖关系。我相信你一定会喜欢上它的,不然你看着那一大堆脚本,和密密麻麻的crond是不是有种想屎的感觉。

Hbase:这是Hadoop生态体系中的NOSQL数据库,他的数据是按照key和value的形式存储的并且key是唯一的,所以它能用来做数据的排重,它与MYSQL相比能存储的数据量大很多。所以他常被用于大数据处理完成之后的存储目的地。

Kafka:这是个比较好用的队列工具,队列是干吗的排队买票你知道不数据多了同样也需要排队处理,这样与你协作的其它同学不会叫起来,你干吗给我这么多的数据(比如好几百G的文件)我怎么处理得过来,你别怪他因为他不是搞大数据的,你可以跟他讲我把数据放在队列里你使用的时候一个个拿,这样他就不在抱怨了马上灰流流的去优化他的程序去了,因为处理不过来就是他的事情。而不是你给的问题。当然我们也可以利用这个工具来做线上实时数据的入库或入HDFS,这时你可以与一个叫Flume的工具配合使用,它是专门用来提供对数据进行简单处理,并写到各种数据接受方(比如Kafka)的。

Spark:它是用来弥补基于MapReduce处理数据速度上的缺点,它的特点是把数据装载到内存中计算而不是去读慢的要死进化还特别慢的硬盘。特别适合做迭代运算,所以算法流们特别稀饭它。它是用scala编写的。Java语言或者Scala都可以 *** 作它,因为它们都是用JVM的。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/yw/13406479.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-30
下一篇 2023-07-30

发表评论

登录后才能评论

评论列表(0条)

保存