=====hive入门=====
1. 概念
- Apache Hive™数据仓库软件有助于使用SQL读取,写入和管理驻留在分布式存储中的大型数据集。能够将结构投影到已存储的数据上。提供了一个命令行工具和JDBC驱动程序来将用户链接到Hive
- 主要面向查询操做,通常不进行删除和更新操做,由于hive处理的数据通常都是历史数据
- hive容许开发者自定义mapreduce处理复杂的分析工做
- hive是SQL解析引擎,它将SQL转换成M/R 程序,而后在hadoop执行
- hive的表和数据其实就是hdfs的目录和文件
- hdfs日志文件(数据源)-- mapreduce将结构投影到已存储数据上(解析引擎) -- 命令行工具和JDBC使用SQL(数据统计)
- 数据仓库:数据仓库是一个面向主题的,集成的,不可更新的,随时间不变化的数据集合,它用于支持企业或者组织的决策分析处理
-
hive和hbase区别java
- Hive适合用来对一段时间内的数据进行分析查询or统计查询,例如,用来计算趋势或者网站的日志。Hive不该该用来进行实时的查询。由于它须要很长时间才能够返回结果
- Hbase是一种在Hadoop之上的NoSQL 的Key/vale数据库。HBase能够用来进行实时查询,
- 数据也能够从Hive写到Hbase,设置再从Hbase写回Hive。
2. hive的体系结构
-
hive的元数据mysql
- hive将元数据存储在数据库(metastore)中,支持mysql,derby,oracle数据库,默认使用内置derby数据库(只支持单连接)
- hive中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否外部表),表的数据所在的目录等
-
hadoopweb
- 用hdfs进行存储,利用mapreduce进行计算
3. hive的安装
-
环境要求:sql
- jdk并配置环境变量
- mysql安装并启动用来作元数据存储(内嵌的derby数据库只支持单连接)
- hadoop安装并启动(支持单机环境,伪分布模式,集群模式)
- 下载wget安装包.tar.gz并解压tar -zxvf xxx.tar.gz -C /home
- 将mysql驱动配置到hive的classpath目录下,上传放到$HIVE_HOME/lib目录便可,要注意驱动和mysql版本对应
-
修改配置文件$HIVE_HOME/conf数据库
<!-- hive-env.sh配置文件 -->apache
HADOOP_HOME=/home/hadoop-standalone/hadoop-2.9.0
export HIVE_CONF_DIR=/home/apache-hive-2.3.2-bin/conf
<!-- hive-site.xml配置文件 -->数组
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://172.18.113.120:3306/hive?createDatabaseIfNotExist=true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456</value>
</property>
<property>
<name>hive.server2.webui.host</name>
<value>master</value>
</property>
<property>
<name>hive.server2.webui.port</name>
<value>10002</value>
</property>
</configuration>
-
格式化hdfs存储目录oracle
$ $HADOOP_HOME/bin/hadoop fs -mkdir /tmp
$ $HADOOP_HOME/bin/hadoop fs -mkdir /user/hive/warehouse
$ $HADOOP_HOME/bin/hadoop fs -chmod g+w /tmp
$ $HADOOP_HOME/bin/hadoop fs -chmod g+w /user/hive/warehouse
-
init元数据存储仓库分布式
$ $HIVE_HOME/bin/schematool -dbType <db type> -initSchema
4. hive之CLI命令行方式
-
两种启动方式:函数
1.)直接输出$HIVE_HOME/bin/hive执行程序
2.)$HIVE_HOME/bin/hive --service cli
(-S 进入静默模式 -e '命令'不进入交互模式,直接执行命令)
-
经常使用的CLI命令(每一个命令必须已分号结尾做为命令结束符,--开头是注释)
- 退出命令行 quit
- 查看数据库 show databases
- 查看表 show tables
- 查看表结构 desc 表名
- 查看内置函数 show functions
- 查看hdfs上文件 dfs -ls 目录
- 执行操做系统的命令 !命令
- 执行sql语句 select 语句
- 执行sql脚本文件 source sql文件
-
hive远程服务启动方式
- 端口号10000
- 启动方式:hive --service hiveserver2 &
- jdbc或者odbc远程登陆数据仓库对数据进行操做,必须启动远程服务以供链接
5. hive数据类型
hive数据类型有一下5种
* 数字类型
* 时间类型
* 字符串类型
* 其余类型
* 复杂类型
-
数字类型
- TINGINT(1字节有符号整数,从-128至127)
- SMALLINT(2字节有符号整数,从-32,768至32,767)
- INT/ INTEGER(4字节有符号整数,从-2,147,483,648到2,147,483,647)
- BIGINT(8字节符号整数,从-9,223,372,036,854,775,808至9,223,372,036,854,775,807)
- FLOAT(4字节单精度浮点数)
- DOUBLE(8字节双精度浮点数)
- DECIMAL (能够自定义精度和范围)
- NUMERIC
-
日期/时间类型
- TIMESTAMP(注意:只能从Hive 0.8.0开始)
- DATE(注意:只能从Hive 0.12.0开始)
- INTERVAL(注意:只能从Hive 1.2.0开始)
-
字符串类型
-
其余类型
-
复杂类型
1. ARRAYS<data_type> 数组类型,由一系列相同数据类型元素组成
2. MAPS<primitive_type,data_type> 集合类型,包看key-value键值对,能够经过key来访问元素
3. STRUCT<col_name : data_type [COMMENT col_comment], ...> 结构类型,能够包含不一样数据类型元素,经过点语法获取元素
4. union: UNIONTYPE<data_type, data_type, ...> (Note: Only available starting with Hive 0.7.0.)
- 建立表,使用数据类型
建立一张表,包含基本数据类型
create table t_user
(u_id int,
u_name string,
married boolean,
salary double,
birthday date
); -- 这里不能建立user表,换个表名t_user
建立一张表,包含数组类型
create table student (sid int,sname string,project array<string>);
-- {1,"tom",["语文","数学","英语"]}
建立一张表,包含map数据类型
create table stu2(id int,name string,project map<string,float>);
-- {1,"tom",<'大学语文',65>}
建立一张表,用array<map<string,float>>
create table stu3(id int,name string,grades array<map<string,float>>);
-- {1,'tom',[<'语文',85>,<'数学',85>]
建立一张表,包含struct数据类型
create table stu4(id int,info struct <name:string,age:int,sec:string>);
--{1,{'tom',10,'男'}}
6. hive的数据存储
- 基于hdfs
- 没有专门的数据存储格式
- 存储结构主要包括:数据库,文件,表,视图
- 能够直接加载文本文件(.txt文件等)
- 建立表时,指定hive数据的列分隔符和行分隔符
- 表分类:内部表,分区表,外部表,桶表 + 视图
-
内部表
-
概念:
- 与数据库中的table在概念上是相似的
- 每个table在hive中都有一个相应的目录存储数据,默认在/usr/hive/warehouse目录下,能够指定任何其余目录
- 全部的table不包括外部表,都保存在这个目录中
-
建立表例子
- create table t1(id int,name string,age int); -- 默认在/usr/hive/warehouse目录下
- create table t1(id int,name string,age int) location '/mytable/hive/t2'; -- 指定数据在hdfs上的存储位置
- create table t1(id int,name string,age int) row format delimited fields terminated by ','; -- 指明列分隔符,默认列与列之间没有任何分隔符
- create table t1 as select * from t2 row format delimited fields terminated by ','; -- 从一个表中的数据建立表并导入数据
- alter table t1 add columns(english int); -- 添加列
-
分区表(partition)
-
概念
- partition对应于数据库的partition列的密集索引(例如按照性别男女分红两个区)
- 在hive中,表的一个partition对应与标下的一个目录,全部的partition的数据都存储在对应的目录中
-
案例
- create table t1(id int,name string) partitioned by (gender string) row format delimited fields terminated by ','; -- 按照gender列分区
- insert into table t1 partition(gender='nan') select id,name from t2 where gender='nan';
-
外部表
-
概念
- 指向已近在hdfs中存在的数据,能够建立partition
- 它和内部表在元数据的组织上是相同的,而实际数据的存储则有较大的差别
- 外部表只有一个过程,加载数据和建立表同事完成,并不会移动到数据仓库目录中,只是与外部数据创建一个连接,当删除一个外部表时,仅删除改连接
-
例子
- create external table t1 (id int,name string) row format delimited fields termicated by ',' location '/input'; //对hdfs中已近存在的目录和文件建立一个连接