Hive入门--2.分区表 外部分区表

1.查看mysql中metastore数据存储结构

Metastore中只保存了表的描述信息(名字,列,类型,对应目录

使用SQLYog连接itcast05 的mysql数据库

查看hive数据库的表结构:

2.建表(默认是内部表(先建表,后有数据))

(建表时必须指定列的分隔符)

create table trade_detail(
id bigint, 
account string, 
income double, 
expenses double, 
time string) 
row format delimited fields terminated by '\t';

3.Hive状态下执行Hadoop hdfs命令

在使用hive shell 的时候,我们有时候需要操作hdfs
Hive为我们提供了在hive命令行下hdfs的shell:
,例如:

dfs  -ls  /; 
dfs -mkdir  /data;
dfs  -put  /root/student.txt;

用法和hdfs下是一样的,只是细微的差别
和Hadoop命令稍微有些差别,前面是dfs开头,后面以“;”结尾

4.创建–外部表(先有数据,后建表)

先上传数据文件 a.txt b.txthdfs:/data目录下,
a.txtb.txt 中的内容都是:

后执行创建表的命令:

create external table ext_student (
id int,
name string) 
row format delimited fields terminated by '\t' 
location '/data';

创建完成后使用命令:select * from ext_student; 查看表中内容:

再次上传数据文件 pep.avi 

到 hdfs:/data 目录下,后执行全表扫描:select * from ext_student;

说明只要将这个数据放到 hdfs:/data 表所指定的目录下,hive就能将这个表中的数据读取出来(内部表和外部表都支持,但也存在特殊情况读不出)

为什么把文件丢到对应目录下就能把数据读出来?

答:因为metastore记录了这张表和数据的映射关系

SDS表中的内容:

5.创建–分区表

建分区表是为了提高数据的查询效率,按照省份、年份、月份等分区

创建一个外部分区表
(表名:beauties 指向文件:beauty)

create external table beauties (
id bigint, 
name string, 
size double) 
partitioned by (nation string) 
row format delimited fields terminated by ‘\t’ 
location ‘/beauty’ ;

show create table beauties;  

执行完成之后发现hdfs根目录下有beauty文件夹:

准备好3个数据文件: b.c b.j b.a


载入数据文件,同时指定分区:

load data local inpath '/root/b.c' into table beauties partition (nation='China');

查看表中是否成功load数据:

突发奇想:能否像平常使用外部表一样,在 hdfs:/beauty 目录下创建一个文件夹 nation=Japan ,然后将b.j 文件上传到这个目录下,数据就可以查出来了?

答:不行! 因为在载入数据的时候,metastore是不知道你将这个文件放到 /beauty/nation=Japan/ 目录下的。

拯救方法:通知hive在元数据库中添加一个beauties表的分区记录

alter table beauties add partition (nation=’Japan’) location “/beauty/nation=Japan/”

添加分区后,metastore中SDS表多了一条记录:

再次查询beauties表,发现b.j中的数据也能查询出来了:

分区表的使用优势:

select * from beauties where nation=’China’;

在数据量很大的时候,建分区表可以提高查询效率

删除分区:

alter table beauties drop if exists partition (nation ='Japan') ;

建分区表

create table td_part(
id bigint, 
account string, 
income double, 
expenses double, 
time string) 
partitioned by (logdate string) 
row format delimited fields terminated by '\t';

普通表和分区表区别:有大量数据增加的需要建分区表

create table book (
id bigint, 
name string) 
partitioned by (pubdate string) 
row format delimited fields terminated by '\t'; 

分区表加载数据
(hive自己的语法)

load data local inpath './book.txt' 
overwrite into table book 
partition (pubdate='2010-08-22');

local inpath—>从本地磁盘加载,不是hdfs

load data local inpath '/root/data.am' 
into table beauty 
partition (nation="USA");

使用分区字段查询表中的数据

select nation, avg(size) from beauties group by nation order by avg(size);

6. 表关联查询

查询举例:
需求:
  对 trade_detail 按照账户进行分组,求出每个账户的总支出总结余,然后和 user_info 进行表关联,取出名称。

在mysql中一条查询语句就能完成关联查询:

select t.account,u.name,t.income, t.expenses, t.surplus 
from user_info u join (
    select account,sum(income) as income,sum(expenses) as expenses,sum(income-expenses) as surplus 
    from trade_detail group by account 
) t 
on u.account = t.account

但是数据量一大,这个查询过程将变得及其漫长

所以我们使用hive来完成:

a) 首先要将2张表中的数据导入hdfs中,同样,我们也可以将mysql中的数据直接导入到hive表里面:

