1.hive(数据仓库:data warehouse)
构建再Hadoop之上的数据仓库
数据:HDFS
执行:MR(2.0过时)Spark Tez
运行:YARN
Hive 是一个使用SQL来操作分布式存储系统上面的大数据集的读写和管理操作的一个客户端,Hive它不是一个集群。
用JDBC去连接Server的话,不应该是走查询统计分析,而是去拿到统计结果,只拿结果,不做计算。
2.有人说Hive不难,就是写SQL实现(这是错误的说法)
架构层面,语法层面,底层执行层面,考虑优化
3.install hive
wget http://archive.cloudera.com/cdh5/cdh/5/hive-1.1.0-cdh5.7.0.tar.gz
上传完以后将文件解压到 app文件夹下
4.配置环境变量
vi ~/.bash_profile
export HIVE_HOME=/home/hadoop/app/hive-1.1.0-cdh5.7.0
export PATH=$HIVE_HOME/bin:$PATH
配置完成后不要忘记:source ~/.bash_profile,其他开启的窗口也要执行
5.hive的存储
由于hive是构建再Hadoop之上的数据仓库,那么他的存储数据的位置也在hdfs中。
但是它的元数据(metadata)信息存储的位置是 mysql中。
元数据:描述数据的数据。
1、MR编程不便性
2、传统的RDBMS人员的需求
HDFS上面的文件就是普通的文件,它并没有schema的概念
schema:RDBMS中的表结构
people.txt <== id name age address
sql ===> 搞定海量数据的统计分析
===> 产生Hive
6.安装步骤
1)下载
2)解压到~/app
3)bin添加到环境变量
4)拷贝mysql的驱动到lib下
5)hive-site.xml配置mysql相关信息(hive-site.xml在conf下)
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/ruoze_d6?createDatabaseIfNotExist=true&characterEncoding=UTF-8</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>root</value>(这里注意 密码要修改成自己的)
</property>
7.Hive vs RDBMS
都可以使用SQL
时效性:Hive底层是使用MR的,主要是做离线任务的,比较慢。
8.单点问题:
Hive和mysql的链接中,mysql属于单点,如果mysql挂了,那么元数据也就没了,生产中我们一般需要让运维人员帮我们搭一个主备
Hive属于客户端,虽然它没有集群概念,但是在生产中我们也要配备多个,如下图所示,在生产中 比如有三台机器都装有Hive,在这之上会有一个调度系统,调度系统定时的会将你的作业提交到执行机上(Executor),这时如果一个Hive坏了没有关系,可以用别的机器提交。