Apache的顶级项目,(是一个java程序)
Facebook公司(2008年)开源给Apache基金会!
hive官网: http://hive.apache.org/
hive到底是干什么的
将SQL转换成MapReduce程序,并将程序提交到YARN集群运行,不会自动生成结果文件,
直接读取HDFS上的数据进行处理.
sql query(查询):它的查询类似于MySQL数据库中SQL查询!
---------------------------------------------------------------------------------------------------------------------------
概念
SQL on hadoop(不仅仅是数据库)阵营:建立在Hadoop之上的提供SQL方式分析数据的框架
hive框架是此类型框架的基础框架
----------------------------------------------------------------------------------------------------------------------------
学好hive前置:
Hadoop:MapReduce,YARN,HDFSmysql:DDL(对表的操作)/DML(对数据的操作)
-----------------------------------------------------------------------------------------------------------------------------
程序对比:
数据:hadoop hive spark sqoop
java hadoop spark
mapreduce的wordcount程序:
map:分割,转换
(hadoop,1),hive,1),spark,1)...
reduce:相加
hive的wordcount功能:
select count(单词字段) from 表 group by 单词字段
-----------------------------------------------------------------------------------------------------------------------------
hive常用版本
0.13.1 2014年发布,经典版本1.2.1:较新版本(常用) 底层推荐使用MapReduorce;
2.X:2017年发布,底层推荐使用spark,TeZ分析数据,而不是MapReduce
hive1.2版本的下载地址: https://archive.apache.org/dist/hive/hive-1.2.1/
------------------------------------------------------------------------------------------------------------------------------hive安装
上传、解压、重命名
修改配置
hive-env.sh (Hadoop_home)
创建数据仓库:
hive数据需要保持到HDFS上,(hdfs上需要有hive所运行的路径和权限!)
创建对应的目录和赋予权限
bin/hdfs dfs -mkdir -p /tmp
bin/hdfs dfs -mkdir -p /user/hive/warehouse
bin/hdfs dfs -chmod g+w /tmp
bin/hdfs dfs -chmod g+w /user/hive/warehouse
hive配置官方网址: https://cwiki.apache.org/confluence/display/Hive/GettingStarted
------------------------------------------------------------------------------------------------------------------------------hive和mysql的差异:
共性:
database:数据库,命名空间
将同一类的表放到此空间下,方便进行管理操作
table:表,字段:数据类型和字段名称
区别:
hive没有真正意义上的数据表;它的数据表是
映射表和对应的数据文件所组成的!
对应的数据文件就是存储在HDFS上的文件。
----------------------------------------------------------------------------------------------------------------------------
使用hive:
交互式命令(command line interface) (理解为客户端!CLI)
bin/hive----------------------------------------------------------------------------------------------------------------------------
metastore(元存储:记录表信息和映射信息等的信息)
hive中无论是创建的表还是数据库,他们元数据metaData需要存储
默认情况下,存在derby数据库中,(因为derby数据库只支持一个会话,所以要是将元文件存储在derby数据库中,hive就只能开启一个会话,
为了让hive能打开多个会话,所以要将元数据存储到mysql上!因为mysql能开启多个会话!)
derby是嵌入式数据库
每次仅支持一个会话访问
在企业开发中,我们通常将metaData存储到MySQL数据库中(官方推荐)
将metaData存储到MySQL中
删除metastore_db和derby.log
在mysql上创建一个存放元数据的数据库:
create databases Metastore
配置
创建conf/hive-site.xml (在hive的cong目录下)
配置hive-site.xml文件
官方配置:https://cwiki.apache.org/confluence/display/Hive/AdminManual+MetastoreAdmin
->指定元数据存放在mysql上
javax.jdo.option.ConnectionURL
jdbc:mysql://所在的数据库/数据库名?createDatabaseIfNotExist=true
->设置mysql的驱动(保证数hive的lib目录下有jar包存在)javax.jdo.option.ConnectionDriverName
com.mysql.jdbc.Driver
->告知数据库的用户名javax.jdo.option.ConnectionUserName
<user name>
->告知数据库的用户密码javax.jdo.option.ConnectionPassword
<password>
导入MySQL驱动包(https://pan.baidu.com/s/1p4g998gJgrIApuktMMbq-A)
将jar包导入到hive的lib目录下
-1->多个窗口启动交互式命令(bin/hive)
-2->去MySQL看看metastore数据库是否存在
-3->瞅瞅metastore_db和derby.log是否存在
----------------------------------------------------------------------------------------------------------------------------
为方便开发调试,设置hive-site.xml文件
显示当前所在数据库
<property>
<name>hive.cli.print.current.db</name>
<value>true</value>
</property>
设置hive的结果显示字段名
<property>
<name>hive.cli.print.header</name>
<value>true</value>
</property>
导入数据方式
方式一:使用load加载数据
加载本地数据
LOAD DATA LOCAL INPATH '/opt/datas/sw17-top11-dl-sh.anon.csv'
加载hdfs:将文件移动(mv)到了表对应的目录下面
LOAD DATA INPATH '/opt/datas/sw17-top11-dl-sh.anon.csv'
方式二:使用HDFS的PUT功能
直接使用HDFS的Put上传命令,将数据上传到指定目录
企业中用的比较多
----------------------------------------------------------------------------------------------------------------------------
运行模式MapReduce的运行模式
集群模式:YARN
本地模式:IDEA (Linux系统时常用)
hive的运行模式:
当然hive也有两种模式;
集群模式:就是在yarn上运行,生成MapReduce程序到yarn上运行!
本地模式:就是不编译MapReduce程序,直接当做数据库操作!(但是只有小于128M的文件才信)
设置方式:
->配置文件中hive-site.xml
<property>
<name>hive.exec.mode.local.auto</name>
<value>true</value>
</property>
->hive cli :仅当前会话有效
设置:set hive.exec.mode.local.auto=true
查看:set hive.exec.mode.local.auto
功能:
如果设置为true,
hive 框架会根据一定的条件判定,走本地模式还是集群模式
如果处理的数据块<128M且mapTask个数<5 才能走本地,
要是不满足这两个条件,就会走集群模式!
----------------------------------------------------------------------------------------------------------------------------
作者:唐平
时间:2018-6-26