
hadoop实战
小手追梦
技术致富
展开
-
安装Apache Atlas遇到的错误
安装apache atlas,启动atlas server报错,查看logs/atlas.20220524-115239.out文件:Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'graphTransactionInterceptor' defined in URL [jar:file:/usr/local/service/atlas/s原创 2022-05-24 15:01:42 · 1167 阅读 · 1 评论 -
Elasticsearch:系统已经配置环境变量的情况下使用Elasticsearch自带的jdk启动
修改elasticsearch bin目录下的elasticsearch-envvim elasticsearch-env注意下面代码:如果变量ES_JAVA_HOME不为空,则会使用ES_JAVA_HOME这个变量,这个变量默认是没有配置,可以按照图上所示配置ES_JAVA_HOME这个变量,这个变量执行es安装包自带的jdk目录:...原创 2022-04-06 21:55:31 · 3163 阅读 · 5 评论 -
Spark优化,多线程提交任务,提升效率
val listBuffer = new ListBuffer[Future[String]] val service: ExecutorService = Executors.newFixedThreadPool(4) for (i <- 0 to 3) { val task: Future[String] = service.submit(new Callable[String] { override def call(): String = {原创 2022-03-30 12:01:04 · 4384 阅读 · 0 评论 -
flume-使用KafkaChannel读取不到数据
使用TAILDIR监听日志写入KafkaChannel。配置如下:a1.sources = r1a1.channels = c1#描述sourcea1.sources.r1.type = TAILDIRa1.sources.r1.filegroups = f1a1.sources.r1.filegroups.f1 = /opt/module/applog/log22/app.*a1.sources.r1.positionFile = /opt/module/flume/taildir_po原创 2022-03-25 07:04:07 · 3163 阅读 · 1 评论 -
Spark jar包加载顺序及冲突解决
一,spark jar包加载顺序1,SystemClasspath – Spark安装时候提供的依赖包,通常是spark home目录下的jars文件夹 【SystemClassPath】2,Spark-submit --jars 提交的依赖包 【UserClassPath】3,Spark-submit app.jar或者shadowJar打的jar 【UserClassPath】二,jar包冲突解原创 2022-03-23 15:51:50 · 6362 阅读 · 1 评论 -
错误记录:yarn resourcemanager启动失败
使用start-yarn.sh启动yarn报如下错误:Caused by: java.net.BindException: Cannot assign requested address at sun.nio.ch.Net.bind0(Native Method) at sun.nio.ch.Net.bind(Net.java:433) at sun.nio.ch.Net.bind(Net.java:425) at sun.nio.ch.ServerSocketChannelImpl.bind(S原创 2022-03-15 08:35:32 · 3429 阅读 · 0 评论 -
ClickHouse安装
一,准备工作1,确定防火墙处于关闭状态2,CentOS取消打开文件数限制 vim /etc/security/limits.conf* soft nofile 65536* hard nofile 65536* soft nproc 131072* hard nproc 131072vim /etc/security/limits.d/20-nproc.conf* soft nofile 65536* hard nofile 65536* soft nproc 131072* ha原创 2022-02-05 10:17:36 · 2014 阅读 · 0 评论 -
Phoenix安装小记
1,使用客户端连接phoenix,首先用dbeaver,dbeaver的版本较高,需要jdk11,但是phoenix的驱动需要jdk8,无法使用2,使用idea连接,需要配置phoenix的driver属性,配置jdk为jdk8原创 2022-01-31 11:19:18 · 903 阅读 · 0 评论 -
IDEA编译报错:java: 未报告的异常错误X; 必须对其进行捕获或声明以便抛出
IDEA编译Flink源码时报错:java: 未报告的异常错误X; 必须对其进行捕获或声明以便抛出原因是环境变量配置的是JDK8,Flink部分代码是基于JDK11编写的,将JDK升级为JDK11,重新编译即成功原创 2021-12-30 21:53:53 · 3351 阅读 · 0 评论 -
Spark骚操作:使用客户端工具如DBeaver连接SparkSQL
要使用DBeaver连接SparkSQL连接SQL,要做如下准备:1,在spark的conf目录下,创建hive-site.xml(附在文章最后)。Spark的Thrift Server脱胎于Hive的Thrift Server,所以有很多配置的name都包含hive关键字注意最后一个配置,设置了用户名密码,客户端会使用这个用户密码连接SparkSql2,启动Spark Thrift Sever ./sbin/start-thriftserver.sh3,DBeaver使用Hiv原创 2021-12-15 20:51:25 · 3616 阅读 · 0 评论 -
FlinkCDC-自定义序列化器
package com.lcy.app.customer;import com.alibaba.fastjson.JSONObject;import com.alibaba.ververica.cdc.debezium.DebeziumDeserializationSchema;import io.debezium.data.Envelope;import org.apache.flink.api.common.typeinfo.BasicTypeInfo;import org.apache.f原创 2021-12-15 07:40:09 · 3175 阅读 · 1 评论 -
Spark原理-SparkSql框架优化策略
有了SparkCore为什么还要有SparkSql呢?有两大原因:一是SparkCore只能用Api,这就把很多SqlBoy拒之门外,Spark就无法发扬光大了;二是使用Api时用户编写的函数作为一个个闭包被序列化后分发到Executor执行,Spark无法对用户自定义的代码进行优化;基于以上原因,SparkSql横空出世,并提供强大的、一篮子的优化方案,以便使用户专注于业务需求的实现,把性能优化交给spark框架。SparkSql提供如下优化措施:一,Catalyst 优化器Cataly原创 2021-12-09 13:59:29 · 1264 阅读 · 0 评论 -
嘴说手画一文搞懂Spark的Join
Spark Sql的Join和关系型数据库Sql的Join有很多相同点,比如inner join、left join、right join、full join,这是二者都有的概念,并且含义相同。但是,Spark Sql是分布式执行、面对的是海量数据的特点,使得Spark Sql的Join体系要复杂的多。一,join类型Spark Sql的join类型分为inner join、left join、right join、full join,和关系型数据库Sql没有区别。这四种类型定义了join的取数策略,原创 2021-12-09 10:44:09 · 1207 阅读 · 0 评论 -
嘴说手画Spark的存储系统
Spark本身并不存储数据,这里所说的存储系统是指计算过程中,管理内存中数据(如读到内存的源数据、缓存的RDD数据、广播数据)、Shuffle文件数据的功能模块。如果没有存储管理系统,计算是无法完成的。存储系统的主要由以下组件构成:BlockManagerMasterBlockManagerMemoryStoreDiskStoreDiskStoreManagerBlockInfoManagerBlockManagerMasterEndpointBlockManagerSlaveEndpo原创 2021-12-08 15:46:21 · 449 阅读 · 0 评论 -
嘴说手画Spark的内存模型
一,内存模型Spark的内存模型如下图所示:Reserved Memory 固定为 300MB,不受开发者控制,是启动Spark框架本身所需要的内存空间UserMemory 是用户空间,即用户定义的数据,通常是用户在代码中定义的变量,可以说,除RDD、广播、全局变量、计算过程中产生的数据之外都是用户定义的数据Execution Memory 执行计算任务所需要的内存,如源数据加载占用的是这部分内存,以及在计算过程中产生的中间数据使用的内存都是这部分内存Storage Memory 缓存、广播、原创 2021-12-08 13:26:19 · 562 阅读 · 0 评论 -
嘴说手画Spark的Bykey操作-groupByKey、reduceByKey、aggregateByKey 和 sortByKey
之前写过一篇文章分析Spark Shuffle的原理,知道了Shuffle是性能杀手的原因,但在实际业务中,Shuffle操作通常不可避免,毕竟Spark基础的用途就是对大数据进行统计分析,由于数据分布的分散性,导致相同Key的数据汇集到一起进行计算,必然要在网络进行传输。有4个常见的导致Shuffle的算子,分别是 groupByKey、reduceByKey、aggregateByKey 和 sortByKey一,groupByKeygroupByKey实现了分组收集,即将相同的key的数据收集到原创 2021-12-08 09:52:40 · 1673 阅读 · 0 评论 -
嘴说手画Spark的Shuffle
Shuffle是所有分布式计算引擎都必须涉及的话题,一方面这是计算过程中无可避免的过程;另一方面由于Shuffle过程通常都伴随着网络IO和磁盘IO,是计算过程中的性能杀手,对shuffle的优化通常都会取得不错的效果。先来看看Shuffle的原理,下面是Shuffle的过程示意图:从图上可以看出,shuffle分为两个过程:Shuffle WirteShuffle Read一,Shuffle Writespark的Task分为两类,一是ShuffleMapTask,一是ResultTas原创 2021-12-08 09:23:21 · 376 阅读 · 0 评论 -
嘴说手画Spark的调度系统
调度系统是Spark的核心功能模块,如何把一份代码规划为分布式任务并提交到服务器上执行,是Spark分布式计算的精华所在也是其比MapReduce快的原因之一。下图是调度系统涉及的主要组件:DagScheduler 执行代码的拆解,生成DAG,划分StageBackendScheduler 封装集群资源,对外提供资源TaskScheduler 匹配Task和资源,将Task和匹配到的资源信息提交给BackendScheduler1,DagScheduler根据代码生成Dag,从Dag的尾部原创 2021-12-07 12:06:12 · 725 阅读 · 0 评论 -
实战思路-解决Hadooop生态圈的兼容问题
在使用Hadoop生态开源软件过程中,不同软件的版本不兼容是经常出现的问题,主要表现为项目代码在编译的过程中出现:ClassNotFound或者NoSuchMethod的异常。ClassNotFoundError:NoSuchMethodError:这些错误绝大部分情况下是由于不同软件版本的不兼容导致的,比如Hive3.1.2与Spark3不兼容。Hive3.1.2兼容Spark2,在Hive源码的包中,可以查看到其pom中的spark依赖是2.4.5,也就是说Hive3.1.2使用了Spark原创 2021-11-30 07:41:48 · 990 阅读 · 0 评论 -
数据仓库理论知识
一,数据仓库与数据集市可以简单理解为数据仓库是面向整个企业,而数据集市是面向某个部门的。数据集市的数据来自数据仓库,当然,如果没有数据仓库,数据集市的数据也可以直接取自业务数据库。二,数据仓库分层数据仓库分层并没有严格规定,是一种经验的积累和行之有效的数据仓库方案。数据仓库分层的好处:化繁为简,把复杂的任务分解为多个较容易的任务减少重复工作,重用中间层隔离原始数据,原始数据是不可再生数据,要原样保存,以便可以在必要时重复计算三,关系模型三范式三范式是关系型数据库设计时要考虑的三条原创 2021-11-28 22:57:45 · 648 阅读 · 0 评论 -
doris & StarRocks 错题本
一,spark streaming load写入失败原因是分隔符设置为"\t",没有加转义字符,改为"\t"即正常。原创 2021-11-28 15:14:58 · 4533 阅读 · 0 评论 -
Doris编译
使用Doris,官方不提供编译好的jar包,需要自己编译,最方便的方式是通过Docker编译,避免了安装各种环境的繁琐。编译过程中错误一:thrift failed error: /bin/sh: thrift: command not found要安装thrift:安装Thrift安装Thrift的过程中,要安装yum...原创 2021-11-26 16:05:58 · 1176 阅读 · 0 评论 -
Flume实战-解决零点漂移-时间戳拦截器
对于日志,flume sink写入HDFS时,如果指定按照时间生成文件,在没有明确指定时间的情况下,会读取服务器时间作为创建文件的已经,这会导致日志的实际生成日期与文件不符。这种情况下,可以通过拦截器在flume事件头指定timestamp作为文件的创建依据。所谓零点漂移,就是上述问题的具体表现。即在按天生成日志文件的情况下,一条23:59:59左右生成的日志发送到服务器后可能已经是第二天了,如果没有指定时间,会被写入第二天对应的文件中,这就是所谓的零点漂移。import com.alibaba.fa原创 2021-11-25 22:58:20 · 5431 阅读 · 0 评论 -
MPP架构
MPP (Massively Parallel Processing),大规模并行处理面对海量数据和计算时,采用大事化小的思路,对数据进行分割,数据分割后单独存储,数据处理消耗的资源也是相互隔开的,对于MPP数据库来讲,整个数据库由多个完全独立的数据库构成,各个拥有完整的数据存储、数据管理、数据操作能力。基于网络实现节点互联,形成一个整体对外提供服务,节点间互不干扰,即Share Nothing,不共享磁盘和计算能力。Greenplum是一种基于PostgreSQL的分布式数据库。其采用Shared原创 2021-11-24 14:32:26 · 1050 阅读 · 0 评论 -
linux的环境变量-shell登录和非shell登录
环境变量配置说明Linux的环境变量可在多个文件中配置,如/etc/profile,/etc/profile.d/*.sh,/.bashrc,/.bash_profile等,下面说明上述几个文件之间的关系和区别bash的运行模式可分为login shell和non-login shell例如,我们通过终端,输入用户名、密码,登录系统之后,得到就是一个login shell。而当我们执行以下命令ssh node3 command,在node3 执行command的就是一个non-login原创 2021-11-23 06:30:26 · 697 阅读 · 0 评论 -
HadoopRPC原理
原创 2021-11-11 07:58:15 · 127 阅读 · 0 评论 -
手撸代码-HADOOP-RPC
4个类就可体验HADOOP-RPC的简单、实用。一,writable-rpc一,协议所谓协议,实际是一个接口,用来定义该RPC提供的功能 package rpc.writeable;public interface MyProtocol { void mkdir(String path); String getName(String name); long versionID = 1L;}二,协议实现client通过代理进行本地调用,调用会通过网络转发到服务端原创 2021-11-11 07:23:39 · 1491 阅读 · 0 评论 -
Spark读取Hudi写入ClickHouse遇到的时间格式问题
spark读hudi写clickhouse的时区问题spark读hudi里的时间格式字符串时,使用了data_format进行时间格式化操作,在操作的过程中,会自动进行时区的转换,实际上不需要处理。date_format(hudi.posted_date, 'yyyy-MM-dd HH:mm:ss')下面两个字符串,一个使用date_format,一个使用substr进行直接截取,使用date_format的进行了时区转换。replace(substr(hudi.f_start_locale,0,原创 2021-10-20 14:47:17 · 1128 阅读 · 1 评论 -
我读zookeeper源码系列1
一,准备工作1,zookeeper版本01、zookeeper-3.4.x 企业最常用,大数据技术组件最常用,基本维持在 3.4.5 3.4.6 3.4.7 这几个版本 02、zookeeper-3.5.x 03、zookeeper-3.6.x 04、zookeeper-3.7.x源码项目注意:zookeeper-3.4.14.tar.gz,安装包就是源码包,ZooKeeper-3.5 以上,源码 和 安装包就分开了。整体的原则:不新不旧的稳定版本 + 考虑企业使用版本最终结论:原创 2021-10-15 07:45:38 · 188 阅读 · 0 评论 -
JAVA虚拟机灵魂之问:Xmx和Xms不一致对虚拟机性能有何影响
使用jvisualVM查看idea进程,发现其关于堆大小的参数设置如下:并发现随着idea加载项目,其实际使用的内存会自动增大:加载项目前和加载项目后,堆大小是不一样的,有一个大幅提升的阶段,随着所需要的内存的增多,虚拟机会多次向操作系统申请更多的内存,且会伴随着频繁的垃圾回收。当然,其申请的内存会介于最小128m最大2g的范围内,超出2g就会报oom。为什么不一开始就申请2g的内存呢?显然是考虑到资源的按需使用,如果一开始就申请2g的内存,而运行过程中就会有大量的内存长时间被浪费。不过很多业原创 2021-10-10 08:08:15 · 1291 阅读 · 0 评论 -
jar包class冲突:spark任务执行异常-java.lang.NoSuchMethodError: org.apache.hadoop.fs.PartialListing
问题描述:提交到yarn集群后任务报错,报错信息如下java.lang.NoSuchMethodError: org.apache.hadoop.fs.PartialListing根据报错信息,初步估计是jar包冲突或者不同jar包有同名类。排查过程:使用如下命令查看同名类出现的jar包是哪些:find /usr/local/service/spark -name “*.jar” -exec grep -Hls “org/apache/hadoop/fs/PartialListing” {}原创 2021-10-10 07:49:17 · 405 阅读 · 0 评论 -
yarn错题本
提交到yarn上的job显示running状态,但是executor的日志持续打印如下告警:WARN YarnScheduler:66 - Initial job has not accepted any resources; check your cluster UI to ensure that workers are registered and have sufficient resources表面上看是集群资源不足,但从yarn资源管理界面看cup和内存非常宽裕,单个结点的资源也是足够的,原创 2021-10-10 07:46:03 · 1055 阅读 · 0 评论 -
Canal报错:Could not find first log file name in binary log index file
解决方案:rm /home/admin/canal-server/conf/example/meta.dat然后重启:/home/admin/canal-server/bin/restart.sh原创 2021-09-14 07:29:28 · 201 阅读 · 0 评论 -
Hudi和Kudu的比较
与Kudu相比,Kudu是一个支持OLTP workload的数据存储系统,而Hudi的设计目标是基于Hadoop兼容的文件系统(如HDFS、S3等),重度依赖Spark的数据处理能力来实现增量处理和丰富的查询能力,Hudi支持Incremental Pulling而Kudu不支持。 Hudi能够整合Batch和Streaming处理的能力,这是通过利用Spark自身支持的基本能力来实现的。一个数据处理Pipeline通常由Source、Processing、Sink三个部分组成,Hudi可以作为Sourc原创 2021-09-13 20:09:50 · 2531 阅读 · 0 评论 -
java.io.FileNotFoundException: HADOOP_HOME and hadoop.home.dir are unset-hadoop.dll
java.io.FileNotFoundException: HADOOP_HOME and hadoop.home.dir are unset1,下载Hadoop winutilwinutil2,配置环境变量HADOOP_HOME3,把hadoop.dll放入c盘windows/sysyem32下原创 2021-09-09 15:16:49 · 1162 阅读 · 0 评论 -
手写代码-Hudi-Demo
import org.apache.hudi.config.HoodieIndexConfigimport org.apache.hudi.index.HoodieIndeximport org.apache.hudi.{DataSourceReadOptions, DataSourceWriteOptions}import org.apache.spark.{SparkConf, SparkContext}import org.apache.spark.sql.{DataFrame, SaveMo原创 2021-09-08 16:08:43 · 471 阅读 · 0 评论 -
手撸算法-链表相加
链表相加import java.util.*;/* * public class ListNode { * int val; * ListNode next = null; * } */public class Solution { /** * * @param head1 ListNode类 * @param head2 ListNode类 * @return ListNode类 */ public Lis原创 2021-09-06 22:09:44 · 109 阅读 · 0 评论 -
手撸算法-两数之和-牛客
描述给出一个整数数组,请在数组中找出两个加起来等于目标值的数,你给出的函数twoSum 需要返回这两个数字的下标(index1,index2),需要满足 index1 小于index2.。注意:下标是从1开始的假设给出的数组中只存在唯一解例如:给出的数组为 {20, 70, 110, 150},目标值为90输出 index1=1, index2=2示例1输入:[3,2,4],6返回值:[2,3]特别注意:返回的数组下标从1开始思路:1,遍历元素,当前遍历元素为n原创 2021-08-25 08:31:34 · 129 阅读 · 0 评论 -
手撸算法-最长无重复数组-牛客
描述给定一个数组arr,返回arr的最长无重复元素子数组的长度,无重复指的是所有数字都不相同。子数组是连续的,比如[1,3,5,7,9]的子数组有[1,3],[3,5,7]等等,但是[1,3,7]不是子数组示例1输入:[2,3,4,5]说明:[2,3,4,5]是最长子数组示例2输入:[2,2,3,4,3]说明:[2,3,4]是最长子数组示例3输入:[9]返回值:1示例4输入:[1,2,3,1,2,3,2,2]返回值:3说明:最长子数组为[1,2,原创 2021-08-24 00:42:04 · 368 阅读 · 0 评论 -
HiveSql-join多次相同的字典表-优化
with tmp as (select * from person p left join dic d on p.sex = d.key and d.type = 'sex' union allselect * from person p left join dic d on p.sex = d.key and d.type = 'job') select max( case when tmp.job = tmp.key and tmp.type = 'job' then tmp.va原创 2021-08-21 22:09:46 · 1042 阅读 · 0 评论