Mysql中的表:
trade_detail表:

user_info表:

b) 在hive中创建表

trade_detail表:

create table trade_detail (
id bigint,
account string,
income string,
expenses string ,
times string) 
row format delimited fields terminated by ‘\t’;

user_info表:

create table user_info (
id int,
account string,
name string,
age int) 
row format delimited fields terminated by ‘\t’;

c) 使用Sqoop 将mysql中trade_detail的数据导入hive中

./sqoop import 
--connect jdbc:mysql://192.168.1.102:3306/itcast 
--username root 
--password 123 
--table trade_detail 
--hive-import 
--hive-overwrite 
--hive-table trade_detail 
--fields-terminated-by '\t';

可能会出现如下的错误:

原因是没有将hive添加到环境变量
解决:
1)编辑 /etc/profile 文件,添加HIVE_HOME

2)source /etc/profile 刷新配置
3)使用which命令查看是否添加成功:

ok
4)再次执行sqoop命令,发现sqoop导入正在执行,可以看到map-reduce工作正在执行,在web浏览器上查看执行完成之后的结果文件:

Sqoop导入执行成功!

d) 使用Sqoop 将mysql中user_info的数据导入hive中

./sqoop import 
--connect jdbc:mysql://192.168.1. 102:3306/itcast 
--username root 
--password 123 
--table user_info 
--hive-import 
--hive-overwrite 
--hive-table user_info 
--fields-terminated-by '\t';

e) hive执行关联查询语句之后的结果:

select t.account,u.name,t.income, t.expenses, t.surplus 
from user_info u join (
    select account,sum(income) as income,sum(expenses) as expenses,sum(income-expenses) as surplus 
    from trade_detail group by account 
) t 
on u.account = t.account;

可以看出,这样的查询结果和在mysql中执行的结果是相同的

本页内容版权归属为原作者,如有侵犯您的权益,请通知我们删除。
1、查看系统环境 cat /etc/redhat-releaseuname -runame -m 关闭所有服务器的防火墙 /etc/init.d/iptables stopchkconfig iptables offchkconfig --list iptables 2、Spark集群机器规划 一共准备了四台机器 Host IP Hadoop Spark Node1 192.168.2.128 Master Master Node2 192.168.2.130 Slave Slave Node3 192.
本篇主要阐述通过DeveStack 去部署Openstack(mitaka),对大多数来说安装部署Openstack 来说是个痛苦的过程,尤其是 OpenStack和它依赖的一些组件在快速发展中,经常出现这个版本组件对不上那个版本 dashboard等情况。如果只是看看或者初期玩玩 OpenStack的话,使用DevStack也是个不错的办法。DevStack采用了自动化源码部署的方式,适用于开发环境的部署和Openstack开发者,单节点,小环境;这里采用的操作系统为Ubuntu14.04。 一、操作系
Spark版本: 1.6.2 概览 Spark SQL用于处理结构化数据,与Spark RDD API不同,它提供更多关于数据结构信息和计算任务运行信息的接口,Spark SQL内部使用这些额外的信息完成特殊优化。可以通过SQL、DataFrames API、Datasets API与Spark SQL进行交互,无论使用何种方式,SparkSQL使用统一的执行引擎记性处理。用户可以根据自己喜好,在不同API中选择合适的进行处理。本章中所有用例均可以在 spark-shell、pyspark shell、s

