【向Linux迁移记录】基于Hadoop集群的Hive安装与配置详解

基于Hadoop集群的Hive安装配置

Hive可以安装在任一节点或集群之外,我这里是计划装在Master节点上。
【向Linux迁移记录】基于Hadoop集群的Hive安装与配置详解
其次Hive也就是在hadoop上加了一层SQL接口,便于通过简单的SQL语言翻译成MapReduce作业。而hdfs的特性是可追加不可修改,但数据库表是可以修改删除的,所以Hive的所存储的数据应当分成两部分,表的元数据外部存储以便修改,表中数据存储在hdfs上即可。
hive是默认将元数据保存在本地内嵌的 Derby 数据库中,但Derby不支持多会话连接,所以我这里选择mysql来存储metadata元数据

准备

在线安装并配置MySQL

  1. 上传MySQL在线安装源的配置文件

用root账号登录master节点
将mysql-community.repo 文件上传到 /etc/yum.repos.d/ 目录
将c 文件上传到 /etc/pki/rpm-gpg/ 目录

这两文件是指定mysql的yum源,centos系统盘里是没有的。我放了个链接在最后

# Enable to use MySQL 5.6
[mysql56-community]
name=MySQL 5.6 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.6-community/el/7/$basearch/
enabled=1           #enabled=1表明下载使用MySQL5.6,如果要用5.7的话把下面的enabled改为1
gpgcheck=1
gpgkey=file:/etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

# Note: MySQL 5.7 is currently in development. For use at your own risk.
# Please read with sub pages: https://dev.mysql.com/doc/relnotes/mysql/5.7/en/
[mysql57-community-dmr]
name=MySQL 5.7 Community Server Development Milestone Release
baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/$basearch/
enabled=0
gpgcheck=1
gpgkey=file:/etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
  1. 更新yum源并安装mysql server(默认同时会安装mysql client)
# yum repolist
# yum install mysql-server
  1. 查看MySQL各组件是否成功安装
# rpm -qa | grep mysql

【向Linux迁移记录】基于Hadoop集群的Hive安装与配置详解

  1. 启动MySQL Server并查看其状态
# systemctl start mysqld
# systemctl status mysqld

【向Linux迁移记录】基于Hadoop集群的Hive安装与配置详解

设置开机启动mysql服务:systemctl enable mysqld
关闭开机自启动:systemctl diable mysqld
停止MySQL服务:systemctl stop mysqld

  1. 查看MySQL版本
# mysql -V
  1. 连接MySQL,默认root密码为空
# mysql -u root 
mysql> 

为root用户设置密码:
mysql>set password for ‘root’@‘localhost’=password(‘newPasswd’);

  1. 查看数据库
mysql> show databases; 
  1. 创建hive元数据数据库(metastore)
mysql> create database hive; 
  1. 创建用户hive,密码是123456
mysql> CREATE USER 'hive'@'%' IDENTIFIED BY '123456';

注意:删除用户是DROP USER命令 ,%代表可以在任一台主机(IP地址)上使用hive用户

  1. 授权用户hadoop拥有数据库hive的所有权限
mysql> GRANT ALL PRIVILEGES ON hive.* TO 'hive'@'%' WITH GRANT OPTION;
  1. 查看新建的MySQL用户(数据库名:mysql,表名:user)
mysql> select host,user,password from mysql.user;
  1. 删除空用户记录,如果没做这一步,新建的hive用户将无法登录,后续无法启动hive客户端
mysql> delete from mysql.user where user='';
  1. 刷新系统授权表(不用重启mysql服务)
mysql> flush privileges; 
  1. 测试hive用户登录
$ mysql -u hive -p
Enter password:123456

安装Hive

  • 切换hadoop用户登录(我先前centos创建的用户hadoop)
  • 上传下载的源码文件并解压到用户目录下 tar -zxvf hive-1.1.0-cdh5.12.1.tar.gz ~
  • 在.bash_profile文件中添加hive环境变量
export HIVE_HOME=/home/hadoop/hive-1.1.0-cdh5.12.1
export PATH=$HIVE_HOME/bin:$PATH

并使之生效 source .bash_profile

  • 编辑$HIVE_HOME/conf/hive-env.sh文件,在末尾添加HADOOP_HOME变量
$ cd ​$HIVE_HOME/conf
$ cp hive-env.sh.template hive-env.sh	(默认不存在,可从模板文件复制)
​$ vi hive-env.sh
# 添加HADOOP_HOME=/home/hadoop/hadoop-2.6.0-cdh5.12.1

  • 同样在conf目录下新建hive-site.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
