hive的安装和使用
概述
由FaceBook开源用于解决海量结构化日志的数据统计工具。
hive是基于Hadoop的一个数据仓库工具,用来进行数据提取、转化、加载,这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。hive数据仓库工具能将结构化的数据文件映射为一张数据库表,并提供SQL查询功能,能将SQL语句转变成MapReduce任务来执行。Hive的优点是学习成本低,可以通过类似SQL语句实现快速MapReduce统计,使MapReduce变得更加简单,而不必开发专门的MapReduce应用程序。hive是十分适合数据仓库的统计分析和Windows注册表文件。
安装
- HDFS和MR就绪
- 需要安装Mysql服务
[root@HadoopNode00 ~]# yum install -y mysql-server
[root@HadoopNode00 ~]# mysqladmin -u root password 'root'
[root@HadoopNode00 ~]# mysql -u root -p1234
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.1.73 Source distribution
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> use mysql
mysql> delete from user where password = '';
mysql> grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> create database hive;
Query OK, 1 row affected (0.00 sec)
安装配置Hive
[root@HadoopNode00 ~]# mkdir /home/hive # 创建hive文件夹
[root@HadoopNode00 hive]# cd /home/hive/ # 进入到HIve目录
[root@HadoopNode00 hive]# tar -zxvf apache-hive-1.2.1-bin.tar.gz # 解压
[root@HadoopNode00 ~]# vi /home/hive/apache-hive-1.2.1-bin/conf/hive-site.xml
<?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://192.168.126.10:3306/hive</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>1234</value>
</property>
</configuration>
拷贝相关依赖
- 将mysql 的依赖拷贝到/home/hive/apache-hive-1.2.1-bin/lib/
- 将hive目录下的lib目录下的jline-2.12.jar拷贝到/home/hadoop/hadoop-2.6.0/share/hadoop/yarn/lib/下,并且删除jline0.9.94低版本的数据
配置环境变量
[root@HadoopNode00 ~]# vi .bashrc
export HIVE_HOME=/home/hive/apache-hive-1.2.1-bin
export PATH=$PATH:$HIVE_HOME/bin
[root@HadoopNode00 ~]# source .bashrc
安装配置Hive
管理员模式
[root@HadoopNode00 ~]# hive
hive> create table t_user (id string,name string);
OK
Time taken: 0.291 seconds
hive> insert into t_user values ('1','zs');
[root@HadoopNode00 ~]# hive -e 'use lqq; select * from t_user;'
Logging initialized using configuration in jar:file:/home/hive/apache-hive-1.2.1-bin/lib/hive-common-1.2.1.jar!/hive-log4j.properties
OK
Time taken: 0.722 seconds
OK
1 zs
Time taken: 0.527 seconds, Fetched: 1 row(s)
JDBC服务模式
[root@HadoopNode00 ~]# hiveserver2 # 必须保证hiveserver2处于运行状态 前台启动模式
[root@HadoopNode00 ~]# hiveserver2 & # 必须保证hiveserver2处于运行状态 后台启动模式
[root@HadoopNode00 ~]# beeline -u jdbc:hive2://HadoopNode00:10000 -n root
[root@HadoopNode00 ~]# beeline -u jdbc:hive2://$HOSTNAME:10000 -n root # 获取主机名 $HOSTNAME
使用
Hive 数据类型
数据类型(primitive ,array,map,struct)
primitive (原始类型)
整数:TINYINT SMALLINT INT BIGINT
布尔:BOOLEAN
小数:FLOAT DOUBLE
字符:STRING CHAR VARCHAR
二进制:BINARY
时间类型:TIMESTAMP DATE
array(数组):ARRAY<data_type>
map(key-value类型):MAP<KEY-VALUE>
struct(结构体类型):STRUCT<clo_name:data_type>
创建表
create table t_user(
id int,
name string ,
birthday date,
salary double,
hobbbies array<string>,
card map<string,string>,
address struct<country:string,city:string>
);
0: jdbc:hive2://HadoopNode00:10000> desc formatted t_user; #表的描述信息
默认分隔符
分隔符 | 描述 |
---|---|
\n | 分割行,每一行就是一行记录 |
\A | 用于分割字段 \001 |
\B | 用于分割array 或者是struct中的元素 或者用于map结构中的k-v对分隔符 \002 |
\C | 用于map中的k-v的分隔符 \003 |
将数据导入到Hive表中
- 准备数据
# 外部导入
[root@HadoopNode00 ~]# hadoop fs -put t_user /user/hive/warehouse/lqq.db/t_user
# 内部命令行导入(从本地文件系统导入)
0: jdbc:hive2://HadoopNode00:10000> load data local inpath '/root/t_user' overwrite into table t_user;
# 内部命令行导入(从HDFS导入)
0: jdbc:hive2://HadoopNode00:10000> load data inpath '/t_user' overwrite into table t_user;
local 代表本地 文件 overwrite覆盖
JDBC 访问 Hive 实现数据查询
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class App {
public static void main(String[] args) throws Exception {
/*
*加载驱动
* */
Class.forName("org.apache.hive.jdbc.HiveDriver");
Connection connection = DriverManager.getConnection("jdbc:hive2://HadoopNode00:10000/lqq", "root", null);
/*
* 创建stm
* */
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery(