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

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

  • 关闭不必要的Hive的MapReduce任务(有时候查找一个字段都需要mr,这显然是浪费的)
    hive.fetch.task.conversion -> more

hive.fetch.task.conversion
more

1. minimal : SELECT STAR, FILTER on partition columns, LIMIT only
2. more    : SELECT, FILTER, LIMIT only (TABLESAMPLE, virtual columns)


启动命令
$ 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;

你可能感兴趣的:(hive,建表,大数据学习)