自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Hive行列转换函数

Hive行列转换函数数据准备-- 创建一个测试库CREATE DATABASE dw;-- 创建行转列测试数据表CREATE TABLE IF NOT EXISTS dw.person( name string, gender string, age int, hobby string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE;-- 数

2021-12-03 17:08:12 2458

原创 Spark on Yarn环境搭建

1,解压缩spark安装文件tar -zxvf spark-3.0.0-bin-hadoop3.2.tgz -C /opt/module2,修改spark目录名称mv spark-3.0.0-bin-hadoop3.2 spark-yarn3,修改hadoop的yarn-site.xml文件,新增下面内容<!--是否启动一个线程检查每个任务正使用的物理内存量,如果任务超出分配值,则直接将其杀掉,默认是 true --><property> <name&gt

2021-11-26 17:48:30 2578

原创 Kafka中Consumer订阅主题与分区的几种方式

subscribe()方法订阅1.以集合的形式订阅多个主题,如果前后两次订阅了不同的主题,那么消费者以最后一次为准@Overridepublic void subscribe(Collection<String> topics) { subscribe(topics, new NoOpConsumerRebalanceListener());}// 订阅了topic-demo主题consumer.subscribe(Arrays.asList("topic-demo"));

2021-06-01 11:50:28 1311

原创 Java实现邮件发送功能

环境引入两个邮件发送的依赖包<dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.4.7</version></dependency> <!-- https://mvnrepository.com/artifact/javax.activation/activat

2021-04-07 15:49:38 454 2

原创 Kafka生产者客户端原理

Kafka生产者客户端原理1.整体架构整个生产者客户端由两个线程协调运行,一个是主线程,一个是Sender线程;在主线程中消息会先经过拦截器,序列化器,分区器,消息累加器;之后Sender线程从消息累加器中取消息并将其发送到kafka中。拦截器:主要是对kafka的消息进行拦截,可以进行过滤,加上前缀,后缀等等操作序列化器:对发送的消息进行序列化操作,将对象转换成字节数组才能通过网络发送到kafka分区器:我们可以对发送消息的key计算partition的值,作用就是为消息分配分区消息累加器

2021-04-01 16:21:14 231 2

原创 ClickHouse之BitMap的使用

ClickHouse之BitMap的使用1.构建方式一种是从聚合函数groupBitmapState构造的,另外一种就是使用Array对象进行构建2.常用位图函数-- 1.无符号整数构建位图对象select bitmapBuild([1,2,3,4,5]) as res;-- 2.将位图对象转化为整数数组select bitmapToArray(bitmapBuild([1,2,3,4,5])) as res;/*┌─res─────────┐│ [1,2,3,4,5] │└────

2021-03-02 18:11:36 7853

原创 ClickHouse分布式集群搭建

1.在集群的所有机器上都安装ClickHouse服务端使用RPM安装包进行安装,首先添加官方存储库sudo yum install yum-utilssudo rpm --import https://repo.clickhouse.tech/CLICKHOUSE-KEY.GPGsudo yum-config-manager --add-repo https://repo.clickhouse.tech/rpm/stable/x86_64执行安装命令sudo yum install click

2021-02-01 18:08:24 1128

原创 Scala之模式匹配(十一)

基本概念模式匹配是采用了match关键字声明,每个分支采用case关键字进行声明,当需要匹配时,会从第一个case分支开始,如果匹配成功,那么执行对应的逻辑代码,如果匹配不成功,继续执行下一个分支进行判断;当所有的都匹配不到时,就会执行case _ 分支,类似于Java中default语句。守卫基本概念如果想要表达匹配某个范围的数据,就需要在模式匹配中增加条件守卫。案例实操val ch = 10ch match { case '+' => sign = 1 case '-' =&

2020-09-01 19:03:13 167

原创 Scala之高阶函数的使用(map,filter,reduce,.......)(十)

map映射基础概念在某些场景下,我们可能会对集合中的所有元素进行变换;map方法可以将某个函数应用到集合中的每个元素并产出其结果的集合。应用案例使用map映射函数将一个集合中的元素都乘以2,并返回到一个新集合中val list = List(10, 20, 30)val res = list.map(multiple)println("res = " + res) // 输出的结果: List(20, 40, 60)def multiple(n: Int): Int = { 2 * n

2020-08-31 23:25:09 1084

原创 Scala之集合体系(九)

Scala集合基本介绍可变集合与不可变集合可变集合: scala.collection.mutable不可变集合:scala.collection.immutable常用集合种类Seq(序列):有序,比如数组与列表。Set:无序;在SortedSet中,元素以某种排过序的顺序被访问Map:是一组对偶(key,value)数组定长数组第一种方式创建定长数组val arr01 = new Array[Int](10)arr01(1) = 20 // 对数组中的值进行重新赋值第二

2020-08-31 14:31:09 159

原创 Scala之隐式函数的使用(八)

简介所谓隐式函数指的是那种以implicit关键字声明的带有单个参数的函数。正如它的名称所表达的,这样的函数将会自动应用,将值从一种类型转换为另一种类型。隐式函数的使用需求分析:使用隐式函数解决数据类型的转换问题object ImplicitDemo01 { def main(args: Array[String]): Unit = { // 编写一个隐式函数将Double =》 Int implicit def douToInt(d: Double): Int = {

2020-08-30 22:37:52 342

原创 Scala之特质中的自身类型(七)

简介当特质扩展类时,编译器能够保证的一件事是所有混入该特质的类都认这个类作超类;在Scala中还有另外一套机制可以保证这一点,就是使用自身类型。定义方式当特质以如下代码开始定义时this: 类型 =>它便只能混入指定类型的子类案例操作trait Logger { this: Exception => def log(): Unit = { println(getMessage) }}注意该特质Logger并不扩展Exception类,而是有一个自身类型E

2020-08-30 19:42:34 361

原创 Scala之特质构造顺序(六)

简介和类一样,特质也可以有构造器,由字段的初始化和其他特质体中的语句构成。构造顺序声明类的同时混入特质代码案例object MixInSeq { def main(args: Array[String]): Unit = { val ff = new FF println(ff) }}trait AA { println("A...")}trait BB extends AA { println("B....")}trait CC extends

2020-08-30 19:24:45 401

原创 Scala之叠加特质的使用(五)

简介构建对象的同时如果混入了多个特质,称之为叠加特质;特质声明的顺序是从左到右,方法执行的顺序从右到左。案例操作object MixInDemo02 { def main(args: Array[String]): Unit = { // 创建一个动态混入对象时,其顺序是从左到右,从父特质开始输出,加载相同的特质只会输出一次 val mysql = new MySQL4 with DB4 with File4 println("======================

2020-08-28 18:41:12 427 1

原创 Scala之面向对象中伴生对象的使用(四)

简介在Java中,通常会用到既有实例方法又有静态方法的类;在Scala中可以通过类与类同名的"伴生"对象来达到相同的目的。所有的静态内容都可以放置在它的伴生对象中声明和调用。案例object AccompanyObject { def main(args: Array[String]): Unit = { println(Person.sex) Person.sayHi() }}// 伴生类class Person { // 非静态的内容写入到该类中 编译之后生成

2020-08-28 17:56:21 251

原创 Scala之面向对象中构造器的使用(三)

基础简介Scala创建对象时可以调用构造方法,并且Scala可以有任意多个构造方法(相当于重载操作);在Scala中构造器包括主构造器与辅助构造器。主构造器每一个类都会有主构造器,主构造器并不是以this方法进行定义的,而是与类定义交织在一起。object MainCon { def main(args: Array[String]): Unit = { val worker1 = new Worker("smith") worker1.name }}class Wor

2020-08-25 00:04:24 318

原创 Scala之惰性函数(二)

基础概念当val被声明为lazy时,它的初始化将会被推迟;直到我们首次对此进行取值时,函数才会执行,这种函数我们称之为惰性函数。案例使用object LazyDemo01 { def main(args: Array[String]): Unit = { lazy val res = sum(10, 20) println("----------------") //println("res=" + res) } def sum(n1: Int, n2: In

2020-08-24 15:53:39 180

原创 Scala之高级for循环以及for推导式(一)

简介Scala相对于Java而言对于for循环有着很大的改变,Scala对for循环这一常见的控制结构提供了非常多的特性,这些特性被称为for推导式和for表达式。范围数据循环方式使用 to 关键字进行循环for (i <- 1 to 10) { println("boom") }1 to 10 这个调用返回数字1到数字10的Range区间(左右两边都是闭区间),让变量 i 遍历 <- 右边的表达式的所有值。使用 until 关键字进行循环val

2020-08-23 21:46:25 723

原创 Scala软件安装以及环境配置

window下安装Scala一,安装包的准备提供的Scala安装版本为 scala-2.11.8;百度网盘获取地址如下:链接:https://pan.baidu.com/s/1fAKNcV7ysCec3yx6YHjR5Q提取码:x91z二,安装包解压缩下载到本地后解压缩到本地文件夹即可三,配置环境变量SCALA_HOME D:\install\devlop\scala-2.11.8Path %SCALA_HOME%\bin 四,测试环境scala -versio

2020-08-19 19:10:34 607

原创 Scala快速生成文档注释

1.首先进入到该文档所在的路径2.使用cmd进入到命令行窗口3.使用下面的命令生成文档注释scaladoc -d 存放文档所在路径 要生成文档的源码名称example:scaladoc -d d:/doc Test.scala4.点击index就可以查看文档注释了...

2020-07-28 15:06:46 641

原创 windows/Linux下搭建Java开发环境

Windows下JDK的安装jdk版本:jdk1.8.0_202将jdk的安装包放在安装目录中,我是直接放在了C:\Program Files\Java\jdk1.8.0_202下并进行解压缩;配置环境变量JAVA_HOME C:\Program Files\Java\jdk1.8.0_202Path %JAVA_HOME%\bin在cmd窗口中可以查看版本Linux下JDK的安装jdk版本:jdk1.8.0_221在opt目录下创建两个文件夹分别为software与module,

2020-07-28 14:54:05 184

原创 Hadoop压缩方式详解

首先为什么要使用压缩压缩技术能够有效的减少底层存储系统(HDFS)读写字节数,通过对mapper,reducer运行过程的数据进行压缩,以减少磁盘IO,提高MR程序的运行速度。压缩的基本原则1.运算密集型的任务,少使用压缩2.IO密集型的任务,多使用压缩MR支持的压缩格式压缩格式是否需要安装算法文件扩展名是否可切分DEFLATE否deflate.deflate否Gzip否deflate.gz否bzip2否bzip2.bz2是LZ

2020-07-27 15:33:18 284

原创 HDFS常用指令总结

常用指令截图指令实际操作-help:帮助命令参数hdfs dfs -help ls 查看ls命令的作用-ls:显示目录信息hdfs dfs -ls /-mkdir:在hdfs上创建目录hdfs dfs -mkdir -p /user/test -p参数代表可以创建多级目录-moveFromLocal:将本地文件剪切上传到hdfshdfs dfs -moveFromLocal ./demo.txt /user/test-appendToFile:追加一个文件到已经存在的文件末尾

2020-07-26 11:25:30 243

原创 hadoop序列化与Java序列化比较

什么是序列化序列化就是把内存中的对象转化为字节序列,以便于存储到磁盘和进行网络传输。反序列化就是将收到的字节序列或者是磁盘的持久化数据,转换为内存中的对象。为什么要进行序列化一般来说,活的对象只生存在内存中,关机断电后就会失效;而且活的对象只能由本地的进程使用,不能被发送到网络上的另外一台计算机,然而序列化可以存储活的对象,可以将活的对象发送到远程的计算机中。Java序列化Java序列化是一个重量级序列化框架,一个对象被序列化后,会附带很多额外的信息(校验信息流量,header,继承体系等),不

2020-07-20 11:24:13 489

原创 Linux之jdk与hadoop的安装

JDK的安装jdk版本:jdk1.8.0_221在opt目录下创建两个文件夹分别为software与module,software用来存放软件的安装包,module用来存放解压好的软件。首先将jdk-8u221-linux-x64.tar.gz安装包导入到software文件夹下将 jdk 的安装包解压到module文件夹下 tar -zxvf jdk-8u221-linux-x64.tar.gz -C /opt/module/配置 jdk 的环境变量 ,编辑环境变量文件 vim /etc/pr

2020-06-23 23:11:53 255

原创 docker容器虚拟化技术总结

什么是docker解决了运行环境与配置问题的软件容器,方便做持续集成并有助于项目整体发布的容器虚拟化技术。docker能用来干什么在开发与部署的过程中能做到一次构建,多处运行。更快速的应用交付与部署更便捷的升级与扩缩容更简单的系统运维更高效的计算机资源利用docker的基本组成基本组成为:镜像,容器,仓库镜像:是一个只读模板,可以使用镜像来创建容器,一个镜像可以创建多个容器容器:是独立运行的一个或一组应用,是镜像创建的一个实例仓库:是集中存放镜像文件的场所docker的工作

2020-06-15 23:47:50 349

原创 springboot整合pagehelper分页插件

前提环境条件:已创建好一个简单的springboot项目springboot整合pagehelper分页插件步骤如下:1.导入对应的maven依赖<dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId&gt...

2020-05-07 16:38:06 1100

原创 Linux之RPM与YUM相关指令总结

一,RPM包管理1:概念:一种用于互联网下载包的打包及安装工具,它包含在某些Linux分发版中。它生成 具有.RPM扩展名的文件。2:rpm简单查询指令rpm -qa | grep 程序名 (查询已安装的rpm列表)举例:看系统有没有安装火狐rpm -qa | grep firefox3:rpm包的其它查询指令rpm -qa ...

2020-02-14 13:47:38 235

原创 Linux之进程管理与服务管理相关指令

一,进程的概念在Linux系统中,每个执行的程序都称为一个进程,每一个进程都会分配一个ID号二,显示系统执行进程1:查看进程指令psps执行后出现的信息详解:PID 进程id号TTY 终端机号TIME 该进程所使用cpu时间CMD 正在执行的命令或进程...

2020-02-14 13:24:59 231

原创 Linux之任务调度相关指令

一,任务调度概念答:是指系统在某个时间执行的特定的命令或程序二,基本语法crontab [选项]常用选项:-e 编辑crontab定时任务-l 查询crontab任务-r 删除当前用户所有的crontab任务三,命令实战问题:设置个人任务调度,在每小时的每分钟内将/etc下面的目录与文件输入到/tep/hello.txt文...

2020-02-14 11:18:27 287

原创 Linux之组管理和权限管理相关指令

一,Linux组介绍在Linux中每一个用户都必须有一个组,不能独立于组以外;Linux每个文件有所有者,所有组,其它组的概念。二,修改文件所有者指令chown 用户名 文件名三,组的创建groupadd 组名四,文件/目录 所在组1:查看文件/目录 所在组ls -al2:修改文件所在组chgrp 组名 文件名五,改变用户所在组usermo...

2020-02-13 20:19:53 270

原创 Linux系统常用指令总结

一,系统的运行级别0:关机1:单用户模式(可以找回丢失的密码)2:多用户状态没有网络服务3:多用户状态有网络服务4:系统未使用保留给用户5:图形界面6:系统重启注意:在/etc/inittab文件中可以修改默认的运行级别二,切换到指定的运行级别默认指令init 运行级别三,帮助指令1:获取帮助信息man 命令2:help指令he...

2020-02-13 19:37:20 1726

原创 Linux(CentOS系统)中jdk与tomcat的安装详细步骤

一:Linux版本的jdk安装1:首先你得需要下载Linux版本的jdk安装包,下面提供一个jdk1.8版本的安装包 链接:https://pan.baidu.com/s/1D45jM0M-Con5jeXVT3hkZQ提取码:mqng2:将这个安装包上传到Linux系统中,此时就需要一个window与Linux之间上传和下载文件的工具了,我前面的博客中有File...

2020-02-11 21:55:45 300

原创 Linux用户管理相关指令

1:添加用户指令useradd 用户名useradd -g 用户组 用户名(这是在添加用户时直接添加组信息)usermod-g 用户组 用户名(修改用户的组信息)2:添加用户密码指令passwd 用户名3:删除用户指令userdel 用户名(保留了家目录)userdel -r 用户名(没有保留家目录)4:查询用户信息id 用户名5:切换用户su...

2020-02-07 13:11:07 108

原创 Linux指令之关机,重启,用户登录注销总结

1:关机与重启指令shutdownshutdown -h now:表示立即关机shutdown -h1:表示一分钟后关机shutdown -r now:立即重启hat:就是直接使用,效果等价于关机reboot:重启系统sync:把内存的数据同步到磁盘注意:当我们关机或者重启的时候,都应该执行下sync指令,防止数据的丢失。登录与注销指令登录:常规的用户...

2020-02-06 16:29:19 154

原创 尚硅谷Linux教程全套资料(包含Xshell6远程连接工具与FileZilla上传下载工具)

网盘连接:https://pan.baidu.com/s/1KFN0XtDQx8tf_mCO5GdcZg提取码:iaab

2020-02-06 15:15:01 1365

原创 尚硅谷SpringCloud的面试题总结

1.什么是微服务?答:微服务化的核心就是将传统的一站式应用,根据业务拆分成一个一个的服务,彻底的去除耦合,每个微服务提供单个业务功能的服务,一个服务只做一件事情,从技术的角度看就是一种小而独立的处理过程,类似于进程的概念,能够自行的单独启动和销毁,拥有自己独立的数据库。2.微服务之间是如何独立通讯的?答:微服务之间的通信机制spring cloud:它是使用了http的rest方式...

2020-02-04 17:24:29 618

原创 多线程常见面试题(二)

1.线程之间的基本状态有哪些?以及状态与状态之间有什么关系?答:新建,等待,就绪,运行,阻塞,死亡;关系见下图:2.如何能够保证线程安全答:线程的安全主要是体现在下面三个方面1.原子性:提供互斥访问,同一时刻只能有一个线程对数据进行操作,(atomic,synchronized);2.可见性:一个线程对主内存的修改可以及时地被其他线程看到,(synchronized,v...

2020-01-13 16:28:14 135

原创 最详细的try catch finally中有返回值的不同情况论证

第一种情况:try{} catch(){} finally{} return;这种情况是按照正常的顺序执行public static void main(String[] args) { int res=test1(); System.out.println("res:"+res); } public static int test1()...

2020-01-08 15:58:09 346

原创 两张表关联起来写update语句

假设有两张表tab1与tab2,tab1中的A字段与tab2中的B字段相等,然后需要将tab1的字段C值赋值到tab2字段D中;有个条件tab1,tab2的A,B字段不能在表中有同名数据sql代码的实现:UPDATE tab2SET tab2.`D`=(SELECT tab1.`C` FROM tab1 WHERE tab1.`A`=tab2.`B`);...

2020-01-04 17:15:03 2204

空空如也

空空如也

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

TA关注的人

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