QYHuiiQ
谁动了我的代码
展开
-
以Yarn模式启动Flink报错Exception in thread “main“ java.lang.NoClassDefFoundError: org/apache/hadoop/yarn/ex
下载对应的jar,按照Hadoop的版本(我的是2.7.5)下载。然后放到Flink的lib目录下。原创 2023-04-06 21:58:46 · 1273 阅读 · 2 评论 -
Linux环境搭建spark3 yarn模式
这里一定要注意hostname中不能包含下划线!搭建好之后启动hadoop集群。至此,spark的搭建基本完成。原创 2022-10-12 22:05:56 · 936 阅读 · 0 评论 -
Hadoop3.2.0运行wordcount程序报错Please check whether your etc/hadoop/mapred-site.xml contains the below
将修改后的文件同步到集群中的其他节点上,不需要重启集群,重新运行原来自己要执行的程序即可正常执行。原创 2022-10-12 20:28:37 · 1543 阅读 · 0 评论 -
启动hadoop集群报错ERROR: Cannot set priority of namenode process 2570
因为主机名中包含了下划线,所以报错。原创 2022-10-11 22:01:16 · 4612 阅读 · 1 评论 -
Windows环境下配置Spark3.0.0
如果双击的时候是闪了一下,那么说明安装成功。至此,Spark的环境就搭建好了。原创 2022-10-08 21:00:31 · 875 阅读 · 0 评论 -
MapReduce调优方案
以上参数的配置都应结合自己实际的硬件资源以及业务需求,按需调整。原创 2022-08-11 20:49:28 · 1433 阅读 · 1 评论 -
HDFS之小文件归档
在实际生产应用总难免会遇到一些小文件,而对于任何一个文件块来说,无论块本身的大小如何,他们的元数据都会在内存中占用150个字节,如果系统中存储了大量的小文件,那么就会造成较大的资源浪费,所以我们会对小文件进行归档,使多个小文件当作一个文件去占用内存中的150个字节。该过程背后实际上是MapReduce在操作,所以要确保yarn进程是启动的。这样就简单地实现了HDFS中小文件的归档。...原创 2022-08-10 21:41:33 · 578 阅读 · 0 评论 -
MapReduce中ETL数据清洗案例
在实际业务场景中,我们在对数据处理时会先对数据进行清洗,比如过滤掉一些无效数据;清洗数据只需要map阶段即可,不需要reduce阶段。在该案例中我们要实现的是员工表数据中只留下部门编号为d01的数据。可以看到只有部门为d01的数据留下来了,符合预期结果。这样就简单地实现了ETL中地数据清洗过程。...原创 2022-08-01 21:29:03 · 913 阅读 · 0 评论 -
Hadoop3.x中MapReduce实现Map端join案例
在上一个案例中我们使用的是reduce端的join实现了两个表之间的连接,但是reduce端join会使大量数据在传输过程中较多产生资源的消耗,同时也会造成数据倾斜。如果我们能将这些数据在map端进行处理,这样在数据传给reduce端的时候就会压力较小,并且此时reduce端不需要在进行特殊处理,所以我们就可以将reduceTask的个数设置为0。mapjoin的大致思路就是在mapper中初始化时将一张小表进行缓存,然后在map阶段用大表来对这个小表进行join,该案例中我们会将部门表进行缓存。.....原创 2022-08-01 19:12:14 · 236 阅读 · 0 评论 -
Hadoop3.x中MapReduce实现Reduce端join案例
有两个表,一个表是员工表(eid,name,deptid),另一个表是部门表(deptid,dept),想要实现的功能是经过reduce之后最后输出的是一个将员工表中的deptid替换为部门表中的dept的一个表(eid,name,dept),连个表之间通过deptid进行join。在数据库中我们经常会遇到一些业务场景需要将多个表进行join实现某些特定的业务逻辑,在MapReduce中也可以实现join,这个join功能可以是在map端也可以是在reduce端。...原创 2022-07-31 20:29:24 · 379 阅读 · 0 评论 -
Hadoop3中实现MapReduce自定义OutputFormat
在这个案例中我们想要实现的是,对于一个订单文件中的订单数据进行过滤,将订单中的不同类别商品输出到不同的文件中,这里与分区不同的是,分区无法指定写入的输出文件名,而这里我们可以指定水果放在fruit.txt中,冷冻食品放到frozen.txt中,蔬菜放到vegetable.txt中。虽然说我们需要自定义OutputFormat去实现输出类,但真正写数据的实现是由RecordWriter完成的,素以我们需要自定义一个类去实现RecordWriter中的方法。这样就简单地实现了自定义OutputFormat。..原创 2022-07-29 22:22:01 · 443 阅读 · 0 评论 -
MapReduce中分区数与ReduceTask个数关系比较
在MapReduce中如果不设置ReduceTask个数时,默认为1;原创 2022-07-25 21:36:10 · 1205 阅读 · 0 评论 -
Hadoop3.x使用CombineTextInputFormat实现小文件合并
在hadoop中对文件进行切片时,默认使用TextInputFormat中的切片机制,即按文件进行切片,不管文件大小,每个文件都会是一个单独的切片,并且每个文件/切片都会由一个单独的MapTask进行处理,但是这种切片机制会造成一个问题,如果有大量的小文件,那么也就要分配大量的MapTask,但每个文件的数据量又很小,光是启动MapTask的过程就会消耗大量的资源,这样显然是不合理的。以上的例子就简单测试了CombineTextInputFormat在小文件切片时的应用。可以看到日志中显示有5个切片。...原创 2022-07-24 21:29:44 · 1453 阅读 · 0 评论 -
Hadoop HDFS API客户端配置
https://github.com/cdarlint/winutils这里我下载的是3.1.0版本的。下载后解压,将其余版本的安装包删掉,只留下了我需要的3.1.0安装包: 如果双击的之后是闪了一下,那么说明安装成功,如果是出现下面的报错,则是由于缺少一些运行库。如果报错,可以参考这篇博客中的解决方法:https://blog.csdn.net/QYHuiiQ/article/details/125694148?spm=1001.2014.3001.5502 在src/main/resources原创 2022-07-10 15:35:33 · 803 阅读 · 0 评论 -
Hadoop HDFS API客户端安装报错找不到MSVCR100.dlll
在windows上配置好环境变量运行winutils时报如下错误:解决方案:注意我的windows是64位的,所以这里下载的是vcredist_x64.exe。一定要注意下载2010版本的,下载之后双击安装即可。https://docs.microsoft.com/zh-cn/cpp/windows/latest-supported-vc-redist?view=msvc-170双击exe文件安装: 安装完成,问题解决。踩过的坑:按照网上的很多方法尝试下载MSVCR100.dlll文件然后放到相应的目录下,原创 2022-07-09 20:34:24 · 520 阅读 · 0 评论 -
Hadoop3.1.3搭建集群
Index of /dist/hadoop/common/hadoop-3.1.3这里我下载的是3.1.3.tar.gz。节点分配:首先,对于HDFS来说,NameNode和SecondaryNameNode是肯定要放在不同节点上的,其次,对于YARN中的ResourceManager来说,由于它也比较消耗资源,所以也尽量和NameNode/SecondaryNameNode分开放在不同节点上。NameNodeDataNodeNodeManagerResourceManagerDataNodeNodeMan原创 2022-07-03 22:47:28 · 1090 阅读 · 0 评论 -
启动hadoop3.1.3集群报错
在对hadoop3.1.3集群初始化之后,启动集群时,报错:解决方案:然后重新启动集群即可。原创 2022-07-03 22:23:40 · 1085 阅读 · 0 评论 -
YARN笔记
在该架构图中,从机器角度来看,主要有两种角色:ResourceManager和NodeManager。ResourceManager是通过yarn-site.xml中yarn.resourcemanager.hostname这个属性来配置的;而集群中的每个节点都会运行NodeManager这个角色。从应用程序角度来看,架构图中需要一种角色:ApplicationMaster(AppMstr),由于YARN是通用的,所以这个角色的名称也是统称,比如在MapReduce中这个角色就被称...原创 2022-06-21 19:38:19 · 342 阅读 · 0 评论 -
MapReduce笔记
MapReduce是一个分布式计算框架,底层依赖HDFS分布式存储框架。数据文件存储在HDFS上时,会被物理上地切分成数据块进行存储;原创 2022-06-17 21:35:28 · 399 阅读 · 0 评论 -
WritableComparable接口中序列化与反序列化的一点思考
在上一篇的实践案例中我们在自定义JavaBean的时候,通过实现WritableComparable接口,并重写其方法来实现序列化与反序列化。在重写readFields()时,我们之前写的案例都是对象的属性类型不同,所以在反序列化时直接调用dataInput.readUTF()和dataInput.readDouble()分别赋给string类型和Double类型的属性。这里会产生一个疑问,在反序列化时没有指定将哪个值反序列化之后赋给JavaBean中的某个属性,该案例中属性类型不同,我们姑且认为是通过数据原创 2022-06-14 21:49:34 · 199 阅读 · 0 评论 -
MapReduce案例之分组
在MapReduce中,分组主要是用于确定将哪些数据作为一个组,相同的key会被分为一组,然后调用一次reduce方法。默认情况下不同的key会被分为不同的组,从而每个组都会调用一次reduce方法。但是如果我们的业务中需要将不同的key放在同一个组里,调用一次reduce方法,那么就需要我们去自定义实现分组。在该案例中我们要实现的是将学生的语文、数学、英语成绩进行分组,并求出每个科目(每组)中成绩最高的一条数据。实现的大致思路:将数据上传至HDFS: 新建project: 自定义JavaBe原创 2022-06-13 22:11:50 · 1043 阅读 · 0 评论 -
MapReduce案例之自定义OutputFormat实现输出结果存放在不同文件夹下
该案例中要实现的是根据数据文件中的学生性别,将男生和女生分别放入不同的文件夹中,所以需要我们自定义一个OutputFormat类去实现我们的逻辑。为什么不用分区的思想直接对性别不同的数据进行区分呢,这是因为分区只是把不同的数据放入不同的分区文件中,而我们要实现的是放入不同的文件夹中。 第三列的值表示性别,1表示男生,0表示女生。将数据源文件上传至HDFS:新建Project: 自定义OutputFormat 自定义RecordWriter 自定义Mapper原创 2022-06-12 20:49:32 · 596 阅读 · 0 评论 -
MapReduce案例之多Map阶段求共同好友
该案例中我们要实现的是从数据文件中的好友关系中得到两两之间的共同好友,具体实现大致需要通过下面的两个阶段。第一阶段: 第二阶段:将数据上传至HDFS: 新建project: 自定义第一阶段的Mapper 自定义第一阶段的Reducer 自定义第一阶段的主类 打包第一阶段的jar并上传至服务器 查看第一阶段的输出结果 自定义第二阶段的Reducer 自定义第二阶段的主类 重新打包并上传至服务器原创 2022-06-08 22:53:22 · 466 阅读 · 0 评论 -
读取集群中HDFS上的文件报错Error: java.io.IOException: Filesystem closed at org.apache.hadoop.hdfs.DFSCl
在MapReduce中读取HDFS上的文件时报错:这是因为每个datanode使用的是同一个Configuration对象,节点在访问文件系统时会根据Configuration对象创建一个FileSystem实例(我的自定义Mapper中的代码):创建的这个实例默认会存在缓存中(由于下图中的源码),所以每个节点来读取时使用的就是同一个实例,这样如果一个节点读完了文件,然后关闭流,下一个节点来读取时就会报错。 而如果我们不添加配置禁用缓存,那么默认是false:所以需要对Configuration对象添原创 2022-06-07 22:46:45 · 1002 阅读 · 0 评论 -
MapReduce之Map阶段的join操作案例
在这个案例中我们要实现的是Map端的join,通常情况下我们会将小表放在分布式缓存中,然后将大表通过正常的map阶段与小表进行join,得到一个join之后的结果,这样map之后的结果就是我们想要的结果,那么就不需要reduce了,所以在该案例中,我们只需要自定义Mapper和主类即可。沿用上一个案例中的两个表,我们把学生基本信息表作为小表,把成绩表作为大表。先将数据文件放入HDFS中: 我们需要在程序启动时就将小表的数据文件放入分布式缓存中,这一步骤需要在主类中配置才能实现。新建project:原创 2022-06-08 08:57:42 · 425 阅读 · 0 评论 -
MapReduce之Reduce阶段的join操作案例
这里要实现的案例是学生基本信息的表与成绩表的join操作。与之前案例不同的是,前面的案例都是单个文件作为map端的数据输入,而在此案例中我们要将学生基本信息表和成绩表两个数据文件作为map端的数据输入。 上传至HDFS:新建project: 自定义Mapper 自定义Reducer 自定义主类 打包 查看输出结果这样就简单地实现了MapReduce中reduce端join多文件的功能。...原创 2022-06-06 22:18:18 · 235 阅读 · 0 评论 -
MapReduce案例之排序
这次要实现的是对数码、出行、餐饮三项支出中的出行支出(第4列)进行排序(降序)。将数据上传至HDFS: 新建project: 创建自定义Bean封装三项支出并实现序列化与排序 自定义Mapper 自定义Reducer 自定义主类 打包 查看输出结果...原创 2022-06-04 21:18:01 · 562 阅读 · 0 评论 -
MapReduce案例之聚合求和
在这个案例中,我们要实现的是统计每个用户(以手机号作为用户标识)过去几个月分别在数码、出行、餐饮方面的支出之和,也就是将每个月的数码支出进行求和,出行支出求和,餐饮方面求和,最后得出3个值。 将数据上传至服务器:将数据文件上传至HDFS:新建project: 创建自定义Bean类封装三项支出 自定义Mapper 自定义Reducer类 自定义主类 打包 查看运行结果可以看到运算结果与我们预期的结果是一致的。原创 2022-06-04 18:09:55 · 950 阅读 · 0 评论 -
MapReduce之排序及序列化案例的代码实现
这里我们要实现的案例是先对学生姓名进行排序(字典排序),如果遇到姓名重名的情况,再对年龄进行排序(升序)。将原始数据文件上传至HDFS[root@hadoop01 test_data]# hdfs dfs -mkdir /test_comparation_input[root@hadoop01 test_data]# hdfs dfs -put test_comparation.txt /test_comparation_input这里会对原始的5行数据先按照姓名的ascii值进行字典排序,原创 2022-05-30 22:50:59 · 415 阅读 · 0 评论 -
MapReduce之分区案例的代码实现
在此案例中,我们使用学生成绩实现分区功能(第三列为成绩):将原始数据上传至HDFS[root@hadoop01 test_data]# hdfs dfs -mkdir /test_partition_input[root@hadoop01 test_data]# hdfs dfs -put test_partiton.csv /test_partition_input新建project:引入pom依赖<?xml version="1.0" encoding="UTF-.原创 2022-05-29 22:38:37 · 568 阅读 · 0 评论 -
MapReduce之Word Count案例代码实现
准备用于计算word count的数据文件[root@hadoop01 test_data]# pwd/usr/local/wyh/test_data[root@hadoop01 test_data]# vi test_word_count.txt[root@hadoop01 test_data]# cat test_word_count.txthello,worldhadoop,world,sqoophive,hello,hadoop,mysqlwelcome,hadoop在HDF原创 2022-05-27 20:53:04 · 775 阅读 · 0 评论 -
运行mapreduce任务缺失setJarByClass()报错找不到类
报错信息中提示说是类找不到,但是直观来看,我的自定义Map类是在的,但是还是报错:[root@hadoop01 word_count_jar]# hadoop jar test_word_count-1.0-SNAPSHOT.jar wyh.test.mapreduce.WordCountMain22/05/27 07:34:08 INFO client.RMProxy: Connecting to ResourceManager at hadoop01/192.168.126.132:80322原创 2022-05-27 20:29:00 · 564 阅读 · 0 评论 -
使用Sqoop实现HDFS到mysql的数据导出
在实现数据导出之前,我们先做一下数据导入,使HDFS中有数据。将之前已经存在的表emp的数据导入至HDFS[root@hadoop01 ~]# sqoop import --connect jdbc:mysql://hadoop03:3306/test_sqoop --username root --password 123456 --table emp --target-dir hdfs://hadoop01:8020/test_sqoop_hdfs/emp --delete-target-dir原创 2022-05-13 19:52:04 · 2303 阅读 · 1 评论 -
使用Sqoop实现Mysql到Hive的数据导入
使用sqoop将mysql数据导入至hive的本质,其实是数据先导入至hdfs,然后会有一个脚本去执行将hdfs的数据load至hive中。所以我们将数据导入到hive时,其实hdfs中也会有这个数据。使用sqoop将数据导入至hive时,需要用到一个hive-common-xxx.jar下面的一个类,所以我们需要先将这个jar包上传至sqoop的lib目录下:添加jar[root@hadoop01 ~]# cp $HIVE_HOME/lib/hive-common-2.3.9.jar $SQO原创 2022-05-11 22:03:42 · 6505 阅读 · 1 评论 -
使用Sqoop实现Mysql到HDFS的数据导入
查看当前mysql下有哪些库[root@hadoop01 ~]# sqoop list-databases --connect jdbc:mysql://hadoop03:3306 --username root --password 123456;查看某个库下的所有表[root@hadoop01 ~]# sqoop list-tables --connect jdbc:mysql://hadoop03:3306/hive --username root --password 12345.原创 2022-05-11 21:12:43 · 3464 阅读 · 3 评论 -
安装Sqoop
官网下载地址:https://archive.apache.org/dist/sqoop/解压[root@hadoop01 wyh]# tar -zxvf sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz配置环境变量[root@hadoop01 ~]# vi /etc/profile#添加配置SQOOP_HOME=/usr/local/wyh/sqoop-1.4.7.bin__hadoop-2.6.0PATH=$PATH:$SQOOP_HOME/b.原创 2022-05-10 19:21:55 · 314 阅读 · 0 评论 -
Flume之常用选择器
Flume中的选择器主要是用于决定source进入哪个channel中,主要有两种选择器:replicating selector:将event复制到该source对应的所有channel中。multiplexing selector:指定特定header的值进入某个channel。如果没有指定选择器,默认使用replcating selector。案例-replicating selector:这里配置一个source,两个channel,两个sink。创建自定义conf文件原创 2022-05-08 21:21:40 · 1493 阅读 · 0 评论 -
Flume之常用拦截器
在Flume中会使用一些拦截器对source中的数据在进入channel之前进行拦截做一些处理,比如过滤掉一些数据,或者加上一些key/value等。可以同时使用多个拦截器,实现不同的功能。常用的拦截器有时间戳拦截器、主机名拦截器、静态拦截器等。时间戳拦截器:会在event的Header中添加一个key为timestamp,value为当前时间戳的值。主机名拦截器:会在event的Header中添加一个key(默认是host,也可通过hostHeader这个属性来自定义key),value是fl原创 2022-05-08 15:53:15 · 3508 阅读 · 0 评论 -
使用Flume监听http数据
创建自定义conf文件[root@hadoop01 test_conf]# cat test-http-logger.confmyagent.sources=mysource1myagent.channels=mychannel1myagent.sinks=mysink1myagent.sources.mysource1.channels=mychannel1myagent.sinks.mysink1.channel=mychannel1myagent.sources.mysource1原创 2022-05-06 21:10:09 · 833 阅读 · 0 评论 -
使用Flume spool读取目录文件数据
使用flume spool的source,当被监控的目录下有文件更新,就会将文件数据发给chanel。创建自定义conf文件[root@hadoop01 test_conf]# pwd/usr/local/wyh/apache-flume-1.8.0-bin/test_conf[root@hadoop01 test_conf]# cat test-spool-logger.confmyagent.sources=mysource1myagent.channels=mychannel1mya原创 2022-05-06 20:33:09 · 542 阅读 · 0 评论