1.hive概念
hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供sql查询功能,可以将sql语句转换为MapReduce任务进行运行。 其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。hive依赖于HDFS和MapReduce。
2.hive功能
hive也是支持使用SQL来进行数据处理。包括解析SQL,优化SQL,策略选择,消耗模型等。一张表有两种数据,元数据和源数据。元数据就是描述表结构的数据,存储在本地的关系型数据库中。源数据就是表内数据,存储在HDFS上。
3.hive架构
用户操作hive的接口有三个:CLI,Client,和WebUI。CLI就是在命令行中输入hive,进入hive脚本,编写SQL语句。Client包括JDBC和Beeline,它们通过连接hive提供的thrift server服务来操作hive。WebUI就是通过web页面,在页面中编写SQL语句通过hive执行,但是用户交互不好,不建议使用。hive还依赖于MetaStore,就是存储元数据的数据库,默认是derby。
4.hive搭建
搭建hive工具的模式有三种:
- local本地:元数据库与工具都是在本地。元数据库使用默认的derby。这种模式只需修改hive-site.xml文件。直接解压的hive安装包没有这个文件,需要将hive-default.xml.template文件改名为hive-site.xml。配置信息如下:
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:derby:;databaseName=metastore_db;create=true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>org.apache.derby.jdbc.EmbeddedDriver</value>
</property>
<property>
<name>hive.metastore.local</name>
<value>true</value>
</property>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
</configuration>
注意点:Hadoop中的jline包,应该与hive中的版本一致。Hadoop的jline包在hadoop/share/hadoop/yarn/lib中。因为hive依赖于hdfs和mapreduce,所以需要启动hdfs集群和yarn集群(需要计算的时候启动就可以)。这种模式有一个缺点是不允许多个用户同时操作hive,是由于derby的缺陷导致的。
- local(mysql):元数据库和hive工具是在同一节点上。元数据库用的是MySQL数据库。使用这种模式首先需要安装mysql,步骤是
安装mysql
Yum install mysql-server -y
修改mysql权限:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123' WITH GRANT OPTION;
删除多余会对权限造成影响的数据
刷新权限
flush privileges;
添加用户:
CREATE USER 'hive'@'%' IDENTIFIED BY '123';
授权用户:
grant all privileges on hive_meta.* to hive@"%" identified by '123';
flush privileges;
设置开机启动
chkconfig mysqld on
注意一个坑:
关于权限,虽然hive用户对hive_meta数据库是由操作权限的,但是这个数据库如果不存在,hive用户
也是没有权限创建这个数据库,所以需要提前创建好hive_remote数据库。
然后还需要将mysql的jar包拷贝到hive的lib目录下。最后还需修改hive-site.xml文件
<configuration>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive_remote/warehouse</value>
</property>
<property>
<name>hive.metastore.local</name>
<value>true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost/hive_meta?createDatabaseIfNotExist=true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hive</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123</value>
</property>
- 基于MySQL的远程模式:hive提供了一个服务叫做,meta store service。这种模式的原理就是,在服务端的hive就按照第二种模式搭建,客户端的hive工具则不再需要配置和元数据库相关的配置信息,它只需要连接服务端提供的meta store服务,和服务端共用同一个元数据库即可。使用这种模式服务都需要启动meta store服务命令为hive -service metastore,所以客户端的hive-site.xml文件为
<configuration>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
<property>
<name>hive.metastore.local</name>
<value>false</value>
</property>
<property>
<name>hive.metastore.uris</name>
<value>thrift://192.168.57.5:9083</value>
</property>
</configuration>