Hive原理与配置

Hive概述:

1.Hive是一个构建于Hadoop顶层的数据仓库工具,可以查询和管理PB级别的分布式数据。
2.支持大规模数据存储、分析,具有良好的可扩展性 某种程度上可以看作是用户编程接口,本身不存储和处理数据。
3.依赖分布式文件系统HDFS存储数据。 依赖分布式并行计算模型MapReduce处理数据。
4.定义了简单的类似SQL 的查询语言——HiveQL。
5.用户可以通过编写的HiveQL语句运行MapReduce任务。
6. 可以很容易把原来构建在关系数据库上的数据仓库应用程序移植到Hadoop平台上。
7.是一个可以提供有效、合理、直观组织和使用数据的分析工具。
8.Hive具有的特点非常适合用于数据仓库。
9.你只要记住Hive基于一个统一的查询分析层,通过SQL语句的方式对HDFS上的数据进行查询、统计和分析

Hive是什么

• Hive是一个SQL解析引擎,将SQL语句转译成MR Job,然后再Hadoop平台上运行,达到快速开发的目的。
• Hive中的表是纯逻辑表,就只是表的定义等,即表的元数据。本质就是Hadoop的目录/文件,达到了元数据与数据存储分离的目的
• Hive本身不存储数据,它完全依赖HDFS和MapReduce。
• Hive的内容是读多写少,不支持对数据的改写和删除
• Hive中没有定义专门的数据格式,由用户指定,需要指定三个属性:
– 列分隔符
– 行分隔符
– 读取文件数据的方法
• hive是基于Hadoop的一个数据仓库工具,用来进行数据提取、转化、加载,这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。hive数据仓库工具能将结构化的数据文件映射为一张数据库表,并提供SQL查询功能,能将SQL语句转变成MapReduce任务来执行。Hive的优点是学习成本低,可以通过类似SQL语句实现快速MapReduce统计,使MapReduce变得更加简单,而不必开发专门的MapReduce应用程序。hive是十分适合数据仓库的统计分析和Windows注册表文件。

Hive与传统的数据库相比:

hive分布式集群安装 hive 分布式_hive分布式集群安装

Hive和hadoop的关系

hive分布式集群安装 hive 分布式_hive分布式集群安装_02

备注:在安装hive之前,请安装hadoop。

安装mysql数据库:

1.准备号mysql的数据库包和驱动包.
   2.在hadoop的基础上搭建均可.

先查看最新镜像:
mysql的国内镜像源 下载mysql:

$ | yum install wget
$ |wget http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm

安装mysql镜像:

$ | yum install mysql57-community-release-el7-11.noarch.rpm

安装mysql服务,安装时间比较长(慢慢等待)

$ | yum install mysql-community-server

安装结束查看你是否安装成功

$ | systemctl status mysqld.service

hive分布式集群安装 hive 分布式_hive_03


启动

$ | systemctl start mysqld.service

配置的mysql是有初始密码的需要获得在在数据库里更改密码

查看mysql初始密码

$ | grep "password" /var/log/mysqld.log

hive分布式集群安装 hive 分布式_hive分布式集群安装_04


使用初始密码登录mysql

密码是我们使用命令查询出来的

$ | mysql -uroot -p

注:我们需要更改mysql的密码,但是mysql的初始密码位数为8位需要更改位数。

# 查看密码策略
$ | show variables like '%varlidate_password_policy%';
$ | show variables like 'validate_password_length%';
# 修改密码策略
$ | set global validate_password_policy=0;
$ | set global validate_password_length=1;

修改root密码

$ | ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';

这一步必不可少:大小写、特殊符号、8位以上
但是我们刚才修改了政策设置了密码长度位1与简约了mysql的大小规范。
但是在自己服务器中就不能设置简单密码,如果密码过于简单则会被入侵。

更改远程访问

$ | GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
# 再刷新你的更改记录
$ | FLUSH PRIVILEGES;

新建hive用户

$ | CREATE USER 'hive'@'%' IDENTIFIED BY 'hive';

新建hive的db库

