学习的搬运工,笔记摘自 实验楼课程
目录
1、实验介绍
实验内容
- Hive 安装与准备
- Hive 的运行模式
- Hive 与mysql数据库的连接
实验知识点
- 配置数据库连接驱动
- 运行模式
- mysql
实验环境
- Hive 1.2.1
- hadoop 2.7.3
- Xfce终端
2、Hive运行模式
与 Hadoop 类似,Hive 也有 3 种运行模式:
1. 内嵌模式
将元数据保存在本地内嵌的 Derby 数据库中,这是使用 Hive 最简单的方式。但是这种方式缺点也比较明显,因为一个内嵌的 Derby 数据库每次只能访问一个数据文件,这也就意味着它不支持多会话连接。
2. 本地模式
这种模式是将元数据保存在本地独立的数据库中(一般是 MySQL),这就可以支持多会话和多用户连接了。
3. 远程模式
此模式应用于 Hive 客户端较多的情况。把 MySQL 数据库独立出来,将元数据保存在远端独立的 MySQL 服务中,避免了在每个客户端都安装 MySQL 服务从而造成冗余浪费的情况。
3、下载安装及配置
首先打开终端切换到hadoop用户下:
su -l hadoop #密码为hadoop
Hive 是基于 Hadoop 文件系统之上的数据仓库。因此,安装Hive之前必须确保 Hadoop 已经成功安装。本次实验,使用Hive 1.2.1版本。Hive 1.2.1 可以在 Hadoop V2.7.x以上环境中工作。
- 下载apache-hive-1.2.1-bin.tar.gz 后,对其进行解压:
tar zxvf apache-hive-1.2.1-bin.tar.gz
配置系统环境变量
- 修改/etc/profile文件。
- 修改 .bashrc 文件
sudo vim /etc/profile
# Hive environment
export HIVE_HOME=/opt/apache-hive-1.2.1-bin
export PATH=$PATH:$HIVE_HOME/bin
注意:个人实验在/etc/profile配置环境信息即可,而在实际生产环境中,运维人员会将配置信息统一写到专门的文件中
Hadoop集群启动
先进入的/opt/hadoop-2.7.3/sbin目录下,再启动hdfs
$ cd /opt/hadoop-2.7.3/sbin
$ hdfs namenode -format #namenode初始化
$ ./start-all.sh # 启动hadoop
验证hdfs是否启动成功
- 输入
jps
查看相关进程是否存在 - 输入
hadoop dfs -fs /
确定能否链接成功
4、本地模式
现在我们替换默认的 Derby 数据库为 MySQL数据库。
(1)下载安装 MySQL
$ sudo apt-get install mysql-server
本实验环境下默认是安装了 MySQL 的,直接启动它:
$ sudo service mysql start
添加 root 用户,创建 hive 数据库:
mysql -u root -p #没有密码直接回车即可
create database hive; #创建hive数据库
grant all on hive.* to 'hive'@'localhost' identified by 'hive'; #创建用户hive
虽然 MySQL 已经默认安装,但我们还需要下载一个 MySQL 的 JDBC 驱动包。这里使用的是 mysql-connector-java-5.1.32-bin.jar
,你需要将其复制到$HIVE_HOME/lib 目录下面:
$ sudo mv /home/shiyanlou/mysql-connector-java-5.1.32-bin.jar /opt/apache-hive-1.2.1-bin/lib/
这里我们提供了 mysql-connector-java-5.1.32.jar
的下载链接,需要的同学可以自行下载:
wget http://labfile.oss.aliyuncs.com/courses/38/mysql-connector-java-5.1.32.rar
(2)修改 hive-site.xml 配置文件
最后,依然是修改 $HIVE_HOME/conf 下的 hive-site.xml 文件,把默认的 Derby 修改为 MySQL :
<property>
<name>javax.jdo.option.ConnectionURL</name>
//所连接的MySQL数据库实例
<value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
//连接的MySQL数据库驱动
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
//连接的MySQL数据库用户名
<value>hive</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
//连接的MySQL数据库密码
<value>hive</value>
</property>
(3)启动 Hive
初始化hive元数据库:
schematool -dbType mysql -initSchema
注意:hive已经初始化,这里仅需要我们启动hive即可。
启动 Hive 的方式如下(需要在实验环境中操作
):
cd /opt/apache-hive-1.2.1-bin/bin
hive
5、内嵌模式
注意:由于实验楼配置的本地模式,这里就不给出内嵌模式的运行截图了,同学们可以自己在本地电脑操作,实验楼环境中不需要进行此操作,只有标明了需要在环境中操作的步骤才在环境中操作
(1)hive-site.xml
$HIVE_HOME/conf 对应的是 Hive 的配置文件路径,类似于之前学习的HBase, 该路径下的 hive-site.xml 是 Hive 工程的配置文件。默认情况下,该文件并不存在,我们需要拷贝它的模版来实现(这里暂时不需要修改,先拷贝):
先切换到对应的目录下操作。
cd /opt/apache-hive-1.2.1-bin/conf/
ls
$ sudo cp hive-default.xml.template hive-site.xml
hive-site.xml 的主要配置有以下,不需要修改:
- hive.metastore.warehouse.dir 该参数指定了 Hive 的数据存储目录,默认位置在 HDFS 上面的 /user/hive/warehouse 路径下。
- hive.exec.scratchdir 该参数指定了 Hive 的数据临时文件目录,默认位置为 HDFS 上面的 /tmp/hive 路径下。
同时我们还要修改 Hive 目录下 /conf/hive-env.sh 文件(请根据自己的实际路径修改),该文件默认也不存在,同样是拷贝它的模版来修改:
cat hive-env.sh
(2)创建必要目录
前面我们看到 hive-site.xml 文件中有两个重要的路径,切换到 hadoop 用户下查看 HDFS (需要先启动 Hadoop)是否有这些路径:
$ hadoop dfs -ls /
没有发现上面提到的路径,因此我们需要自己新建这些目录,并且给它们赋予用户写(W)权限。 注意:这里需要同学们实际操作,新建这些目录
$ hadoop dfs -mkdir /user
$ hadoop dfs -mkdir /user/hive
$ hadoop dfs -mkdir /user/hive/warehouse
$ hadoop dfs -mkdir /tmp
$ hadoop dfs -mkdir /tmp/hive
$ hadoop dfs -chmod 777 /user/hive/warehouse
$ hadoop dfs -chmod 777 /tmp/hive
检查是否新建成功 hadoop dfs -ls /
以及 hadoop dfs -ls /user/hive/
:
(3)修改 io.tmpdir 路径
同时,要修改 hive-site.xml 中所有包含 ${system:java.io.tmpdir}
字段的 value ,可以自己新建一个目录来替换它,例如 /home/hadoop/hive/iotmp
。(以下是一个修改示例,其他的同理)
将
<value>${system:java.io.tmpdir}/${system:user.name}</value>
改成
<value>/home/hadoop/hive/iotmp</value>
并且需要在/home/hadoop/
下建立相应的目录
$ mkdir /home/hadoop/hive
如果不修改这个目录,你很可能会出现如下错误:
(vim下 / 表示搜索,后面跟你的关键词,比如搜索 hello,则为 /hello
, 再回车即可), 同样注意修改写权限。
(4)运行 Hive
前面我们已经提到过,内嵌模式使用默认配置和 Derby 数据库,所以无需其它特别修改直接运行 hive
(确保 Hadoop 已经先启动)。完整步骤如下:
cd ..
cd bin/
schematool -dbType derby -initSchema # 初始化hive的元数据库
hive #启动hive