二十五、Hadoop学记笔记————Hive复习与深入
Hive主要为了简化MapReduce流程,使非编程人员也能进行数据的梳理,即直接使用sql语句代替MapReduce程序
Hive建表的时候元数据(表明,字段信息等)存于关系型数据库中,数据存于HDFS中。
此元数据与HDFS中的元数据需要区分清楚,HDFS中元数据(文件名,文件长度等)存于Namenode中,数据存于Datanode中。
本次使用的是hive1.2.2版本

下载完毕之后解压:

将default文件复制一份成site文件,然后打开site文件,清空其内容,然后配置如下参数:

hive.metastore.local表示元数据存于本地
其中jdbc的hive是mysql中,提供给hive的database的名称,可自行修改,后续是登录的账号和密码,可以使用root,也可以新建一个hive用户,本机采用的是新建一个hive用户。
之后将mysql的jdbc驱动放入hive的lib目录下:

之后安装mysql,并在mysql下create名为hive的数据库,本机使用mysql5.7,数据库安装不做描述:


在hive中新建的表的表结构会在mysql中相应的databse内存储:



之后在例举一个复杂点的数据表,主要包含了数组型字段和map型字段,并且附带partition分区,例子来源于hive官网:
CREATE TABLE user_info(
id INT,
name STRING,
hobby ARRAY < STRING >,
goodatlol MAP < STRING, STRING >
)
PARTITIONED BY(dt STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
COLLECTION ITEMS TERMINATED BY ','
MAP KEYS TERMINATED BY ':'
STORED AS TEXTFILE;
先新建一个user_info表:

其中hobby为数组型字段,goodatlol为map型字段。fields的分隔符'\t'表示文件每一行的分隔符,collection的分隔符','表示数组型字段的分隔符,map的分隔符':'表示map字段的分隔符。
这时候在hdfs的该路径下回出现一个文件夹user_info:

由此可见,hive中的数据表,表结构的元数据存在所连接的关系型数据库中,而数据信息存于hdfs。
之后录入信息,新建文件,名字不限,内容如下:

load data local inpath '/home/tyx/temp/userinfo' into table user_info;

可用查询语句得出ttt同学喜欢上单风男:

之后在hdfs的user_info路径下还会出现分区:

前面讲述的是建表和查询,现在说一个插入比较常用的方法,由于Hive是数据仓库,主要作用是用来存放、查询和统计数据,因此插入一般是直接覆盖,而不会像Mysql那样经常一条一条的插入。在Hive中,Insert into默认是关闭的,需要做一些配置才能开启,感兴趣的朋友可以自行查询,此处只介绍insert overwrite方法,标准语法如下(源自官方文档):
INSERT OVERWRITE TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...) [IF NOT EXISTS]] select_statement1 FROM from_statement;
意思就是从一个语句中读取所有数据并覆盖原数据。前面也提到Hive一般用来做统计查询,通常情况下统计所需要的字段可能分布在好几张数据表上。就算只存在于一张数据表,那统计所需要的字段也只有2到3个,新建一个表专门用来查询也可以提高查询效率。
新建一个user_test表:

这个表相较于user_info表没有goodatlol字段和partition分区。
然后使用insert overwrite语句,将user_info中的id,name和hobby插入到user_test中来。

