partition

13、Hive的DDL、DML语法案例实战

こ雲淡風輕ζ 提交于 2020-02-03 18:58:23
1、Hive的DDL语法操作 1.1、Hive数据库DDL操作 (1)创建数据库 create database db_hive2;`<br/>`或者`<br/>`create database if not exists db_hive; 数据库在HDFS上的默认存储路径/user/hive/warehouse/*.db (2)显示所有数据库 show databases; (3)查询数据库 show database like ‘db_hive’; (4)查询数据库详情 desc database db_hive; (5)显示数据库 desc database extended db_hive; (6)切换当前数据库 use db_hive; (7)删除数据库 #删除为空的数据控 drop database db_hive; #如果删除的数据库不存在,最好采用if exists判断数据库是否存在 drop database if exists db_hive; #如果数据库中有表存在,需要使用cascade强制删除数据库 drop database if exists db_hive cascade ; 1.2、Hive表的DDL操作 1.2.1、建表语法介绍 CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name [(col

Spark的存储级别

爱⌒轻易说出口 提交于 2020-02-03 17:27:29
存储模块 存储级别 意义 NONE 不会保存任何的数据 DISK_ONLY 直接将RDD的Partition保存在该节点的Disk上 MEMORY_ONLY 将RDD的Partition对应的原生的java object对象保存在JVM中。如果RDD太大,导致部分Partition无法保存在内存中的话,那么这些Partition将不会被缓存,在需要的时候,会被重新计算。这是默认的存储级别。 MEMORY_ONLY_SER 将RDD的Partition序列化后的对象(每一个Partition占用一个字节数组)存储在JVM中。通常来说,这将比直接保存原始对象来说空间利用率更高。尤其是在使用fast serializer(快速序列化)时。但是在读取的时候,由于需要进行反序列化,所以会占用一定量的CPU MEMORY_AND_DISK 将RDD的partition反序列化后存储在JVM中,如果它的RDD太大,导致它的部分Partition不能存储在内存中,超出的Partition将会被保存在DISK上,需要的时候进行读取。 MEMORY_AND_DISK_SER 与MEMORY_ONLY_SER类似,但是会把超出内存的Partition保存在Disk上,而不是每次需要的时候重新计算。 DISK_ONLY_2 MEMORY_ONLY_2 MEMORY_ONLY_SER_2 MEMORY

Spring Batch Partitioning inject stepExecutionContext parameter in itemReader

随声附和 提交于 2020-02-02 06:51:06
问题 I am trying to learn Spring Batch with Partitioner. The issue is that I need to set the filenames dynamically from the Partitioner implementation. And I am trying to get it in the itemReader . But it gives filename null . My Spring Batch configuration: @Bean @StepScope public ItemReader<Transaction> itemReader(@Value("#{stepExecutionContext[filename]}") String filename) throws UnexpectedInputException, ParseException { FlatFileItemReader<Transaction> reader = new FlatFileItemReader

【大数据面试题】(五)Spark 相关面试题总结

痴心易碎 提交于 2020-02-01 23:28:33
文章目录 一、spark中的RDD是什么,有哪些特性? 二、概述一下spark中的常用算子区别(map,mapPartitions,foreach,foreachPatition)? 三、谈谈spark中的宽窄依赖? 四、spark中如何划分stage? 五、RDD缓存? 六、driver 的功能是什么? 七、Spark master 使用zookeeper 进行HA 的,有哪些元数据保存在Zookeeper? 一、spark中的RDD是什么,有哪些特性? 答:RDD(Resilient Distributed Dataset)叫做分布式数据集,是spark中最基本的数据抽象,它代表一个不可变,可分区,里面的元素可以并行计算的集合 Dataset:就是一个集合,用于存放数据的 Destributed:分布式,可以并行在集群计算 Resilient:表示弹性的,弹性表示 RDD中的数据可以存储在内存或者磁盘中; RDD中的分区是可以改变的; 五大特性: A list of partitions:一个分区列表,RDD中的数据都存储在一个分区列表中 A function for computing each split:作用在每一个分区中的函数 A list of dependencies on other RDDs:一个RDD依赖于其他多个RDD,这个点很重要

Oracle中获取连续的序列号范围的SQL (二)

与世无争的帅哥 提交于 2020-01-31 01:20:36
方案3的思路比较值得学习,我们将层层剖析它的结构: 1:对每一条记录找它的前一行 所谓连续的序列号就是看相同格式的情况下前一行记录与当前行的记录序号的值是否相差为1: 如果相差为1,则说明两个序列号是连续的; 如果不为1,则两个序列号不是连续的 select numFormat, lag(code, 1) over(partition by numFormat order by code) previousCode, code, max(code) over(partition by numFormat) maxn from inventory; 2:过滤掉中间连续序列号。 这里通过比较当前序列号与前一行的序列号相减是非相差为1,相差为1将被过滤掉;相差不为1比如2或者说有null值则不被过滤。 select * from( select numFormat, lag(code, 1) over(partition by numFormat order by code) previousCode, code, max(code) over(partition by numFormat) maxn from inventory ) where nvl(code-previousCode-1,1) <> 0 ; 3:把当前行的code列作为 startNum

io.sort.spill.percent调整

社会主义新天地 提交于 2020-01-30 15:35:30
引言 MapReduce作出保证:进入每个Reducer的数据行都是有序的(根据数据行的键值进行排序)。MapReduce将Mapper的输出进行排序并传递给Reducer作为输入的过程称为Shuffle。在很多场景下,Shuffle是整个MapReduce过程的核心,也是“奇迹”发生的地方,如下图所示: 理解Shuffle的执行过程对我们优化MapReduce任务带来帮助。这里以Hadoop 0.20.2代码为基础进行介绍,同时也会涉及到如何扩展MapReduce组件,从而影响Shuffer的行为。 Map Task Map Task产生输出的时候,并不是直接将数据写到本地磁盘,这个过程涉及到两个部分:写缓冲区、预排序。 (1)写缓冲区 每一个Map Task都拥有一个“环形缓冲区”作为Mapper输出的写缓冲区。写缓冲区大小默认为100MB(通过属性io.sort.mb调整),当写缓冲区的数据量达到一定的容量限额时(默认为80%,通过属性io.sort.spill.percent调整),后台线程开始将写缓冲区的数据溢写到本地磁盘。在数据溢写的过程中,只要写缓冲区没有被写满,Mappper依然可以将数据写出到缓冲区中;否则Mapper的执行过程将被阻塞,直到溢写结束。 溢写以循环的方式进行(即写缓冲区的数据量大致限额时就会执行溢写),可以通过属性mapred.local

Hadoop 排序

血红的双手。 提交于 2020-01-30 14:22:31
  数据排序是许多实际任务在执行时要完成的第一项工作,比如学生成绩评比、数据建立索引等。这个实例和数据去重类似,都是先对原始数据进行初步处理,为进一步的数据操作打好基础。 1.实例描述   对输入文件中的数据进行排序。输入文件中的每行内容均为一个数字,即一个数据。要求在输出中每行有两个间隔的数字,其中,第二个数字代表原始数据,第一个数字这个原始数据在原始数据集中的位次。   样例输入:   file1:   2   32   654   32   15   756   65223   file2:   5956   22   650   92   file3:   26   54   6   样例输出:    2.设计思路   这个实例仅仅要求对输入数据进行排序,熟悉MapReduce过程的读者很快会想到在MapReduce过程中就有排序。是否可以利用这个默认的排序、而不需要自己在实现具体的排序呢?答案是肯定的。但是在使用之前首先要了解MapReduce过程中的默认排序规则。它是按照key值进行排序,如果key为封装int的IntWritable类型,那么MapReduce按照数字大小对key排序;如果key为封装String的Text类型,那么MapReduce按照字典顺序对字符串排序。需要注意的是,Reduce自动排序的数据仅仅是发送到自己所在节点的数据

大数据系列之分布式计算批处理引擎MapReduce实践-排序

人走茶凉 提交于 2020-01-30 13:55:20
清明刚过,该来学习点新的知识点了。 上次说到关于MapReduce对于文本中词频的统计使用WordCount。如果还有同学不熟悉的可以参考博文 大数据系列之分布式计算批处理引擎MapReduce实践 。 博文发表后很多同学私下反映对于MapReduce的处理原理没有了解到。在这篇博文中楼主与大家交流下MapReduce的数据处理原理及MR中各角色的职责。 文末还有示例代码讲解。。 1.MapReduce中的数据流动 最简单的过程: map - reduce 定制了partitioner以将map的结果送往指定reducer的过程: map - partition - reduce 增加了在本地先进行一次reduce(优化)的过程: map - combine - partition - reduce 2.Partition的概念和使用 得到map产生的记录后,他们该分配给哪些reducer来处理呢?hadoop默认是根据散列值来派发,但是实际中,这并不能很高效或者按照我们要求的去执行任务。例如,经过partition处理后,一个节点的reducer分配到了20条记录,另一个却分配到了10W万条,试想,这种情况效率如何。又或者,我们想要处理后得到的文件按照一定的规律进行输出,假设有两个reducer,我们想要最终结果中part-00000中存储的是”h”开头的记录的结果,part

over partition by与group by 的区别

陌路散爱 提交于 2020-01-30 01:50:02
今天看到一个老兄的问题, 大概如下: 查询出部门的最低工资的userid 号 表结构: D号 工资 部门 userid salary dept 1 2000 1 2 1000 1 3 500 2 4 1000 2 有一个高人给出了一种答案: SELECT MIN (salary) OVER (PARTITION BY dept ) salary, dept FROM ss 运行后得到: 1000 1 1000 1 500 2 500 2 楼主那位老兄一看觉得很高深。大叹真是高人阿~ 我也觉得这位老兄实在是高啊。 但我仔细研究一下发现那位老兄对PARTITION BY的用法理解并不深刻。并没有解决楼主的问题。 大家请看我修改后的语句 SELECT userid,salary,dept,MIN (salary) OVER (PARTITION BY dept ) salary FROM ss 运行后的结果: userid salary dept MIN (salary) OVER (PARTITION BY dept ) 1 2000 1 1000 2 1000 1 1000 3 500 2 500 4 1000 2 500 大家看出端倪了吧。 高深的未必适合。 一下是我给出的答案: SELECT * FROM SS INNER JOIN (SELECT MIN(SALARY) AS

over partition by与group by 的区别

≡放荡痞女 提交于 2020-01-30 01:49:10
(本文摘自 scottpei 的博客) over partition by与group by 的区别 今天看到一个老兄的问题, 大概如下: 查询出部门的最低工资的userid 号 表结构: D号 工资 部门 userid salary dept 1 2000 1 2 1000 1 3 500 2 4 1000 2 有一个高人给出了一种答案: SELECT MIN (salary) OVER (PARTITION BY dept ) salary, dept FROM ss 运行后得到: 1000 1 1000 1 500 2 500 2 楼主那位老兄一看觉得很高深。大叹真是高人阿~ 我也觉得这位老兄实在是高啊。 但我仔细研究一下发现那位老兄对PARTITION BY的用法理解并不深刻。并没有解决楼主的问题。 大家请看我修改后的语句 SELECT userid,salary,dept,MIN (salary) OVER (PARTITION BY dept ) salary FROM ss 运行后的结果: userid salary dept MIN (salary) OVER (PARTITION BY dept ) 1 2000 1 1000 2 1000 1 1000 3 500 2 500 4 1000 2 500 大家看出端倪了吧。 高深的未必适合。 一下是我给出的答案: