Hive 的安装配置,比起 hadoop 来简单了许多。
参考这篇可以得到更多细节。
今天要做的事情,有两件:
1. 在 Mac 上安装 MySQL ;
2. 在 Mac 上安装Hive 2.2.0, 并且以安装好的 MySQL 做为 Hive 的 MetaData Store
MySQL 的安装配置:
在 Mac 上安装 MySQL, 其实在前期已经做好了。直接使用 MySQL Workbench 就能访问使用了。
目前的问题集中在,安装好的 MySQL 是以 Root 登录使用的。我们怎么给 Hive 分配一个可以单独使用的账户,方便配置 Hive.
1. 增加一个 MySQL 的账户:
和 Oracle 的语法一样,Create User 'HiveAdmin'@'localhost' Identified by 'HiveAdmin' ;
2. 为 HiveAdmin 添加一个专门使用的数据库 HiveStore
HiveStore 必须是由 Root 权限创建,Create Database HiveStore
由 Root 将使用 HiveStore 的权限赋给 HiveAdmin :
grant all on HiveStore.* To 'HiveAdmin'@'localhost' ;
Flush Privileges ;
在Mac 上配置 Hive 服务:
0. 在正式的配置 Hive 服务之前,需要做必要的环境设置。
环境变量配置:
Hive 必须要有分布式的存储环境,我们这里用 HDFS 作为 Hive 的分布式环境。
由于我的 Hive 与 Hadoop 都安装在同一台 Mac 笔记本上,Hadoop_Home 已经配置好了, Java_Home也配置好了,只需要配置 Hive_Home 环境变量即可。
打开 ~/.profile, 输入:
HIVE_HOME =/opt/hive/apache-hive-2.2.0-bin
EXPORT HIVE_HOME
当然如果想要直接输入 Hive 就进入 Hive 环境,还需要配置环境变量 $PATH 包括 $HIVE_HOME/bin 目录:
$PATH=$PATH:$HIVE_HOME/bin
EXPORT $PATH
Hive 对应的 HDFS 文件目录创建:
Hive 的存储文件格式,可以选择文本文件形式,即用文本程序,比如 vi 就可以看到 Hive 表具体的内容,这种格式的文件,是直接存储在 HDFS 的某一个文件目录下面的, 从 HDFS 整体来看,虽然在 namenode 上,Hive 表是存储了一个文件夹,这文件夹下面都是组成表数据的单个文件,但是具体到 data node 上,则是在对应的表文件夹下面,存储了很多分块的小文件,这些小文件依然可用 VI 即时查看。
因此我们要创建一个文件夹,专门用来存储我们的 Hive 对应的总目录,表示这个目录下面的所有文件,都是属于一个 Hive 库的。Hive 数据库,表,分区,在 HDFS 文件系统上来看,就是目录对于文件的文件的关系。一个 Hive 数据库对应一个 HDFS 文件目录,这个 Hive 数据库下面的表,就是对应了 HDFS Hive 库目录下面的文件夹目录。
我创建的 Hadoop HDFS 的基本结构是:
/USER/Lewis
在该目录下面,我还需要搭建一个目录,专门用来存储 Hive 的库对象
/USER/Lewis/Hive/WareHouse
给该目录加上 group 的写入权限:
hdfs dfs -chmod g+w /user/lewis/hive/warehouse
还需要增加一个 /tmp 目录,暂不明了要做什么,等接下来清楚了,再来讲这个作用:
HDFS dfs -mkdir /tmp
HDFS dfs -chmod g+w /tmp
Mac 上的怪现象:
每当我的 Hadoop 没有使用 stop-dfs.sh 正常关掉,在下一次重新使用 start-dfs.sh 启动的时候,都会出现 namenode 连不上的 情况,因此都要重复一遍新建 namenode 的情况:
0.1 删除namenode 存储的目录及其子目录:
rm /tmp/hadoop-lewis/dfs
0.2 重新格式化 namenode :
$:> HDFS namenode -format
0.3 启动 HDFS :
$:> start-dfs.sh
0.4 访问本机 HDFS Name node web 入口:
http://localhost:50070
1. 配置 Hive Configuration 文件:
在这一步,我会使用到上面安装好的 MySQL, Hadoop, 以及对应的 HDFS Hive 总目录
而这些使用,就是通过 hive-site.xml ( hive configuration file ) 来实现的:
hive.metastore.warehouse.dir
/user/lewis/hive/warehouse
HADOOP location for Hive Warehouse
hive.metastore.local
false
if derby used, true here; if other RDBMS used for production,false here
javax.jdo.option.ConnectionURL jdbc:mysql:/localhost:3306/HiveStore?characterEncoding=UTF-8
javax.jdo.option.ConnectionDriverName com.mysql.jdbc.Driver
javax.jdo.option.ConnectionUserName HiveAdmin
javax.jdo.option.ConnectionPassword HiveAdmin
2 开启 Hive 服务
2.1 Schema 初始化:
Hive 的存储虽然都是在 HDFS 上,但是 Hive 数据仓库对象的定义,都是存储在 MySQL 的 HiveStore 数据库里的。
要使用 Hive 的数据仓库功能,我们必须现在 HiveStore 创建一些基础元数据,用来初始化 Hive.
SchemaTool 就是这么一个工具。
$ $HIVE_HOME/bin/schematool -dbType -initSchema
将这里的改成 mysql 即可:
$>schematool -dbType mysql -initSchema
Hive 不带 MySQL 的 JDBC 驱动,因此要将正确的 MySQL JDBC 驱动放到 $HIVE_HOME/lib下面
2.2 创建第一个 Hive 表
Hive> Create Table Users( userId int, userName varchar(200))
row format delimited
fields terminated by ',' ;
将本地的数据,加载到 Hive 的表里面去
本地的表,一定是符合 Hive 表格式文件的要求:用 , (逗号) 来分割字段:
1,Alex
2,Ken
3,Ford
谢谢阅读与分享,欢迎观众【有关SQL】
领取专属 10元无门槛券
私享最新 技术干货