<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[lsr40的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/lsr40</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; lsr40]]></copyright><item><title><![CDATA[【spark】行列互转的思考]]></title><link>https://blog.youkuaiyun.com/lsr40/article/details/123413731</link><guid>https://blog.youkuaiyun.com/lsr40/article/details/123413731</guid><author>lsr40</author><pubDate>Fri, 11 Mar 2022 01:03:11 +0800</pubDate><description><![CDATA[本文基于一个具体的案例，介绍spark中case when，stack，lateral view explode，pivot的用法，并做一些性能上的比较


一、背景

群里有个小伙伴出了一道题目是行转列（多行数据转成多列数据）



如图，把上表的数据通过sql变成下表的数据

当然实现方法还是比较多的，我也想了几种方式，并随便搞了2.5亿条数据测试下性能（表格式是text，每个文件块大小都很均匀）





二、实现方法



不同引擎里，会有不同的函数或者语法做行列的转换，我这里就针对spark引擎.]]></description><category></category></item><item><title><![CDATA[【Hadoop】Dfs-Fuse编译使用]]></title><link>https://blog.youkuaiyun.com/lsr40/article/details/122394913</link><guid>https://blog.youkuaiyun.com/lsr40/article/details/122394913</guid><author>lsr40</author><pubDate>Sun, 09 Jan 2022 16:13:55 +0800</pubDate><description><![CDATA[一、背景

dfs-fuse，可以将hdfs上的目录挂载到本地的目录，就可以直接通过linux的命令直接访问hdfs上的数据

大多数云上的hadoop环境，或者下载别人编译好的包中，并没有fuse的相关脚本和命令

因此我们要自己编译hadoop

我是基于Hadoop2.8.5编译的

hadoop编译中，遇到的问题还是挺多的，而且要安装一些其他的服务，会在本文中逐一说明





二、准备环境

hadoop的源码根目录下有个：BUILDING.txt

里面详细描述了，需要什么环境



1、cma]]></description><category></category></item><item><title><![CDATA[【spark】metrics信息的获取（监听器等）]]></title><link>https://blog.youkuaiyun.com/lsr40/article/details/118899820</link><guid>https://blog.youkuaiyun.com/lsr40/article/details/118899820</guid><author>lsr40</author><pubDate>Tue, 20 Jul 2021 14:49:32 +0800</pubDate><description><![CDATA[一、背景

最近看到了一篇文章，说的是spark小文件合并的问题


Spark 小文件合并优化实践：https://mp.weixin.qq.com/s/195nFBH0kpZEXekHiQAfrA（作者：偷闲小苑）


其实关于小文件合并我之前也写过类似的文章，大体的方案也就是
1、存之前做一个数据量的预估，然后repartition/coalesce

2、存完之后，触发一个merge合并小文件（可以是hive也可以是spark任务）

3、使用一些数据湖（delta lake，hudi，iceber]]></description><category></category></item><item><title><![CDATA[【数仓】拉链表（极限存储）]]></title><link>https://blog.youkuaiyun.com/lsr40/article/details/118578621</link><guid>https://blog.youkuaiyun.com/lsr40/article/details/118578621</guid><author>lsr40</author><pubDate>Fri, 09 Jul 2021 11:48:24 +0800</pubDate><description><![CDATA[拉链表，我想做数仓的同学应该都是听过这个存储模式，拉链表的产生，源于维表存储中，如何存储和查询历史记录的问题

当然本文不是来介绍概念的（如果后面我觉得有需要，我会单独整理一下），主要是看了《大数据之路：阿里巴巴大数据实践》中提到了“极限存储”的概念，然后讨论怎么具体实现！

其实书中并没有说的很详细到底如何处理，我也搜了一些相关的文章，来帮助理解极限存储中月拉链表的存储和查询方法


首先感谢以下几篇很棒的博文：

拉链表是什么：https://www.kancloud.cn/grass1314521/d]]></description><category></category></item><item><title><![CDATA[【Hadoop】RPC在client端的源码解析]]></title><link>https://blog.youkuaiyun.com/lsr40/article/details/117228368</link><guid>https://blog.youkuaiyun.com/lsr40/article/details/117228368</guid><author>lsr40</author><pubDate>Tue, 25 May 2021 22:40:23 +0800</pubDate><description><![CDATA[我们从一段客户端的代码开始








特别感谢：

Hadoop RPC调用实例分析：https://blog.youkuaiyun.com/yexiguafu/article/details/107378511（作者：叹了口丶气）

