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和hadoop的关系
备注:在安装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
启动
$ | systemctl start mysqld.service
配置的mysql是有初始密码的需要获得在在数据库里更改密码
查看mysql初始密码
$ | grep "password" /var/log/mysqld.log
使用初始密码登录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-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
服务。
metastore
服务对应的进程为6906 RunJar
:
slaves节点启动hive并执行简单的hive命令
$ | hive
hive>show tables;
就可以发现父节点创建的表,从节点也可以看到。