版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Notzuonotdied/article/details/82796238
前言
Hive是Hadoop中的一个重要子项目,它利用的是MapReduce编程技术,实现了部分SQL语句,提供了类SQL的编程接口。Hive的出现极大地推进了Hadoop在数据仓库方面的发展。
- 大数据 基础概念
- 大数据 Centos基础
- 大数据 Shell基础
- 大数据 ZooKeeper
- 大数据 Hadoop介绍、配置与使用
- 大数据 Hadoop之HDFS
- 大数据 MapReduce
- 大数据 Hive
- 大数据 Yarn
- 大数据 MapReduce使用
- 大数据 Hadoop高可用HA
Hive 特点
- 适用于批处理系统,任务是较高延迟的。
- 不提供数据排序和查询Cache的功能。
- 不提供在线事务处理。
- 不提供实时的查询和记录级的更新。
- 可以处理不变的大规模的数据集,如网络日志等批量任务。
- 具备可扩展性,基于Hadoop平台可以自动适应机器数目和用户定义的函数库。
- 可延展性,结合MapReduce和用户定义的函数库。
- 良好的容错性
- 低约束的数据输入格式。
Hive 数据存放
Hive
数据在HDFS
的warehouse
目录下,一个表对应一个子目录。本地的/tmp
目录存放日志和执行计划。
Hive 表
类型 | 说明 |
---|---|
内部表 | 创建内部表时,会将数据移动到数据仓库指向的路径;在删除表的时候,内部表的元数据和数据会被一起删除。 |
外部表 | 创建外部表,仅记录数据所在的路径,不对数据的位置做任何改变;在删除表的时候,外部表只删除元数据,不删除数据。 |
- 外部表相对来说更加安全些,数据组织也更加灵活,方便共享源数据。
Hive配置安装
环境:Centos 7
由于Hive
的元数据可能要面临不断地更新、修改和读取操作,所以它显然不适合使用Hadoop
文件系统进行存储。目前Hive
将元数据存储在RDBMS中,比如存储在MySQL中。
MySQL配置安装
- 任选Hadoop中的一个节点安装,我选择的是我的
Node2
节点。 - 安装需要的依赖:
yum -y install perl perl-devel
yum -y install libaio-devel
- 下载:
wget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.33-linux-glibc2.5-x86_64.tar.gz
- 解压:
tar -zxvf mysql-5.6.33-linux-glibc2.5-x86_64.tar.gz
- 添加用户组:
groupadd mysql
- 添加用户
mysql
到用户组mysql
:useradd -g mysql mysql
- 移动
mysql
:cd /usr/local/mysql/
- 创建数据存放目录:
mkdir ./data/mysql
- 修改所属用户组:
chown -R mysql:mysql ./
- 修改数据目录:
./scripts/mysql_install_db --user=mysql --datadir=/usr/local/mysql/data/mysql
- 复制启动脚本:
cp support-files/mysql.server /etc/init.d/mysqld
- 授予执行权限:
chmod 755 /etc/init.d/mysqld
- 复制
mysql
的配置文件:cp support-files/my-default.cnf /etc/my.cnf
- 修改启动脚本:
vim /etc/init.d/mysqld
- 找到
basedir
、datadir
并修改: basedir=/usr/local/mysql/
datadir=/usr/local/mysql/data/mysql
- 找到
- 启动
mysql
:service mysqld start
- 关闭
mysql
:service mysqld stop
mysql
状态:service mysqld status
- 修改密码:
mysqladmin -u root password "newpwd"
- 进入
MySQL
命令行:./bin/mysql -uroot
- 加入环境变量:
vim /etc/profile
export PATH=$PATH:/usr/local/mysql/bin
source /etc/profile
授权
- 授权:
*.*
:所有库下的所有表。%
:任何IP地址或主机都可以连接。
- 启动
mysql
的命令行:/bin/mysql -uroot
,在命令行中输入一下内容:GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
FLUSH PRIVILEGES;
安装出现的错误
- sqlyog连接时,报1130错误,是由于没有给远程连接的用户权限问题。
- 解决1:更改 ‘mysql’数据库‘user’表‘host’项,从‘localhost’改成‘%’。
use mysql;
select 'host' from user where user='root';
update user set host = '%' where user ='root';
flush privileges;
- 解决2:直接授权
GRANT ALL PRIVILEGES ON *.* TO ‘root’@'%’ IDENTIFIED BY ‘youpassword’ WITH GRANT OPTION;
- 解决1:更改 ‘mysql’数据库‘user’表‘host’项,从‘localhost’改成‘%’。
安装Hive
- 下载:下载页面
- 本文使用的
Hive
的版本是1.2.2
wget http://mirror.bit.edu.cn/apache/hive/hive-1.2.2/apache-hive-1.2.2-bin.tar.gz
- 本文使用的
- 解压:
tar -zxvf apache-hive-1.2.2-bin.tar.gz
- 修改配置文件请参照下一小节脚本配置。
- 启动方式:
bin/hive
脚本配置
在Hive
的conf
目录下增加脚本hive-site.xml
,向其中写入一下内容:
javax.jdo.option.ConnectionURL
- 这里的配置需要自行修改
node2
的值为mysql
安装的节点的IP
地址。
- 这里的配置需要自行修改
javax.jdo.option.ConnectionUserName
mysql
数据库的用户名,如果是按照上述配置就不用修改。
javax.jdo.option.ConnectionPassword
-mysql
数据库的登录密码,如果是按照上述配置就不用修改。
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://node2:3306/hive?createDatabaseIfNotExist=true</value>
<description>JDBC connect string for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
<description>Driver class name for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
<description>username to use against metastore database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>root</value>
<description>password to use against metastore database</description>
</property>
</configuration>
可能出现的错误
The specified datastore driver ("com.mysql.jdbc.Driver") was not found in the CLASSPATH.
——缺少JDBC驱动。- 下载:
wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.47.tar.gz
- 解压:
tar -zxvf mysql-connector-java-5.1.47.tar.gz
- 将其中的
*.jar
移动到Hive
的lib
目录下mv *.jar hive/lib
。
- 下载:
Exception in thread "main" java.lang.IncompatibleClassChangeError: Found class jline.Terminal, but interface was expected
- 问题分析:Hadoop 2.6版本的
lib
中的Jline
版本和Hive 1.2.2版本的lib
下的Jline
版本不一致。 - 解决:删除所有Hadoop下的
lib
下的Jline
,替换为Hive的lib
下的Jline
。
- 问题分析:Hadoop 2.6版本的
Mysql配置成功
当启动完毕Hive
之后,可以去Mysql
中查看Hive
数据库是否创建了表。如果提示如下,则安装成功了。
mysql> use hive;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables;
+---------------------------+
| Tables_in_hive |
+---------------------------+
| BUCKETING_COLS |
| CDS |
| COLUMNS_V2 |
| DATABASE_PARAMS |
| DBS |
| FUNCS |
| FUNC_RU |
| GLOBAL_PRIVS |
| PARTITIONS |
| PARTITION_KEYS |
| PARTITION_KEY_VALS |
| PARTITION_PARAMS |
| PART_COL_STATS |
| ROLES |
| SDS |
| SD_PARAMS |
| SEQUENCE_TABLE |
| SERDES |
| SERDE_PARAMS |
| SKEWED_COL_NAMES |
| SKEWED_COL_VALUE_LOC_MAP |
| SKEWED_STRING_LIST |
| SKEWED_STRING_LIST_VALUES |
| SKEWED_VALUES |
| SORT_COLS |
| TABLE_PARAMS |
| TAB_COL_STATS |
| TBLS |
| VERSION |
+---------------------------+
29 rows in set (0.00 sec)
Hive 使用
Hive
bin/hive
Thrift
- 服务端启动:
- 启动为前台:
bin/hiveserver2
- 启动为后台:
nohup bin/hiveserver2 1>/var/log/hiveserver.log 2>/var/log/hiveserver.err &
- 启动为前台:
- 客户端启动:
- 启动客户端
bin/beeline
,命令行中输入以下命令: !connect jdbc:hive2://localhost:10000
- 启动客户端
Hive学习资料
网址 | 地址 |
---|---|
Hive的Wiki页面 | http://wiki.apache.org/hadoop/Hive |
Hive入门指南 | http://wiki.apache.org/hadoop/Hive/GettingStarted |
HQL查询语言指南 | http://wiki.apache.org/hadoop/Hive/HiveQL |
演示文稿 | http://wiki.apache.org/hadoop/Hive/Presentations |