$ | CREATE DATABASE db_hive;

授权给mysql用户hive

$ | GRANT ALL ON *.* TO 'hive'@'%';
# 将权限增删改查给hive
$ | GRANT SELECT ON *.* TO hive@localhost identified by '123456' with geant option;
	(拥有所有的操作权限,也就是管理员)
$ | flush privileges;

下载并配置Hive

1.下载hive
	 下载地址: hive镜像下载
 	 本人选择的是hive-2.3.3 版本,下载的是该目录的apache-hive-2.3.3-bin.tar.gz.

解压hive安装并重命名

$ | tar -zxvf apache-hive-bin.tar.gz
$ | mv hive-2.3.3-bin /usr/local/src/
$ | cd /usr/local/src/
$ | mv hive-2.3.3-bin hive

环境配置

# 添加hive系统环境变量
$ | vim /etc/profile
添加以下内容
$ | export HIVE_HOME=/usr/local/src/hive
$ | export HIVE_CONF_DIR=/usr/local/src/hive/conf
$ | export PATH =$HIVE_HOME/bin:$PATH

使用source命令使其生效:

$ | source /etc/profile

检查hive是否安装成功变量是否生效:

$ | hive --version

hive分布式集群安装 hive 分布式_hive分布式集群安装_05


修改hive的配置参数文件

将hive-default.xml.template重命名为hive-default.xml
然后用vim编辑器新建一个配置文件hive-site.xml 命令如下:

$ | cd /usr/local/src/hive/conf
$ | mv hive-default.xml.template hive-default.xml
$ | vim hive-site.xml

在hive-site.xml中添加如下配置信息:

$ | <configuration>
$ | <property>
$ | <name>javax.jdo.option.ConnectionURL</name>
$ | <value>jdbc:mysql://localhost:3306/hive?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>hive</value>
$ | </property>
$ | </configuration>

然后,按键盘上的“ESC”键退出vim编辑状态,再输入:wq,保存并退出vim编辑器。

这里我们采用MySQL数据库保存Hive的元数据,而不是采用Hive自带的derby来存储元数据。
下载MySQL jdbc包:下载地址

$ | tar -zxvf mysql-connector-java-5.1.40.tar.gz #解压
$ | cp mysql-connector-java-5.1.40/mysql-connector-java-5.1.40-bin.jar /usr/local/src/hive/lib 
# 将mysql的jdbc驱动包拷贝在hive/lib目录下

hive 元数据化并启动

$ | schematool -dbType mysql -initSchema
$ | hive 启动
# 然后在hive中输入命令 查看是否会报错
$ | create database if not exists hive;       #创建数据库
$ | show databases;                           #查看Hive中包含数据库
$ | show databases like 'h.*';                #查看Hive中以h开头数据库
$ | describe databases;                       #查看hive数据库位置等信息
$ | alter database hive set dbproperties;     #为hive设置键值对属性
$ | use hive;                                 #切换到hive数据库下
$ | drop database if exists hive;             #删除不含表的数据库
$ | drop database if exists hive cascade;     #删除数据库和它中的表
$ |	exit;                                      #退出

执行完hive的命令如果没有报错 就说明你的hive(伪分布)已经完成!

Hive分布式配置

分布式和伪分布式的前面的步骤都是一样的,我们这些只需要ssh移动到从节点添加环境变量就可以了

使用scp命令,拷贝hive到从节点中

$ | scp -r hive/ root@s2:/usr/local/src
$ | scp -r hive/ root@s3:/usr/local/src

从节点添加环境变量
参考以前的步骤,在slaves节点上的~/.bashrc文件中添加系统环境变量,并使用source命令使其生效。

启动metastore服务

在使用slaves节点访问hive之前,在master节点中,执行hive--service metastoer & 来启动metastore服务。

hive分布式集群安装 hive 分布式_mysql_06


metastore服务对应的进程为6906 RunJar

hive分布式集群安装 hive 分布式_Hive_07


slaves节点启动hive并执行简单的hive命令

$ | hive
hive>show tables;

就可以发现父节点创建的表,从节点也可以看到。