HBase工作原理学习 - 2016-07-22 18:07:56

HBase工作原理学习   1 HBase简介 HBase是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建大规模结构化的存储集群。HBase的目标是存储并处理大型数据,具体来说是仅需使用普通的硬件配置,就能够处理由成千上万的行和列所组成的大型数据。 与MapReduce的离线批处理计算框架不同,HBase是一个可以随机访问的存储和检索数据平台,弥补了HDFS不能随机访问数据的缺陷,适合实时性要求不是非常高的业务场景。HBase存储的都是Byte数组
一:RDD粗粒度与细粒度 粗粒度: 在程序启动前就已经分配好资源(特别适用于资源特别多而且要进行资源复用) 细粒度:计算需要资源是才分配资源,细粒度没有资源浪费问题。 二: RDD 的解密: 1,分布式(擅长迭代式是spark的精髓之所在) 基于内存(有些时候也会基于硬盘) 特别适合于计算的计算框架 2,RDD代表本身要处理的数据,是一个数据集Dataset RDD本身是抽象的,对分布式计算的一种抽象 RDD 定义: 弹性分布数据集 代表一系列的数据分片 3,RDD弹性之一: 自动进行内存和磁盘数据存储的

spark 集群搭建 详细步骤 - 2016-07-22 18:07:20

最近好不容易搞到了三台测试机,可以用来搭建spark集群搞模型。本宝宝开心得不行,赶紧行动,把spark集群搭起来,模型跑起来。 1.搭建hadoop集群 hadoop的hdfs文件系统是整个生态圈的基础,因为数据量大了以后,数据一般就都放hdfs上头了。因为四台测试机之前已经搭建好了hadoop集群环境,而且经过本宝宝测试,hadoop集群也是可用的,所以就省了搭hadoop集群的功夫。 2.配置集群host 四台机器的hostname如下: namenodetest01.hadoop.xxx.com

使用Fuel安装Openstack - 2016-07-22 18:07:11

Openstack自动化部署工具,主要用于生产环境. 一. 环境准备 这里用的是Openstack 9.0版本. Fuel Documentation 下载 Fuel for OpenStack镜像文件 , 用于安装Feul Master. 安装 Xshell , 用于远程连接. 二. 安装fuel_master节点 1. VirtualBox网络配置 管理-全局设定-网络-仅主机(Host-Only)网络 新建三张新的网卡: Host-Only Ethernet Adapter #1 IPv4: 10.
flume是一个分布式、可靠、和高可用的海量日志采集、聚合和传输的系统。支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(比如文本、HDFS、Hbase等)的能力 。 一、什么是Flume? flume 作为 cloudera 开发的实时日志收集系统,受到了业界的认可与广泛应用。Flume 初始的发行版本目前被统称为 Flume OG(original generation),属于 cloudera。但随着 FLume 功能的扩展,Flume O

KafkaStreams介绍(二) - 2016-07-22 18:07:55

说明: 本文是Confluent Platform 3.0版本中对于Kafka Streams的翻译。 原文地址: https://docs.confluent.io/3.0.0/streams/index.html 看了很多其他人翻译的文档,还是第一次翻译,有什么翻译的不好的地方还请指出。   这是Kafka Streams介绍的第二篇,以前的介绍如下: http://blog.csdn.net/ransom0512/article/details/51971112   1.  快速入门 1.1.  目
2016年7月19日下午,笔者做客国泰君安通信研究团队”软银收购ARM“深度解读电话会议,与在线的150多位机构投资者分享了对于”软银收购ARM“的个人观点。 以下为电话会议实录,略经编辑以及后期补充部分观点。 主持人:各位同事朋友大家下午好,我是国泰君安通信行业分析师宋嘉吉,欢迎大家今天参加本次电话会议,此次会议的主题是软银收购ARM,7月18号软银宣布以243亿英镑收购半导体IP供应商ARM,是对未来物联网战略的提前卡位,我们认为这也是物联网行业布局芯片的又一重磅催化。今天大唐电信封了涨停,按照我们对