Hive学习01-基础常见问题
cloudera公司发行的CDH中
hive的有三种角色:gateway、hiveserver2、hive metastore三种角色
其中hive metastore主要用于客户端连接 默认端口
hive server2 主要用于jdbc连接(很多bi产品都靠jdbc连接,比如hue,帆软等软件)
gateway 是client的一个代理,主要用于更新hive的客户端配置 apache社区的hive中也分为客户端,hiveserver2和hive metastore
启动 metastore : hive --service metastore 启动hive :hive --service hiveserver2
理论:
什么是hive:
1. Hive旨在实现轻松的数据汇总,即时查询和分析大量数据。
2. 它提供了SQL,使用户可以轻松地进行临时查询,汇总和数据分析。
3. Hive可以使用用户定义函数(UDF)。
4. 使用率:实际开发中,80%操作使用Hive完成,20%使用MapReduce。
5. 与MapReduce相比,Hive特点:稳定、代码精简、易于维护。
6. HiveQL:未严格实现SQL-92标准。
7. 本质:将HiveQL转化为一个或多个MapReduce作业并在集群上运行,但并不是所有HiveQL都会转为MapReduce作业。
常见问题:
1、hive 内部表:加载数据到 hive 所在的 hdfs 目录,删除时,元数据和数据文件都删除
hive外部表:不加载数据到 hive 所在的 hdfs 目录,删除时,只删除表结构
2、分区作用:防止数据倾斜
3、sort by和order by之间的区别?distribute by?cluster by? group by?
sort by 是单个reduce内部的排序; order by 是全局排序,只触发一个reduce distribute by :按照指定的字段对数据进行划分输出到不同的reduce中,通常与sort by 连用 cluster by :除了具有distribute by 的功能外还兼具sort by 的功能 group by 通常用于做聚合函数操作 count(*) sum(xx)
4.Hive中追加导入数据的4种方式是什么
#hdfs
load data inpath 'hdfs://xxx/xxx' into (overwrite) table a
#本地
load data local inpath '/xxx/xx' into (overwrite) table a
#查询导入
create table student as select * from student1;
#查询结果导入
insert (overwrite) into table student select user_id,user_name from student2;
5.hive导出数据
#导出到hdfs 会递归创建文件夹 (注意文件夹如果存在,数据会被清空)高危操作
insert overwrite directory '/liuzhimin/test2/a' row format delimited fields terminated by '\t' select * from u_data_new;
#导出到本地(高危操作)
insert overwrite local directory '/home/dip/a' row format delimited fields terminated by '\t' select * from u_data_new;
#bash
hive -e "use cslc; select * from u_data_new ;"> a.txt
6.数据倾斜怎么办?
解决办法:①参数调节:
set hive.map.aggr=true
set hive.groupby.skewindata=true
有数据倾斜的时候进行负载均衡,当选项设定为true,生成的查询计划会有两个MR Job。第一个MR Job中,Map的输出结果集合会随机分布到Reduce中,每个Reduce做部分聚合操作,
并输出结果,这样处理的结果是相同Group By Key有可能被分发到不同的Reduce中,从而达到负载均衡的目的;
第二个MR Job在根据预处理的数据结果按照 Group By Key 分布到Reduce中(这个过程可以保证相同的 Group By Key 被分布到同一个Reduce中),最后完成最终的聚合操作。 ②SQL语句调节:
大小表join,小表进内存; 大表Join大表:把空值的Key变成一个字符串加上一个随机数,把倾斜的数据分到不同的reduce上,由于null值关联不上,处理后并不影响最终的结果 count distinct大量相同特殊值:count distinct时,将值为空的情况单独处理,如果是计算count distinct,可以不用处理,直接过滤,在做后结果中加1。
如果还有其他计算,需要进行group by,可以先将值为空的记录单独处理,再和其他计算结果进行union.
Hive学习01-基础常见问题的更多相关文章
- shell-bash学习01基础、打印、环境变量
基础 终端提示符: username@hostname$; $: 一般用户 #:root用户 运行脚本 Bash执行: * bash script.sh; 直接运行: 脚本开头添加shebang起始: ...
- hive学习01词频统计
词频统计 #创建表,只有一列,列名line create table word_count ( line string) row format delimited fields terminated ...
- Swift 学习- 01 -- 基础部分
print("世界,你好") var myVariable = 42 myVariable = 50 let myConstant = 42 let implicitinteger ...
- 01.基础架构:一条SQL查询语句是如何执行的?学习记录
01.基础架构:一条SQL查询语句是如何执行的?学习记录http://naotu.baidu.com/file/1c8fb5a0f2497c3a2655fed89099cb96?token=ff25d ...
- hive学习笔记之六:HiveQL基础
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- hive学习笔记之九:基础UDF
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- 学习webpack基础笔记01
学习webpack基础笔记 1.webpack搭建环境最重要的就是如何使用loader和plugins,使用yarn/npm安装插件.预处理器,正确的配置好去使用 2.从0配置webpack - 1. ...
- Python学习--01入门
Python学习--01入门 Python是一种解释型.面向对象.动态数据类型的高级程序设计语言.和PHP一样,它是后端开发语言. 如果有C语言.PHP语言.JAVA语言等其中一种语言的基础,学习Py ...
- hive学习
大数据的仓库Hive学习 10期-崔晓光 2016-06-20 大数据 hadoop 10原文链接 我们接着之前学习的大数据来学习.之前说到了NoSql的HBase数据库以及Hadoop中 ...
随机推荐
- MyEclipse2017 隐藏回车换行符
Preferences->Text Editor->Show Whitespace characters(configure visibility)->Transparency Le ...
- Spring 快速开始 配置Spring Framework
[配置Spring Framework] 1.XML配置依赖关系 bean是由Springframework管理,我们自己编写bean,Spring也内建了bean,比如ApplicationCont ...
- C# FTPHelper工具类
/// <summary> /// Ftp /// </summary> public class FtpFileOperation { private string _ftp ...
- mariadb开启远程访问
安装好mariadb之后,开启防火墙端口,但是还是远程访问,一顿百度之后,找到原因 使MariaDB允许远程访问 确定服务器上的防火墙没有阻止 3306 端口 使用nestat命令查看3306端口状态 ...
- 基于【字符】操作的IO接口:Writer、Reader
Reader public class BufferedReaderTest { public static void main(String[] args) throws IOException { ...
- bzoj3262: 陌上花开(CDQ+树状数组处理三维偏序问题)
题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=3262 题目大意:中文题目 具体思路:CDQ可以处理的问题,一共有三维空间,对于第一维我们 ...
- SpringBoot多模块搭建,依赖管理
1.创建springboot-multi-module父工程 File→New→Project 然后,Next,选择POM,其他名称自定义 Next→Finish. 说明:打开父工程的pom.xml ...
- poi读取Excel模板并修改模板内容与动态的增加行
有时候我们可能遇到相当复杂的excel,比如表头的合并等操作,一种简单的方式就是直接代码合并(浪费时间),另一种就是写好模板,动态的向模板中增加行和修改指定单元格数据. 1.一个简单的根据模板shee ...
- linux 工具学习网站
推荐一个很不错的linux工具学习网站; 对于一个开发人员来说,我觉得掌握这些工具对于基于linux的应用开发来说事半功倍. http://linuxtools-rst.readthedocs.io/ ...
- jquery源码解析
//局部作用域,外部引用不到这个闭合函数里面的东西,这时候需要用提供的对外访问接口来访问里面的变量 (function(){ ; function $() { alert(a) } window.$ ...