数据库 Hive Hive部署 urcuteimmehinge 2021-12-21 2024-06-06 概述 Hive起初是由Facebook开源的一款基于Hadoop的用于统计海量结构化数据的一个数据仓库,可以将结构化的数据文件映射为一张数据库表, 并提供类 SQL 查询功能, hive 底层是将 SQL 语句转换为 MapReduce 任务运行。Hive一开始的出发点是为了方便非Java开发人员对HDFS上的数据做,Hive的特点:扩展性,Hive 可以自由的扩展集群的规模,而且一般情况下不需要重启服;延展性, Hive 支持自定义函数,用户可以根据自己的需求来实现自己的函数; 容错 ,良好的容错性,可以保障即使有节点出现问题, SQL 语句仍可完成执 。本实验将会手把手带你从零搭建起一个Hive的开发环境,更全面的了解认识数据仓库的定义以及ETL数据处理方式。
环境 CentOS7
流程
官网 :**Hive **
**用户接口主要有三个:CLI,Client 和 WUI。其中最常用的是CLI,Cli启动的时候,会同时启动一个Hive副本。Client是Hive的客户端,用户连接至Hive Server。在启动 Client模式的时候,需要指出Hive Server所在节点,并且在该节点启动Hive Server。 WUI是通过浏览器访问Hive。 **
**Hive将元数据存储在数据库中,如mysql、derby。Hive中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。 **
**解释器、编译器、优化器完成HQL查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在HDFS中,并在随后有MapReduce调用执行。 **
Hive与Hadoop的关系
Hive处理的数据实际存放再HDFS中
Hive分析数据的底层实现还是MapReduce
Hive调度资源时,用的是Yarn框架
再服务器中运行Hive之前需要群起HDFS和YARN
MySQL准备 Hive需要与MySQL进行连接,保持数据的持久化
创建hive用户与数据库metastore
1 2 create user hive@'%' identified by '密码' ;create database metastore;
](https://imgse.com/i/pCrLrYd )
hive用户权限设置
1 2 grant all on * .* to hive@'%' ; / / 全部权限flush privileges; / / 刷新
配置Hive与MySQL的连接
将mysql-connector-java-xxx.jar包复制到hive源目录lib
1 cp mysql-connector-java-5.1.46-bin.jar /opt/hive-1.2.2/lib/
部署与配置 部署 Hive本身使用的是Java语言编写,因此它的运行环境需要Java环境支持,那么我们在之前的Hadoop实验中已经安装配置过Java的环境变量,所以此步骤可以略过,直接进行Hive的配置。
可以到清华镜像下载: Hive1.1.2下载 进行下载然后解压到相关指定目录,进行简单的配置即可使用。解压至/opt/,版本选择的是1.1.2版本,对应Hadoop2.x.y版本。**Hadoop,Hive版本对应 **。
提前启动Hadoop相关服务
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 sbin/hadoop-daemon.sh start namenode sbin/hadoop-daemon.sh start datanode sbin/hadoop-daemon.sh start resourcemanager sbin/hadoop-daemon.sh start nodemanager jps
开头提到了Hive与Hadoop的关系,底层的存储是依赖于HDFS的,所以我们需要现在HDFS文件系统上新建几个子目录以便于存储Hive的相关数据文件。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 cd $HADOOP_HOME bin/hdfs dfs -mkdir -p /user/hive/warehouse bin/hdfs dfs -mkdir /user/hive/tmp bin/hdfs dfs -mkdir /user/hive/logs bin/hdfs dfs -ls —R /
打开浏览器输入IP地址:50070也能查看
为新建的目录添加文件权限,可以让系统中的同个用户组的多个用户都可以对于HDFS上的数据文件进行操作。
1 2 3 bin/hdfs dfs -chmod g+w /user/hive/warehouse bin/hdfs dfs -chmod -R 777 /user/hive/tmp bin/hdfs dfs -chmod g+w /user/hive/logs
创建hive文档目录和日志目录
1 2 cd /opt/hive-1.2.2mkdir logs
配置 配置hive-env.sh
先移动至hive主目录下,找到conf子目录进入,可以看到conf目录里面有四个文件,我们找到hive-env.sh.template,文件后缀有.template表示该文件还未生效,也就是系统是不会读取的,所以我们需要先重命名一下该文件。
1 2 3 cd /opt/hive-1.2.2/confmv hive-env.sh.template hive-env.shvim hive-env.sh
两个参数的含义是在hive启动的时候,需要读取Hadoop和hive自身的配置信息,所以需要在文件中添加Hadoop和hive所在的绝对路径
1 2 3 4 HADOOP_HOME=/opt/hadoop-2.6.5 export HIVE_CONF_DIR=/opt/hive-1.2.2/conf
配置hive-site.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 <?xml version="1.0" encoding="UTF-8" standalone="no" ?> <configuration > <property > <name > hive.exec.scratchdir</name > <value > /user/hive/tmp</value > </property > <property > <name > hive.metastore.warehouse.dir</name > <value > /user/hive/warehouse</value > </property > <property > <name > hive.cli.print.header</name > <value > true</value > </property > <property > <name > hive.cli.print.current.db</name > <value > true</value > </property > <property > <name > hive.querylog.location</name > <value > /user/hive/logs</value > </property > <property > <name > javax.jdo.option.ConnectionURL</name > <value > jdbc:mysql://ip地址(主机名):3306/metastore(数据库名)?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=UTF-8;useSSL=false</value > </property > <property > <name > javax.jdo.option.ConnectionDriverName</name > <value > com.mysql.jdbc.Driver</value > <--> 有些高版本的驱动需要在改成com.mysql.cj.jdbc.Driver </--> </property > <property > <name > javax.jdo.option.ConnectionUserName</name > <value > hive</value > </property > <property > <name > javax.jdo.option.ConnectionPassword</name > <value > 密码</value > </property > <property > <name > hive.server2.thrift.port</name > <value > 10000</value > </property > <property > <name > hive.server2.thrift.bind.host</name > <value > 主机名(IP地址)</value > </property > </configuration >
配置运行日志信息配置
1 2 cp hive-log4j.properties.template hive-log4j.propertiesvim hive-log4j.properties
配置环境变量
1 2 3 # set HIVE export HIVE_HOME=/opt/hive-1.2.2 export PATH=$PATH:$HIVE_HOME/bin
1 2 3 4 source /etc/profilehive --version
初始化hive 1 2 3 ./bin/schematool -dbType mysql -initSchema
MySQL验证
Hive基本操作
进入Hive交互界面
查看数据库
创建数据库
1 2 3 4 5 6 #格式: create database if not exists 数据库名称; #含义: 判断如果不存在,就创建 create database if not exists db_test01;# 选择数据库 use db_test01;
创建数据表
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #格式 #create table 表名( #字段名 类型, #字段名 类型, #... #)row format delimited fields terminated by '\t' ; # 含义1 :create table 创建一个指定名字的表。如果有相同名的表已经存在,则抛出异常; #可以用if not exists 选项来忽略这个异常 # 含义2 :row format delimited代表一行是一条数据,是自己创建的全部字段和文件的字段对应, #一行对应一条记录。是自己创建的全部字段和文件的字段对应,一行对应一条记录. # 含义3 :fields terminated by '\t' ;代表一行记录中的各个字段以什么隔开,方便创建的数据 #字段对应文件的一条记录的字段。我们这里选择的是\t制表符分割。 create table student( num int , name string )row format delimited fields terminated by '\t' ; # 查看表 show tables;
加载数据到数据表中
1 2 3 #格式: load data local inpath '本地文件的绝对路径' into table 数据表名称 ; #含义:这是Hive导入数据的其中一种方式,从本地文件系统中将数据文件复制到Hive的表中 load data local inpath '/home/amsk/test/hive-test.txt' into table student;
查询student数据表的数据
1 2 3 #格式select * from 数据表名称; #查询该数据表中的所有字段数据 select * from student;