- 博客(68)
- 收藏
- 关注
原创 HDFS处理小文件问题以及如何解决
哎,鹅厂面试问到这个题一时间没想出很好的答案,就说了运用CombineInputTextFormat的方法,其实还有别的方法,现在总结一下,纪念一下自己惨痛的经历1.最简单的是避免产生小文件,在数据采集的时候,就将小文件或小批数据合成大文件再上传HDFS。2.Hadoop Archive为了缓解大量小文件带给namenode内存的压力,Hadoop 0.18.0引入了Hadoop Archives(HAR files),其本质就是在HDFS之上构建一个分层文件系统。通过执行hadoop archive
2021-04-02 20:50:36
731
原创 exists和select 1
有时候为了提高效率,只是为了测试下某个表中是否存在记录,就用1来代替。例如我的student 中 有学生信息表,我只想知道里面有没有数据并不在乎数据是哪些,就可以select 1 from student ,这样大大提高查询速度,选出100行个1,说明有100条学生信息。常搭配 exists方法当条件使用。所以说,当运用exists到相关子查询时,无所谓子表里SELECT后面跟的是什么,英文我们只需要exists返回值为true或者false即可。例子:select a.first_name,a.l
2021-03-29 23:53:30
2706
原创 MapReduce写WordCount案例:Map, Reduce, Driver
Map:import java.io.IOException;import org.apache.hadoop.io.IntWritable;import org.apache.hadoop.io.LongWritable;import org.apache.hadoop.io.Text;import org.apache.hadoop.mapreduce.Mapper;public class WordcountMapper extends Mapper<LongWritable, T
2021-03-14 01:25:36
306
原创 MapReduce案例:WordCount
注解:MapTask的两个分区里会有一次并归排序,然后将排好序的单词重新放到两个分区中。ReduceTask中也会有一次并归排序(有几个分区就有几个reduceTask),将排好序的单词按key分组,形成一个iterator,然后付给reduce()方法。1)分布式的运算程序往往需要分成至少2个阶段。2)第一个阶段的MapTask并发实例,完全并行运行,互不相干。3)第二个阶段的ReduceTask并发实例互不相干,但是他们的数据依赖于上一个阶段的所有MapTask并发实例的输出。4)MapR.
2021-03-14 01:02:39
207
原创 jar包的作用是什么?
1、JAR 文件就是 Java Archive File,顾名思意,它的应用是与 Java 息息相关的,是 Java 的一种文档格式。2、JAR 文件非常类似 ZIP 文件——准确的说,它就是 ZIP 文件,所以叫它文件包。3、JAR 文件与 ZIP 文件唯一的区别就是在 JAR 文件的内容中,包含了一个 META-INF/MANIFEST.MF 文件,这个文件是在生成 JAR 文件的时候自动创建的。4、以客户的角度来看,.jar文件就是一种封装,他们不需要知道.jar文件中有多少个.class文件,
2021-03-13 18:20:22
6274
1
原创 Java局部变量和成员变量的区别
相同点:1.遵循变量的声明格式:数据类型 变量名 = 初始化值2.都有作用域局部变量和成员变量的不同:1、定义的位置不一样 局部变量:定义在方法内部 成员变量:在方法外部,直接写在类中2、作用范围不一样 局部变量:只有方法中能使用,除了方法就不能用 成员变量:整个类都可以用3、默认值不一样 局部变量:无默认值,先赋值在使用 成员变量:如果没有赋值有默认值4、内存的位置不一样 局部变量:位于栈内存 成员变量:为于堆内存5、生命周期不一样 局部
2021-03-12 01:49:05
1743
原创 Java基本类型和引用类型
基本类型:基本类型自然不用说了,它的值就是一个数字,一个字符或一个布尔值。引用类型:是一个对象类型,值是什么呢?它的值是指向内存空间的引用,就是地址,所指向的内存中保存着变量所表示的一个值或一组值。举例说明: int a; a=250; //声明变量a的同时,系统给a分配了空间。引用类型就不是了,只给变量分配了引用空间,数据空间没有分配,因为谁都不知道数据是什么,整数,字符?我们看一个错误的例子:MyDate today;today.day = 4; //发生错误,因为today
2021-03-12 00:02:35
142
原创 Java引用变量和对象的联系:堆和栈
堆栈的存储特点决定了其中存储的数据类型。注意,栈内存储的除了基本类型的变量(int 这种类型的变量)还会存储对象的引用变量。java中,引用变量实际上是一个指针,它指向的是堆内存中对象实例。引用变量就相当于是为数组或对象起的一个名称,以后就可以在程序中使用栈中的引用变量来访问堆中的数组或对象。以下分解成了四个步骤。Case cc; //在栈内存里面开辟了空间给引用变量cc,这时cc=nullcc=new Case();1. new Case()在堆内存里面开辟了空间给Case类的对象,这个
2021-03-11 23:59:12
457
原创 HDFS小文件的危害及补救措施
一、block块举例:block块官方设置的是64m,现在多数用的是128m(Hadoop 2.0x)举例:一个文件130M % 128M=1…2m结果是1个块128m,1个块2m一碗水130ml 一个瓶子规格容量128ml只能2个瓶子:第1个装满128ml 第二个装不满,实为2ml二、小文件的危害HDFS 适应场景: 大文件存储,小文件是致命的举例:接上个例子130m的文件10m的10个文件 10块30m的1个文件 1块共有11个文件: 11块系统维护一般轻量级会比较好,本
2021-03-09 05:00:53
828
原创 HDFS: NN和2NN工作机制
思考:NameNode中的元数据是存储在哪里的?首先,我们做个假设,如果存储在NameNode节点的磁盘中,因为经常需要进行随机访问,还有响应客户请求,必然是效率过低。因此,元数据需要存放在内存中。但如果只存在内存中,一旦断电,元数据丢失,整个集群就无法工作了。因此产生在磁盘中备份元数据的FsImage。这样又会带来新的问题,当在内存中的元数据更新时,如果同时更新FsImage,就会导致效率过低,但如果不更新,就会发生一致性问题,一旦NameNode节点断电,就会产生数据丢失。因此,引入Edits文件(
2021-03-09 04:47:17
226
原创 Tail指令
tail 指令tail 用于输出文件中尾部的内容,默认情况下 tail 指令显示文件的后 10 行内容。 ➢ 基本语法tail 文件 (功能描述:查看文件头 10 行内容)tail -n 5 文件 (功能描述:查看文件头 5 行内容,5 可以是任意行数)tail -f 文件 (功能描述:实时追踪该文档的所有更新)文件 (功能描述:查看文件头 10 行内容)比如:date >> ./date.log 3次, 则我们可以用 tail -f date.log来看更新内容...
2021-03-09 03:35:50
515
原创 HDFS块的大小:寻址时间和传输时间的均衡
HDFS中的文件在物理上是分块存储(Block),块的大小可以通过配置参数(dfs.blocksize)来规定,默认大小在Hadoop2.x版本中是128M,老版本中是64M。那么,问题来了,为什么一个block的大小就是128M呢?默认为128M的原因,基于最佳传输损耗理论!不论对磁盘的文件进行读还是写,都需要先进行寻址!最佳传输损耗理论:在一次传输中,寻址时间占用总传输时间的1%时,本次传输的损耗最小,为最佳性价比传输!目前硬件的发展条件,普通磁盘写的速率大概为100M/S, 寻址时间一般为1
2021-03-09 03:24:57
1386
2
原创 service指令
介绍:服务(service) 本质就是进程,但是是运行在后台的,通常都会监听某个端口,等待其它程序的请 求,比如(mysql , sshd 防火墙等),因此我们又称为守护进程,是 Linux 中非常重要的知识点。service 管理指令:service 服务名 [start | stop | restart | reload | status] 在 CentOS7.0 后 不再使用 service ,而是 systemctl 使用案例:查看当前防火墙的状况,关闭防火墙和重启防火墙。Servi
2021-03-06 03:17:04
735
原创 Hive中的日志
如果Hive出错了,我们该怎么办呢,当然是去查找日志了!Hive中的日志分为两种系统日志,记录了hive的运行情况,错误状况。Job 日志,记录了Hive 中job的执行的历史过程。1. 系统日志系统日志存储在什么地方呢 ?在hive/conf/ hive-log4j.properties 文件中记录了Hive日志的存储情况,默认的存储情况:hive.root.logger=WARN,DRFAhive.log.dir=/tmp/${user.name} # 默认的存储位置hive.l
2021-03-06 02:52:15
3377
原创 Find指令用法及例子
Find指令怎么用?find 指令将从指定目录向下递归地遍历其各个子目录,将满足条件的文件或者目录显示在终端。➢ 基本语法find [搜索范围] [选项]➢ 选项说明➢ 应用实例案例 1: 按文件名:根据名称查找/home 目录下的 hello.txt 文件find /home -name hello.txt案例 2:按拥有者:查找/opt 目录下,用户名称为 nobody 的文件find /opt -user nobody案例 3:查找整个 linux 系统下大于 10M 的文
2021-03-06 02:39:54
389
原创 scp和rsync的区别
在linux下,我们经常需要两台机器之间拷贝文件,或者由于业务需要备份文件,那就不得不用到scp和rsync两个命令。1.scpcp 在本机复制文件,这个命令我们经常使用,但是跨机器复制cp就不行了,scp可以跨机器复制文件,示例:scp -Crvp -l 1 test/ test@10.16.88.88:/usr/local## test/ 源文件 test@10.16.88.88:/usr/local 目标地址参数解释:-C(大写): 允许传输过
2021-03-05 19:43:50
4778
原创 Hadoop日志信息:系统服务输出的日志和应用程序日志的查看
Hadoop出错了怎么办?找日志!环境:[root@hadp-master hadoop-2.7.4]# hadoop versionHadoop 2.7.4Hadoop的日志大致可以分为两类:(1)Hadoop系统服务输出的日志;(2)Mapreduce程序输出来的日志(应用程序日志)。这两类的日志存放的路径是不一样的。本文基于Hadoop 2.x版本进行说明的,其中有些地方在Hadoop 1.x中是没有的,请周知。一、Hadoop系统服务输出的日志 诸如Nodemanger、Resou
2021-03-05 19:11:09
1521
原创 5. 最长回文子串
最长回文子串给你一个字符串 s,找到 s 中最长的回文子串。示例 1:输入:s = “babad”输出:“bab”解释:“aba” 同样是符合题意的答案。示例 2:输入:s = “cbbd”输出:“bb”示例 3:输入:s = “a”输出:“a”示例 4:输入:s = “ac”输出:“a”双指针:int st, end; public String longestPalindrome(String s) { int len = s.length.
2021-03-04 02:21:05
163
1
原创 Leetcode 3. 无重复字符的最长子串
无重复字符的最长子串给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: s = “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: s = “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: s = “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。请注意,你的答案必须是 子串 的长度,“pw.
2021-03-03 01:20:25
111
原创 Leetcode 2. 两数相加
两数相加给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。方法一:假设两个链表至少有一个不空public ListNode addTwoNumbers(ListNode l1, ListNode l2) { ListNode node = new ListNode(0); ListNod.
2021-03-02 22:31:37
111
原创 Leetcode 1. 两数之和
两数之和给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。你可以按任意顺序返回答案。public int[] twoSum(int[] nums, int target) { Map<Integer, Integer> hashmap = new HashMap<>(); for (int.
2021-03-02 21:09:47
94
原创 map和flatMap的区别
map的作用很容易理解就是对rdd之中的元素进行逐一进行函数操作映射为另外一个rdd。flatMap的操作是将函数应用于rdd之中的每一个元素,将返回的迭代器的所有内容构成新的rdd,他通常用来切分单词。Spark中map函数会对每一条输入进行指定的操作,然后为每一条输入返回一个对象。 而flatMap函数则是两个操作的集合——正是“先映射后扁平化”:例子1:object MapAndFlatMap { def main(args: Array[String]): Unit = { val r
2021-03-02 04:40:53
2261
原创 aggregate和aggregateBy的区别
两者的区别就是,aggregate直接出结果,aggregateByKey出RDD。当两者有一个不为0的初始值时,二者的区别就显示出来了:aggregateByKey:初始值只会参与分区内计算,不会参与分区间计算。aggregate:初始值会参与分区内计算,也会参与分区间计算。也就是说,分区的数据????????初始值和分区内的数据????????????合,然后再和初始值????????分区????的数据????合val rdd: RDD[Int] = sc.makeRDD(List(1, 2,
2021-03-02 04:23:35
783
原创 RDD基本操作
背景:在大数据实际应用开发中存在许多迭代算法,如机器学习、图算法等,和交互式数据挖掘工具。这些应用场景的共同之处是在不同计算阶段之间会重用中间结果,即一个阶段的输出结果会作为下一个阶段的输入。RDD 正是为了满足这种需求而设计的。虽然 MapReduce 具有自动容错、负载平衡和可拓展性的优点,但是其最大的缺点是采用非循环式的数据流模型,使得在迭代计算时要进行大量的磁盘 I/O 操作。所以通过使用 RDD,用户不必担心底层数据的分布式特性,只需要将具体的应用逻辑表达为一系列转换处理,就可以实现管道化,从而避
2021-03-02 04:15:14
1507
原创 RDD是什么?
Spark 的核心是建立在统一的抽象弹性分布式数据集(Resiliennt Distributed Datasets,RDD)之上的,这使得 Spark 的各个组件可以无缝地进行集成,能够在同一个应用程序中完成大数据处理。那什么是RDD呢?详见下图及注释。...
2021-02-24 20:59:01
291
原创 java中父类和接口有什么区别
总结:因为java不支持多继承,故而出现了接口。接口不能通过new实列化对象,但是父类可以(抽象类父类除外)。接口中的方法都是抽象的,而父类中的方法权限没有限制。多态首先是建立在继承的基础上的,先有继承才能有多态。多态是指不同的子类在继承父类后分别都重写覆盖了父类的方法,即父类同一个方法,在继承的子类中表现出不同的形式。但父类和接口都可以表现出多态性,将父类和接口实例化。表现形式:父类或接口 起的名字 = new 子类(左边) (右边)细节:类继承—>
2021-02-24 17:32:01
4741
3
原创 MapReduce跑得慢的原因
Mapreduce 程序效率的瓶颈在于两点:1)计算机性能CPU、内存、磁盘健康、网络(所以万一MR跑得慢了,最简单的方式是提高计算及性能,加内存等等!)2)I/O 操作优化(1)数据倾斜(2)map和reduce数设置不合理(切片问题)(3)reduce等待过久(4)小文件过多(5)大量的不可分块的超大文件(6)spill次数过多(磁盘溢写次数过多)(7)merge次数过多等(因为要对数据进行归并排序)mapreduce 优化方法1)数据输入:(1)合并小文件:在执行mr任务前
2021-02-23 19:55:18
2166
原创 Hive分通表和分区表的区别
把表或分区划分成bucket有两个理由1,更快,桶为表加上额外结构,链接相同列划分了桶的表,可以使用map-side join更加高效。2,取样sampling更高效。没有分区的话需要扫描整个数据集。hive> create table bucketed_user (id int,name string)clustered by (id) sorted by (id asc) into 4 buckets;重点1:CLUSTERED BY来指定划分桶所用列和划分桶的个数。HIVE对key的
2021-02-22 22:39:08
1045
原创 Hive分桶表
分桶表分区提供一个隔离数据和优化查询的便利方式。不过,并非所有的数据集都可形成合理的分区。对于一张表或者分区,Hive 可以进一步组织成桶,也就是更为细粒度的数据范围划分。分桶是将数据集分解成更容易管理的若干部分的另一个技术。分区针对的是数据的存储路径;分桶针对的是数据文件。1. 创建分桶表create table stu_buck(id int, name string)clustered by(id)into 4 bucketsrow format delimited fields term
2021-02-22 22:09:14
494
2
原创 HIVE/SQL窗口函数
一.窗口函数有什么用?在日常工作中,经常会遇到需要在每组内排名,比如下面的业务需求:排名问题:每个部门按业绩来排名topN问题:找出每个部门排名前N的员工进行奖励面对这类需求,就需要使用sql的高级功能窗口函数了。二.什么是窗口函数?窗口函数,也叫OLAP函数(Online Anallytical Processing,联机分析处理),可以对数据库数据进行实时分析处理。窗口函数的基本语法如下:<窗口函数> over (partition by <用于分组的列名>or
2021-02-22 19:13:43
367
原创 HIVE 分区表详解
一、背景1、在Hive Select查询中一般会扫描整个表内容,会消耗很多时间做没必要的工作。有时候只需要扫描表中关心的一部分数据,因此建表时引入了partition概念。2、分区表指的是在创建表时指定的partition的分区空间。3、如果需要创建有分区的表,需要在create表的时候调用可选参数partitioned by,详见表创建的语法结构。二、技术细节1、一个表可以拥有一个或者多个分区,每个分区以文件夹的形式单独存在表文件夹的目录下。2、表和列名不区分大小写。3、分区是以字段的形式在
2021-02-21 19:01:24
4273
原创 4种排序方式比较:order by, sort by, distribute by, cluster by
文章记录了4种排序方式:order by, sort by, distribute by, cluster by总结:order by 全局排序,只有一个 Reducer,通过order对字段进行降序或者升序sort by 对于大规模的数据集 order by 的效率非常低。在很多情况下,并不需要全局排序,此时可以使用 sort by。Sort by 为每个reducer 产生一个排序文件。每个 Reducer 内部进行排序,对全局结果集来说不是排序。distribute by 在有些情
2021-02-21 03:17:47
8553
2
原创 SQL Join方式总结
SQL Join方式总结:(一共7种)1,内连接SELECT FROM TABLEA A INNER JOIN TABLEB B ON A.key=B.key2,全外连接 Mysql暂不支持SELECT FROM TABLEA A FULL OUTER JOIN TABLEB B ON A.key=B.key3,全外连接-差集 Mysql暂不支持SELECT FROM TABLEA A FULL OUTER JOIN TABLEB B ON A.key=B.key WHERE A.key
2021-02-20 23:19:41
207
原创 Group by 和 correlated subqueries的转化
计算 emp 每个部门中每个岗位的最高薪水参数: employee表,包含所有信息 department 部门,string类型 job 工作,string类型 salary 每个人的薪水,int类型答案一:用group bySELECT department, job, max(salary)FROM employeeGROUP BY department,job答案二:用correlated subqueriesSELECT depar
2021-02-20 20:50:57
184
原创 Having和Where+subqueries的转换
Having表示对上述结果进行过滤,所以比Where更加灵活。Where之后不能跟聚合函数,因为where表示对每一行进行条件限制,此时聚合函数的值还没有求出,但是Having可以跟聚合函数,因为Having表示对结果进行过滤。例子:求平均薪资大约2000的部门及部门薪资参数: employee表,包含所有信息 department 部门,string类型 salary 每个人的薪水,int类型下面这个两个答案是错的:(where之后不能用聚合函数的信息)答案1:SELE
2021-02-20 20:25:41
197
原创 Hive数据导出
1.Insert导出2.Hadoop 命令导出到本地3.Hive Shell 命令导出基本语法:(hive -f/-e 执行语句或者脚本 > file)4.Export 导出到 HDFS 上export 和 import 主要用于两个 Hadoop 平台集群之间 Hive 表迁移。
2021-02-20 00:35:10
203
原创 创建表时通过 Location 指定加载数据路径(先有数据,后建表)
如果文件夹中已有txt格式数据,可以先上传数据到HDFS的路径(不一定是数据库和表所在的文件夹),然后再建表。常规方法是先建表,然后用load和insert加载数据。
2021-02-19 23:02:49
2397
1
原创 查询语句中创建表并加载数据(As Select)
这里有一种非常快的建表方式,用As我们根据查询结果创建表(查询的结果会添加到新创建的表中)例如:create table if not exists student3as select id, name from student;然后一个名为student3的表就被建立,并且有两个parameters: id 和 name。其数据类型和student表一样,且student表中每一行的数据也被拷贝到student3中。可以用 show tables 和 select * from student
2021-02-19 22:29:59
993
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人