自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(59)
  • 收藏
  • 关注

原创 一些非常好的网站

统计一下非常好的网站,怕找不到了。

2023-05-27 23:47:37 124

原创 设计模式介绍加实现代码

设计模式包含创建、结构型和行为型。本文按照类型,罗列了一些常见的设计模式,给出了基本的定义,和代码案例。后续会不断的优化定义,代码。

2023-03-19 22:24:45 522

原创 进程杀不掉,端口释放不了

进程杀不掉,端口释放不了

2023-01-18 13:15:14 459

原创 super和和extends使用

Java范型super和extends的使用

2022-12-10 13:58:14 155

原创 创建型【单例模式】

设计模式主要分为三大类,创建型,结构型和行为型。创建型设计模式主要解决的是对象创建的问题。

2022-10-16 17:24:18 221

原创 有哪些看起来是面向对象的代码实际上面向过程的

1.滥用getter、setter方法在设计实现类的时候,除非真的需要,否则尽量不要给属性定义setter方法。除此之外,尽管getter方法相对setter方法要安全些,但是如果返回的是集合容器,那也要防范集合内部数据被修改的风险。2.Constants类、Utils类的设计问题对于这两种类的设计,我们尽量能做到职责单一,定义一些细化的小类,比如RedisConstants、FileUtils,而不是定义一个大而全的Constants类、Utils类。除此之外,如果能将这些类中的属性和方法,划分归并

2022-01-01 17:06:10 210

原创 封装、抽象、继承、多态分别解决什么问题

封装又称信息隐藏或者数据访问保护。外部只能通过类提供的方法来访问数据。需要编程语言提供权限访问控制语法来支持,例如Java中的private、protected、public关键字。意义:一方面保护数据不被随意修改,提高代码的可维护性;另一方面是仅暴露有限的必要接口,提高类的易用性。抽象讲如何隐藏方法的具体实现。可以通过接口类或者抽象类来实现。并不需要特殊的语法机制来支持。意义:一方面是提高代码的可扩展性、维护性,修改实现不需要改变定义,减少代码的改动范围;另一方面,它也是处理复杂系..

2021-12-31 01:05:21 411

原创 Linux查看日志的指令

Linux系统上查看日志常用的指令有tailtail#查看日志最后300行的代码tail -n 300 app.log #查看300行之后的日志 tail -n +300 app.log #动态实时查询最后300的日志tail -fn 300 app.log#动态实时查看日志tail -f app.loghead和tail是相反,head是看前多少行日志#查看前300行的日志head -n 300 app.log#查看最后300行之前的所有日志head -n +300 app

2021-12-05 15:15:31 1594 1

原创 设计模式导读

准备系统的学习一下设模式,故开了一个专栏,希望可以让自己的代码能里能得到一个质的提升。专栏第一篇文章,我将简述为什么要学习设计模式,好代码的评判标准是什么,1 为什么要学习设计模式应对面试中的设计模式相关问题;告别写被人吐槽的烂代码;提高复杂代码的设计和开发能力;让读源码、学框架事半功倍;为你的职场发展做铺垫。2 好代码的评判标准可维护性落实到编码开发,所谓的“维护”无外乎就是修改bug、修改老的代码、添加新的代码之类的工作。所谓“代码易维护”就是指,在不破坏原有代码设计、不引入新

2021-12-04 14:02:31 111

原创 Java Exception和Error

Exception和Error都是集成Throwable类,在java中只有Throwable类型的实例才可以被抛出或者捕获,它是异常处理的基本类型。Exception和Error体现了java平台设计者对不同异常情况的分类。Exception是程序正常运行中,可以预料的意外情况,可能并且应该被捕获,进行相应处理。Exception又可分为可检查异常和不可检查异常。可检查异常必须要在源代码中进行显示的捕获处理,这是编译检查的一部分。不可检查异常是运行时异常,像NullPointerException

2021-09-05 18:00:00 190

原创 java反射机制的作用(代码展示)

