
Hadoop
hadoop生态圈,包括hdfs、mapreduce、yarn
孙晨c
业精于勤,荒于嬉;行成于思,毁于随。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
hadoop3.1.3版本的secondaryNamenode的web界面不能显示的问题?
文章目录发现问题解决问题找到根源根治问题必看发现问题在浏览器输入secondaryNamenode的网址后不能显示,解决:先按F12,然后选择console,就能看见报错信息了:解决问题找到根源那就通过find命令找到这个dfs-dust.js文件:根治问题vim编辑器进入后,在命令模式输入:se nu设置行号,找到61行报错显示 monment is not defind,那就不要它了,反正也只是生成一个时间字符串删除这一行,自己写一个不就完了么?保存退出,一气呵成!原创 2021-01-28 16:59:07 · 1683 阅读 · 4 评论 -
在centos7上进行hadoop-3.1.2的伪分布搭建
第一步:配置网络(静态IP)vi /etc/sysconfig/network-scripts/ifcfg-ens33(网卡名称可能不同)1. 修改:将该配置文件中的ONBOOT=no修改为yes(网络开机自启)将BOOTPROTO=dhcp修改为static(将ip设置为静态ip)2. 为了能够通过外部访问到虚拟机,增加:IPADDR=192.168.1...原创 2019-12-02 20:34:00 · 499 阅读 · 0 评论 -
linux的常用命令
系统信息arch 显示机器的处理器架构(1)uname -m 显示机器的处理器架构(2)uname -r 显示正在使用的内核版本dmidecode -q 显示硬件系统部件 - (SMBIOS / DMI)hdparm -i /dev/hda 罗列一个磁盘的架构特性hdparm -tT /dev/sda 在磁盘上执行测试性读取操作cat /proc/cpuinfo 显示CPU...原创 2019-08-27 23:43:00 · 192 阅读 · 0 评论 -
在centos7中如何配置JDK
CentOS7自带jdk1.8查看当前系统jdk的版本:java -version列举匹配已安装的java的软件包:yum list installed | grep java卸载安装的jdk: yum -y remove java-1.7.0-openjdk* yum -y remove java-1.8.0-openjdk*安装JDK的方法很多,...原创 2019-08-28 23:29:00 · 248 阅读 · 0 评论 -
在centos7环境下如何搭建hadoop3版本
最近搭建这个hadoop踩过不少坑,先是配置JDK搞错路径(普通用户和root用户下的路径不同),再就是hadoop版本不同导致的启动错误,网上找到的是hadoop2.*.*的版本,但是我安装的hadoop3.*.*的版本,环境配置有部分不同。希望大家不要重蹈覆辙!下载hadoop安装包地址:http://hadoop.apache.org/安装配置1.配...原创 2019-08-30 00:56:00 · 158 阅读 · 0 评论 -
虚拟机克隆后,重启网络服务时报错:网卡故障:弹出界面eth0: 错误:没有找到合适的设备:没有找到可用于链接System eth0 的……的解决办法
这通常是由于虚拟机克隆后,mac地址加了一行eth1,但是在这个文件里:/etc/sysconfig/network-scripts/ifcfg-eth0HWADDR仍是eth0的地址解决:修改指定网卡信息的文件vi /etc/udev/rules.d/70-persistant-net.rules找到eth1(除eth0以外),将NAME属性修改为eth0,并复制mac地址修改网卡配置文件vi /etc/sysconfig/network-scripts/ifcfg-eth0原创 2020-12-22 11:13:31 · 685 阅读 · 0 评论 -
hadoop分布式格式化时出现异常java.net.unknownhostexception
当搭建好分布式集群后,准备使用命令格式化时hdfs namenode format在日志的最后一行出现 java.net.unknownhostexception的异常,通常是你的主机名没有配置好,在core-site.xml文件中的主机名与hosts文件、network文件里的主机名不一致。解决vim /etc/sysconfig/network # HOSTNAME=主机名,本机唯一的vim /etc/hosts #将IP与主机名做映射:IP地址 主机名。可以做多个映射...原创 2020-09-26 22:55:49 · 1362 阅读 · 1 评论 -
MapperReduce常见错误及解决方案
1)导包容易出错。尤其Text和CombineTextInputFormat。2)Mapper中第一个输入的参数必须是LongWritable或者NullWritable,不可以是IntWritable. 报的错误是类型转换异常。3)java.lang.Exception: java.io.IOException: Illegal partition for 13926435656 (4),说明Partition和ReduceTask个数没对上,调整ReduceTask个数。4)如果分区数不是1,但原创 2020-09-16 16:57:56 · 733 阅读 · 1 评论 -
MapReduce案例之寻找共同好友
以下是博客的好友列表数据,冒号前是一个用户,冒号后是该用户的所有好友(数据中的好友关系是单向的)求出哪些人两两之间有共同好友,及他俩的共同好友都有谁?输出格式:A-B:C,E(用户-用户:共同好友…)需求分析分为两个job第一次输出结果,先求出A、B、C、….等是谁的好友Job1:Mapper:keyin-valuein: (A:B,C,D,F,E,O)map(): 将valuein拆分为若干好友,作为keyout写出将keyin作为valueoutkeyout-value原创 2020-09-16 16:56:01 · 807 阅读 · 0 评论 -
Hadoop之MapReduce开发总结
文章目录1.输入数据接口:InputFormat2.逻辑处理接口:Mapper3.Partitioner分区4.Comparable排序5.Combiner合并(可选)6.Reduce端分组GroupingComparator7.逻辑处理接口:Reducer8.输出数据接口:OutputFormat1.输入数据接口:InputFormat(1)默认使用的实现类是:TextInputFormat(2)TextInputFormat的功能逻辑是:一次读一行文本,然后将该行的起始偏移量作为key,行内容作为原创 2020-09-16 15:41:12 · 543 阅读 · 0 评论 -
MapReduce之多个Job串联的案例
文章目录需求分析代码实现输出结果需求有三个文件,里面记录着一些单词,请统计每个单词分别在每个文件出现的次数。数据输入期待输出比如:atguigu c.txt–>2 b.txt–>2 a.txt–>3分析如果一个需求,一个MRjob无法完成,可以将需求拆分为若干Job,多个Job按照依赖关系依次执行!Job1:Mapper: 默认一个MapTask只处理一个切片的数据,默认的切片策略,一个切片只属于一个文件。keyin-valuein:atguigu pingping原创 2020-08-17 18:11:43 · 916 阅读 · 0 评论 -
MapReduce之MapJoin案例
文章目录**使用场景****优点****具体办法**:采用`DistributedCache`案例需求分析代码实现使用场景Map Join 适用于一张表十分小、一张表很大的场景。优点思考:在Reduce 端处理过多的表,非常容易产生数据倾斜。怎么办?在Map端缓存多张表,提前处理业务逻辑,这样增加Map 端业务,减少Reduce 端数据的压力,尽可能的减少数据倾斜。具体办法:采用DistributedCache(1)在Mapper的setup阶段,将文件读取到缓存集合中。(2)在驱动函数中加原创 2020-08-17 13:20:45 · 422 阅读 · 0 评论 -
MapReduce之ReduceJoin案例
文章目录Reduce Join原理案例实操需求分析MR分析MR实现ReduceJoin代码实现Reduce Join原理Map端的主要工作:为来自不同表或文件的key/value对,打标签以区别不同来源的记录。然后用连接字段作为key,其余部分和新加的标志作为value,最后进行输出。Reduce端的主要工作:在Reduce端以连接字段作为key的分组已经完成,我们只需要在每一个分组当中将那些来源于不同文件的记录(在Map阶段已经打标志)分开,最后进行合并就ok了。该方法的缺点:这种方式的缺点很明原创 2020-08-17 13:12:43 · 548 阅读 · 0 评论 -
MapReduce之自定义OutputFormat
文章目录OutputFormat接口实现类自定义OutputFormat使用场景及步骤使用场景自定义OutputFormat 案例实操OutputFormat接口实现类OutputFormat是MapReduce输出的基类,所有实现MapReduce输出都实现了OutputFormat接口。下面介绍几种常见的OutputFormat实现类。文本输出TextoutputFormat默认的输出格式是TextOutputFormat,它把每条记录写为文本行。它的键和值可以是任意类型,因为TextOut原创 2020-08-05 17:06:55 · 387 阅读 · 0 评论 -
MapReduce之GroupingComparator分组(辅助排序、二次排序)
指对Reduce阶段的数据根据某一个或几个字段进行分组。案例需求有如下订单数据现在需要找出每一个订单中最贵的商品,如图需求分析利用“订单id和成交金额”作为key,可以将Map阶段读取到的所有订单数据先按照订单id(升降序都可以),再按照acount(降序)排序,发送到Reduce。在Reduce端利用groupingComparator将订单id相同的kv聚合成组,然后取第一个成交金额即是最大值(若有多个成交金额并排第一,则都输出)。Mapper阶段主要做三件事:ke.原创 2020-08-01 13:29:07 · 545 阅读 · 0 评论 -
MapReduce之Combiner合并
Combiner是MR程序中Mapper和Reducer之外的一种组件(本质是一个Reducer类)Combinr组件的父类就是ReducerConbimer只有在驱动类里设置了之后,才会运行Combiner和Reducer的区别在于运行的位置:map----sort—copy—sort(shuffle阶段)—reduce==Combiner是在每一个MapTask所在的节点运行Reducer是接收全局所有Mapper的输出结果==Combiner的意义就是对每一..原创 2020-07-29 23:46:34 · 528 阅读 · 0 评论 -
MapReduce之WritableComparable排序
文章目录排序概述获取Mapper输出的key的比较器(源码)案例实操(区内排序)自定义排序器,使用降序排序概述排序是MapReduce框架中最重要的操作之一。Map Task和ReduceTask均会默认对数据按照key进行排序。该操作属于Hadoop的默认行为。任何应用程序中的数据均会被排序,而不管逻辑上是否需要。黑默认排序是按照字典顺序排序,且实现该排序的方法是快速排序。对于MapTask,它会将处理的结果暂时放到一个缓冲区中,当缓冲区使用率达到一定阈值后,再对缓冲区中的数据进行一次排序,并原创 2020-07-29 17:39:22 · 305 阅读 · 0 评论 -
MapReduce之自定义分区器Partitioner
文章目录问题引出默认Partitioner分区自定义Partitioner步骤Partition分区案例实操分区总结问题引出要求将统计结果按照条件输出到不同文件中(分区)。比如:将统计结果按照手机归属地不同省份输出到不同文件中(分区)默认Partitioner分区public class HashPartitioner<K,V> extends Partitioner<K,V>{ public int getPartition(K key,V value, int n原创 2020-07-21 17:36:52 · 837 阅读 · 1 评论 -
MapReduce之MapTask工作机制
1. 阶段定义MapTask:map----->sortmap:Mapper.map()中将输出的key-value写出之前sort:Mapper.map()中将输出的key-value写出之后2. MapTask工作机制Read阶段MapTask通过用户编写的RecordReader,从输入InputSplit中解析出一个个key/value。Map阶段该节点主要是将解析出的key/value交给用户编写map()函数处理,并产生一系列新的key/value。Colle原创 2020-07-19 22:24:23 · 205 阅读 · 0 评论 -
MapReduce之自定义InputFormat
在企业开发中,Hadoop框架自带的InputFormat类型不能满足所有应用场景,需要自定义InputFormat来解决实际问题。自定义InputFormat步骤如下:(1)自定义一个类继承FilelnputFormat。(2)自定义一个类继承RecordReader,实现一次读取一个完整文件,将文件名为key,文件内容为value。(3)在输出时使用SequenceFileOutPutFormat输出合并文件。无论HDFS还是MapReduce,在处理小文件时效率都非常低,但又难免面.原创 2020-07-19 14:43:19 · 347 阅读 · 0 评论 -
MapReduce之Job提交流程
文章目录1. 准备阶段2. 提交阶段1. 准备阶段运行Job.waitForCompletion(),先使用JobSubmitter提交Job,在提交之前,会在Job的作业目录中生成以下文件:job.split:当前Job的切片信息,有几个切片对象job.splitmetainfo:切片对象的属性信息job.xml:job所有的属性配置2. 提交阶段本地模式:LocalJobRunner进行提交,如果是HDFS,使用了yarn,则是YARNJobRunner创建一个LocalJobRunn原创 2020-07-17 23:35:36 · 572 阅读 · 0 评论 -
MapReduce的常见输入格式之CombineTextInputFormat
虽然切片数越多,启动的maptask就越多,并行运行执行效率越高。但凡事都有个度,万一切片过多,也会影响执行效率文章目录执行流程CombineTextInputFormat切片流程案例执行流程Job–>MRAppMaster–>RM–>调度队列–>NM–>Container–>MapTask可以看见,从job提交到执行maptask,中间还会经历很多过程。这时候需要将很多小文件合并切片,提高执行效率。CombineTextInputFormat作用: 改.原创 2020-07-17 17:34:43 · 466 阅读 · 0 评论 -
MapReduce之片和块的关系
文章目录片大小的计算片和块的关系片大小的计算long splitSize = computeSplitSize(blockSize, minSize, maxSize);protected long computeSplitSize(long blockSize, long minSize, long maxSize) { return Math.max(minSize, Math.min(maxSize, blockSize)); }blockSize: 块大小minSize:原创 2020-07-17 16:31:52 · 512 阅读 · 0 评论 -
MapReduce之 FileInputFormat的切片策略(默认)
①获取当前输入目录中所有的文件②以文件为单位切片,如果文件为空文件,默认创建一个空的切片③如果文件不为空,尝试判断文件是否可切(不是压缩文件,都可切)④如果文件不可切,整个文件作为1片⑤如果文件可切,先获取片大小(默认等于块大小),循环判断 待切部分/ 片大小 > 1.1,如果大于先切去一片,再判断…⑥剩余部分整个作为1片以下为源码部分public List<InputSplit> getSplits(JobContext job) throws IOException.原创 2020-07-17 16:24:25 · 355 阅读 · 0 评论 -
MapReduce的常见输入格式之KeyValueTextInputFormat
有一文件,如图所示每行第一个字段为名字,后面的则为该人的一些信息,所以此时的输入格式应该是以每一行的名字为Key,每一行的其他信息为Value。KeyValueTextInputFormat作用: 针对文本文件!使用分割字符,将每一行分割为key和value如果没有找到分隔符,当前行的内容作为key,value为空串默认分隔符为\t,可以通过参数mapreduce.input.keyvaluelinerecordreader.key.value.separator指定分隔符切片:默原创 2020-07-17 16:19:37 · 729 阅读 · 0 评论 -
MapReduce的常见输入格式之NlineInputFormat
有两个文件:NlineInputFormat切片策略: 读取配置文件中的参数mapreduce.input.lineinputformat.linespermap,默认为1,以文件为单位,切片每此参数行作为1片!既然有参数,那就可以修改,设置为每N行切为一片:Configuration conf = new Configuration();conf.set("mapreduce.input.lineinputformat.linespermap", "2")RecordReade原创 2020-07-17 16:03:32 · 359 阅读 · 0 评论 -
使用MapReduce运行自定义bean案例
如果一个文件的内容不只是简单的单词,而是类似于一个对象那般,有多种属性值,如:在这个文件中,每一行的内容分别代表:手机号、IP、访问网站、上行流量、下行流量、状态码,现在需要统计每个手机号访问网站的上行流量、下行流量以及它们的总和。由于mapper按照每行进行切片,不妨创建一个bean,封装这些属性。FlowBean.javapublic class FlowBean implements Writable{ private long upFlow;//上行流量 private long.原创 2020-07-15 20:38:12 · 413 阅读 · 0 评论 -
使用MapReduce运行WordCount案例
文章目录一、准备数据二、MR的编程规范三、编程步骤四、编写程序Mapper程序解读一、准备数据注意:准备的数据的格式必须是文本,每个单词之间使用制表符分割。编码必须是utf-8无bom二、MR的编程规范MR的编程只需要将自定义的组件和系统默认组件进行组合,组合之后运行即可!三、编程步骤①Map阶段的核心处理逻辑需要编写在Mapper中②Reduce阶段的核心处理逻辑需要编写在Reducer中③将编写的Mapper和Reducer进行组合,组合成一个Job④对Job进行设置,设置后运行四原创 2020-07-15 12:01:08 · 931 阅读 · 0 评论 -
如何在集群里服役新节点、退役旧节点(DataNode)
准备好新的数据节点(DataNode)①准备机器,配置好JDK、hadoop的环境变量,在hdfs-site.xml和yarn-site.xml文件中分别配置NameNode和ResourceManager所在主机名②待服役成功后,启动datanode和nodemanager进程即可③服役了新的DN节点后,可以执行再平衡的命令,这个命令可以将集群中块进行重新平衡分配,实现负载均衡:./start-balancer.sh方法一:白名单白名单之外的机器,无法进入集群编写一个文件,添加要服役的主机原创 2020-07-12 16:36:12 · 375 阅读 · 0 评论 -
MapReduce的运行流程概述
MapReduce处理数据的大致流程①InputFormat调用RecordReader,从输入目录的文件中,读取一组数据,封装为keyin-valuein对象②将封装好的key-value,交给Mapper.map()------>将处理的结果写出 keyout-valueout③ReduceTask启动Reducer,使用Reducer.reduce()处理Mapper的keyout-valueout④OutPutFormat调用RecordWriter,将Reducer处理后的keyou原创 2020-07-11 23:58:59 · 438 阅读 · 0 评论 -
MapReduce计算框架的核心编程思想
文章目录概念MapReduce中常用的组件概念Job(作业) : 一个MapReduce程序称为一个Job。MRAppMaster(MR任务的主节点): 一个Job在运行时,会先启动一个进程,这个进程称为MRAppMaster,负责Job中执行状态的监控,容错,和RM申请资源,提交Task等。Task(任务): Task是一个进程,负责某项计算。Map(Map阶段):Map是MapReduce程序运行的第一个阶段,Map阶段的目的是将输入的数据,进行切分。将一个大文件,切分为若干小部分!切分后原创 2020-07-11 23:02:35 · 505 阅读 · 0 评论 -
解决HDFS上小文件的存储
从源头上解决,在上传到HDFS之前,就将多个小文件归档使用tar命令 带上参数-zcvf示例:tar -zcvf xxx.tar.gz 小文件列表如果小文件已经上传到HDFS了,可以使用在线归档使用hadoop archive命令示例:hadoop archive -archiveName xxx.har -p /文件目录 小文件列表 /存放目录在线归档的功能实际是一个MR程序,这个程序将HDFS已经存在的多个小文件归档为一个归档文件!在本地查看har包里的归档文件,.原创 2020-07-11 16:16:33 · 338 阅读 · 0 评论 -
集群里常见进程的端口号
原创 2020-07-10 20:16:23 · 410 阅读 · 0 评论 -
Hadoop集群之浅析安全模式
集群启动顺序:NameNode启动NameNode启动时,首先将镜像文件(Fsimage)载入内存,并执行编辑日志(Edits)中的各项操作。一旦在内存中成功建立文件系统元数据的映像,则创建一个新的Fsimage文件和一个空的编辑日志。此时,NameNode开始监听DataNode请求。这个过程期间,NameNode一直运行在安全模式,即NameNode的文件系统对于客户端来说是只读的,并且是有限只读,即在没有启动DataNode的机器上的文件依旧不可读!DataNode启动系统中的数据块的位置并原创 2020-07-09 23:52:06 · 224 阅读 · 0 评论 -
NameNode是如何存储元数据的?
1.NN的作用保存HDFS上所有文件的元数据!接受客户端的请求!接受DN上报的信息,给DN分配任务(维护副本数)!2.元数据的存储元数据存储在fsiamge文件+edits文件中!fsimage(元数据的快照文件)edits(记录所有写操作的日志文件)NN负责处理集群中所有客户端的请求和所有DN的请求!在一个集群中,通常NN需要一个高配置,保证NN可以及时处理客户端或DN的请求,一旦NN无法及时处理请求,HDFS就已经瘫痪!edits文件的产生:NN在启动之后,每次接受的写操原创 2020-07-09 15:12:33 · 2142 阅读 · 0 评论 -
hadoop集群的启动与停止
文章目录单点启动群起集群查看是否启动成功集群启动/停止方式总结单点启动如果集群是第一次启动,需要格式化NameNodehadoop namenode -format在某一台机器上启动NameNode节点hadoop-daemon.sh start namenode在其他机器上启动DataeNode节点hadoop-daemon.sh start datanode思考:每次都一个一个节点启动,如果节点数增加到1000个怎么办?早上来了开始一个一个节点启动,到晚上下班刚好完原创 2020-07-08 23:53:13 · 584 阅读 · 0 评论 -
HDFS读写流程(重点)
文章目录一、写数据流程举例:二、异常写流程读数据流程一、写数据流程①服务端启动HDFS中的NN和DN进程②客户端创建一个分布式文件系统客户端,由客户端向NN发送请求,请求上传文件③NN处理请求,检查客户端是否有权限上传,路径是否合法等④检查通过,NN响应客户端可以上传⑤客户端根据自己设置的块大小,开始上传第一个块,默认0-128M,NN根据客户端上传文件的副本数(默认为3),根据机架感知策略选取指定数量的DN节点返回⑥客户端根据返回的DN节点,请求建立传输通道客户端向最近(网络距离最近)的原创 2020-07-08 20:37:55 · 390 阅读 · 0 评论 -
HDFS之下载某个块的文件
假如我有一个文件在HDFS上分成了0~2,共三块,那么如何把它们下载到本地并且恢复成完整的文件呢?public class TestCustomUploadAndDownload { private FileSystem fs; private FileSystem localFs; private Configuration conf = new Configuration(); @Before public void init() throws IOException,.原创 2020-07-08 17:45:35 · 562 阅读 · 0 评论 -
HDFS之自定义上传、下载文件的大小
在之前的总结中,对文件的上传和下载都是默认的全部大小。那么,如何做到上传文件时,只上传这个文件的一部分或只下载文件的某一部分?官方实现的代码: InputStream in=null; OutputStream out = null; try { in = srcFS.open(src); out = dstFS.create(dst, overwrite); IOUtils.copyBytes(in, out, conf原创 2020-07-08 17:30:09 · 338 阅读 · 0 评论 -
HDFS之使用Java客户端对文件的一些操作
import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.FileSystem;import org.apache.hadoop.fs.Path;import org.junit.Test;import java.net.URI;/** * @Author SunBingRui * @Date 2020/7/7 16:27 */public class TestHDFS { @Test原创 2020-07-07 18:00:55 · 289 阅读 · 0 评论