【若泽大数据实战第十四天】Hive快速入门以及Hive部署安装
你认为现在HDFS、YARN 还存在哪些致命的地方?
首先nm和rm是单点的,只要这个节点挂了,整个hdfs或者yarn都不能提供工作了。
单点故障:生产上面任何一个环节必须是HA(高可用)
以后学习任何的框架的时候,都要去思考:这个框架的单点故障怎么去解决。
Hive
Hive是Apache的顶级项目
网址是:hive.apache.org
Hive源码网址:https://github.com/apache/hive
(其它项目修改一下名称即可,比如:https://github.com/apache/hadoop)
一个项目要经过一个发展的过程,一个孵化的过程,才有可能成为apache的顶级项目。
孵化的项目网址是:xxx.incubator.apache.org/
顶级的项目网址是:xxx.apache.org/
孵化的项目:调研可以、生产慎用
孵化项目举例: http://livy.incubator.apache.org/
github.com/apache/hive
看官网解释:
(Apache Hive™数据仓库软件使用SQL语句便于读取,写入和管理驻留在分布式存储中的大型数据集。操作结构化数据。提供给用户命令行工具和JDBC驱动程序以连接到Hive)
从上面解释可以看出:它是数据仓库data warehouse。它是构建在分布式存储之上的。
再看:
从上面解释可以看出:它以前是apache hadoop的一个子项目,并不是单独的,但是现在成为了一个顶级项目,是独立的。它是开源的,如果你觉得什么地方有问题,你可以去修改,然后把修改后的代码提交给社区,如果你的改动被社区所接受,它会把你的代码合并到源码里面去。如果你修改了之后,你的代码被merge到源码里面后,你就成为了container贡献者了。commits更厉害一些。
Hive:https://github.com/apache/hive
Hive是构建在Hadoop之上的数据仓库,可以分为三部分去理解:
数据:存储在HDFS上
执行:用MapReduce(2.0 过时)去执行。(它的执行效率比较低不理想) (由于它不理想,后来底层可以用Spark/Tez来运行。)
运行:在YARN上面运行
问题;hive能够运行在哪些执行引擎之上?答:MapReduce、Spark、Tez
MapReduce从2.0(apache,不是cdh)开始已经标识为过时,可以用,但是不推荐。
hive:就是使用SQL来搞定大数据的处理分析。
如果一个框架最终不能落地SQL,那么这个框架就有待选择。对于公司的产品/数据平台:必须提供一种SQL的方式,不然销售不出去的。
Hive部署安装:
前置条件:
这里用的hive版本是:hive-1.1.0-cdh5.7.0
hadoop版本下载:wget http://archive.cloudera.com/cdh5/cdh/5/hadoop-2.6.0-cdh5.7.0.tar.gz
hive版本下载: wget http://archive.cloudera.com/cdh5/cdh/5/hive-1.1.0-cdh5.7.0.tar.gz
①下载:
②解压
(解压到指定目录,注意哪个用户解压的)
(目前只关心bin和conf就足够了)
③设置环境变量
把bin加入到环境变量里面去,这样可以在任意窗口使用任意命令。
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
(注意编辑完成之后需要source生效,新打开的窗口无所谓,其它之前打开的窗口也需要source之后才能生效。)
备注:hive的数据data是存放在HDFS上的,那么ruozeinput.txt 就是一个普通的不能再普通的文本文件,它是没有schema信息的。hive的数据是在hdfs上的,但是描述这些数据的元数据信息是存放在mysql(市场上90%以上都是用mysql)里面的,所以安装好hive之后还需要配置元数据信息,告诉hive如何能访问到mysql数据库。
schema信息是 table/database/column(name/type/index)。
元数据信息 metadata:是描述数据的数据。
访问mysql需要哪些条件?URL、用户user、密码password、mysql驱动driver(每个软件都有驱动)。
④拷贝mysql的驱动到lib下
在hive解压后,lib下是没有mysql驱动的,所以需要拷贝mysql的驱动到lib下。
cp mysql-connector-java.jar ~/app/hive-1.1.0-cdh5.7.0/lib/
⑤hive-site.xml配置mysql相关信息(一开始没有这个文件,需要从创建一个或者从其它地方copy一个)
/home/hadoop/app/hive-1.1.0-cdh5.7.0/conf/hive-site.xml
<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>
用mysqladmin用户进mysql,看一下:出现了ruoze_d6这个数据库
hive补充了解:
mysql会出现单点故障问题
怎么解决?主备(相当于会同时存在两个mysql,如果有一个出现问题,另一个备用的立马切换过来使用)
hive是一个客户端,不存在集群的概念。虽然它没有集群的概念,但是在生产上面,它也要部署多个。
Hive提供了一种类SQL的语法 Hive QL,它里面的SQL和关系型数据库的SQL是没有关系的,只是语法上很相似而已。
Hive vs RDBMS 对比(面试):
SQL:都可以用SQL
事物:RDBMS是事物,hive也可以但是最好不用
insert/update:hive高版本支持,但是性能特别差;RDBMS当然支持。
底层分布式:hive底层的执行引擎(MapReduce)是分布式的,节点可以有很多很多;RDBMS也可以支持,但是对节点是有限制的,多了之后就不行了。
机器:hive、hadoop一般构建在廉价的机器上面,但是RDBMS是部署在专用的机器上面。
数据量:大数据可以到P以及更多,但是RDBMS到G。
速度:hive底层是MapReduce,快不哪里去,它都是跑离线任务的。hive的延时性非常高,关系型数据库延时性非常低。
hive:离线批处理,延时性很高。
大数据不怕数据量大,就怕数据倾斜!!!