hive:对数据的处理(客户端)
hive是将类sql(HQL)语句转换成功 mapreduce程序执行的(默认,还可以将hql语句转换为spark程序处理)。
所以hive会将要处理的数据和表、数据库、字段做一个映射(hive的元数据),hive元数据的保存方式就决定了hive的运行、安装模式。
hive的安装使用,hive安装模式:
1. 嵌入模式:hive自带有 Derby 数据库用来存储元数据。Derby数据有两个问题:
a. 同时只允许一个客户端连接
b. Derby数据库属于内存数据库,会在运行的时候在启动目录下生成一个 配置文件,如果下次使用的时候不在原来的目录中启动,就会造成原来创建的数据库、表等内容找不到
2. 本地模式:将hive元数据使用外部的数据库存储。一般在本地安装MySQL,使用mysql来存储hive元数据(MariaDB是MySQL的分支,使用和MySQL类似,安装过程中会更简单)
3. 远程模式:将hive元数据保存在远程服务器上(不在当前电脑上)
虚拟机网络连接
在安装MariaDB的时候,需要虚拟机能够连接外网。
VMware中点击 【编辑】 菜单---》【虚拟网络编辑器】
选中 vmnet8 网卡,点击 【NAT设置】
配置:
默认网关:192.168.137.2
主机端口: 5000
类型:TCP
虚拟机IP:192.168.137.1
虚拟机端口号:50000
在虚拟机中,查看虚拟机的默认网关是否为 192.168.137.2
vim /etc/sysconfig/network-scripts/ifcfg-ens33
查询文件中 `GATEWAY` 的值是否为: 192.168.137.2
如果不是,就修改为默认网关。修改之后,需要重新启动网卡:
service network restart
网卡启动之后,再次通过 ping 8.8.8.8 和 ping www.baidu.com 来测试是否可以连接到外网。
MariaDB的安装:
1. 通过 yum -y install mariadb* 安装mariaDB
2. 安装成功之后,启动mariadb服务:
systemctl start mariadb.service
3. 设置mariadb开机启动
systemctl enable mariadb.service
4. mariadb初始化设置
mysql_secure_installation
初始化设置是,需要注意以下几个地方:
Enter current password for root (enter for none): <------ 直接回车
Set root password? [Y/n] <----- 是否设置root用户的密码 输入 Y
New password: <-------root用户的密码,这里介意大家使用 root
Re-enter new password: <----- 再次输入root用户密码 root
Remove anonymous users? [Y/n] <----- 是否删除匿名用户 直接回车
Disallow root login remotely? [Y/n] <---- 是否禁止root用户远程登录 输入 n
Remove test database and access to it? [Y/n] <----- 是否删除test数据库 直接回车
Reload privilege tables now? [Y/n] <----- 是否重新加载权限 直接回车
5. 登录mariadb测试:
mysql -u root -p
Enter password: <------ 输入root用户密码 root
此时标识mariadb安装成功。
Hive安装:
1. 上传安装包
使用xftp 将hive-2.3.5-bin.tar.gz 上传到 Linux的 /opt 目录下
2. 解压并配置环境变量
进入到 /opt 目录下:
cd /opt
解压hive:
tar -zxf apache-hive-2.3.5-bin.tar.gz -C ./
解压完成之后,会生成一个 apache-hive-2.3.5-bin
解压目录名称较长,重命名为hive-2.3.5:
mv apache-hive-2.3.5-bin hive-2.3.5
环境变量配置,在 /etc/profile.d/my_env.sh文件中添加如下所示的内容:
vim /etc/profile.d/my_env.sh
文件中添加如下所示的内容:
# 配置hive环境变量
export HIVE_HOME=/opt/hive-2.3.5
export PATH=$PATH:$HIVE_HOME/bin
保存退出。执行
source /etc/profile
使当前环境变量配置立即生效。
3. hive配置
hive的配置文件保存在 /opt/hive-2.3.5/conf 目录中,首先进入该配置文件所在目录中:
cd /opt/hive-2.3.5/conf
修改 hive-env.sh 文件:
在配置文件中没有hive-env.sh 文件,有一个 hive-env.sh.template 模板文件,将模板文件拷贝为 hive-env.sh
cp hive-env.sh.template hive-env.sh
打开该配置文件:
vim hive-env.sh
在文件的末尾添加jdk、hadoop的路径:
export JAVA_HOME=/opt/jdk1.8.0_11
export HADOOP_HOME=/opt/hadoop-2.7.3
保存退出。
修改 hive-site.xml 文件:
在配置文件目录中也没有 hive-site.xml,新建该文件:
vim hive-site.xml
然后在该文件中添加如下所示的内容:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!--指定MariaDB(mysql)数据库连接的驱动类、url、用户名、密码 -->
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.cj.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://hadoop:3306/hive?createDatabaseIfNotExist=true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>root</value>
</property>
<!--指定hive的默认工作空间:HDFS -->
<property>
<name>hive.metastore.warehouse.dir</name>
<value>hdfs://hadoop:9000/hive/warehouse</value>
</property>
</configuration>
保存退出。
导入MySQL驱动包:将MySQL的驱动 8.x 导入hive的lib 目录中(保存hive运行时需要所有jar)
4. 初始化hive元数据库
schematool -dbType mysql -initSchema
初始化成功之后,会显示:
schemaTool completed
如果初始化过程中,出现错误,主要去检查MySQL连接中的驱动类、url、用户名、密码和驱动包是否导入。
5. 启动、测试、暂停
因为hive会将hql语句转换为 mapreduce程序执行,此外在配置,将hive的默认工作空间配置到hdfs中,所以可以理解hive的运行需要hadoop的支持。
所以在启动hive之前需要先启动hadoop(hdfs+YARN)
start-all.sh 启动hadoop
hadoop启动成功之后,通过 hive 指令启动hive。
hive> 表示hive启动成功,通过jps指令查询时,会出现一个runjar进程,这就是hive的进程(但是需要注意一点,runjar进程不表示一定就是hive进程)。
此时就可以在命令行通过 hql 语句 进行操作了。
测试:
测试数据:
在Linux的root目录下,新建stu.txt文件,文件内容如下:
1,zs,12,90
2,ls,13,99
3,ww,14,89
4,zl,15,92
现在hive中创建对应数据库:test
hive> create database test;
在test数据库下,创建对应的stu表:
hive> use test;
hive> create table stu(
> id int,
> name string,
> age int,
> score int)row format delimited fields terminated by ',';
将stu.txt文件,导入到test数据库下的stu表中。
hive> load data local inpath '/root/stu.txt' into table test.stu;
Loading data to table test.stu
OK
查询当前表中又多少条记录:
select count(1) from test.stu;
该语句会触发mapreducec任务。