hive:
基于hadoop的数据仓库
数据库:
真正存储和管理数据的,对数据有直接的处置权。
关心的事情是在线事务过程(OLTP)
数据仓库:
可以通过一个或多个数据库读取数据做一些数据分析
关心的事情是在线分析过程(OLAP)
举例:
数据库操作:下订单,待发货,已发货,待评价,。。。
数据仓库操作:通过数据分析出销量,年龄段,性别,。。。
-
hive为什么是基于hadoop的?
1.logo的头是hadoop的头(勉强算一个理由)
2.hive是存在与hadoop生态圈中的一个组件
3.hive本身执行的就是MapReduce -
hive怎么执行的MapReduce?
hive是使用类sql(HQL/HiveQL)语句完成的MapReduce -
hive可以对MapReduce做极大的简化,为什么保留MapReduce?
有某些特殊业务,可以无法使用sql语句完成。
此时必须使用传统的MapReduce完成。存在即有道理。 -
为什么使用sql语句的形式简化MapReduce?
BI(商业智能) 存储过程(使用sql语句编程)
方便了这些对于sql语句使用熟练,但对代码不太熟练的人群 -
hive的运行原理
写sql语句,hive内部自动把sql语句转换成MapReduce执行。
原数据在hdfs上,sql语句需要用到表,所有需要创建表,
表是以目录的形式存储在hdfs上的某个位置。
通过加载数据的形式,可以把原数据加载到这个表对应的目录下。
通过sql语句(mapreduce)对原数据进行分析,结果写入hdfs。 -
derby数据库:
同一个时刻只允许单用户登录的一个轻量级的数据库,无法数据共享。
如果想做到数据共享,换成mysql数据库充当hive里的元数据库。 -
环境搭建:
derby数据库:
1.解压缩
2.配置环境变量
3.修改配置文件
mv hive-env.sh.templete hive-env.sh
export HADOOP_HOME=
export HIVE_CONF_DIR=
hive-site.xml
看文件
4.启动服务
hive
5.正确执行
mysql数据库:
在derby数据库基础上
a.在hive-site.xml中添加mysql连接信息
b.把mysql-connector-java.jar放入 $ {hive}/lib
c.把${HIVE_HOME}/lib 下的 jline-xxx.jar放入 ${HADOOP_HOME}/share/hadoop/yarn/lib 下
d.schematool -dbType mysql -initSchema 初始化数据库类型
e.修改mysql的连接权限
hive的常用命令
*hive-help 查看关于hive的所有命令的帮助信息
-
在linux的命令行下执行hive的sql语句
hive -e “sql” / ‘sql’ -
在linux命令行下执行写有hive的sql语句的文件
hive -f fileName
hive -f fileName >> fileRes
注意:在linux的命令行下执行hive语句的时候,
先进入到hive环境,执行sql,执行完毕自动退回到linux环境。 -
在hive环境下执行linux的命令
hive> ! linux命令 -
在hive环境下执行hdfs的命令
//以普通linux命令的形式执行,速度很慢
hive> ! hdfs dfs commond
//hive提供了一种简便方法,执行速度非常快
hive> dfs commond -
日志文件
在${HIVE_HOME}/conf hive-log4j.properties 进行修改日志的路径和文件名 -
hive的历史命令
cat ~/.hivehistory -
设置属性
a.hive-default.xml
默认设置的配置项,不能修改
b.hive-site.xml
可以根据需要修改部分配置项,覆盖掉hive-default.xml的内容
不管hive服务是否重启,属性值不变。
c.直接通过命令设置属性
只对当次连接生效,重启hive服务失效。
I.在hive环境下直接设置属性
hive> set properties=value 设置属性值
hive> set