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中 ...
随机推荐
- Java--- Ambiguous mapping. Cannot map "***Controller" been method解决办法
打开网页报错: Ambiguous mapping. Cannot map 'handController' method public com.smallchill.core.toolbox.aj ...
- 【bzoj 3173】[Tjoi2013]最长上升子序列
Description 给定一个序列,初始为空.现在我们将1到N的数字插入到序列中,每次将一个数字插入到一个特定的位置.每插入一个数字,我们都想知道此时最长上升子序列长度是多少? Input 第一行一 ...
- oracle 导入execl
如果没有配置好的,就需要添加一个 如果找不到相应的驱动就安装AccessDatabaseEngine.exe
- Docker 添加环境系统文件配置
在 docker 启动文件添加默认环境系统配置 " /etc/default/docker ": 添加 Environment File 配置: # vi /usr/lib/sy ...
- Kali Linux之常见后门工具介绍
1.Meterpreter 它是Metasploit框架中功能强大的后渗透模块.可以通过Meterpreter的客户端执行攻击脚本,远程调用目标主机上运行的Meterpreter服务端. 命令 作用 ...
- 第21月第6天 zhihu如何用3个月零基础入门机器学习
1. 我们应该记住,既成的事实一定有它的道理,如果我们不能理解它,恐怕得从自身找原因.如果你交易股票,请记住,如果预测和市场不一致,错的是预测,而不是市场 https://www.cnblogs.co ...
- centos7 五大查找常用命令
1.find find是最常见和最强大的查找命令,你可以用它找到任何你想找的文件. find的使用格式如下: $ find <指定目录> <指定条件> <指定动作> ...
- java基础(持续整理)
文本会梳理java这门语言的所有基础知识,所谓“掌握”这门语言. 1.底层容器 2.并发包 1.locks部分:包含在java.util.concurrent.locks包中,提供显式锁(互斥锁和速写 ...
- DEX、ODEX、OAT文件&Dalvik和ART虚拟机
https://www.jianshu.com/p/389911e2cdfb https://www.jianshu.com/p/a468e714aca7 ODEX是安卓上的应用程序apk中提取出来的 ...
- java实现在线浏览PDF文档功能
实现在线浏览pdf文档功能(本代码适用于项目服务中固定的并且少量的pdf浏览,比如注册时的注册条款在线浏览等): //设置响应内容类型为PDF类型 response.setContentType(&q ...