1、CLI 方式直接执行
2、作为字符串通过shell调用hive –e执行(-S开启静默,去掉”OK”,”Time taken”)
3、作为独立文件,通过shell调用 hive –f或hive –i执行执行
键入“hive”,启动hive的cli交互模式。Set可以查看所有环境设置参数,并可以重设。其他命令如,
Use database 选择库
quit/exit 退出Hive的交互模式
set –v 显示Hive中的所有变量
set = 设置参数
执行本地shell :! 交互模式下可执行shell命令,例如(查看linux根目录下文件列表:"!ls -l /;")
操作云命令:dfs < command> 交互模式下直接操作hadoop命令如 dfs fs –ls
Hql语句 执行查询并输出到标准输出
add [FILE|JAR|ARCHIVE] []* 增加一个文件到资源列表
list FILE 列出所有已经添加的资源
Hql作为字符串在shell脚本中执行,如
hive -e "use ${database};select * from tb"
查询结果可以直接导出到本地本件(默认分隔符为\t):
hive -e "select * from tb" > tb.txt
set –x
1) 直接定义字符串对象:sql=”字符串”
2) 通过命令定义:sql=$(cat <
####### execute hive ######
sql=$(cat <set mapred.queue.names=queue3;
drop table if exists people_targeted_delivery;
create table people_targeted_delivery
( special_tag_id int,
cnt bigint
);
INSERT OVERWRITE LOCAL DIRECTORY '$cur_path/people_targeted_delivery'
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
select special_tag_id,count(1)
from t_pmp_special_user_tags
group by special_tag_id;
!EOF)
############ execute begin ###########
echo $sql
$HIVE_HOME/bin/hive -e "$sql"
exitCode=$?
if [ $exitCode -ne 0 ];then
echo "[ERROR] hive execute failed!"
exit $exitCode
fi
将hql语句保存为独立文件,后缀名不限制,可以用.q或者.hql作为标识:
A,这个文件在cli模式下,用source命令执行,如:source ./mytest.hql
B,在shell中执行命令,如:hive -f mytest.sql
命令:hive -i hive-script.sql
在hive启动cli之前,先执行指定文件(hive-script.sql)中的命令。
也就是说,允许用户在cli启动时预先执行一个指定文件,比如,有一些常用的环境参数设置,频繁执行的命令,可以添加在初始化文件中,比如,
某些参数设置
set mapred.queue.names=queue3;
SET mapred.reduce.tasks=14;
添加udf文件
add JAR ./playdata-hive-udf.jar;
设置Hive的日志级别
hive -hiveconf hive.root.logger=INFO;
hive> show databases; 查看数据库
如果数据库比较多的话,也可以用正则表达式来查看:
hive> show databases like 'h.*';
hive> use default; --使用哪个数据库
hive>show tables; --查看该数据库中的所有表
hive>show tables ‘*t*’; --支持模糊查询
hive> describe tab_name; --查看表的结构及表的路径
hive> describe database database_name; --查看数据库的描述及路径
可以用下面的命令来修改数据库的路径:
hive> creat database database_name location '路径';
hive> drop database if exists database_name; --删除空的数据库
hive> drop database if exists database_name cascade; --先删除数据库中的表再删除数据库
hive>show partitions t1; --查看表有哪些分区
修改表:
hive>alter table table_name rename to another_name; --修改表名
hive>drop table t1 ; --删除表t1
有local的速度明显比没有local慢:
hive>load data inpath '/root/inner_table.dat' into table t1; 移动hdfs中数据到t1表中
hive>load data local inpath '/root/inner_table.dat' into table t1; 上传本地数据到hdfs中
hive> !ls; 查询当前linux文件夹下的文件
1.Hive非交互模式常用命令:
1) hive -e:从命令行执行指定的HQL,不需要分号:
% hive -e 'select * from dummy' > a.txt
2) hive –f: 执行HQL脚本
% hive -f /home/my/hive-script.sql --hive-script.sql是hql脚本文件
3) hive -i:进入Hive交互Shell时候先执行脚本中的HQL语句
% hive -i /home/my/hive-init.sql
4) hive -v:冗余verbose模式,额外打印出执行的HQL语句
5) hive -S:静默Slient模式,不显示转化MR-Job的信息,只显示最终结果
% hive -S -e ‘select * from student’
6)hive --hiveconf
$HIVE_HOME/bin/hive --hiveconf mapred.reduce.tasks=2 //启动时,配置reduce个数2(只在此session中有效)
7)hive --service serviceName:启动服务
8)hive [--database test]:进入CLI交互界面,默认进入default数据库。加上[]内容直接进入test数据库。
%hive --database test
3.Hive的交互模式下命令:
quit / exit:退出CLI
reset:重置所有的配置参数,初始化为hive-site.xml中的配置。如之前使用set命令设置了reduce数量。
set
set –v:打印出所有Hive的配置参数和Hadoop的配置参数。
//找出和"mapred.reduce.tasks"相关的设置 hive -e 'set -v;' | grep mapred.reduce.tasks
add命令:包括add File[S]/Jar[S]/Archive[S]
list 命令:包括list File[S]/Jar[S]/Archive[S]。列出当前DistributeCache中的文件、jar包或者归档。
delete 命令:包括 delete File[S]/Jar[S]/Archive[S]
//将file加入缓冲区
add file /root/test/sql;
//列出当前缓冲区内的文件
list file; //删除缓存区内的指定file delete file /root/test/sql;
create命令:创建自定义函数:hive> create temporary function udfTest as ‘com.cstore.udfExample’;
source
//相当于[root@ncst test]# hive -S -f /root/test/sql hive> source /root/test/sql;
!
dfs
4.保存查询结果の三种方式:
% hive -S -e 'select * from dummy' > a.txt //分隔符和hive数据文件的分隔符相同
[root@hadoop01 ~]# hive -S -e "insert overwrite local directory '/root/hive/a'\ > row format delimited fields terminated by '\t' --分隔符\t > select * from logs sort by te"
--使用hdfs命令导出整个表数据 hdfs dfs -get /hive/warehouse/hive01 /root/test/hive01
5.Hive集群间的导入和导出
使用Export命令会导出Hive表的数据表数据以及数据表对应的元数据
--导出命令 EXPORT TABLE test TO '/hive/test_export' --dfs命令查看 hdfs dfs -ls /hive/test_export --结果显示 /hive/test_export/_metadata /hive/test_export/data
使用Import命令将导出的数据重新导入到hive中(必须将现导入的表重命名)
--导入到内部表的命令 IMPORT TABLE data_managed FROM '/hive/test_export' --导入到外部表的命令 Import External Table data_external From '/hive/test_export' Location '/hive/external/data' --验证是否是外部表 desc formatted data_external
6.Hive - JDBC/ODBC
在Hive的jar包中,"org.apache.hadoop.hive.jdbc.HiveDriver"负责提供 JDBC 接口,客户端程序有了这个包,就可以把 Hive 当成一个数据库来使用,大部分的操作与对传统数据库的操作相同,Hive 允许支持 JDBC 协议的应用程序连接到 Hive。当 Hive 在指定端口启动 hiveserver 服务后,客户端通过 Java 的 Thrift 和 Hive 服务器进行通信。过程如下:
1.开启 hiveserver 服务:$ hive –service hiveserver 50000(50000)
2.建立与 Hive 的连接:Class.forName(“org.apache.hadoop.hive.jdbc.HiveDriver”);
Connection con= DriverManager.getConnection(“jdbc:hive://ip:50000/default,”hive”,”hadoop”)
默认只能连接到 default 数据库,通过上面的两行代码建立连接后,其他的操作与传统数据库无太大差别。
3.Hive 的 JDBC 驱动目前还不太成熟,并不支持所有的 JDBC API。
7.Hive Web Interface
1.配置hive-site.xml
<property>
<name>hive.hwi.war.filename>
<value>lib/hive-hwi-0.8.1.warvalue>
<description>This sets the path to the HWI war file, relative to ${HIVE_HOME}.description>
property>
<property>
<name>hive.hwi.listen.hostname>
<value>0.0.0.0value>
<description>This is the host address the Hive Web Interface will listen ondescription>
property>
<property>
<name>hive.hwi.listen.portname>
<value>9999value>
<description>This is the port the Hive Web Interface will listen ondescription>
property>
2.启动Hive的Web服务:hive --service hwi
3.在浏览器键入地址:http://host_name:9999/hwi访问
4.点击“Create Session”创建会话,在Query中键入查询语句
8. Hive创建数据库
hive启动后默认有一个Default数据库,也可以人为的新建数据库,命令:
--手动指定存储位置 create database hive02 location '/hive/hive02'; --添加其他信息(创建时间及数据库备注) create database hive03 comment 'it is my first database' with dbproperties('creator'='kafka','date'='2015-08-08');
--查看数据库的详细信息 describe database hive03; --更详细的查看 describe database extended hive03;
--最优的查看数据库结构的命令 describe database formatted hive03;
--database只能修改dbproperties里面内容 alter database hive03 set dbproperties('edited-by'='hanmeimei');