- hive定义
hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。 其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。
- hive安装
-
上传tar包 hive-1.2.1.tar.gz
-
安装mysql数据库 推荐yum在线安装(运行脚本安装)
-
配置hive
配置hive_home环境变量vim conf/hive-env.sh HADOOP_HOME=/opt/software/hadoop-2.6.5
配置元数据库信息
vim hive-site.xml 把光标放到<configuration>这一行,可以进入命令行模式输入:.,$-1d 然后再插入以下配置信息 <configuration> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://localhost: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>
安装hive和mysql完成后,将mysql的连接jar拷贝到$HIVE_HOME/lib目录下
如果出现没有权限的问题,在mysql授权(在安装mysql的机器上执行)没设置密码之前: mysql命令 进入mysql 设置密码: set password=password('root') 设置密码之后: mysql -uroot -proot 进入mysql
Jline包版本不一致的问题,需要拷贝hive的lib目录中jline.2.12.jar的jar包替换掉hadoop中的
``` cp hive/lib/jline-2.12.jar /opt/software/hadoop-2.6.5/share/hadoop/yarn/lib/ 装hive和mysq完成后,将mysql的连接jar包拷贝到$HIVE_HOME/lib目录下 启动hive /opt/software/hadoop-2.6.5/bin/hive ```
- hive命令操作
-
导入数据
***将本地的数据导入到hive中 load data local inpath '本地路径' into table 数据库.表; 例如:load data local inpath '/root/tes.txt' into table test.usr; ***将hdfs集群导入数据 load data inpath 'hdfs路径' into table 数据库.表; 例如:load data inpath 'hdfs://node01:9000/user/tes.txt' into table test.usr; ***通过自己写 insert into
-
创建表
***创建内部表 建表结构:CREATE TABLE [IF NOT EXISTS] table_name create table 表名( 字段名1 类型, 字段名2 类型 ); 特点:删除表之后数据全部丢失 ***创建外部表 建表结构:CREATE EXTERNAL TABLE [IF NOT EXISTS] table_name LOCATION hdfs_path create external table 表名( 字段名1 类型, 字段名2 类型 ); 特点:只删除metastore的元数据,不删除hdfs中的表数据 ***表格式 ROW FORMAT DELIMITED : 行格式分隔 FIELDS TERMINATED BY ’,’ : 字段之间使用空格分隔 COLLECTION ITEMS TERMINATED BY ‘,’ : 集合(就是这的数据)使用逗号分隔 MAP KEYS TERMINATED BY ‘:’ : 键值对使用冒号分隔 LINES TERMINATED BY ‘\t’ : 记录之间使用换行符分隔 ***表的克隆 like create table 新的表名 like 已有的表名; 结构一样,但是数据不一样 as create table 新的表名 as select * from 已有的表名; 查看几个字段,就赋值几个字段 结构一样,数据也一样
- hive分区
- 单分区建表语句
create table day_table(
id int,
content varchar
) partitioned by (
dt varchar
);
单分区表,按天分区,在表结构中存在id,content,dt三列,以dt为文件区分。 - 双分区建表语句
create table day_hour_table(
id int,
content varchar
) partitioned by(
dt varchar,
hour varchar
);
双区分表,按天和小时区分,在表结构中新增了dt和hour两列,先以dt为文件夹,再以hour子文件夹区分。