Hive数据倾斜
什么是数据倾斜数据倾斜在MapReduce编程模型中十分常见。用最通俗易懂的话来说,数据倾斜无非就是大量的相同key被partition分配到一个分区里,造成了“一个人累死,其他人闲死”的情况。这种情况违背了并行计算的初衷。一个节点要承受着巨大的压力,而其他节点计算完毕后要一直等待这个忙碌的节点,拖累了整体的计算时间。效率是十分低下的。
MapReduce程序执行时,reduce节点大部分执行完毕,但是有一个或者几个reduce节点运行很慢,导致整个程序的处理时间很长,这是因为某一个key的条数比其他key多很多(有时是百倍或者千倍之多),这条key所在的reduce节点所处理的数据量比其他节点就大很多,从而导致某几个节点迟迟运行不完。Hive的执行是分阶段的,map处理数据量的差异取决于上一个stage的reduce输出,所以如何将数据均匀地分配到各个reduce中,就是解决数据倾斜的根本所在。
举例:在执行shuffle操作的时候,按照shuffle的原理是按照key来进行values的数据的输出、拉取和聚合的。同一个key的values,一定是分配到一个reduce task进 ...
Java知识点总结——并发部分
参考Java Guide
进程与线程概念进程进程是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的。系统运行一个程序即是一个进程从创建,运行到消亡的过程。
在 Java 中,当我们启动 main 函数时其实就是启动了一个 JVM 的进程,而 main 函数所在的线程就是这个进程中的一个线程,也称主线程。
线程线程与进程相似,但线程是一个比进程更小的执行单位。一个进程在其执行的过程中可以产生多个线程。与进程不同的是同类的多个线程共享进程的堆和方法区资源,但每个线程有自己的程序计数器、虚拟机栈和本地方法栈,所以系统在产生一个线程,或是在各个线程之间作切换工作时,负担要比进程小得多,也正因为如此,线程也被称为轻量级进程。
Java 程序天生就是多线程程序,一个 Java 程序的运行是 main 线程和多个其他线程同时运行。
从JVM角度说进程与线程的区别总结一个进程中可以有多个线程,多个线程共享进程的堆和方法区 (JDK1.8 之后的元空间)**资源,但是每个线程有自己的程序计数器、虚拟机栈和本地方法栈**。
线程是进程划分成的更小的运行单位。线程和进程最大的不同在于基本上各进 ...
Java知识点总结——容器部分
参考Java Guide
集合概述结构框架在 Java 中除了以 Map 结尾的类之外, 其他类都实现了 Collection 接口。
并且,以 Map 结尾的类都实现了 Map 接口。
List,Set,Map 三者的区别
List(对付顺序的好帮手):存储的元素是有序的、可重复的。
Set(注重独一无二的性质):存储的元素是无序的、不可重复的。
Map(用 Key 来搜索的专家):使用键值对(key-value)存储,类似于数学上的函数 y=f(x),“x”代表 key,”y”代表 value,Key 是无序的、不可重复的,value 是无序的、可重复的,每个键最多映射到一个值。
集合框架的底层数据结构List
Arraylist: Object[]数组
Vector:Object[]数组
LinkedList: 双向链表(JDK1.6 之前为循环链表,JDK1.7 取消了循环)
Set
HashSet(无序,唯一): 基于 HashMap 实现的,底层采用 HashMap 来保存元素。
LinkedHashSet:LinkedHashSet 是 HashSet 的子类,并且 ...
在CentOS7上的Superset安装及初始化
安装Python3.6安装Python3.6可能需要的依赖:
1yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel xz-devel
从官网下载最新的3.6.x.tgz包,本文写作时最新的是Python-3.6.13.tgz,解压到/usr/local目录下并进入目录:
12tar -xzvf Python-3.6.13.tgz -C /usr/localcd /usr/local/Python-3.6.13
切换到root账户操作(用普通用户在make install时有可能出现权限不够而无法创建文件的报错,就算加上sudo也不行!):
1su root
把Python3.6安装到指定目录下:
12./configure --prefix=/usr/local/python3.6.13make && make altinstall
如果使用make install,在系统中将会有两个不同版本的Python在/usr/bin/目录中。这将会导 ...
Java知识点总结——基础部分
参考Java Guide
基本功概念与常识Java和C++的区别
都是面向对象的语言,都支持封装、继承和多态
Java 不提供指针来直接访问内存,程序内存更加安全
Java 的类是单继承的,C++ 支持多重继承;虽然 Java 的类不可以多继承,但是接口可以多继承。
Java 有自动内存管理垃圾回收机制(GC),不需要程序员手动释放无用内存
在 C 语言中,字符串或字符数组最后都会有一个额外的字符'\0'来表示结束。但是,Java 语言中没有结束符这一概念。 参考博文
JDK、JRE、JVM
JDK 是 Java Development Kit 缩写,它是功能齐全的 Java SDK。它拥有 JRE 所拥有的一切,还有编译器(javac)和工具(如 javadoc 和 jdb)。它能够创建和编译程序。
JRE 是 Java 运行时环境。它是运行已编译 Java 程序所需的所有内容的集合,包括 Java 虚拟机(JVM),Java 类库,java 命令和其他的一些基础构件。但是,它不能用于创建新程序。
Java 虚拟机(JVM)是运行 Java 字节码的虚拟机。JVM ...
Butterfly3.6.2升级笔记
在2021年春节无聊期间把博客升级了一下,参考官方文档重新新建了一个blog文件夹升级到Butterfly3.6.2版,然后deploy到GitHub上直接覆盖了原来的blog文件夹实现。
并且做了部分在上一版中没有试过的美化/优化/魔改,参考了以下教程,特此记录:
Valine引用B站表情
Valine添加自定义邮件提醒
Valine 评论添加 “博主,小伙伴,访客” 标签
Twikoo评论系统配置教程(基于腾讯云开发)
Butterfly:添加全局吸底 Aplayer 播放器
添加PACE加载进度条
教程:Butterfly主题的一图流和视频流背景修改方法
Hexo 博客之 butterfly 主题优雅更换背景
valine改用waline
butterfly版权美化教程
留言板动态弹出信封样式(薇尔莉特式)
平滑升级魔改后的 Hexo 主题(码一个,下次用)
P.S. 在寻找教程过程中,从作者Jerry本人的友链里发现了一堆魔改的大佬,然后顺着这些大佬的友链欣赏了很多优化的优秀博客作品,以及在他们的友链里发现了更多的大佬。同时在这些大佬中也发现了不少已经成功跨过校招的独木桥拿 ...
Leetcode刷题——数据库专题(非会员题目合集)
175. 组合两个表1234# Write your MySQL query statement belowselect FirstName, LastName, City, Statefrom Person left join Address on Person.PersonId = Address.PersonId
176. 第二高的薪水解1:
12345678# Write your MySQL query statement belowselect ifnull( (select Salary from (select @n := @n + 1 as ranking, Salary from (select @n := 0) as a, (select distinct Salary from Employee) as b order by Salary desc) ...
Leetcode刷题——shell专题(No.192-195)
192. 统计词频提交记录解1:
12# Read from the file words.txt and output the word frequency list to stdout.awk '{for(a=1;a<=NF;a++) print $a}' words.txt | sort | uniq -c | sort -nr | awk '{print $2,$1}'
知识点awk分割出的每一行各字段分行打印1awk '{for(a=1;a<=NF;a++) print $a}' words.txt
注:awk里的print默认打印之后输出一个换行,若不换行用printf。
统计文本文件中重复出现的行列uniq+sort结合使用:
1sort test.txt | uniq -c
注:-c原理是接下来的字符串相同则加一,如果不进行sort排序的话将无法统计数目。
降序排列1sort -r
193. 有效电话号码提交记录解1:
12# Read ...
Java学习笔记(九)——异常
参考教程JDK8帮助文档
狂神说Java视频
什么是异常异常指程序运行中出现的不期而至的各种状况,如:文件找不到、网络连接失败、非法参数等,异常发生在程序运行期间,它影响了正常的程序执行流程。
三种类型:
检查性异常:最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个不存在文件时,一个异常就发生了,这些异常在编译时不能被简单地忽略。
运行时异常:运行时异常是可能被程序员避免的异常。与检查性异常相反,运行时异常可以在编译时被忽略。
错误(ERROR):错误不是异常,而是脱离程序员控制的问题。错误在代码中通常被忽略。例如,当栈溢出时,一个错误就发生了,它们在编译也检查不到。
异常体系结构Java把异常当作对象来处理,并定义一个基类java.lang.Throwable作为所有异常的超类。在Java API中已经定义了许多异常类,这些异常类分为两大类——错误(Error)和异常(Exception)。
ErrorError类对象由Java虚拟机生成并抛出,大多数错误与代码编写者所执行的操作无关。
Java虚拟机运行错误(Virtual MachineE ...
Java学习笔记(八)——面向对象(static、抽象类、接口、内部类)
参考教程JDK8帮助文档
狂神说Java视频
static总结静态变量与静态方法1234567891011121314151617181920212223242526public class Student { private static int age;//静态变量,在类中只有一个,对所有对象是共享的(多线程里常用) private double score;//非静态变量 public void run(){//非静态方法 go();//非静态方法里可以直接访问静态方法 } public static void go(){//静态方法 } public static void main(String[] args) { Student s1 = new Student(); System.out.println(Student.age);//静态变量推荐使用类名直接访问 //System.out.println(Studen ...