你所关注的都在这里
小菜鸟的个人博客于2021年5月20日正式上线且对外开放啦...
与此同时,本人近期萌生了一个比较强烈的计划,那就是打算持续性输出大数据技术生态(但不限于)相关的系列文章。
可想而知这是一项“宏伟工程”,想要一直坚持下去应该还是比较难的,毕竟想法很丰满,现实却又是如此的骨感。工作 + 生活,不一定什么时候就有什么事给那啥了…
但是吧,小菜鸟既然放话出来了,那就不是随便说说的,更何况再怎么说我也是个地地道道且纯血统的技术人员,怎么能拖了大佬们的后腿呢,坚决不能够的,所以这里不只是想想而已,“肯定是”说干就干(虽然我加了引号,但就不承认是引号里面的人),对的,你没看错,我就是这么倔强。
好啦,话不多说,言归正传。可能部分人会有些疑问说:既然这些技术点工作中大多都有用到过,那应该总体掌握还是比较熟练的,本来平时工作就比较忙了,为什么还要花费较多的时间在发表总结性文章上面,学点新的技术框架它不香么?周末不上班出去逛逛它不美么?找个三五好友出去喝个小酒它不爽么?…
呃… 这样感觉确实很不错。但是吧,不管是出去逛还是喝小酒,又或者是其它的周末娱乐活动,需 ...
Hive万亿级表联合分析故障排查与优化过程
关键字:Hive,万亿级,大表,join,联合查询摘要:随着大数据技术日趋成熟,行业生态愈发完善,腾讯云大数据团队服务的大客户越来越多。在笔者服务的众多大客户之中,PB级海量数据已经成为常态。笔者负责大数据技术支持的某个腾讯云大数据项目,单张数据表的行数超过万亿级、数据量PB级,而且还需要对万亿级数据表做表与表的多维分析。比如本文介绍的故障排查过程,客户提交的就是 “万亿级大表 join 普通表” 的海量数据关联多维分析任务。这类任务,如果不对大数据平台进行优化,往往很容易运行失败,而且排查过程异常艰难。一、故障现象客户的离线海量数据分析任务,底层使用Hive数仓进行存储,并使用hive sql进行分析。因为某些项目原因,hive sql的执行引擎,没有选择spark和tez,最终使用的是mr。客户在半个月前反馈一个故障信息:他们有一类sql任务,无论提交多少次,都会100%失败;其它类型的sql任务,均能运行成功。根据客户反馈的这个信息,可以基本判断,腾讯云大数据平台TBDS内部集成的Hive集群功能绝对是正常的,只是这一类sql任务需要进行 “某方面的故障排查和优化”。二、故障分析 ...
线上 HIVE 作业因死锁导致作业卡死问题排查 - 原因分析与解决方案
线上 HIVE 作业因死锁导致作业卡死问题排查 - 原因分析与解决方案
前言因为关系型数据库 RDBMS 死锁造成的线上问题的排查和解决,大家一般都比较熟悉;但大数据中的死锁问题,大家一般都没有遇到甚至没有听说过。 最近笔者在某客户线上生产环境就频繁多次遇到了该问题,某些HIVE SQL 作业(底层非HIVE ACID事务表),因为迟迟获取不到HIVE锁导致作业长时间卡死,最后运维人员不得不登录hs2后台手动通过命令查找并释放死锁,才最终解决问题。
问题现象某些HIVE SQL作业,正常十几分钟即可执行完毕,但有时运行三十多分钟后仍没有成功,怀疑作业卡死;为排查问题,在后台通过beeline登录hs2并直接提交sql进行尝试,发现作业同样存在阻塞。阻塞超过一定时间后,任务直接报错:
123456789101112131415161718192021222324252627282930313233343536373839404142ERROR : FAILED: Error in acquiring locks: Locks on the underlying objects canno ...
使用 Git Hook 自动部署 Hexo 到个人 VPS
配置服务器远程 Git大家都知道 Git 是分布式的版本控制系统,远程仓库跟本地仓库是没有什么不同的。
我的 VPS 系统是 Ubuntu 14.04 的,在 Ubuntu 上配置 Git 是相当简单的。
第一步安装 git:
1sudo apt-get install git
第二步创建一个 git 用户,用来运行 git 服务:
1sudo adduser git
虽说现在的仓库只有我们自己在使用,新建一个 git 用户显得不是很有必要,但是为了安全起见,还是建议使用单独的 git 用户来专门运行 git 服务
第三步创建证书登录,把自己电脑的公钥,也就是 ~/.ssh/id_rsa.pub 文件里的内容添加到服务器的 /home/git/.ssh/authorized_keys 文件中,添加公钥之后可以防止每次 push 都输入密码。
如果你之前没有生成过公钥,则可能就没有 id_rsa.pub 文件,可参考如下步骤:
123456789101112# 生成密钥对ssh-keygen -t rsa# 生成之后 ~/.ssh 目录下就会有对应的公钥和密钥# 如果 /home ...
Springboot配置websocket,https使用 WebSocket 连接
Springboot配置websocket,https使用 WebSocket 连接
提示:本文简单介绍websocket与http的区别及如何在项目中使用websocket,以springboot项目为例
一、http协议与websocket协议区别
WebSocket
一种在单个TCP连接上进行全双工通信的协议。WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。
用于Web应用中需要实现动态刷新的场景,大量数据定时刷新,数据轮询等操作场景,例如在线聊天、网页游戏、实时数据分析等。支持双向通信,实时性更强,更好的二进制支持,更小的控制开销:协议包头较小。同时支持扩展。
HTTP
一种单向的请求-响应协议,即客户端向服务器发送请求,服务器响应后连接关闭。这种模式限制了服务器主动向客户端推送信息的能力。用户想刷新一次数据就需要请求一次后台。
HTTP更适合于传输静 ...
Spring Security 入门(四):Session 会话管理
本文在前文 Spring Security 入门(三):Remember-Me 和注销登录 一文的代码基础上介绍Spring Security的 Session 会话管理。
Session 会话管理的配置方法
Session 会话管理需要在configure(HttpSecurity http)方法中通过http.sessionManagement()开启配置。此处对http.sessionManagement()返回值的主要方法进行说明,这些方法涉及 Session 会话管理的配置,具体如下:
invalidSessionUrl(String invalidSessionUrl):指定会话失效时(请求携带无效的 JSESSIONID 访问系统)重定向的 URL,默认重定向到登录页面。
invalidSessionStrategy(InvalidSessionStrategy invalidSessionStrategy):指定会话失效时(请求携带无效的 JSESSIONID 访问系统)的处理策略。
maximumSessions(int maximumSessions):指定每个 ...
Spring Security 入门(三):Remember-Me 和注销登录
本文在前文 Spring Security 入门(二):图形验证码和手机短信验证码 的基础上介绍 Remember-Me 功能和注销登录。
Remember-Me 功能
在实际开发中,为了用户登录方便常常会启用记住我(Remember-Me)功能。如果用户登录时勾选了“记住我”选项,那么在一段有效时间内,会默认自动登录,免去再次输入用户名、密码等登录操作。该功能的实现机理是根据用户登录信息生成 Token 并保存在用户浏览器的 Cookie 中,当用户需要再次登录时,自动实现校验并建立登录态的一种机制。
Spring Security提供了两种 Remember-Me 的实现方式:
简单加密 Token:用散列算法加密用户必要的登录系信息并生成 Token 令牌。
持久化 Token:数据库等持久性数据存储机制用的持久化 Token 令牌。
基本原理
Remember-Me 功能的开启需要在configure(HttpSecurity http)方法中通过http.rememberMe()配置,该配置主要会在过滤器链中添加 RememberMeAuthenticationFilt ...
Spring Security 入门(二):图形验证码和手机短信验证码
本文在前文 Spring Security 入门(一):认证和原理分析 的基础上介绍图形验证码和手机短信验证码登录的实现。
图形验证码
在用户登录时,一般通过表单的方式进行登录都会要求用户输入验证码,Spring Security默认没有实现图形验证码的功能,所以需要我们自己实现。
实现流程分析
前文中实现的用户名、密码登录是在UsernamePasswordAuthenticationFilter过滤器进行认证的,而图形验证码一般是在用户名、密码认证之前进行验证的,所以需要在UsernamePasswordAuthenticationFilter过滤器之前添加一个自定义过滤器 ImageCodeValidateFilter,用来校验用户输入的图形验证码是否正确。自定义过滤器继承 OncePerRequestFilter 类,该类是 Spring 提供的在一次请求中只会调用一次的 filter。
自定义的过滤器 ImageCodeValidateFilter 首先会判断请求是否为 POST 方式的登录表单提交请求,如果是就将其拦截进行图形验证码校验。如果验证错误,会抛出自 ...
Spring Security 入门(一):认证和原理分析
Spring Security是一种基于Spring AOP和Servlet Filter的安全框架,其核心是一组过滤器链,实现 Web 请求和方法调用级别的用户鉴权和权限控制。本文将会介绍该安全框架的身份认证和退出登录的基本用法,并对其相关源码进行分析。
表单认证
Spring Security提供了两种认证方式:HttpBasic 认证和 HttpForm 表单认证。HttpBasic 认证不需要我们编写登录页面,当浏览器请求 URL 需要认证才能访问时,页面会自动弹出一个登录窗口,要求用户输入用户名和密码进行认证。大多数情况下,我们还是通过编写登录页面进行 HttpForm 表单认证。
快速入门
☕️ 工程的整体目录
☕️ 在 pom.xml 添加依赖
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061<parent> <groupId>org.springfram ...
CDH5.12.0-HiveServer2-java.net.SocketTimeoutException(Read timed out)
一. 问题背景
基于CDH构建离线数仓,在通过JDBC向HiveServer2提交作业时出现java.net.SocketTimeoutException: Read timed out 错误,导致大批量的作业失败,不能按时产生数据,已严重影响到业务运行。
二. 集群环境
CDH-5.12.0Hive-1.1.0
三. 错误日志
提交作业客户端报的错误日志如下:
12345678910111213141516171819202122232425262728293031323334353637383940414243java.sql.SQLException: org.apache.thrift.transport.TTransportException: java.net.SocketTimeoutException: Read timed out at org.apache.hive.jdbc.HiveStatement.execute(HiveStatement.java:263) at org.apache.hive.jdbc.HiveStatement.execu ...











