Hive操作
Hive命令客户端启动
1. H I V E H O M E / b i n / h i v e 启 动 h i v e 客 户 端 , 可 能 会 出 现 j a r 包 的 冲 突 问 题 , 将 h i v e 中 高 版 本 的 J l i n e 替 换 掉 HIVE_HOME/bin/hive 启动hive客户端,可能会出现jar包的冲突问题,将hive中高版本的Jline替换掉 HIVEHOME/bin/hive启动hive客户端,可能会出现jar包的冲突问题,将hive中高版本的Jline替换掉HADOOP_HOME/share/hadoop/yarn/lib中的jline.jar包。
2.hive默认的情况下会将自己的元数据存放到默认的数据库中,而默认的数据库是derby。默认情况会将数据存放在当前目录。所以会导致在不同的位置打开hive看到的元数据不一致。因此我们要将元数据保存到我外部的mysql数据库中,这样能够解决数据不一致的问题。修改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://hdp-nn-01: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服务端命令启动
1.$HIVE_HOME/bin/hiveserver2会启动一个hive服务程序,会启动一个监听端口10000的hive服务。
2.使用客户端连接服务端连接服务端。$HIVE_HOME/bin/beeline启动客户端程序。
前台启动:$HIVE_HOME/bin/hiveserver2;
后台启动:nohup $HIVE_HOME/bin/hiveserver2 1>/var/log/hiveserver.log 2>/var/log/hiveserver.err
!connect jdbc:hive2://hdp-nn-01:10000
注:会提示username和password。username为服务端启动程序的用户名;password设置为空
Beeline中常用的命令
!connect jdbc:hive2://hdp-nn-01:10000 //创建连接
!help //查看帮助
!close //关闭当前连接 如我们连接jdbc连接
!table ; //显示表
!sh clear ; //执行shell脚本命令
!quit ; //退出beeline终端
Hive中的语法
Hive创建数据库
规则
CREATE DATABASE|SCHEMA [IF NOT EXISTS] <database name>
示例
CREATE DATABASE [IF NOT EXISTS] userdb;
CREATE SCHEMA userdb;
SHOW DATABASES;
Hive删除数据库
规则
DROP (DATABASE|SCHEMA) [IF EXISTS] database_name [RESTRICT|CASCADE];
示例
DROP DATABASE IF EXISTS userdb;
DROP DATABASE IF EXISTS userdb CASCADE; //使用CASCADE查询删除数据库。这意味着要全部删除相应的表在删除数据库之前。
DROP SCHEMA userdb;
Hive创建表
规则
CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.] table_name
[(col_name data_type [COMMENT col_comment], ...)]
[COMMENT table_comment]
[ROW FORMAT row_format]
[STORED AS file_format]
示例
CREATE TABLE IF NOT EXISTS employee ( eid int, name String, salary String, destination String)
COMMENT ‘Employee details’
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ‘\t’
LINES TERMINATED BY ‘\n’
STORED AS TEXTFILE;
Hive修改表
规则
ALTER TABLE name RENAME TO new_name
ALTER TABLE name ADD COLUMNS (col_spec[, col_spec ...])
ALTER TABLE name DROP [COLUMN] column_name
ALTER TABLE name CHANGE column_name new_name new_type
ALTER TABLE name REPLACE COLUMNS (col_spec[, col_spec ...])
示例
//下面是查询重命名表,把 employee 修改为 emp。
ALTER TABLE employee RENAME TO emp;
//修改表的列名和类型
ALTER TABLE employee CHANGE name ename String;
ALTER TABLE employee CHANGE salary salary Double;
//增加了一个列名dept在employee表。
ALTER TABLE employee ADD COLUMNS (dept STRING COMMENT 'Department name');
//查询删除的所有列,并使用emp替换列:
ALTER TABLE employee REPLACE COLUMNS (eid INT empid Int, ename STRING name String);
建表规则
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name
[(col_name data_type [COMMENT col_comment], ...)]
[COMMENT table_comment]
[PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]
[CLUSTERED BY (col_name, col_name, ...)
[SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS]
[ROW FORMAT row_format]
[STORED AS file_format]
[LOCATION hdfs_path]
•CREATE TABLE 创建一个指定名字的表。如果相同名字的表已经存在,则抛出异常;用户可以用 IF NOT EXIST 选项来忽略这个异常
•EXTERNAL 关键字可以让用户创建一个外部表,在建表的同时指定一个指向实际数据的路径(LOCATION)
•LIKE 允许用户复制现有的表结构,但是不复制数据
•COMMENT可以为表与字段增加描述
Hive表的分区
Partition By 关键字
create table t_4(ip string,url string,staylong int)
partitioned by (day string)
row format delimited
fields terminated by ",";
导入数据
将hive运行所在的机器的本地磁盘上的文件导入表中
load data local input '/root/weblog.1' into table t_4 partition(day='2017-04-08');
load data local input '/root/weblog.2' into table t_4 partition(day='2017-04-09');
//overwrite表示会删除表中之前的数据重新导入新数据
load data local input '/root/weblog.2' into [overwrite] table t_4 partition(day='2017-04-09');
将hdfs中的文件导入表中
//如果不加local表示hdfs的路径
load data input '/weblog.2' into [overwrite] table t_4 partition(day='2017-04-09');
从别的表查询数据后插入到一张指定的表中
//指定表不存在
create table t_1_jz
as
select * from t_1;
//指定表已存在
create table t_1_hd like t_1;
insert into table t_1_hd
select * from t_1;
导出数据
insert overwrite directory '/aa/bb'
select * from t_1;
Hive中的sql
显示库和表语句
show databases;
show tables;
使用默认库
use default;
创建库和表
create database db_1;
create table t_1(id int,name string,add string)
row format delimited
fields terminated by ',';
爷儿您要是看的乐,打个赏也让姑娘乐一乐