​        # 下面几步指定使用创建的hive用户访问mysql
​        <property>
​                <name>javax.jdo.option.ConnectionDriverName</name>
​                <value>com.mysql.jdbc.Driver</value>
​        </property>
​        <property>
​                <name>javax.jdo.option.ConnectionURL</name>
​                <value>jdbc:mysql://192.168.17.10:3306/hive</value>
​        </property>
​        <property>
​                <name>javax.jdo.option.ConnectionUserName</name>
​                <value>hive</value>
​        </property>
​        <property>
​                <name>javax.jdo.option.ConnectionPassword</name>
​                <value>123456</value>
​        </property>
​	<property>
​		<name>hive.metastore.warehouse.dir</name> #指定仓库目录,在hdfs上
​		<value>/hive/warehouse</value>
​	</property>
​	<property>
​		<name>hive.exec.scratchdir</name>
​		<value>/hive/tmp </value>
​	</property>
​        <property>
​                <name>hive.metastore.schema.verification</name>
​                <value>false</value>
​        </property>
</configuration>

如配置文件中指明了hive仓库在hdfs上,所以要创建/hive/warehouse和/hive/tmp目录

  • 启动hdfs服务并创建所述目录
start-dfs.sh #起hdfs
hdfs dfs -mkdir -p /hive/warehouse /hive/tmp #创建多级目录
hdfs dfs -ls -R /hive #查看
  • 将先前下载的mysql驱动上传并解压到$HIVE_HOME/lib目录下
  • 启动hive,前提确保hadoop集群启动了,命令行输入hive

hive简单使用

和mysql使用差不多的,类似SQL语句的HSQL

  • 启动hive:hive
  • 退出:quit;
  • 查看数据库和表,同sql语句 show databases,show tables from xxx
  • 创建表,我这里随便建了个create table user(name string,age int,id string);
  • 查看表结构 desc user;
  • 查看表详细信息 desc fromatted user;
  • 插入数据 insert into user values('hadoop',10,'0x001'),('hbase',6,'0x002'),('josonlee',20,'0x003');

【向Linux迁移记录】基于Hadoop集群的Hive安装与配置详解

  • 查询select * from user;

【向Linux迁移记录】基于Hadoop集群的Hive安装与配置详解

  • 创建数据库
hive> create database testdb;		//在默认位置创建DB(配置中指定的/hive/warehouse/)
hive> create database testdb location ‘/hive/testdb’		//在HDFS指定目录下创建DB
  • 查看数据库结构 desc database testdb;
  • 切换数据库 use testdb;
  • 删除数据库
hive> drop database testdb; 	//只能删除空数据库(数据库中没表)
hive> drop database mydb cascade;	          //删除非空数据库

Hive就是这样简单搭建成功

可以再去MySQL下看看到底改变了存储了什么信息,如图
【向Linux迁移记录】基于Hadoop集群的Hive安装与配置详解

其中上面创建的user表的字段信息存储在COLUMN_V2里,如图
【向Linux迁移记录】基于Hadoop集群的Hive安装与配置详解

其余表对应Hive数据库相关信息如下:可参考文章

一、存储Hive版本的元数据表(VERSION)
二、Hive数据库相关的元数据表(DBS、DATABASE_PARAMS)
​    1、DBS
​    2、DATABASE_PARAMS
三、Hive表和视图相关的元数据表
​    1、TBLS
​    2、TABLE_PARAMS
​    3、TBL_PRIVS
四、Hive文件存储信息相关的元数据表
​    1、SDS
​    2、SD_PARAMS
​    3、SERDES
​    4、SERDE_PARAMS
五、Hive表字段相关的元数据表
​    1、COLUMNS_V2
六、Hive表分区相关的元数据表
​    1、PARTITIONS
​    2、PARTITION_KEYS
​    3、PARTITION_KEY_VALS
​    4、PARTITION_PARAMS


前文所提及的资源:https://download.****.net/download/lzw2016/10936935
你要是有积分多的话可以下载上面的,没有的话见:链接: https://pan.baidu.com/s/1n6lkOTBAenYJLvh5TcRSdw 提取码: iabd

其次,推荐下我整理的一个项目吧,这一系列文章也可以在这里找到

学习记录的一些笔记,以及所看得一些电子书eBooks、视频资源和平常收纳的一些自己认为比较好的博客、网站、工具,https://github.com/josonle/Coding-Now