hive三种安装模式:
- 嵌入模式:使用内嵌的Derby数据库存储元数据,元数据不能共享,是hive默认安装方式,但是一次只能连接一个客户端,适合用于测试,不适合生产环境。
- 本地模式:采用外部数据库存储元数据,该模式不需要单独开启metastore服务,因为本地模式使用的是和hive在同一个进程的Metastore服务。
- 远程模式:采用外部数据库存储元数据,该模式需要单独开启metastore服务,然后每个客户端都在配置文件中配置连接该Metastore服务。远程模式中,Metastore服务和hive运行在不同的进程中。
注:
本地和远程模式:本质上都是将hive默认的元数据存储介质由自带的Derby数据库替换为MySQL数据库,这样无论在任何目录下以任何方式启动hive,只要连接的是同一天hive服务,那么所有节点访问的元数据信息是一致的,从而实现元数据的共享。
Hive安装之嵌入安装:
- 下载Hivea安装包
- 输入命令:bin/hive就进入到hive中了
Hive本地安装
1.安装mysql服务
下载安装mysql
启动mysql服务
下载安装mariadb
启动mariadb服务;
永久启动mariadb服务;
登录mysql服务;
使用mysql;
设置密码;
授予root权限,可以用于远程登录;
退出mysql;
使用密码登录mysql;
2.安装hive
导入hive压缩包(也可以使用rz来上传)
解压到servers
为刚解压的文件改一个简单的名字hive
进入hive;
找到conf目录;
可以看到没有hive-env.sh,所以用临时文件复制一份
打开配置文件
修改配置文件
新建一个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>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456</value>
</property>
</configuration>
hive-site.xml文件中用到了一个数据库驱动文件,所以下面,我们要导入到hive/lib中(也可以用rz,前提是需要首先yum一个包)
将hadoop01中的hive配置复制到hadoop02 和hadoop03中
3.Hive的管理:
首先需要先开启集群
开启hive
开启hive成功会出现如下进程
在hadoop02中进入beeline(也可以在其他节点操作)
连接hadoop01
回车后,输入用户名和密码,可以看到连接成功(成功进入)
接下来的操作就和mysql语句差不多,查看数据库
开启hive后,用sqlyog连接hadoop01的mysql数据库,刷新后会看到,出现一个hive数据库,里面存放的都是元数据表格。
创建数据库
切换数据库,查看表格
4.Hive内部表操作
创建内部表,第二行为使用逗号为分隔符,导入到表格中
可以看到表格创建成功,但是没有数据
将数据放入到itcast数据库中的t_user表格中
再查询表格,就有数据了
删除数据,下面看第二种方法导入数据
使用load data local inpath,指定数据所在的位置,进而加载数据到指定表格中
查看数据的总数,我们可以看到这里用到了map和reduce。把没一行数据为一个key,value为1,reduce再加和,进而统计。
hive中的DBS表放数据库的路径
这里放的是我们创建的表格
5.hive外部表操作
首先新建一些数据
把数据放到分布式文件系统中的/stu下
创建一个外部表,加了关键词external,同样使用逗号为分隔符,文件来自于本地的文件系统下的根目录下的stu下的数据。
我们每执行一个命令,这里就会显示一条,最后可以用ctrl+c退出
这里也可以用ctrl+c退出
思考:如何选择使用内部表或外部表?
如果所有处理都有hive来完成,则使用内部表;
如果需要用hive和外部其他工具处理同一组数据集,则使用外部表;
数据比较大时候用外部表。