java反射机制允许程序在运行时进行自我检查,同时也允许对其内部的成员变量进行操作。主要功能有:得到一个对象所属的类,获取一个类的所有成员变量和方法,在运行时创建对象,在运行时调用对象的方法。以下直接通过代码展示。package functions;import java.lang.reflect.Constructor;import java.lang.reflect.Field;import java.lang.reflect.Method;public class ReflectTest

2021-09-05 16:04:45 79

原创 Java中equals,==和hashcode的区别

==基本数据类型(byte,short,int,long,double,float,char,boolean):他们之间的比较应该用==,比较的是他们的值引用数据类型:当我们用==进行比较的时候,比较的是他们在内存(准确说是堆内存)中的地址equals()java当中的所有的类都是继承Object这个超类,在Object类中定义了一个equals方法,他的源码如下:public boolean equals(Object obj) { //this - s1 //obj - s

2021-09-04 13:22:16 132

原创 Spark的基本工作流程

Spark运行时的基本工作流程如下:(1)任何spark应用程序都包含driver代码和executor代码。spark应用程序首先在driver初始化SparkContext。因为SparkContext是spark应用程序通往集群的唯一路径,在SparkContext中包含了DAGScheduler和TaskScheduler两个调度器类。在创建SparkContext对象的同时也自动创建了这两个类。-(2)SparkContext初始化完成以后,首先根据Spark的相关配置,向Cluster

2021-08-29 16:32:08 3954 1

原创 Spark中的一些术语

Application:用户构建的应用程序,包括驱动程序(一个Driver功能的代码)和在集群的多个工作结点上运行的Executor代码。Driver:运行应用的main()函数并创建SparkContext进程。初始化SparkContext是为了准备Spark应用程序的运行环境,在Spark中由SparkContext负责与集群进行通信,进行资源的申请、任务的分配和监控等。当Worker结点中的Executor部分运行完毕后,Driver同时负责将SparkContext关闭。Executor:在.

2021-08-29 12:06:39 118

原创 Spark远程提交应用到yarn上

在一个节点上安装spark,将yarn上hdfs-site.xml,core-site.xml,yarn-site.xml拷贝到spark根路径conf目录下面。这时候提交应用会报错,如下图所示:修改spark-env.sh,新增1个配置项,export HADOOP_CONF_DIR=spark的conf目录即可。( YARN_CONF_DIR不用配置)...

2021-08-12 16:37:13 867

原创 java打-with-dependencies jar包

Maven pom文件plugin插件如下: <plugins> <plugin> <artifactId>maven-assembly-plugin</artifactId> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRe

2021-08-12 09:42:16 1570

原创 Spark程序调优

Spark性能兹以为可分为三大块:JVM层面的调优程序层面的调优业务和平台层面的调优本篇主要描述程序层面的调优。主要包括三方面:1,数据序列化序列化对提高分布式程序的性能起到非常重要的作用。一个不好的序列化方式(如序列化模式的速度非常慢或者序列化结果非常大)会极大降低计算速度。在很多情况下这是我们优化Spark应用的第一选择。Spark试图在方便和性能之间获得一个平衡。Spark提供了两个序列化类库。java序列化(默认):Java序列化非常灵活,但是速度较慢,在某些情况下序列化的结果也

2021-08-08 11:57:37 189

原创 Spark内存优化

内存优化有三个方面的考虑:对象所占用的内存(或许大家都希望将所有数据都加载到内存),优化Spark的缓存以及内存回收(GC)所占用的开销。1,对象所占用的内存首先要估算对象所占用的内存,然后从两方面进行改进–通过改变数据结构或者采用序列化的方式。1.1,确定内存消耗创建一个RDD,然后将其放入缓存,最后阅读驱动程序中SparkContext的日志。日志会告诉我们每一部分所占用的内存大小,可以收集该类信息以确定RDD消耗内存的最终大小。1.2,优化数据结构减少内存使用的第一条路径是避免使用一些额外

2021-08-08 11:08:22 701

原创 Python生成依赖包文件requirements.txt并下载安装

Python查看安装的包 pip listPython生成requirements.txtpip3 freeze > requirements.txtPython下载requirements.txt中的依赖包pip download -r requirements.txt -d D:\\pkgsPython安装目录中的依赖包#根据requirements.txt 安装pip install -r requirements.txt #离线安装pip install --no-i

2021-07-19 14:36:01 5035 1

原创 Kafka生产者的幂等和事务

从kafka0.11开始,KafkaProducer又支持两者模式,幂等生产者和事务生产者。幂等生产者加强了kafka的交付语义,从至少一次交付到精确一次交付。特别是生产者的重试将不再引入重复。事务性生产者允许应用程序原子性地将消息发送到多个分区(和主题)。幂等要启动幂等,必须将enable.idempotence配置为true。如果设置了,则retries(重试)配置将默认为Integer.MAX_VALUE,acks配置将默认为all。API没有变化,所以无需修改现有应用程序即可利用此功能。此外,

2021-07-19 08:55:49 131

原创 详解同步、异步、阻塞、非阻塞

本文今天化繁为简,用最简单的话把什么是同步,异步,阻塞和非阻塞说清楚。同步和异步关注的是消息通信机制。同步:就是在发起一个调用时,在没有得到结果之前,该调用就不返回。但是一旦调用返回,就得到返回值了。换句话说,就是由调用者主动等待这个调用的结果。(例如银行转账系统,数据库保存操作)异步:调用在发出后,这个调用就直接返回了,所以没有返回结果。换句话说,当一个异步过程调用发出以后,调用者不会立刻得到结果,而是在调用发出后,被调用者通过状态或者通知来告知调用者,或者通过回调函数处理这个调用。(数据库

2021-07-18 10:45:56 145

原创 Spark Shuffle概述

因为2.x以后,Hash Shuffle 就已经退出了Spark的历史舞台,因此本文不再对hash shuffle进行讨论,主要讨论sort shuffle。SortShuffleManager的运行机制主要分成两种,一种是普通运行机制,另一种是bypass运行机制。当shuffle read task的数量小于等等于spark.shuffle.sort.bypassMergeThreshold参数的值时(默认为200),就会启用bypass机制。普通机制的Sort Shuffle这种机制和mapre

2021-07-15 21:39:35 159

原创 解决Hive数据倾斜

数据倾斜就是数据的分布不平衡,有些地方数据多,有些地方数据少,有些地方数据早早地处理完了,有些地方数据迟迟没有处理完成,造成整个处理流程迟迟没有结束。Hive的数据倾斜本质上是MapReduce的数据倾斜。mr的数据倾斜指的是上游的数据经过hash送到不同的reduce中,有些reduce task中的数据少,处理很快完成,但是有些reduce task中的数据多,花了很长时间才处理完成,造成整个处理流程花费的时间很长。当我们发现所有的map task全部完成,并且99%的reduce task完成,只

2021-07-04 15:09:04 487

原创 Hive join(MapReduce)和Spark join

Hive的执行引擎默认是MapReduce,所以hive join实际是MapReduce join。当然如果是hive on spark模式,那么hive join就是spark join。Hive join(MapReduce)mr的join可以分成 common join(reduce阶段完成join)和map join(map阶段完成join)。1.common join如果不指定map join,或者不满足map join的条件,那么hive解析器默认进行common join操作,即在r

2021-07-02 18:00:27 892 2

原创 Hive SQL执行顺序

1.执行顺序在 hive 和 mysql 中都可以通过 explain+sql 语句,来查看执行顺序。对于一条标准 sql 语句,它的书写顺序是这样的:select … from … where … group by … having … order by … limit …(1)mysql 语句执行顺序:from... where...group by... having.... select ... order by... limit …(2)hive 语句执行顺序:from … whe

2021-07-01 14:19:02 1714

原创 hive中有哪几种排序

order by:会对查询出的结果集执行一次全局排序,意味着所有的数据都通过一个 reduce 进行处理过程,这对于大数据集,这个过程将消耗很大的时间来执行。在严格模式下直接使用 order by 会报错,必须加上 LIMIT 关键字。字段后面加上asc关键字(默认)表示升序,desc关键字是降序排序。sort by:执行一个局部排序过程。这可以保证每个 reduce 的输出数据都是有序的(但并非全局有序)。在使用sort by之前,需要先设置Reduce的数量>1,才会做局部排序,如果Reduc.

2021-07-01 13:50:01 299

原创 SparkContext初始化过程

SparkContext是Spark进行应用开发的主要接口,是Spark上层应用与底层实现的中转站。SparkContext最重要的入参是SparkConf。步骤一: 读取SparkConf参数配置,进行一些基本的参数值的判断赋值。步骤二: 根据SparkConf创建SparkEnv,包含Spark实例运行时候所需要的所有运行时所有环境变量。步骤三: 创建TaskScheduler,同时根据Spark运行模式选择 相应的schedulerBackendcreateTaskSchedul

2021-07-01 02:13:48 265 2

原创 MapReduce split和block的关系

block是物理上的划分,hadoop 2.x中block的大小默认为128M,每一个文件都会被切分成多个block。只是一种逻辑上划分,目的是为了让Map Task更好的获取数据输入。例子:如何计算map数量?假设有两个文件,block数如下:File 1 : Block11, Block 12, Block 13, Block 14, Block 15File 2 : Block21, Block 22, Block 23totalSize = 8(总的block数量)设置的并行度为2,那

2021-06-25 00:39:06 1655

原创 textFile分区数计算

4个文件长度分别为100 100 100 1400字节,默认最小分区为2首先计算全部文件总长度totalSize=100+100+100+1400=1700goalSize=totalSize/最小分区数即2 =850blockSize=128M换算成字节为134217728minSize=1goalSize与blockSize取最小 值为850850 与minSize取最大 值为850即splitSize为850然后 每个文件长度除以850 判断是否大于1.1文件1,2,3都是100所以

2021-06-24 10:06:24 272

原创 基于Ganymed远程执行命令,下载sftp文件(加设置代理)

可远程下载sftp服务器上的文件,可以远程执行Linux指令,可以设置代理。package com.download.utils;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import ch.ethz.ssh2.Connection;import ch.ethz.ssh2.HTTPProxyData;

2021-06-17 10:51:11 248

原创 hive数据类型

hive数据类型hive支持原始数据类型和复杂类型,原始类型包括数值型,Boolean,字符串,时间戳。复杂类型包括array,map,struct和union。原始数据类型如下:类型名称大小备注tinyint1字节整数45Ysmallint2字节整数12Sint4字节整数10bigint8字节整数244Lfloat4字节单精度浮点数1.0double8字节单精度浮点数1.0decimal任意精度带符号小数decima

2021-05-17 11:16:11 271

原创 Shell编程入门

1,创建shell脚本新建文件test.sh,其中sh是拓展名,不影响脚本执行,只是为了见名知意,比如用php写的脚本,拓展名可以用php。test.sh内容如下:#!/bin/bashecho "bash shell"#!是一个约定的标记,告诉系统这个脚本需要用什么解释器来执行,即使用哪一种shell。2,运行shell脚本1、 作为可执行程序chmod +x ./test.sh #使脚本具有执行权限./test.sh #执行脚本一定要写成./test.sh,而不是test.sh,

2021-04-21 20:52:48 182

原创 基于Java实现spark应用监控

import java.io.IOException;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.yarn.api.records.ApplicationId;import org.apache.hadoop.yarn.api.records.ApplicationReport;import org.apache.hadoop.yarn.api.records.YarnApplicationState;

2021-03-24 15:55:40 428 1

原创 HDFS面试题汇总大全

1 HDFS 1.0 架构NameNodeNameNode 负责管理整个分布式系统的元数据,主要包括:目录树结构;文件到数据库 Block 的映射关系;Block 副本及其存储位置等管理数据;DataNode 的状态监控,两者通过段时间间隔的心跳来传递管理信息和数据信息,通过这种方式的信息传递,NameNode 可以获知每个 DataNode 保存的 Block 信息、DataNode 的健康状况、命令 DataNode 启动停止等(如果发现某个 DataNode 节点故障,NameNode

2021-03-12 23:56:20 879 2

原创 Spark面试题汇总大全

RDD 简介RDD是Spark最基本也是最根本的数据抽象,它具备像MapReduce等数据流模型的容错性,并且允许开发人员在大型集群上执行基于内存的计算。现有的数据流系统对两种应用的处理并不高效:一是迭代式算法;二是交互式数据挖掘工具。这两种情况下,将数据保存在内存中能够极大地提高性能。为了有效地实现容错,RDD提供了一种高度受限的共享内存,即RDD是只读的,并且只能通过其他RDD上的批量操作来创建。分布式数据集更新一般来说,分布式数据集的容错性有两种方式:数据检查点和记录数据的更新。我们面向的是大规

2021-03-06 19:11:11 2220 1

原创 yarn面试题汇总大全

yarn主要作用资源管理,任务调度yarn的结构yarn总体上是master/slave结构,主要由ResourceManager、NodeManager、ApplicationMaster和Container等几个组件组成。2.1 RMRM负责处理客户端请求,对各NM上的资源进行统一管理和调度,给AplicationMaster分配空闲的Container运行并监控其运行状态,主要由调度器和应用程序管理器构成。调度器仅根据各个应用程序的资源需求进行资源分配,而资源分配的单位是Containe

2021-03-06 18:47:55 2329

原创 Hive面试题汇总大全

1 什么是hive?Hive 是基于Hadoop 的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类SQL 查询功能。本质是:将HQL 转化成MapReduce 程序1)Hive 处理的数据存储在HDFS2)Hive 分析数据底层的实现是MapReduce3)执行程序运行在Yarn 上2 Hive的优缺点优点:1 操作接口采用类SQL 语法,提供快速开发的能力(简单、容易上手)。2 避免了去写MapReduce,减少开发人员的学习成本。3 Hive 的执行延迟比较高