Hadoop 2.X HDFS源码剖析（作者：徐鹏）



]]></description><category></category></item><item><title><![CDATA[【Shell】查询类在哪个jar包，SSH登录指定节点执行相同命令]]></title><link>https://blog.youkuaiyun.com/lsr40/article/details/116981453</link><guid>https://blog.youkuaiyun.com/lsr40/article/details/116981453</guid><author>lsr40</author><pubDate>Tue, 18 May 2021 14:44:17 +0800</pubDate><description><![CDATA[本文就分享两个比较常用的Shell脚本

1、查询类在哪个jar包

在开发当中，我们经常会遇到NoClassDefFoundError或者ClassNotfoundException或者NoSuchMethodError，一般是类缺失，或者类的版本不对

这时候我们就需要知道报错的那个类，在哪个jar包里，以此来定位错误，所以我就写了个脚本

本质上就是用find命令，返回某个目录下的所有jar文件的列表（因为是find命令， 所以并不是只查当前目录，会一层一层往里面翻），然后传入到for循环中，通过ja]]></description><category></category></item><item><title><![CDATA[【Ranger】基于Ranger+LDAP的权限策略方案]]></title><link>https://blog.youkuaiyun.com/lsr40/article/details/116496415</link><guid>https://blog.youkuaiyun.com/lsr40/article/details/116496415</guid><author>lsr40</author><pubDate>Mon, 10 May 2021 15:58:22 +0800</pubDate><description><![CDATA[本文并不是解决具体某些什么问题，更相当于一个解决方案，而且是各个云厂商相对通用的解决方案。

当我们使用各个框架的时候，总有各种各样的权限，关系型数据库的权限可能相对比较好处理，大多数都是创建个账号，grant授权下增删改查的权限

但是到了大数据领域，如hdfs的目录和文件的权限，hive中的表，hbase中的表，presto中的表等等相关的一堆框架权限又如何控制呢？

这时候，我们需要2个东西，一个叫授权（Authorization），一个叫认证（Authentication）



一、授权

我们.]]></description><category></category></item><item><title><![CDATA[【Flink】获取配置参数方式总结]]></title><link>https://blog.youkuaiyun.com/lsr40/article/details/116060811</link><guid>https://blog.youkuaiyun.com/lsr40/article/details/116060811</guid><author>lsr40</author><pubDate>Sat, 24 Apr 2021 01:00:33 +0800</pubDate><description><![CDATA[一、背景

以前写的比较多的是spark，传入外部参数，通常有两种方法：
1、用main方法传入，代码中通过args获取（基本上只要是个java程序，就可以通过这种方式来传参）

2、通过--conf 传入一个spark开头的key的配置，代码中通过sparkConf来获取对应的value（这个是spark独有的特性）

那么flink如何读取properties，又如何读取外部传入的参数呢？

二、正文

1、main方法传入

这个其实不用多说，就是：


flink run -m yarn-clust]]></description><category></category></item><item><title><![CDATA[【hadoop】HDFS块修复]]></title><link>https://blog.youkuaiyun.com/lsr40/article/details/115203135</link><guid>https://blog.youkuaiyun.com/lsr40/article/details/115203135</guid><author>lsr40</author><pubDate>Thu, 25 Mar 2021 22:24:47 +0800</pubDate><description><![CDATA[背景

HDFS场景下，有时候某些异常会导致丢失文件块！这时候，我们如何处理这些文件块，或者说这些文件块是否还有救？

丢文件块是一种统一的说法，实际上是两种情况，一个是Corrupt blocks，一个是Missing replicas

先说个背景知识：当我上传一个文件到HDFS，这个文件在HDFS上看得到，也可以正常使用，实际上在磁盘上会存两种类型的文件

举例：

1、blk_1073743119
2、blk_1073743119_2295.meta

第一个文件就是实际上的数据，如果你的文件是文.]]></description><category></category></item><item><title><![CDATA[【Netty】GlobalEventExecutor源码个人见解]]></title><link>https://blog.youkuaiyun.com/lsr40/article/details/113825786</link><guid>https://blog.youkuaiyun.com/lsr40/article/details/113825786</guid><author>lsr40</author><pubDate>Tue, 16 Feb 2021 17:19:24 +0800</pubDate><description><![CDATA[一、背景

这几天在看netty的源码，在看如下位置的时候，看到了创建一个监听器，然后看到了DefaultPromise和GlobalEventExecutor这两个类

DefaultPromise看起来不会特别复杂，只是多了一些设置成功失败等方法，然后可以唤醒listener，做对应的处理，这里的用法，其实就是将监听器里执行的内容提交到GlobalEventExecutor这个类中做调用


大家可以搜索下相关文章看看DefaultPromise，这个类不是本文的重点

