【向Linux迁移记录】基于Hadoop集群的Hive安装与配置详解
基于Hadoop集群的Hive安装配置
Hive可以安装在任一节点或集群之外,我这里是计划装在Master节点上。
其次Hive也就是在hadoop上加了一层SQL接口,便于通过简单的SQL语言翻译成MapReduce作业。而hdfs的特性是可追加不可修改,但数据库表是可以修改删除的,所以Hive的所存储的数据应当分成两部分,表的元数据外部存储以便修改,表中数据存储在hdfs上即可。
hive是默认将元数据保存在本地内嵌的 Derby 数据库中,但Derby不支持多会话连接,所以我这里选择mysql来存储metadata元数据
准备
- Hive CDH发行版本(http://archive-primary.cloudera.com/cdh5/cdh/5/ ),为了和Hadoop、HBase、flume等版本对应,这里限定使用cdh5.12.1结尾的hive-1.1.0-cdh5.12.1.tar.gz
- 下载mysql驱动(https://dev.mysql.com/downloads/connector/j/ ),文末会放一份我上传的
在线安装并配置MySQL
- 上传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
- 更新yum源并安装mysql server(默认同时会安装mysql client)
# yum repolist
# yum install mysql-server
- 查看MySQL各组件是否成功安装
# rpm -qa | grep mysql
- 启动MySQL Server并查看其状态
# systemctl start mysqld
# systemctl status mysqld
设置开机启动mysql服务:systemctl enable mysqld
关闭开机自启动:systemctl diable mysqld
停止MySQL服务:systemctl stop mysqld
- 查看MySQL版本
# mysql -V
- 连接MySQL,默认root密码为空
# mysql -u root
mysql>
为root用户设置密码:
mysql>set password for ‘root’@‘localhost’=password(‘newPasswd’);
- 查看数据库
mysql> show databases;
- 创建hive元数据数据库(metastore)
mysql> create database hive;
- 创建用户hive,密码是123456
mysql> CREATE USER 'hive'@'%' IDENTIFIED BY '123456';
注意:删除用户是DROP USER命令 ,%代表可以在任一台主机(IP地址)上使用hive用户
- 授权用户hadoop拥有数据库hive的所有权限
mysql> GRANT ALL PRIVILEGES ON hive.* TO 'hive'@'%' WITH GRANT OPTION;
- 查看新建的MySQL用户(数据库名:mysql,表名:user)
mysql> select host,user,password from mysql.user;
- 删除空用户记录,如果没做这一步,新建的hive用户将无法登录,后续无法启动hive客户端
mysql> delete from mysql.user where user='';
- 刷新系统授权表(不用重启mysql服务)
mysql> flush privileges;
- 测试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');
- 查询select * from user;
- 创建数据库
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下看看到底改变了存储了什么信息,如图
其中上面创建的user表的字段信息存储在COLUMN_V2里,如图
其余表对应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