可以看到这时user_info中的name为ttt和zzz的数据都已经插入到了表user_info中,这时在该表中进行统计查询效率会比在user_info中快。
该语句在下面场景会非常实用,比如一个表A很很多字段,其中1号程序员需要用到A中的1、2、3字段做统计分析,程序员2号需要用到A中的3、6、8字段做统计分析,那么1号和2号分别都键自己的统计表会更加有效率
二十五、Hadoop学记笔记————Hive复习与深入的更多相关文章
- 二十、Hadoop学记笔记————Hive On Hbase
Hive架构图: 一般用户接口采用命令行操作, hive与hbase整合之后架构图: 使用场景 场景一:通过insert语句,将文件或者table中的内容加入到hive中,由于hive和hbase已经 ...
- 二十三、Hadoop学记笔记————Spark简介与计算模型
spark优势在于基于内存计算,速度很快,计算的中间结果也缓存在内存,同时spark也支持streaming流运算和sql运算 Mesos是资源管理框架,作为资源管理和任务调度,类似Hadoop中的Y ...
- 二十一、Hadoop学记笔记————kafka的初识
这些场景的共同点就是数据由上层框架产生,需要由下层框架计算,其中间层就需要有一个消息队列传输系统 Apache flume系统,用于日志收集 Apache storm系统,用于实时数据处理 Spark ...
- 二十四、Hadoop学记笔记————Spark的架构
master为主节点 一个集群中可能运行多个application,因此也可能会有多个driver DAG Scheduler就是讲RDD Graph拆分成一个个stage 一个Task对应一个Spa ...
- 二十二、Hadoop学记笔记————Kafka 基础实战 :消费者和生产者实例
kafka的客户端也支持其他语言,这里主要介绍python和java的实现,这两门语言比较主流和热门 图中有四个分区,每个图形对应一个consumer,任意一对一即可 获取topic的分区数,每个分区 ...
- 十九、Hadoop学记笔记————Hbase和MapReduce
概要: hadoop和hbase导入环境变量: 要运行Hbase中自带的MapReduce程序,需要运行如下指令,可在官网中找到: 如果遇到如下问题,则说明Hadoop的MapReduce没有权限访问 ...
- 十八、Hadoop学记笔记————Hbase架构
Hbase结构图: Client,Zookeeper,Hmaster和HRegionServer相互交互协调,各个组件作用如下: 这几个组件在实际使用过程中操作如下所示: Region定位,先读取zo ...
- 十七、Hadoop学记笔记————Hbase入门
简而言之,Hbase就是一个建立在Hdfs文件系统上的数据库(mysql,orecle等),不同的是Hbase是针对列的数据库 Hbase和普通的关系型数据库区别如下: Hbase有一些基本的术语,主 ...
- python3.4学习笔记(二十五) Python 调用mysql redis实例代码
python3.4学习笔记(二十五) Python 调用mysql redis实例代码 #coding: utf-8 __author__ = 'zdz8207' #python2.7 import ...
随机推荐
- 推荐大家在GitHub 上值得关注学习的 iOS 开源项目
GitHub上有很多不错的iOS开源项目,和大家特别推荐以下几个项目: 1. ReactiveCocoa GitHub链接:ReactiveCocoa/ReactiveCocoa GitHub自家的函 ...
- plsql 导入导出表、数据、序列、视图
一.导出: 1.打开plsql-->工具---->导出用户对象(可以导出表结构和序列.视图) ps:如果上面不选中"包括所有者",这样到导出的表结构等就不包含所有 ...
- 苹果新的编程语言 Swift 语言进阶(九)--方法和下标
一.方法 方法是与特定类型相关的函数.与属性一样,方法也包括实例方法和类型方法. 类.结构.枚举都能定义实例方法,用来封装或实现给定类型的一个实例相关的功能或特定任务. 类.结构.枚举也能定义与类型本 ...
- The 16th tip of DB Query Analyzer
The 16th tip of DB Query Analyzer ---- SQL Schedule will be executed even DBMS h ...
- react中需要用到【深度复制】的问题
首先,说一下我所遇到的问题,我所做的项目是用的基于react的antd框架. 一张表格,里面的数据是从后台获取直接渲染,我点击修改按钮,在modal弹框中修改数据,但是没有点击确定,点击取消,发现页面 ...
- HTML5的canvas标签制作黑客帝国里的简单画面
1.加入canvas标签 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"/> ...
- Qt与FFmpeg联合开发指南(三)——编码(1):代码流程演示
前两讲演示了基本的解码流程和简单功能封装,今天我们开始学习编码.编码就是封装音视频流的过程,在整个编码教程中,我会首先在一个函数中演示完成的编码流程,再解释其中存在的问题.下一讲我们会将编码功能进行封 ...
- mongodb查询语句
左边是mongodb语句,右边是sql语句 db.users.find() select * from users db.users.find({"age" : 27}) sele ...
- 无效类字符串:ProgID: Excel.Application
网上发现的方案是改注册表,其实用不着那么麻烦,找2种excel文件:xlsx和xls,把默认打开方式都换成你机器上有的程序就行,比如WPS Office的WPS 表格
- VirtualBox上安装64位系统
http://blog.csdn.net/mal327/article/details/6597263 原来VirtualBox安装64位的系统需要满足以下条件: 1.64位的cpu2.安装的系统必须 ...