Netty 之 DefaultP]]></description><category></category></item><item><title><![CDATA[【Flink】SQL-Client运行yarn-session模式]]></title><link>https://blog.youkuaiyun.com/lsr40/article/details/113398830</link><guid>https://blog.youkuaiyun.com/lsr40/article/details/113398830</guid><author>lsr40</author><pubDate>Mon, 01 Feb 2021 21:20:22 +0800</pubDate><description><![CDATA[flink有个sql-client.sh

（如下的图，是从flink官网截图下来的）



官网地址：https://ci.apache.org/projects/flink/flink-docs-release-1.11/dev/table/sqlClient.html



具体如何配置sql-client和各种框架集成， 我就不搞了，大家有兴趣研究下官网或者百度下，我就试了下集成hive




具体如何配置，请看以下文章！

flink 1.11.2-sql-client 集成hive：htt..]]></description><category></category></item><item><title><![CDATA[【HBase】增量数据迁移]]></title><link>https://blog.youkuaiyun.com/lsr40/article/details/113134577</link><guid>https://blog.youkuaiyun.com/lsr40/article/details/113134577</guid><author>lsr40</author><pubDate>Mon, 25 Jan 2021 21:32:22 +0800</pubDate><description><![CDATA[hbase数据迁移，不乏有许多好的文章


比如：

HBase 数据迁移方案介绍：https://blog.youkuaiyun.com/mnasd/article/details/97616460（转载者：mnasd）

HBase集群数据迁移方案：https://blog.youkuaiyun.com/scgaliguodong123_/article/details/46761529（作者：李国东）




其实方法很多是好事，但对于不太了解hbase的使用者来说也是一种折磨

但是其实关键点在于，如何在我的老hbase.]]></description><category></category></item><item><title><![CDATA[【Hive】升级元数据踩坑（mysql版本）]]></title><link>https://blog.youkuaiyun.com/lsr40/article/details/112807810</link><guid>https://blog.youkuaiyun.com/lsr40/article/details/112807810</guid><author>lsr40</author><pubDate>Wed, 20 Jan 2021 17:20:51 +0800</pubDate><description><![CDATA[hive的版本更新得蛮快的，但是一般我们定好一个版本之后，就不太会升级，但是有时候想要用到一些新版本的特性，我们就需要升级hive的版本

这就涉及到元数据迁移：

有两种做法：

1、写脚本





https://blog.youkuaiyun.com/maotai_2010/article/details/52185822



https://www.sohu.com/a/225997339_411876
...]]></description><category></category></item><item><title><![CDATA[【yarn】Yarn Capacity Scheduler配置（文末附上fair的链接）]]></title><link>https://blog.youkuaiyun.com/lsr40/article/details/112587213</link><guid>https://blog.youkuaiyun.com/lsr40/article/details/112587213</guid><author>lsr40</author><pubDate>Wed, 13 Jan 2021 21:53:12 +0800</pubDate><description><![CDATA[本文是一篇设置CapacityScheduler的队列的Demo


以前一直没有考虑过这个事情，作为一个数据开发，我只是拿到了我使用的队列，但是一直没有思考过，应该如何划分队列，所以接下来我会记录下CapacityScheduler和FairScheduler的Demo（FifoScheduler我就不说了，好像基本没什么公司用吧），当然这篇文章只记录CapacityScheduler


yarn的队列有三种模式

分别是先入先出，容量调度，公平调度，分别对应以下三个类，大家有兴趣可以阅读下源码

or]]></description><category></category></item><item><title><![CDATA[【Hadoop】resourcemanager.recovery.RMStateStore: State store operation failed]]></title><link>https://blog.youkuaiyun.com/lsr40/article/details/112346706</link><guid>https://blog.youkuaiyun.com/lsr40/article/details/112346706</guid><author>lsr40</author><pubDate>Fri, 08 Jan 2021 17:19:11 +0800</pubDate><description><![CDATA[一、背景

今天又碰见了一个很鬼的问题，yarn的ui上nodemanager都是active，而且资源也完全充足，但是我提交任务的时候就卡主了！而且是什么类型的任务都提交不了，相当于yarn的服务直接不可用，关键是什么参数都没有修改，也没有重启yarn服务，突然他就不行了



二、查问题

所以我第一反应是查看resourcemanager的日志（记得要查看active的那台）

结果我看到了

ERROR org.apache.hadoop.yarn.server.resourcemanager.r.]]></description><category></category></item><item><title><![CDATA[【Hue】使用Hue调用Sqoop任务]]></title><link>https://blog.youkuaiyun.com/lsr40/article/details/112276333</link><guid>https://blog.youkuaiyun.com/lsr40/article/details/112276333</guid><author>lsr40</author><pubDate>Wed, 06 Jan 2021 18:03:59 +0800</pubDate><description><![CDATA[首先这是一篇为了hue调用sqoop任务的路上，遇到问题解决问题的文章

