Hive – 天天会用到的hive
#产生背景
MapReduce编程不方便:开发、测试、需求变更
传统关系型数据库人员的需要
关系型数据库:是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据
标准数据查询语言SQL就是一种基于关系数据库的语言
DBA:我就像使用sql一样的方式来处理分析大数据
==> Hive的产生
文件存放在HDFS之上的,那么如果你想使用SQL去处理它,需要一个什么前提?
HDFS 上面文件都是文本 想办法转化数据 创建一张表,每张表的字段跟hdfs文本对应
结构化、文件映射成表格 ==> Schema用它来说实现 元数据信息(metastore)
Hive是什么:
官网:hive.apache.org
data warehouse 数据仓库
The Apache Hive ™ data warehouse(仓库) software facilitates(促进) reading, writing, and managing large datasets residing(住) in distributed(分布式的) storage using SQL
使用sql对大的数据集分布式读和写的处理,
分布式存储:HDFS、S3、OSS
hdfs://xxxxxxx
s3://.....
Facebook开源:最开始是解决海量结构化日志的数据 pv uv用来处理日志的额,每天访问多少ip
构建在Hadoop之上的数据仓库,
Hive定义了SQL语言:HQL (类SQL)
hadoop适合通常用于离线处理,所以hive也适合离线处理
SQL =====Hive=====MapReduce/Spark/Tez===>YARN
hive执行引擎
Hive on MapReduce
Hive on Spark 写个sql语句经过hive框架翻译成spark上作业
Hive on Tez
Hive发展历程
08/07 07年8月 Facebook
05/13 13年5月 0.11 Stinger Phase 1 ORC列式存储 HiveServer2把hive提起来,相当于一个客户端就可以连接起来 Stinger计划
10/13 0.12 Stinger Phase 2 ORC improvement 性能改进
04/14 0.13 Stinger Phase 3 Tez and Vectorized query engine 向量化查询引擎
11/14 0.14 Stinger.next Phase 1: Cost-based optimizer 优化
面试 为什么要使用Hive
1) SQL方便写 简单容易
2) Hadoop 能够操作大规模数据集 ,如果不够就加机器,
3) MetaStore: Pig/Impala/Presto/SparkSQL 共享元数据信息 MetaStore 是数据库
hive 部署架构
视频6多看看
Hadoop 分布式 集群
Hive 仅仅只是客户端而已
sql 客户端 到hive 提交到hadoop集群的RM 上
元数据信息的存储就是使用mysql的
生产上一定要部署2mysql 防止挂掉,没有元数据了 ,
Hive与RDBMS的关系
相同点:都是用SQL Hive QL和SQL的关系:两者没有任何关系,只是语法相似而已
实时性 RDBMS发出一个数据,会马上出现 hive是实时性很差
事务 大数据里面的事务 特别是这种离线处理就是鸡肋,没有什么意义 工作当中不用考虑用hive sql去处理事务
分布式hive支持分布式
数据量 hive支持大量的
Hive部署
视频8
查找 chd版本 搜索hadoop-2.6.0-cdh5.7.0
下载:http://archive-primary.cloudera.com/cdh5/cdh/5/
在使用CDH版本的时候一定要注意:尾巴对准了
hadoop采用5.7.0 所以hive也采用5.7.0
wget http://archive-primary.cloudera.com/cdh5/cdh/5/hive-1.1.0-cdh5.7.0.tar.gz
解压:tar -xzvf hive-1.1.0-cdh5.7.0.tar.gz -C ~/app/
配置环境变量: ~/.bash_profile
export HIVE_HOME=/home/hadoop/app/hive-1.1.0-cdh5.7.0
export PATH=$HIVE_HOME/bin:$PATH
生效: source ~/.bash_profile
Hive配置:$HIVE_HOME/conf
hive-env.sh
HADOOP_HOME=/home/hadoop/app/hadoop-2.6.0-cdh5.7.0
hive-site.xml配置的就是MySQL的相关信息 hive这里面也要配置mysql的信息
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/ruoze_d5?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=UTF-8</value>
</property> 这里是hive字符集更改
<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>root</value>
</property>
我们要hive连接mysql 所以 拷贝mysql驱动到$HIVE_HOME/lib
[hadoop@hadoop001 ~]$ cd software
[hadoop@hadoop001 software]$ ll
total 852
-rw-r--r-- 1 hadoop hadoop 872300 Nov 19 20:06 mysql-connector-java-5.1.27.jar
cp一份就可以了 到$HIVE_HOME/lib
可能遇到的问题:mysql赋权
启动hive
bin下面 ./hive
快速入门
hive > create table ruoze_helloworld(id int,name string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘\t’;
hdfs上的文件是有字段的分隔符,所以你创建的内容一定要与hdfs的内容关联上,
这里会挂,为什么怎么办
先看日志
我们要考虑一下mysql里面的数据集对不对
alter database ruoze_d5 character set latin1;
去mysql更改一下
进入mysql
use切换到数据库
把这个贴过来更改一下alter database ruoze_d5 character set latin1;
在重新
hive > create table ruoze_helloworld(id int,name string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘\t’;
就可以了ok
加载数据
load data local inpath ‘/home/hadoop/data/helloworld.txt’ overwrite into table ruoze_helloworld;
加载数据从本地 local指机器 去掉的话就是hdfs 文件的pwd 路径 重新写到那张表
select * from ruoze_helloworld;
select count(1)from ruoze_helloworld;
看外部界面8088 之前要把yarn启动 jps
这个select语句,hive就把提交到yarn上运行