2021-03-06 18:22:23 7024 1

原创 Kafka面试题汇总大全

1 Kafka主题中的分区数越多吞吐量就越高?Partition的数量并不是越多越好,Partition的数量越多,平均到每一个Broker上的数量也就越多。考虑到Broker宕机(Network Failure, Full GC)的情况下,需要由Controller来为所有宕机的Broker上的所有Partition重新选举Leader,假设每个Partition的选举消耗10ms,如果Broker上有500个Partition,那么在进行选举的5s的时间里,对上述Partition的读写操作都会触发L

2021-03-06 16:02:51 813

原创 Redis面试题汇总大全

1. Sentinel启动初始化过程1)初始化服务器。因为Sentinel本质上只是一个运行在特殊模式下的Redis服务器,所以启动Sentinel的第一步,就是初始化一个普通的Redis服务器。因为Sentinel执行的工作和普通Redis服务器执行的工作不同,所以Sentinel的初始化过程和普通Redis服务器的初始化过程并不完全相同2)将普通Redis服务器使用的代码替换成Sentinel专用代码。将一部分普通Redis服务器使用的代码替换成Sentinel专用代码,比如说,普通Redis

2021-03-01 00:33:20 335

原创 Zookeeper面试题汇总大全

1,概述Zookeeper是一个开源的分布式的,为分布式应用提供协调服务的Apache项目。2,Zookeeper特点Zookeeper:一个leader多个follower组成的集群。集群中只要有半数以上的节点存活,zk集群就能正常提供服务。全局数据一致性:每一个server都保存一份相同的数据副本,client无论连接到哪个server,数据都是一致的。更新请求按顺序进行,来自同一个client的更新请求按其发送顺序依次执行。数据更新原子性:一次数据更新要么成功,要么失败。实时性:

2021-02-17 23:21:51 1046

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除