01_Hive建表,导入;HiveServer2;以及UDF

本文深入探讨Hive SQL的高级特性,包括建表、数据导入、元数据库管理及HiveServer2配置。详解内部表与外部表的区别,分区表的创建与查询技巧,以及如何优化Hive查询性能,提供实用的Hive命令历史查看和临时设置方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

hive建表和sql类似,可以从本地linux和hdfs中导入

  • 关闭不必要的Hive的MapReduce任务(有时候查找一个字段都需要mr,这显然是浪费的)
    hive.fetch.task.conversion -> more
<property>
<name>hive.fetch.task.conversion</name>
<value>more</value>
<description>
1. minimal : SELECT STAR, FILTER on partition columns, LIMIT only
2. more    : SELECT, FILTER, LIMIT only (TABLESAMPLE, virtual columns)
</description>
</property>

启动命令
$ bin/hive 针对的是本地启动
建表语句
create table if not exists db_hive_demo.emp(
empno int,
ename string,
job string,
mgr int,
hiredate string,
sal double,
comm double,
deptno int)
row format delimited fields terminated by ‘\t’;
导入数据
load data local(该关键字表明数据是从Linux本地加载,如果没有该关键字,则 从HDFS上加载)
desc formatted table;

Hive的元数据库的备份与还原
常见错误:启动Hive时,无法初始化metastore数据库,无法创建连接,无法创建会话。
可能性分析:
1、hive的metastore数据库丢失了,比如drop,比如文件损坏
2、metasotre版本号不对。
3、远程表服务
备份的基本语法:
$ mysqldump -uroot -p metastore > metastore.sql
还原的基本语法:
$ mysql -uroot -p metastore < metastore.sql
复习:find命令,查找metastore.sql默认存放位置
Hive操作HQL语句的两个参数
一般使用:
oozie
azakban
crontab
hive -e “”
hive -f 文件.hql

Hive历史命令存放地
cat ~/.hivehistory
主要用于排查逻辑错误或者查看常用命令
Hive临时生效设置
固定语法:set 属性名=属性值
例如:set hive.cli.print.header=false;
Hive的内部表与外部表
伪代码:
hive> CREATE TABLE custom_table(id int, name string) location ‘/custom/z/hive/somedatabase’
默认情况:inner
hive> CREATE INNER TABLE(报错)
显示指定:external
hive> CREATE EXTERNAL TABLE

内部表:
删除表数据时,连同数据源以及元数据信息同时删除
外部表:
1、只会删除元数据信息。
2、共享数据,外部表相对而言也更加方便和安全。

相同之处:
如果你导入数据时,操作于HDFS上,则会将数据进行迁移,并在metastore留下记录,而不是copy数据源。
Hive分区表
创建分区表:create database if not exists db_web_data ;
partitioned by (date string,hour string) – 分区表的分区字段以逗号分隔
row format delimited fields terminated by ‘\t’;
导入数据到分区表:
hive> load data local inpath ‘/home/admin/Desktop/2015082818’ into table db_web_data.track_log partition(date=‘20150828’, hour=‘18’);
查询分区表中的数据:
hive> select url from track_log where date=‘20150828’;查询28整天的数据
hive> select url from track_log where date=‘20150828’ and hour=‘18’; 查询28号18时那一刻的数据
select url from track_log where date=‘20150828’ and hour=‘18’ limit 1;显示第一条

		练习:
			1、尝试将2015082818,2015082819两个文件上传到HDFS之后,再load data

HiveServer2

hive.server2.thrift.port --> 10000
hive.server2.thrift.bind.host --> hadoop-senior01.itguigu.com
hive.server2.long.polling.timeout -- > 5000(去掉L)
检查端口:
$ sudo netstat -antp | grep 10000
启动服务:
$ bin/hive --service hiveserver2
连接服务:
$ bin/beeline
beeline> !connect jdbc:hive2://hadoop-senior01.itguigu.com:10000 
尖叫提示:注意此时不能够执行MR任务调度,报错:
Job Submission failed with exception 'org.apache.hadoop.security.AccessControlException(Permission denied: user=anonymous, access=EXECUTE, inode="/tmp/hadoop-yarn":admin:supergroup:drwxrwx---	
	
	更改 hive.server2.enable.doAs -> false;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值