- 博客(203)
- 资源 (3)
- 收藏
- 关注
原创 Java常见面试题汇总
当线程 A 持有独占锁a,并尝试去获取独占锁 b 的同时,线程 B 持有独占锁 b,并尝试获取独占锁 a 的情况下,就会发生 AB 两个线程由于互相持有对方需要的锁,而发生的阻塞现象,我们称为死锁。反射是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为 Java 语言的反射机制。Java 序列化是为了保存各种对象在内存中的状态,并且可以把保存的对象状态再读出来。
2025-06-06 11:27:24
1079
原创 ArrayList与LinkedList的区别分析
如果你需要频繁在列表任意位置(尤其是头部)插入删除,且很少随机访问,因其良好的综合性能(尤其是随机访问和尾插)而被更广泛地使用。定位慢 (O(n)) + 操作快 (O(1)) =选择哪一个取决于你的具体需求。接口,但它们的底层数据结构和工作原理。记住,如果你需要频繁按索引访问元素,(仅数据和数组容量开销)(每个节点额外两个指针)/ 慢 (O(n))
2025-06-06 11:23:34
376
原创 Java基本类型与引用类型区别详解
在Java中,数据类型分为,它们在存储方式、行为特性和内存管理上有本质区别。Java定义了,直接存储数据值:类型大小默认值取值范围/说明byte8位(1字节)0-128 ~ 127short16位(2字节)0int32位(4字节)0-2³¹ ~ 2³¹-1(约±21亿)long64位(8字节)0Lfloat32位(4字节)0.0f单精度浮点数(精度约6-7位小数)double64位(8字节)0.0d双精度浮点数(精度约15位小数)char16位(2字节)'\u0000'
2025-06-06 11:21:25
246
原创 Java抽象类和接口的区别
抽象类接口核心目的:构建类层次结构核心目的:定义行为标准关键优势:代码复用 + 状态封装关键优势:灵活性 + 解耦典型场景Animal→DogCat典型场景RunnableCloneable💡经验法则优先用接口(更灵活、解耦、易扩展)当需要共享代码或状态时,改用抽象类Java 8 后两者功能趋近,但设计思想不变。
2025-06-06 11:20:49
501
原创 Kafka常用调优方式总结
内存操作和 I/O 操作的时间量级是不同的,前者通常是几百纳秒级别,而后者则是从毫秒到秒级别不等,因此,Producer 等待 8ms 积攒出的消息数,可能远远多于同等时间内 Producer 能够发送的消息数。消息,比如 Producer 每次发送前先等待 8ms,8ms 之后,Producer 共缓存了 1000 条消息,此时总延时就累加到 10ms(即 2ms + 8ms)了,而 TPS 等于 1000 / 0.01 = 100,000 条 / 秒。另外,你一定要尽力避免 Full GC 的出现。
2025-06-06 10:58:22
881
原创 Kafka主流监控工具
这显然是不能被允许的。不过,目前该框架已经有 4 个月没有更新了,而且它的活跃的代码维护者只有三四个人,因此,很多 Bug 或问题都不能及时得到修复,更重要的是,它无法追上 Apache Kafka 版本的更迭速度。不过,它的好处是,该项目的主要贡献者是 LinkedIn 团队维护 Kafka 集群的主要负责人,所以质量是很有保证的。总之,作为一款非常强大的 Kafka 开源监控框架,Kafka Manager 提供了丰富的实时监控指标以及适当的管理功能,非常适合一般的 Kafka 集群监控,值得你一试。
2025-06-06 10:53:59
423
原创 07 | ZooKeeper 分布式锁案例
比如说"进程 1"在使用该资源的时候,会先去获得锁,"进程 1"获得锁以后会对该资源保持独占,这样其他进程就无法访问该资源,"进程 1"用完该资源以后就将锁释放掉,让其 他进程来获得锁,那么通过这个锁机制,我们就能保证了分布式系统中多个进程能够有序的 访问该临界资源。那么我们把这个分布式环境下的这个锁叫作分布式锁。2)Curator 是一个专门解决分布式锁的框架,解决了原生 Java API 开发分布式遇到的问题。(1)会话连接是异步的,需要自己去处理。(3)开发的复杂性还是比较高的。什么叫做分布式锁呢?
2025-06-06 09:54:32
282
1
原创 06 | 服务器动态上下线监听案例
3回到 DistributeServer 的 main 方法,右键,在弹出的窗口中点击 Run “DistributeServer.main()”2在弹出的窗口中(Program arguments)输入想启动的主机,例如,hadoop102。(2)在 hadoop102 上 zk 的客户端/servers 目录上创建临时带序号节点。(1)启动 DistributeClient 客户端(如果已经启动过,不需要重启)(1)启动 DistributeClient 客户端。(3)观察 Idea 控制台变化。
2025-06-06 09:53:42
242
1
原创 05 | Zookeeper客户端API操作
需要在项目的 src/main/resources 目录下,新建一个文件,命名为“log4j.properties”,在文件中填入。前提:保证 hadoop102、hadoop103、hadoop104 服务器上 Zookeeper 集群服务端启动。(2)在 hadoop102 的客户端上创建再创建一个节点/atguigu1,观察 IDEA 控制台。(3)在 hadoop102 的客户端上删除节点/atguigu1,观察 IDEA 控制台。测试:在 hadoop102 的 zk 客户端上查看创建节点情况。
2025-06-06 09:52:35
275
1
原创 04 | Zookeeper客户端命令行操作
客户端注册监听它关心的目录节点,当目录节点发生变化(数据改变、节点删除、子目 录节点增加删除)时,ZooKeeper 会通知客户端。监听机制保证 ZooKeeper 保存的任何的数 据的任何改变都能快速的响应到监听了该节点的应用程序。2)在main线程中创建Zookeeper客户端,这时就会创建两个线程,一个负责网络连接通信(connet),一个负责监听(listener)。(4)临时顺序编号目录节点 客户端与Zookeeper断开连接后,该节点被删除,只是Zookeeper给该节点名称进行顺序编号。
2025-06-06 09:51:23
298
原创 03 | Zookeeper集群操作
服务器1和2分别投自己一票并交换选票信息:此时服务器1发现服务器2的myid比自己目前投票推举的(服务器1)大,更改选票为推举服务器2。此时服务器1票数0票,服务器2票数2票,没有半数以上结果,选举无法完成,服务器1,2状态保持。此次投票结果:服务器1为0票,服务器2为0票,服务器3为3票。假设ZooKeeper由5台服务器组成,SID分别为1、2、3、4、5,ZXID分别为8、8、8、7、7,并且此时SID为3的服务器是Leader。此时服务器1,2,3已经不是LOOKING状态,不会更改选票信息。
2025-06-06 09:50:15
493
2
原创 02 | Zookeeper本地安装
(1)将/opt/module/zookeeper-3.5.7/conf 这个路径下的 zoo_sample.cfg 修改为 zoo.cfg;: 保存Zookeeper中的数据,注意:默认的tmp目录,容易被Linux系统定期删除,所以一般不用默认的tmp目录。= 10: LF初始通信时限,Leader和Follower初始连接时能容忍的最多心跳数(tickTime的数量)(3)在/opt/module/zookeeper-3.5.7/这个目录上创建 zkData 文件夹。(1)启动 Zookeeper。
2025-06-06 09:48:09
311
2
原创 01 | Zookeeper入门
Zookeeper 是一个开源的分布式的,为分布式框架提供协调服务的 Apache 项目。Zookeeper工作机制Zookeeper从设计模式角度来理解:是一个基于观察者模式设计的分布式服务管理框架,它负责存储和管理大家都关心的数据,然后接受观察者的注册,一旦这些数据的状态发生变化,Zookeeper 就将负责通知已经在Zookeeper上注册的那些观察者做出相应的反应。Zookeeper=文件系统+通知机制。
2025-06-06 09:47:00
496
原创 15 | Hive常见问题与错误
(1)导错驱动包,应该把mysql-connector-java-5.1.27-bin.jar导入/opt/module/hive/lib的不是这个包。解决方案:在/var/lib/mysql目录下创建:-rw-rw----. 1 mysql mysql 5 12月 22 16:41 hadoop102.pid文件,并修改权限为777。在Hive客户端临时设置io.sort.mb和mapreduce.task.io.sort.mb两个参数的值为10。可能是Hadoop的Yarn没开启。
2025-06-05 09:53:49
687
2
原创 14 | 计算资源优化
Explain呈现的执行计划,由一系列Stage组成,这一系列Stage具有依赖关系,每个Stage对应一个MapReduce Job,或者一个文件系统操作等。
2025-06-05 09:53:08
885
2
原创 13 | Hive文件格式和压缩
Body由1个或多个stripe组成,每个stripe一般为HDFS的块大小,每一个stripe包含多条记录,这些记录按照列进行独立存储,每个stripe里有三部分组成,分别是Index Data,Row Data,Stripe Footer。查询满足条件的一整行数据的时候,列存储则需要去每个聚集的字段找到对应的每个列的值,行存储只需要找到其中一个值,其余的值都在相邻地方,所以此时行存储查询的速度更快。需要注意的是,在执行往表中导入数据的SQL语句时,用户需设置以下参数,来保证写入表中的数据是被压缩的。
2025-06-05 09:51:00
503
1
原创 12 | Hive分区表
再比如,若分区表为外部表,用户执行drop partition命令后,分区元数据会被删除,而HDFS的分区路径不会被删除,同样会导致Hive的元数据和HDFS的分区路径不一致。对于一张表或者分区,Hive 可以进一步组织成桶,也就是更为细粒度的数据范围划分,分区针对的是数据的存储路径,分桶针对的是数据文件。分桶表的基本原理是,首先为每行数据计算一个指定字段的数据的hash值,然后模以一个指定的分桶数,最后将取模运算结果相同的行,写入同一个文件中,这个文件就称为一个分桶(bucket)。
2025-06-05 09:50:03
760
原创 11 | Hive自定义函数
1Hive自带了一些函数比如max/min等但是数量有限自己可以通过自定义UDF来方便的扩展。2当Hive提供的内置函数无法满足你的业务处理需要时此时就可以考虑使用用户自定义函数UDF。3一进一出。用户自定义聚合函数,多进一出。类似于:count/max/min用户自定义表生成函数,一进多出。如lateral view explode()4官方文档地址5编程步骤(1)继承Hive提供的类(2)实现类中的抽象方法(3)在hive的命令行窗口创建函数。
2025-06-05 09:49:05
813
原创 10 | Hive函数
语法:get_json_object(string json_string, string path)语法:regexp_replace(string A, string B, string C)语法:concat_ws(string A, string…语法二:substring(string A, int start, int len)语法:concat(string A, string B, string C, ……语法:replace(string A, string B, string C)
2025-06-05 09:48:02
673
原创 09 | Hive Join语句
本例中会首先启动一个MapReduce job对表e和表d进行连接操作,然后会再启动一个MapReduce job将第一个MapReduce job的输出和表l进行连接操作。union和union all都是上下拼接sql的结果,这点是和join有区别的,join是左右关联,union和union all是上下拼接。例如:连接三个表,至少需要两个连接条件。(1)根据员工表和部门表中的部门编号相等,查询员工编号、员工名称和部门名称。将员工表30部门的员工信息和40部门的员工信息,利用union进行拼接显示。
2025-06-05 09:47:13
798
原创 08 | Hive基本查询语法
反之返回false。B的表达式说明如下:‘x%’表示A必须以字母‘x’开头,‘%x’表示A必须以字母‘x’结尾,而‘%x%’表示A包含有字母‘x’,可以位于开头,结尾或者字符串中间。如果A和B都为null或者都不为null,则返回true,如果只有一边为null,返回false。如果A小于等于B,则返回true,反之返回false。如果A大于等于B,则返回true,反之返回false。如果A不等于null,则返回true,反之返回false。如果A等于null,则返回true,反之返回false。
2025-06-05 09:45:59
422
原创 07 | Hive DML操作
Export导出语句可将表的数据和元数据信息一并到处的HDFS路径,Import可将Export导出的内容导入Hive,表的数据和元数据信息都会恢复。(1)local:表示从本地加载数据到Hive表;否则从HDFS加载数据到Hive表。(2)overwrite:表示覆盖表中已有数据,否则表示追加。②加载HDFS上数据,导入完成后去HDFS上查看文件是否还存在。(2)加载HDFS文件到hive中。(3)加载数据覆盖表中已有的数据。(1)加载本地文件到hive。②加载数据覆盖表中已有的数据。
2025-06-05 09:44:59
878
原创 06 | Hive DDL操作
需要注意的是:修改数据库location,不会改变当前已有表的路径信息,而只是改变后续创建的新表的默认的父目录。我们可以考虑使用专门负责JSON文件的JSON Serde,设计表字段时,表的字段与JSON字符串中的一级字段保持一致,对于具有嵌套结构的JSON字符串,考虑使用合适复杂数据类型保存其内容。管理表意味着Hive会完全接管该表,包括元数据和HDFS中的数据。该语法允许用户利用select查询语句返回的结果,直接建表,表的结构和查询语句的结构保持一致,且保证包含select查询语句放回的内容。
2025-06-05 09:44:15
620
原创 05 | Hive使用技巧
新版本的Hive启动的时候,默认申请的JVM堆内存大小为256M,JVM堆内存申请的太小,导致后期开启本地模式,执行复杂的SQL时经常会报错:java.lang.OutOfMemoryError: Java heap space,因此最好提前调整一下HADOOP_HEAPSIZE这个参数。(1)修改$HIVE_HOME/conf下的hive-env.sh.template为hive-env.sh。(2)将hive-env.sh其中的参数 export HADOOP_HEAPSIZE修改为2048,
2025-06-05 09:43:10
549
原创 04 | Hive服务部署
答案是都有可能,具体是谁,由Hiveserver2的hive.server2.enable.doAs参数决定,该参数的含义是是否启用Hiveserver2用户模拟的功能。模拟用户的功能,默认是开启的。Hive的hiveserver2服务的作用是提供jdbc/odbc接口,为用户提供远程访问Hive数据的功能,例如用户期望在个人电脑中访问远程服务中的Hive数据,就需要用到Hiveserver2。Hive的metastore服务的作用是为Hive CLI或者Hiveserver2提供元数据访问接口。
2025-06-05 09:42:32
624
原创 02 | Hive安装部署
观察HDFS的路径/user/hive/warehouse/stu,体会Hive与Hadoop之间的关系。5)删除HDFS中/user/hive/warehouse/stu中数据。由于在企业开发中,都是多人协作开发,需要多客户端同时访问。数据库的特点是同一时间只允许一个客户端访问。客户端同时访问,就会报错。(2)source一下。支持多客户端同时访问。默认使用的元数据库为。
2025-06-05 09:38:08
663
原创 01 | Hive入门
1Hive简介Hive是由Facebook开源,基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类SQL查询功能。那为什么会有Hive呢?它是为了解决什么问题而诞生的呢?下面通过一个案例,来快速了解一下Hive。例如:需求,统计单词出现个数。(1)在Hadoop课程中我们用MapReduce程序实现的,当时需要写Mapper、Reducer和Driver三个类,并实现对应逻辑,相对繁琐。test表id列atguiguatguiguss。
2025-06-05 09:36:54
350
原创 SparkStreaming 代码示例
说明:DStream中批次与批次之间计算相互独立。如果批次设置时间小于计算时间会出现计算任务叠加情况,需要多分配资源。通常情况,批次设置时间要大于计算时间。在内部实现上,每一批次的数据封装成一个RDD,一系列连续的RDD组成了DStream。对这些RDD的转换是由Spark引擎来计算。DStream是Spark Streaming的基础抽象,代表持续性的数据流和经过各种Spark算子操作后的结果数据流。如果不希望运行时打印大量日志,可以在resources文件夹中添加。文件,并添加日志配置信息。
2025-06-04 09:26:26
974
原创 Dstream转换
DStream上的操作与RDD的类似,分为转换和输出两种,此外转换操作中还有一些比较特殊的原语,如:transform()以及各种Window相关的原语。
2025-06-04 09:26:13
712
原创 Dstream输出
在企业开发中通常采用foreachRDD(),它用来对DStream中的RDD进行任意计算。在foreachRDD()中,可以重用我们在Spark中实现的所有行动操作(action算子)。求值类似,如果一个DStream及其派生出的DStream都没有被执行输出操作,那么这些DStream就都不会被求值。如果StreamingContext中没有设定输出操作,整个Context就都不会启动。注意:以上操作都是每一批次写出一次,会产生大量小文件,在生产环境,很少使用。DStream通常将数据输出到,
2025-06-04 09:26:00
634
原创 SparkStreaming优雅关闭
但是分布式程序,没办法做到一个个进程去杀死,所以配置优雅的关闭就显得至关重要了。关闭方式:使用外部文件系统来控制内部程序关闭。流式任务需要7*24小时执行,但是有时涉及到。(2)启动Hadoop集群。获取当前任务是否正在运行。
2025-06-04 09:25:37
562
原创 Spark内存管理
由于同一个Executor的所有的计算任务共享有限的存储内存空间,当有新的 Block 需要缓存但是剩余空间不足且无法动态占用时,就要对LinkedHashMap中的旧Block进行淘汰(Eviction),而被淘汰的Block如果其存储级别中同时包含存储到磁盘的要求,则要对其进行落盘(Drop),否则直接删除该Block。以非序列化的Java对象的方式持久化在JVM内存中。此外,在被Spark标记为释放的对象实例,很有可能在实际上并没有被JVM回收,导致实际可用的内存小于Spark记录的可用内存。
2025-06-04 09:25:25
896
原创 Spark-sql数据的加载与保存
到resources目录(如果需要操作Hadoop,需要拷贝hdfs-site.xml、core-site.xml、yarn-site.xml)SparkSQL读取和保存的文件一般为三种,JSON文件、CSV文件和列式存储的文件,同时可以通过添加参数,来识别不同的存储和压缩格式。SparkSQL可以采用内嵌Hive(spark开箱即用的hive),也可以采用外部Hive。2)添加hive-site.xml文件到spark-yarn的conf目录。读取别的类型的数据也能写出为。列式存储的数据自带列分割。
2025-06-04 09:24:49
852
原创 Spark-sql与Hive的交互
到resources目录(如果需要操作Hadoop,需要拷贝hdfs-site.xml、core-site.xml、yarn-site.xml)SparkSQL可以采用内嵌Hive(spark开箱即用的hive),也可以采用外部Hive。2)添加hive-site.xml文件到spark-yarn的conf目录。1)添加MySQL连接驱动到spark-yarn的jars目录。3)启动spark-sql的客户端即可。企业开发中,通常采用外部。
2025-06-04 09:24:26
584
原创 Spark shuffle
该参数默认值为false,将其设置为true即可开启优化机制。写入磁盘文件通过缓冲区溢写的方式,每次溢写都会产生一个磁盘文件,优化的HashShuffle过程就是启用合并机制,合并机制就是复用buffer,开启合并机制的配置是。在溢写磁盘前,先根据key进行排序,排序过后的数据,会分批写入到磁盘文件中。Spark1.2版本默认是SortShuffle,但是可配置HashShuffle。过程,此过程将所有临时文件读取出来,一次写入到最终文件。中,将所有的临时文件合并,这就是。参数的值,默认为200。
2025-06-04 09:24:10
403
原创 Spark任务的执行
任务分配原则:根据每个Task的优先位置,确定Task的Locality(本地化)级别,本地化一共有五种,优先级由高到低顺序:移动数据不如移动计算。名称解析进程本地化,task和数据在同一个Executor中,性能最好。NODE_LOCAL节点本地化,task和数据在同一个节点中,但是task和数据不在同一个Executor中,数据需要在进程间进行传输。RACK_LOCAL机架本地化,task和数据在同一个机架的两个节点上,数据需要通过网络在节点之间进行传输。NO_PREF。
2025-06-04 09:23:55
290
原创 Spark-sql自定义函数
2.3.1 UDF1)UDF:一行进入,一行出2)代码实现//1.创建配置对象//2.获取//3.编写代码//定义一个函数//需要首先导入依赖@Override大侠.show();// lambda表达式写法大侠//4.关闭。
2025-06-04 09:23:24
547
原创 Spark-sql编程
在sparkSql中DS直接支持的转换算子有:map(底层已经优化为mapPartition)、mapPartition、flatMap、groupByKey(聚合算子全部由groupByKey开始)、filter、distinct、coalesce、repartition、是Spark最新的SQL查询起始点,实质上是SQLContext和HiveContext的组合,所以在SQLContext和HiveContext上可用的API在SparkSession上同样是可以使用的。临时视图的生命周期和当前的。
2025-06-04 09:22:37
828
Spark快速大数据分析(清晰文字版)
2018-04-25
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人