实话实说，我对Hue这个框架并不了解，只是遇到了这么一个问题，然后花了老大的劲才解决，感觉要记录下~



一、背景：

Hue调用Sqoop，其实是hue生成了一个oozie的任务，实际上调用sqoop的是oozie，然后oozie是先提交一个launcher到yarn上面，然后再通过launcher拉起一个sqoop的MapReduce任务，最后执行成功，听起来是不是很麻烦！

我的sqoop命令是：

（将hive的某张表导出.]]></description><category></category></item><item><title><![CDATA[【数据同步】使用MMA同步Hive数据到maxcompute]]></title><link>https://blog.youkuaiyun.com/lsr40/article/details/111476074</link><guid>https://blog.youkuaiyun.com/lsr40/article/details/111476074</guid><author>lsr40</author><pubDate>Mon, 21 Dec 2020 19:57:40 +0800</pubDate><description><![CDATA[这两天在验证通过MMA的工具将Hive上的数据同步到maxcompute中（遇到的问题还是挺多的，）

https://github.com/aliyun/alibabacloud-maxcompute-tool-migrate

https://github.com/aliyun/alibabacloud-maxcompute-tool-migrate/blob/master/documents/HiveToMaxCompute_zh.md

https://www.aliyun.com/product/]]></description><category></category></item><item><title><![CDATA[【算法】数据结构：选择，冒泡，插入排序]]></title><link>https://blog.youkuaiyun.com/lsr40/article/details/109614258</link><guid>https://blog.youkuaiyun.com/lsr40/article/details/109614258</guid><author>lsr40</author><pubDate>Wed, 11 Nov 2020 17:40:02 +0800</pubDate><description><![CDATA[一、需要思考的问题

排序算法最好的时间复杂度应该是O(n)，也就是说从头到位遍历一遍数据就能得到排好序的数据，但这不太可能实现（除非数据本身已经有序），现有的算法的平均时间复杂度只能于趋近O(n)，今天来说三个O()的算法

对于排序我们需要考虑如下几个问题：

1、是原地排序算法吗（需要创建占用的空间来辅助排序吗）？

2、是稳定排序算法吗

稳定说的是，2个相同的数字被排序时候，前后顺序是否会被改变，如果被改变就是不稳定，如不不被改变就是稳定，为什么要有这个衡量指标？


在真正软件开发中，我们要排序]]></description><category></category></item><item><title><![CDATA[【算法】数据结构：树结构（引言）]]></title><link>https://blog.youkuaiyun.com/lsr40/article/details/109577780</link><guid>https://blog.youkuaiyun.com/lsr40/article/details/109577780</guid><author>lsr40</author><pubDate>Mon, 09 Nov 2020 16:54:29 +0800</pubDate><description><![CDATA[一、引言

本文只是一个引子，来讲述树这种数据结构的一些入门点

对于刚接触树这种结构的小伙伴，我们需要思考几个问题（我当年也有这样的疑问）？

1、这种数据结构长什么样？

2、有哪些基础概念是需要了解的？

3、在编程中，用什么样的结构来存储树状结构？

4、如何增删改查和遍历数据？

5、既然已经有了看似万能的散列表+链表的数据结构，为什么还有树的结构出现，他解决了什么问题？



二、数据结构

以下这些制作精美的图片

来自于王争老师的《算法与数据结构之美》，我只是搬运工！！！





三、..]]></description><category></category></item><item><title><![CDATA[【数据库】报错：SQLException: Incorrect string value: ‘\xF0\x9F\x98\x80‘ for colum]]></title><link>https://blog.youkuaiyun.com/lsr40/article/details/108981563</link><guid>https://blog.youkuaiyun.com/lsr40/article/details/108981563</guid><author>lsr40</author><pubDate>Fri, 09 Oct 2020 18:06:53 +0800</pubDate><description><![CDATA[在同步数据的时候，遇到了如标题这样的报错

这得从mysql的utf8和utf8mb4说起（从盘古开天辟地说起）



一、原因：

mysql最早的utf8是3个byte组成的，但是有一些字符是4个byte组成的，比如现在各类短视频，交友平台用户昵称会使用的emoji表情符号，也就是说mysql中存这个昵称的字段如果是utf8的编码，那很可能就会报如上的错！



二、解决：

1、将字段改为utf8mb4

提供不同的思路：

（1）、新建utf8mb4的表，然后把数据导出再导入

如何设置字符集，..]]></description><category></category></item></channel></rss>