关于hadoop:hive建模分析

建模剖析基于访客零碎的案例来进行探讨建模剖析目标剖析出整个数仓须要哪些档次,哪些表,哪些字段ODS层:源数据层 对接源数据,放弃和源数据雷同粒度DWD 工作:1.荡涤。 不残缺数据过期或者有效数据2.转换 create_time->年月日或工夫戳3.能够适当维度进化,缩小表的关联DWM:中间层 进一步对明细层进行聚合,譬如能够将日的记录先合并,在前期记录月时能够更不便的合并DWS: 业务层 细化聚合统计,APP:应用层 对细化统计后果再次剖析能够省略DIM:维度层 搁置维度表数据

February 23, 2021 · 1 min · jiezi

关于hadoop:数据库‖超万亿规模的Hadoop-NameNode性能故障排查过程分享

随着国内互联网行业的倒退,万亿规模的超大集群尽管已不像几年前那么百里挑一,然而也并不多见,尤其是波及超万亿规模的超大集群性能故障排查的机会就更加稀少。 而这次我所进行的超万亿规模的Hadoop NameNode性能故障排查也是在我守业几年以来所遇到的集群规模最大,耗时最长,排查工作量最大,头发掉的最多,最终都不得不求助于大牛的一次经验。 因而在问题解决之后,我也第一工夫将这次的整个排查过程记录下来进行总结,心愿能给看到的各位同学有所帮忙。上面,enjoy: 起 因 事件的起因是因为近日客户反馈应用咱们数据库的成果忽然变差,之前秒级响应的数据查问与检索,当初却总是在“转圈”,卡住不动了。因为是忽然产生的景象,曾经在现场的同当时排除了业务变动,然而并未发现问题。作为本人创建公司后第一个接到的万亿数据体量的大我的项目,我本身也非常重视,马上第一工夫奔赴现场。 这里先容介绍一下该平台架构,底层采纳hadoop进行分布式存储,两头数据库采纳的录信LSQL,数据实时导入采纳kafka进行。每天的数据规模是500亿,数据存储周期为90天,一共有4000多张数据表,其中最大的单表数据规模近2万亿条记录,总数据规模将近5万亿,存储空间占8PB。 数据平台撑持的根本应用次要包含数据的全文检索、多维查问,以及地理位置检索、数据碰撞等操作。也会有局部业务波及数据的统计和剖析,会有极少量的数据导出与多表关联操作。 经 过 ①Before the day:初步定位问题 话说我在守业之前在腾讯做Hermes零碎,每日接入的实时数据量就曾经达到了3600亿/天,之后更是达到了每日近万亿条数据的实时导入。为了不显得那么凡尔赛,我只想说,我和梁启超在北大演讲时的情绪一样:我对超大集群没什么理解,然而还是有那么一点喽!面对以后每日500-1000亿规模的零碎,我在思考是不是买票的时候把当天的回程票也买了...... 为了疾速定位问题,还没登程之前我就跟现场要了一些日志和jstack,初步定位是hadoop NameNode的瓶颈,而NN的优化咱们此前也做了很屡次,别无其他,唯手熟尔。 下图为过后堆栈的剖析状况,预计在座诸位看了都会信念满满,这很显著就是hadoop卡顿。 ②First Day:尝试调整log4j 到现场的第一天,仍然是风和日丽,情绪持续放弃漂亮。 我到现场后第一件事件就是一直的抓hadoop Namenode的堆栈Jstack。从中失去的论断是问题的确是卡顿在NN上。此处NN是一个全局锁,所有的读写操作都在排序期待,详情如下图所示: 1. 卡在哪里 这个锁的期待个数居然长达1000多个,不卡才怪呢,咱们再细看一下,以后领有这个锁的线程在做什么? 2. 问题剖析 很显著,在记录log上存在瓶颈,阻塞的工夫太久。 1) 记录的log4j不应该加【%L】,它会创立Throwable对象,而这个在java里是一个重对象。 2) 日志记录太频繁,刷盘刷不动。 3) log4j有全局锁,会影响吞吐量。 3. 调整计划 1) 客户的hadoop版本采纳的是2.6.0版本,该版本的hadoop,在日志解决上存在诸多问题,故咱们将官网明确示意存在问题的patch打了进来 https://issues.apache.org/jir... 因日志起因导致nn慢 https://issues.apache.org/jir... 将日志记录到锁外,防止卡锁 https://issues.apache.org/jir... processIncrementalBlockReport 导致的记录日志问题,重大影响NN性能 2) 禁用namenode所有info级别的日志 察看发现当有大量日志输入的时候,全局锁会阻塞NN。 目前批改形式是屏蔽到log4j的日志输入,禁用namenode所有info级别的日志。 3) log4j 的日志输入去掉【%L】参数 这个参数会为了失去行号而创立new Throwable对象,这个对象对性能影响很大,大量创立会影响吞吐量。 4) 启用异步审计日志 dfs.namenode.audit.log.async 设置为true,将审计日志改为异步。 4. 优化成果 优化之后,的确因log4j导致的卡顿问题不存在了,但hadoop的吞吐量仍然卡,仍旧卡在lock上。 ③Second Day:优化du,排查解决所有卡顿 接着昨天的工作: 1. 在解决了log4j的问题后,持续抓jstack,抓到如下地位: 2. 通过代码进行剖析,发现的确此处有锁,证实此处会引起所有拜访阻塞: 3. 持续深刻研读代码,发现受如下参数管制: (2.6.5版本这个默认值是5000,曾经不存在这个问题了) 这个参数的外围逻辑是,如果配置上大于零的值,它会距离肯定文件数量,开释锁,让别的程序得以继续执行,该问题只会在hadoop2.6.0的版本里存在,之后的版本里曾经对此做了修复。 4. 解决办法 1) 打上官网patch: ...

February 20, 2021 · 1 min · jiezi

关于hadoop:hdfs高容错实现

hdfs高容错机制 总结以上链接内容针对3种故障,别离对应多种措施 节点失败 若namenode真的故障,凉凉,在非高可用的版本下整个集群挂掉若datanode故障,可通过每3秒的向namenode发送的心跳信号来检测是否失常工作,10分钟都没收到那么就视为挂掉了网络故障 通信时任何一次音讯发送都会期待确认帧ack,未收到则阐明故障了数据损坏 每次进行数据发送会随同一个总的校验码,校验码随数据一起存储,能够用来鉴定数据,在下一次须要对该块数据进行工作时,会取出数据及校验码校验后向namenode汇报,对于有故障的块会综合剖析进行还原

February 18, 2021 · 1 min · jiezi

关于hadoop:史上最全Hadoop-核心-HDFS-分布式文件系统详解上万字建议收藏

1. HDFS概述Hadoop 分布式系统框架中,首要的根底性能就是文件系统,在 Hadoop 中应用 FileSystem 这个抽象类来示意咱们的文件系统,这个抽象类上面有很多子实现类,到底应用哪一种,须要看咱们具体的实现类,在咱们理论工作中,用到的最多的就是HDFS(分布式文件系统)以及LocalFileSystem(本地文件系统)了。 在古代的企业环境中,单机容量往往无奈存储大量数据,须要跨机器存储。对立治理散布在集群上的文件系统称为分布式文件系统。 HDFS(Hadoop Distributed File System)是 Hadoop 我的项目的一个子项目。是 Hadoop 的外围组件之一, Hadoop 十分适于存储大型数据 (比方 TB 和 PB),其就是应用 HDFS 作为存储系统. HDFS 应用多台计算机存储文件,并且提供对立的拜访接口,像是拜访一个一般文件系统一样应用分布式文件系统。 2. HDFS架构 HDFS是一个主/从(Mater/Slave)体系结构,由三局部组成: NameNode 和 DataNode 以及 SecondaryNamenode: NameNode 负责管理整个文件系统的元数据,以及每一个门路(文件)所对应的数据块信息。DataNode 负责管理用户的文件数据块,每一个数据块都能够在多个 DataNode 上存储多个正本,默认为3个。Secondary NameNode 用来监控 HDFS 状态的辅助后台程序,每隔一段时间获取 HDFS 元数据的快照。最次要作用是辅助 NameNode 治理元数据信息。 3. HDFS的个性首先,它是一个文件系统,用于存储文件,通过对立的命名空间目录树来定位文件; 其次,它是分布式的,由很多服务器联结起来实现其性能,集群中的服务器有各自的角色。 1. master/slave 架构(主从架构)HDFS 采纳 master/slave 架构。个别一个 HDFS 集群是有一个 Namenode 和肯定数目的 Datanode 组成。Namenode 是 HDFS 集群主节点,Datanode 是 HDFS 集群从节点,两种角色各司其职,独特协调实现分布式的文件存储服务。2. 分块存储HDFS 中的文件在物理上是分块存储(block)的,块的大小能够通过配置参数来规定,默认大小在 hadoop2.x 版本中是 128M。3. 名字空间(NameSpace)HDFS 反对传统的档次型文件组织构造。用户或者应用程序能够创立目录,而后将文件保留在这些目录里。文件系统名字空间的层次结构和大多数现有的文件系统相似:用户能够创立、删除、挪动或重命名文件。 Namenode 负责保护文件系统的名字空间,任何对文件系统名字空间或属性的批改都将被 Namenode 记录下来。 HDFS 会给客户端提供一个对立的形象目录树,客户端通过门路来拜访文件,形如:hdfs://namenode:port/dir-a/dir-b/dir-c/file.data。4. NameNode 元数据管理咱们把目录构造及文件分块地位信息叫做元数据。NameNode 负责保护整个 HDFS 文件系统的目录树结构,以及每一个文件所对应的 block 块信息(block 的 id,及所在的 DataNode 服务器)。5. DataNode 数据存储文件的各个 block 的具体存储管理由 DataNode 节点承当。每一个 block 都能够在多个 DataNode 上。DataNode 须要定时向 NameNode 汇报本人持有的 block 信息。 存储多个正本(正本数量也能够通过参数设置 dfs.replication,默认是 3)6. 正本机制为了容错,文件的所有 block 都会有正本。每个文件的 block 大小和正本系数都是可配置的。应用程序能够指定某个文件的正本数目。正本系数能够在文件创建的时候指定,也能够在之后扭转。7. 一次写入,屡次读出HDFS 是设计成适应一次写入,屡次读出的场景,且不反对文件的批改。 正因为如此,HDFS 适宜用来做大数据分析的底层存储服务,并不适宜用来做网盘等利用,因为批改不不便,提早大,网络开销大,老本太高。4. HDFS 的命令行应用如果没有配置 hadoop 的环境变量,则在 hadoop 的装置目录下的bin目录中执行以下命令,如已配置 hadoop 环境变量,则可在任意目录下执行help ...

February 8, 2021 · 6 min · jiezi

关于hadoop:Hadoop集群搭建

Hadoop是Apache软件基金会旗下的一个开源分布式计算平台。以Hadoop分布式文件系统(HDFS,Hadoop Distributed Filesystem)和MapReduce(Google MapReduce的开源实现)为外围的Hadoop为用户提供了零碎底层细节通明的分布式基础架构。 对于Hadoop的集群来讲,能够分成两大类角色:Master和Salve。一个HDFS集群是由一个NameNode和若干个DataNode组成的。其中NameNode作为主服务器,治理文件系统的命名空间和客户端对文件系统的拜访操作;集群中的DataNode治理存储的数据。MapReduce框架是由一个独自运行在主节点上的JobTracker和运行在每个集群从节点的TaskTracker独特组成的。主节点负责调度形成一个作业的所有工作,这些工作散布在不同的从节点上。主节点监控它们的执行状况,并且从新执行之前的失败工作;从节点仅负责由主节点指派的工作。当一个Job被提交时,JobTracker接管到提交作业和配置信息之后,就会将配置信息等分发给从节点,同时调度工作并监控TaskTracker的执行。 从下面的介绍能够看出,HDFS和MapReduce独特组成了Hadoop分布式系统体系结构的外围。HDFS在集群上实现分布式文件系统,MapReduce在集群上实现了分布式计算和工作解决。HDFS在MapReduce工作处理过程中提供了文件操作和存储等反对,MapReduce在HDFS的根底上实现了工作的散发、跟踪、执行等工作,并收集后果,二者相互作用,实现了Hadoop分布式集群的次要工作。 具体装置步骤如下: 一、装置Linux Centos6.7操作系统,配置网络信息如下,具体步骤略 配置host主机名 [root@master ~]# vim /etc/sysconfig/network NETWORKING=yes HOSTNAME=master #另外两台是slave1和slave2 NTPSERVERARGS=iburst 须要重启后能力失效 长期更改主机名的办法是 [root@master ~]# hostname master [root@master ~]# bash 配置IP [root@master ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0 批改IP IPADDR=192.168.101.230 机器分部信息如下: 192.168.101.230 master 192.168.101.231 slave1 192.168.101.230 slave2 二、增加3台虚拟机hosts文件 slave1和slave2都要增加,hosts文件的作用,它次要用于确定每个结点的IP地址,不便后续master结点能疾速查到并拜访各个结点 [root@master ~]# vim /etc/hosts 127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.101.230 master 192.168.101.231 slave1 192.168.101.232 slave2 三、建设hadoop运行账号密码hadoop,三台机器上都须要建设 ...

February 1, 2021 · 4 min · jiezi

关于hadoop:Hadoop-入门

1 大数据概率大数据是指在肯定工夫内无奈用惯例软件工具进行捕获、治理和解决的数据汇合,是须要新解决模式能力具备更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息增长。 次要解决海量的存储和海量数据的剖析计算问题。 1.1 大数据的特点Volume(大量) Velocity(高速) Variety(多样) Value(低价值密度) 1.2 大数据利用场景物流仓储:大数据分析系统助力商家精细化经营、晋升销量、节约老本。 批发:剖析用户生产习惯,为用户购买商品提供方便,从而晋升商品销量。 游览:深度联合大数据能力与游览行业需要,共建游览产业智慧治理、智慧服务和智慧营销的将来。 商品举荐:依据用户购买记录举荐商品。 保险:海量数据挖掘及危险预测,助力保险行业精准营销,晋升精细化定价能力。 金融:多维度体现用户特色,帮忙金融机构举荐优质客户,防备欺诈危险。 房地产:大数据全面助力房地产行业,打造精准投策与营销,选出更适合的地,建造更适合的楼,卖给更适合的人。 人工智能:以大数据为依靠。 2 从 Hadoop 框架探讨大数据生态2.1 Hadoop 是什么?Hadoop是一个由Apache基金会所开发的分布式系统基础架构。 次要解决,海量数据的存储和海量数据的剖析计算问题。 狭义上来说,Hadoop通常是指一个更宽泛的概念——Hadoop生态圈。 2.2 Hadoop 发行版本Apache版本最原始(最根底)的版本,对于入门学习最好。 Cloudera在大型互联网企业中用的较多。 Hortonworks文档较好。 2.3 Hadoop 的劣势高可靠性:Hadoop 底层保护多个数据正本,所以即便 Hadoop 某个计算元素或存储呈现故障,也不会导致数据的失落。 高扩展性:在集群间分配任务数据,可不便的扩大数以千计的节点。 高效性:在 MapReduce 的思维下,Hadoop 是并行工作的,以放慢工作处理速度。 高容错性:可能主动将失败的工作重新分配。 2.4 Hadoop 组成2.4.1 HDFS架构概述NameNode(nn):存储文件的元数据,如文件名,文件目录构造,文件属性(生成工夫、正本数、文件权限),以及每个文件的块列表和块所在的DataNode等。 DataNode(dn):在本地文件系统存储文件块数据,以及块数据的校验和。 Secondary NameNode(2nn):用来监控 HDFS 状态的辅助后台程序,每隔一段时间获取 HDFS 元数据的快照。 2.4.2 YARN架构概述2.4.3 MapReduce 架构概述MapReduce 将计算过程分为两个阶段:Map 和 Reduce Map 阶段并行处理输出数据 Reduce 阶段对 Map 后果进行汇总 2.5 大数据技术生态体系波及的技术名词解释如下: 1)Sqoop:Sqoop 是一款开源的工具,次要用于在 Hadoop、Hive 与传统的数据库(MySQL)间进行数据的传递,能够将一个关系型数据库中的数据导进到 Hadoop 的 HDFS 中,也能够将 HDFS 的数据导进到关系型数据库中。 ...

February 1, 2021 · 5 min · jiezi

关于hadoop:Namenode-高可用整体架构概述

一般版2.x组成及基本功能相较于一般版本高可用架构作出以下调整 去掉了secondaryNamenode,并减少了一个新的namenode与状态(active和standby)减少了zookeeper与主备切换控制器failoverController(下文均称为zkfc)和衰弱监控health monitor机制组成详解我的上一篇分布式文件系统有基本功能的图解本篇不具体讲,挑高可用重点讲namenode: 两台互备,一台active为主namenode,对外读写任务调度,综合机架感知,网络拓扑,正本机制,告知client去哪个datanode进行读或者写zkfc主备切换器:及时检测namenode的衰弱状态,activenamenode故障时主动进行主备选举和切换zookeeper集群:为主备切换控制器提供主备选举反对能够看我之前的zookeeper性能和选举模式,简略来说就是利用watch配合会话长期目录实现抢锁,实现选举共享存储系统:保留namenode在运行过程产生的元数据,同步到备份节点。实现namenode的高可用datanode主备切换实现zkfc启动时会创立 healthMonitor和activestandbyelecor两个次要的外部组件,同时注册回调HealthMonitor:检测namenode衰弱状态,宕机时会回调zkfc对应办法进行主备选举ActiveStandByElector:次要负责实现主动的主备选举,并且回调zkfc的办法实现namenode主备状态切换步骤0.zkfc初始化时创立healthMonitor1.healthMonitor初始化实现之后会启动外部的线程定时调用对应的namenode中HAServiceProtocol RPC接口办法,进行衰弱状态检测2.检测到衰弱状态变动,会回调zkfc注册对应办法解决3.判断须要主备切换,应用acitvestandbyelector进行主动的主备选举4.选举实现告诉新的主namenode和备namenode5.zkfc调用对应namenode的HAServiceProtocol RPC 接口的办法将 NameNode 转换为 Active 状态或 Standby 状态。HealthMonitor,检测的次要局部次要工作 1.检测namenode的两类状态 healthMonitor.state和HAServiceStatus。state反馈namenode节点健康状况,次要是磁盘存储资源是否短缺,异样状态有not_response,unhealthy,failed。HAServiceStatus,检测中辅助作用反馈namenode的HA状态ActiveStandbyElector主备选举利用zookeeper的写一致性和长期节点机制1.创立锁节点,创立胜利的namenode会切换到active,失败的为备选并且由ActiveStandbyElector回调zkfc将其转为standbyzookeeper性能和选举模式2.注册watcher监听,不论是否抢锁胜利都会注册一个watch来监听节点状态变动事件,ActiveStandbyElector次要关注节点的nodeDelete3.主动触发主备选举, 3.1Active NameNode 对应的 HealthMonitor 检测到namenode状态异样,zkfc会被动删除在以后zookeeper上建设的锁节点,而standby状态的namenode的ActiveStandbyElector注册的监听器就会收到这个节点的nodedel事件,紧接着马上再次进入到创立锁的过程,创立胜利,standby便转为active3.2active的namenode整个机器宕机因为长期节点机制,锁节点被主动删除,也会主动进行一次主备切换4.避免脑裂 zookeeper客户端负载过高或正在进行jvm full gc导致与zookeeper服务端心跳不能失常收回屡次国有被断定为会话过期,假如namenode1对应zkfc假死,zookeeper认为其挂掉切换主机为namenode2,此时namenode1的zkfc随着负载降落恢复正常,但网络提早和cpu线程调度不确定导致namenode1可能会仍认为本人是active。namenode1与namenode2此时都能够对外提供服务对于一致性要求高的零碎来说是灾难性的ActiveStandbyElector 采纳了fencing将旧节点隔离,不仅用了长期的锁节点(ActiveStandbyElectorLock),并且还生成一个长久节点(ActiveBreadCrumb),保留以后acitvenamenode地址信息,失常敞开zookeepersession时该长久节点是会删除的,但某次选举胜利后如果新的activenamenode发现旧的长久节点依然存在会回调zkfc办法对旧的namenode进行fencing4.1其余参考计划 冗余心跳线,多条心跳线尽量减少裂脑事件智能磁盘锁,正在服务的一方,检测不到对方的心跳时启动磁盘锁仲裁机制:心跳断开时,ping网管ip,不通被动放弃竞争主动重启zkfc实现zkfc在创立healthMonitor和acitveStandbyElector的同时,会向healthMonitor和activeStandbyElector注册相应的回调,解决则次要靠这些回调如果ActiveStandbyElector选主胜利,对应的namenode成为主namenode,ActiveStandbyElector回调zkfc的becomeActive,而becomeActive会调用对应namenode的HAserviceprotocol rpc接口的transitiontoacive办法将namenode转为active选主失败,变为备namenode,activestandbyelector会回调zkfc的becomestandby调用对应namenode的HAServiceProtocol RPC接口的transitiontostandby办法将对应namenode变为standby选主胜利却发现上一个active留下来的长久化节点,则先调用zkfc注册的fenceOldActive尝试隔离旧的active namenode,过程为以下几局部 1.尝试调用旧active namenode的HAServiceProtocol RPC接口的transittionToStandby办法,2.失败的话执行配置文件中的隔离措施 2.1sshfence 通过ssh登录到指标机器执行fuser干掉对应过程2.2shellfence 执行一个用户自定义的shell脚本将对应的过程隔离3.只有在胜利进行fencing后才会再回调zkfc的becomeActive办法将对应的namenode切换为active对外提供服务NameNode的共享存储实现元数据存储,namenode启动复原hdfs原理读写局部简略阐明就是namenode在执行hdfs客户端提交的操作时会把这些操作记录在edits中,肯定条件下,满64m或一小时或重启会新建并切换到一个edits记录,并且namenode会定期对edits进行合并生成fsimage,与1.x不同,本来由secondarynamenode实现此项工作,namenode启动时须要将fsimage文件加载到内存后再加载edits复原到敞开前状态QJM共享存储参考QJM数据同步常见问题zookeeper过于敏感导致无谓的namenode切换,session-timeout默认值调高羊群效应,大量节点监控一个节点,变动后须要告诉的节点很多导致性能降落,依据业务调整

January 28, 2021 · 1 min · jiezi

关于hadoop:hdfs分布式文件系统

根本介绍组成Client 分块后存储与namenode交互获取文件的地位信息与DataNode交互,读取或者写入数据Client提供一些命令来治理和拜访HDFSNameNode:就是一个master,它是一个主管 治理HDFS的名称空间治理数据块block的映射信息,但并不长久化,太大了配置正本策略解决客户端读写申请DataNode:执行namenode的指令 存储理论数据块执行数据块的读写操作snn 辅助nn定期合并fsimage和fsedits,推送给nn紧急情况下能够复原nn为一个小时前数据解决海量存储问题,跨机器存储,对立治理散布在集群上的文件系统称分布式文件系统适宜存储大型数据,提供对立的拜访接口,可能像一般文件系统那样操作分布式存储计划 将大文件拆分成多块别离放到不同服务器中不论文件多大一律分块存储,每个块128M,每个块都有一个正本,默认每个块的正本为3元数据是存储在namenode内存中,磁盘中有元数据的备份设计指标 硬件故障解决:检测和疾速复原是外围流式读取数据:适宜做批量解决,而不是交互式,重视数据拜访高吞吐量文件大小应尽量大,小文件元数据占用内存挪动计算(在hdfs中计算)的代价比挪动数据(把数据拉到本地)的代价低利用场景 gb,tb,pb根本以上的数据存储,批量高吞吐一次写入屡次读取,没有批改必要,hdfs不反对随机批改文件数据,如历史曾经倒退的事实(天气)可运行于一般便宜机器高容错性具备扩大能力不实用场景 随机批改场景、交互式强的场景存储大量小文件场景架构 心跳机制:datanode和namenode之间放弃的心跳机制,datanode每隔3秒向namenode发送一次心跳包hdfs-default.xml中配置,证实本人还活着,当datanode在肯定工夫内没发送心跳,期待10次,默认配置30秒未收到心跳,namenode会认定其为假死,由namenode被动每隔5秒向datanode发送一次查看,两次查看依然没收到则认定为宕机。按默认配置共630判定datanode死亡。除此之外,datanode每隔六小时还会向namenode汇报本人的块信息<property> <name>dfs.heartbeat.interval</name>// <value>3</value> <description>Determines datanode heartbeat interval in seconds.</description></property><property> <name>dfs.namenode.heartbeat.recheck-interval</name> <value>300000</value> <description> This time decides the interval to check for expired datanodes. With this value and dfs.heartbeat.interval, the interval of deciding the datanode is stale or not is also calculated. The unit of this configuration is millisecond. </description></property>负载平衡:namenode要保障每个datanode上的块的数量大抵相当start-balancer.sh -t 10% 正本机制:默认每个块3个正本,当发现某些块正本有余3个,会让指定节点创立正本,保障正本为3个,如果正本数据多于3个,会让指定的节点将多余正本删除。如果无奈解决正本(挂了一大半机子),此时namenode会让hdfs进行平安模式,不许写入。 每一次刚启动hdfs默认都会先进入平安模式,各个datanode向namenode汇报块信息,namenode检测数据残缺,退出平安模式 注意事项 存储时块大小按128m,但分块后小于128m时按理论大小存正本存储(机架感知) - 第一个正本存储在离客户端最近的机架上任意一台机器上,如果相等,随机找一个机架 - 第二个正本存储抉择与第一个不同的机架服务器 - 第三个正本:与第二个正本同机架不同服务器上hdfs操作hdfs dfs -put localpath hdfspath 上传到hdfshdfs dfs -moveFromLocal localpath hdfspath 从本地挪动到hdfs中hdfs dfs -get hdfspath localpath 从hdfs下载到本地hdfs dfs -getmerge hdfspath1 hdfspath2 localpath 从hdfs下载并合并到本地hdfs dfs -rm [-r -f -skipTrash] xx 数据挪动到垃圾桶,有存储工夫hdfs dfs -du [-h] 文件hdfs dfs -chown [-R] 所属用户:所属用户组 文件hdfs dfs -appendToFile srcLocalFilePath hdfsFilePath 追加文件hdfs高级shellhdfs dfs -safemode get/enter/leave ...

January 26, 2021 · 1 min · jiezi

关于hadoop:大数据背景

大数据背景我认为大数据的相干不应仅仅局限于技术了解,更应对于其背景有深度的剖析,能力更好使用技术结合实际,充沛浏览了许多材料之后,总结下来有以下几点,大数据也基于以下造成三个历史过程剖析需要,数据收集存储=> 数据处理,剖析=> 利用:如报告,展现 5g,挪动利用衰亡,各行业互联网化产生大量数据 -> 数据采集起源(日志,数据库,爬虫)企业对于大量数据荡涤筛选有价值信息有较高的要求,有较高的实时剖析需要 -> 数据分析 采集和简略剖析罕用生态有 elk生态(elasticsearch+fileBeats+Logstash+Kibana(帆软)) 本局部我将会在后边做详细描述flume+kafka+storm+redishadoop一条龙(hadoop,spark,flink)有价值的数据进行更深层次剖析推理 -> 数据挖掘 个别波及算法,联合大数据构建数据模型,对将来进行预测传统数据分析与现今大数据分析比照传统数据处理强调纵向扩大:单机性能有瓶颈大数据处理通过网络将机器连贯在一汽形成集群,提供分布式计算和分布式存储概念起源google论文 1-DFS:HDFS-Hadoop Distribute File Systerm2-MR:MapReduce3-BigTable:Hbase为什么须要大数据,什么条件下须要大数据须要联合本身业务,并不是所有类型业务都套大数据。ppt公司除外对于局部业务解决半结构化数据采纳传统的单机解决o(n)的工夫很可能导致当天无奈失去须要的报表,影响实时性对于超大规模数据有须要到底需不需要,从公司开销角度剖析:每年对于中型10-30人项目组开发费用350w(开发人员薪资按均匀1.3w,20人,13薪),搭建本人业务的前端,大数据群硬件:多核cpu,大容量固态硬盘(基于分布式个别2份备份数据)托管费(机位费,千兆带宽,电费维护费)对于超大型大数据我的项目,设施费甚至电费都会远超人工费用,但中型公司可能接触到整个环节,可能对于整个流程了解更加粗浅。大概评估:以2020年数据,400tb存储+千兆带宽+intel4核高性能cpu+保护的设施费约60w,人工费400w。节约老本的办法: ....想省钱的放弃做大数据最省钱,短期大数据的变现能力和开销是须要各个企业做深度评估的 基本操作:正当调配计算资源,存储资源,权限资源,业务资源 存储:1.首先要意识到咱们的数据中有大量的有效数据,要无意识的删除过期的数据,做好数据的生命周期治理与冷热拆散。2.Snappy、Gzip,能压缩80%的空间,3.采纳列式存储parquet能够不用将整条记录检索。计算资源管理:这个是一个很大的领域,波及dba,运维,大数据管理员 硬件上:cpu,memory,network,io流程上:启动时的资源分配,磁盘异样应用的检测,超过惯例数据量2倍或以上时的解决,集群扩容的评估,理解集群是否有机器错误率高,是否有人为sql谬误导致的处理速度慢,队列治理等业务资源管理:了解业务,尽可能做到适宜业务的倒退,但无论是大数据技术还是现在的互联网需要变动都十分快,过来的技术栈可能成为将来的倒退瓶颈,需要会随着热点变动,导致过来的技术构造无奈适应,打补丁来补救大数据特色4v量大,数据指数级增长数据品种多:结构化数据(mysql),半结构化(json),非结构化数据(视频,图片,语音等)离线批处理 -> 实时流解决数据有价值局部小,须要采纳正当无效形式提取

January 25, 2021 · 1 min · jiezi

关于hadoop:hadoop概念分析

hadoop概念分布式:整个业务拆解多个业务由不同机器实现集群: 多个机器通过网络连接,每台机器做一样的工作怎么跟小白讲呢:从前有个餐厅只有一个厨师,做买菜,洗菜,炒菜 客户多了,招多了一个厨师做一样的事,两个厨师就是集群随着客户减少招多了几个厨师就分为了几局部,1个做买菜,1个做洗菜,1个做炒菜 , 分布式而炒菜1个不够,招多了1个,2个炒菜徒弟就是分布式中的集群负载平衡 正当分配任务,让所有机器在一个正当范畴内实现,若呈现某些机子实现迟缓要及时批改任务分配hadoop 1.hdfs 海量数据存储2.mapreduce 分布式计算框架,剖析解决3.yarn 对立的资源调度平台,集群资源进行治理(spark)性质 扩容能力,集群可扩大到上万台成本低,对服务器单台性能要求不高高效率,节点数量多,能够独特承载并发操作可靠性,在hadoop中数据都是存在备份的元数据:形容数据的数据,如地位,名字,大小等架构1.x ,namenode与jobtracker仅一个 弊病:1.单节点故障问题;2.jobtracker工作量太高;3.mapreduce集群资源分配后只能运行mapreduce程序,无奈运行其余的计算工作 hdfs namenode hdfs集群主节点 1.存储元数据(形容数据的数据),2.治理从节点,3.负责数据读写操作dataanode(出磁盘) hdfs集群从节点: 1.负责数据理论存储,2.和namenode放弃心跳连贯secondarynode辅助节点:辅助hadoop中元数据信息的辅助治理,namenode元数据是须要长久化,每次重启将上一次editlog的数据合并到fsimage中,而secondarynamenode就是用来帮助实现这项工作mapreduce jobtracker: mapreduce集群主节点 1.接管计算工作,2.分配任务给tasktracker,工作最终由tasktracker实现,3.分配资源tasktracker(出内存和cpu): mapreduce集群从节点 1.接管主节点调配过去的工作, 2.依据资源要求,启动执行工作 3.将执行工作的后果交给jobtracker补充:windows中的删除其实是删除元数据,内容是没有删除的2.x hdfs集群 namenodesecondnamenodedatanodeyarn(对立的资源调度平台),反对除了mr以外的计算工作,只有这个计算工作须要资源,都能够部署在yarn平台上(yarn调度接口) resourceManager 接管计算工作,启动一个applicationmaster,负责管理工作负责资源分配调度appMaster:每个工作都对应一个appmaster 负责工作的全生命周期任务分配向主机申请资源负责连贯nodemanager启动工作nodeManager 启动appmaster接管appmaster调配的工作执行工作与appmaster放弃通信,并且与主机放弃通信 高可用版本2.x,能够只对hdfs高可用,hdfs与yarn是独立的,jdk1.7hdfs namenode 能够有两个,主备构造namenode(active) namenode(standby),与zookeeper的连贯称为zkfc,借助zookeeper进行主节点确定与宕机治理,没有snn 当两个namenode存储的元数据信息不统一就呈现脑裂问题,因而诞生了journalnode(多台形成集群),用于同步元数据,(为什么不必zookeeeper同步呢?)答:因为zookeeper有只反对体积很小的文件系统,不适用于大体积信息的同步,zookeeper真正的作用是检测active主节点的状态,宕机则代替yarn rescourceManager可有多个,对外提供服务的仅一台active,与zookeeper的连贯称为zkfcjournalnode 文件系统元数据信息管理,个别是奇数个3.x jdk1.8 与2.x区别hdfs namenode 能够有多个3.0以前每份数据存份,3.0引入纠错编码0.5冗余校验数据存储形式+源文件扭转最大的是hdfs 通过最近block块计算,依据最近计算准则,本地block块,退出到内存,先计算,通过IO,共享内存计算区域,最初疾速造成计算结果,比Spark快10倍4.1 部署模式Standalone mode(独立模式)伪分布式:在一个机器中,将Hadoop 集群中各个节点运行在一个服务器测试Cluster mode(群集模式):会应用N台主机组成一个Hadoop集群。这种部署模式下,主节点和从节点会离开部署在不同的机器上

January 24, 2021 · 1 min · jiezi

关于hadoop:详解HDFS3x新特性纠删码

EC介绍Erasure Coding 简称EC,中文名:纠删码EC(纠删码)是一种编码技术,在HDFS之前,这种编码技术在便宜磁盘冗余阵列(RAID)中利用最宽泛(RAID介绍:大数据准备常识-存储磁盘、磁盘冗余阵列RAID介绍),RAID通过条带化技术实现EC,条带化技术就是一种主动将 I/O 的负载平衡到多个物理磁盘上的技术,原理就是将一块间断的数据分成很多小局部并把他们别离存储到不同磁盘下来,这就能使多个过程同时拜访数据的多个不同局部而不会造成磁盘抵触(当多个过程同时拜访一个磁盘时,可能会呈现磁盘抵触),而且在须要对这种数据进行程序拜访的时候能够取得最大水平上的 I/O 并行能力,从而取得十分好的性能。在HDFS中,把间断的数据分成很多的小局部称为条带化单元,对于原始数据单元的每个条带单元,都会计算并存储肯定数量的奇偶测验单元,计算的过程称为编码,能够通过基于残余数据和奇偶校验单元的解码计算来复原任何条带化单元上的谬误。 HDFS数据冗余存储策略HDFS的存储策略是正本机制,这种存储形式使得数据存储的安全性失去进步,但同时也带来了额定的开销,HDFS默认的3正本计划在存储空间和其余资源(如网络带宽)上有200%的额定开销,然而对于I/O流动绝对较低的数据,在失常期间很少拜访其余块正本,然而依然耗费与第一个正本雷同的资源量。因而,HDFS 3.x版本一个重大改良就是应用纠删码(EC)代替正本机制,纠删码技术提供了与正本机制雷同的容错能力,而存储空间却少得多。在典型的纠删码(EC)设置中,存储开销不超过50%。 EC算法实现原理EC的实现算法有很多种,较为常见的一种算法是Reed-Solomon(RS),它有两个参数,记为RS(k,m),k示意数据块,m示意校验块,有多少个校验块就最多可容忍多少个块(包含数据块和校验块)失落,具体原理通过如下例子解释: 咱们应用RS(3,2),示意应用3个原始数据块,2个校验块例:有 7、8、9 三个原始数据,通过矩阵乘法,计算出来两个校验数据 50、122。这时原始数据加上校验数据,一共五个数据:7、8、9、50、122,能够任意丢两个,而后通过算法进行复原 GT是生成矩阵,RS(k,m)的生成矩阵就是m行k列的矩阵Data代表原始数据,7,8,9代表原始数据块Parity代表校验数据,50,122代表校验数据块所以3个原始数据块,如果应用2个校验块,EC编码总共占用5个数据块的磁盘空间,与2正本机制占用6个数据块的磁盘空间容错能力相当。 EC的利用场景将EC技术集成进HDFS能够进步存储效率,同时仍提供与传统的基于正本的HDFS部署相似的数据持久性。例如,一个具备6个块的3正本文件将耗费 6 * 3 = 18 个磁盘空间。然而,应用EC(6个数据,3个校验)部署时,它将仅耗费9个磁盘空间块。 然而EC在编码过程及数据重建期间会大量的应用CPU资源,并且数据大部分是执行近程读取,所以还会有大量的网络开销。 所以,对于CPU资源缓和且存储老本较低的状况下,能够采纳正本机制存储数据,对于CPU资源有残余且存储老本较高的状况下,能够采纳EC机制存储数据。 EC在HDFS的架构HDFS是间接应用Online EC(以EC格局写入数据),防止了转换阶段并节俭了存储空间。Online EC还通过并行利用多个磁盘主轴来加强程序I / O性能。在具备高端网络的群集中,这尤其现实。其次,它天然地将一个小文件散发到多个DataNode,而无需将多个文件捆绑到一个编码组中。这极大地简化了文件操作,例如删除,磁盘配额以及namespaces之间的迁徙。 在个别HDFS集群中,小文件可占总存储耗费的3/4以上,为了更好的反对小文件,HDFS在第一阶段反对条形布局(Striping Layout)的EC计划,目前HDFS间断布局(Contiguous Layout)计划也在进行中 条形布局:长处:客户端缓存数据较少无论文件大小都实用毛病:会影响一些地位敏感工作的性能,因为原先在一个节点上的块被扩散到了多个不同的节点上和多正本存储策略转换比拟麻烦间断布局:长处:容易实现不便和多正本存储策略进行转换毛病:须要客户端缓存足够的数据块不适宜存储小文件传统模式下HDFS中文件的根本形成单位是block,而EC模式下文件的根本形成单位是block group。以RS(3,2)为例,每个block group蕴含3个数据块,2个校验块。 HDFS对于引入EC模式所做的次要扩大如下: NameNode:HDFS文件在逻辑上由block group组成,每个block group蕴含肯定数量的外部块,为了缩小这些外部块对NameNode内存耗费,HDFS引入了新的分层块命名协定。能够从其任何外部块的ID推断出block group的ID。这容许在块组而不是块的级别进行治理Client:客户端读取和写入门路失去了加强,能够并行处理block group中的多个外部块DataNode:DataNode运行额定ErasureCodingWorker(ECWorker)工作,用于对失败的纠删编码块进行后盾复原。NameNode检测到失败的EC块, 会抉择一个DataNode进行复原工作。此过程相似于失败时如何从新复原正本的块。重建执行三个要害的工作节点: 从源节点读取数据:应用专用线程池从源节点并行读取输出数据。基于EC策略,对所有源指标的发动读取申请,并仅读取起码数量的输出块进行重建。解码数据并生成输入数据:从输出数据解码新数据和奇偶校验块。所有失落的数据和奇偶校验块一起解码。将生成的数据块传输到指标节点:解码实现后,复原的块将传输到指标DataNodes。纠删码策略:为了适应异构的工作负载,HDFS群集中的文件和目录容许具备不同的复制和纠删码策略。纠删码策略封装了如何对文件进行编码/解码。每个策略由以下信息定义: EC模式:这包含EC组(例如6 + 3)中的数据和奇偶校验块的数量,以及编解码器算法(例如Reed-Solomon,XOR)。条带化单元的大小。这确定了条带读取和写入的粒度,包含缓冲区大小和编码工作。咱们能够通过XML文件定义本人的EC策略,该文件必须蕴含以下三个局部:layoutversion:这示意EC策略XML文件格式的版本。schemas:这包含所有用户定义的EC模式。policies:这包含所有用户定义的EC策略,每个策略均由schema id和条带化单元的大小(cellsize)组成。Hadoop conf目录中有一个配置EC策略的XML示例文件,配置时能够参考该文件,文件名称为user_ec_policies.xml.template。 集群的硬件配置纠删码对群集在CPU和网络方面提出了其余要求: 编码和解码工作会耗费HDFS客户端和DataNode上的额定CPU。纠删码文件也散布在整个机架上,以实现机架容错。这意味着在读写条带化文件时,大多数操作都是在机架上进行的。因而,网络二等分带宽十分重要。对于机架容错,领有至多与配置的EC条带宽度一样多的机架也很重要。对于EC策略RS(6,3),这意味着起码要有9个机架,现实状况下是10或11个机架,以解决打算内和计划外的中断。对于机架少于条带宽度的群集,HDFS无奈放弃机架容错,但仍将尝试在多个节点之间散布条带化文件以保留节点级容错。最初在HDFS默认状况下,所有的EC策略是被禁止的,咱们能够依据群集的大小和所需的容错属性,通过hdfs ec [-enablePolicy -policy]命令启用EC策略。例如,对于具备9个机架的群集,像RS-10-4-1024k这样的策略将不会保留机架级的容错能力,而RS-6-3-1024k或RS-3-2-1024k可能更适合。 在正本机制下,咱们能够设置正本因子,指定正本的数量,然而在EC策略下,指定正本因子是没有意义的,因为它始终为1,无奈通过相干命令进行更改。 搜寻公众号“五分钟学大数据”,深刻钻研大数据技术

January 15, 2021 · 1 min · jiezi

关于hadoop:HBase中MemStore的刷写触发机制

因为HBase的数据存储应用的是HDFS,而HDFS是不反对随机读写的,所以HBase的数据写入采纳LSM算法。LSM算法个别会分内存和磁盘两局部存放数据,在HBase的实现中,内存局部称作MemStore,采纳的是跳跃表实现,保护了一个有序的KeyValue汇合,磁盘局部有0到多个外部KeyValue有序的HFile文件组成。这些HFile文件,就是一些机制的触发下,将内存中MemStore数据刷写到磁盘造成的(其中,有些HFile文件是通过一些小的HFile文件采纳多路归并算法合并造成)。 如上图,一台RegionServer服务器上会治理着多个Region,一个Region中可能会有1到多个列族。在存储上,一个列族对应一个Store,而一个Store就包含了LSM中提到的MemStore和StoreFile(即HFile)两局部。须要留神的是:刷写的最小执行单元是 Region而不是单个MemStore。如果一个 HRegion 中 Memstore 过多,当执行flush时,有可能有些MemStore数据量占比很小,比方k级别,刷写的话也不会开释很多内存,却会产生很多小文件,这也是官网倡议大家设计表时列族不要太多的起因。 触发MemStore刷写的机制大略分为:人为手动触发、HBase定时触发、HLog数量限度触发,其余事件触发(Compact、Split、Truncate等)、内存限度触发。其中内存限度触发细分为:MemStore级别限度触发、Region级别限度触发、RegionServer级别限度触发。 人为手动触发通过 shell 命令flush 'tablename'或者flush ‘regionname’别离对整表所有region和具体一个Region进行flush。HBase定时触发HBase提供主动刷写机制,达到主动刷写的工夫,也会触发MemStore flush。主动刷新的工夫距离由hbase.regionserver.optionalcacheflushinterval(默认1小时)指定。须要留神的是,该机制解决是整个集群所有表的所有region,对生产读写,以及HDFS小文件等都有不利影响。如果设定为0,则敞开定时主动刷写。HLog数量限度触发当WAL文件的数量超过hbase.regionserver.maxlogs,region会依照工夫程序顺次进行刷写,直到WAL文件数量减小到该参数值以下(该属性名曾经废除,现无需手动设置,最大值为32)。其余事件触发在执行Region的合并、决裂、快照以及HFile的Compact等前会执行刷写。MemStore级别内存限度触发当某个Region中任意一个MemStore达到hbase.hregion.memstore.flush.size参数值大小,就会触发该Region的刷写。Region级别内存限度触发当某个Region中所有MemStore的大小加和达到了hbase.hregion.memstore.block.multiplier*hbase.hregion.memstore.flush.size 值大小,就会触发该Region的刷写。此时会阻塞入该 Region 的写申请,如果往 MemStore 写数据,会呈现 RegionTooBusyException 异样。RegionServer级别内存限度触发当某RegionServer种所有MemStore的大小加和达到了RegionServer全局低水位阈值java_heapsize *hbase.regionserver.global.memstore.size*hbase.regionserver.global.memstore.size.lower.limit 值大小,RegionServer会强制执行刷写,按序抉择Region所有蕴含MemStore大小加和大的Region执行。于此相干的,如果此时数据写入吞吐量仍然很大,导致该RegionServer种所有MemStore的大小加和超过该RegionServer全局水位阈值java_heapsize * hbase.regionserver.global.memstore.size 值大小,RegionServer会阻塞写申请,直到MemStore刷写大小将到低水位阈值。

January 15, 2021 · 1 min · jiezi

关于hadoop:HBase到底是列式存储还是行式存储

逻辑概念上,数据库表是一种二维的数据结构,具备行和列。但在内存、磁盘等物理存储上,数据个别是须要线性程序组织的。所以为了存储数据库表中的数据,有了两种常见的组织形式:基于行的存储和基于列的存储。 基于行的存储,是将整行数据间断存在一起。在基于行存储的表中,即便只须要读取指定列时,也须要先将对应行的数据读取到内存,而后再过滤指标列,这样会导致过多的磁盘IO、内存和工夫开销,所以行式存储比拟实用于每次须要拜访残缺行的场景。 基于列的存储,是将列数据间断存储在一起。因为是将雷同类型的数据存储在了一起,往往压缩比比拟高,从而也会升高磁盘IO、内存和工夫开销,所以,列式存储实用于仅在单列或多数列上操作的场景。特地是在大数据时代,数据的列和行都比拟多时候,列式存储劣势会更加显著。但反过来,列式存储对于获取整行的申请效率就没那么高了,须要屡次IO读取多个列的数据,而后再合并返回。 HBase表数据模型比拟特地,也能够简略了解为有行和列的二维表,只是它的列称为“列族”,列族上面又能够在数据写入时指定很多的子列。另外,HBase物理存储上是将整个列族数据存储在一起的。所以,如果HBase中的一张表只有一个列族的话,等于是这个列族蕴含了这张表的所有列,也就是将表正行的数据间断存储在了一起,就等于是行式存储了。再比方,一张表有多个列族,并且每个列族下仅有一列(尽管HBase不倡议这么做),也就是将表的列数据间断存储在了一起,就等于是列式存储了。

January 15, 2021 · 1 min · jiezi

关于hadoop:数据仓库组件HBase集群环境搭建和应用案例

本文源码:GitHub || GitEE 一、Hbase简介1、根底形容 Hadoop原生的特点是解决大规模数据的离线批量解决场景,HDFS具备弱小存储能力,然而并没有提供很强的数据查问机制。HBase组件则是基于HDFS文件系统之上提供相似于BigTable服务。 HBase是一种分布式、可扩大、反对海量结构化数据存储的NoSQL数据库。HBase在Hadoop之上提供了相似于Bigtable的能力,基于列存储模式的而不是基于行的模式。存储数据特点:非结构化或者涣散的半结构化数据,存储大表天然是须要具备程度扩大的能力,基于服务集群解决海量宏大数据。 2、数据模型 基于Hbase的数据结构的根本形容; 表-Table:由行和列组成,列划分为若干个列族;行-Row:行键(Key)作标识,行代表数据对象;列族:列族反对动静扩大,以字符串模式存储;列标识:列族中的数据通过列标识符来定位;单元格:行键,列族,列标识符独特确定一个单元;单元数据:存储在单元里的数据称为单元数据;工夫戳:默认基于工夫戳来进行版本标识;HBase的数据模型同关系型数据库很相似,数据存储在一张表中,有行有列。但从HBase的底层物理存储构造看更像是Map(K-V)汇合。 数据管理是基于列存储的特点;简略的数据模型,内容存储为字符串;没有简单的表关系,简略的增删查操作;从整体上看数据模型,HBase是一个稠密、多维度、排序的映射表,这张表的索引是行键、列族、列限定符和工夫戳每个值是一个未经解释的字符串。 二、搭建集群环境1、解压文件 tar -zxvf hbase-1.3.1-bin.tar.gz2、配置环境变量 vim /etc/profileexport HBASE_HOME=/opt/hbase-1.3.1export PATH=$PATH:$HBASE_HOME/binsource /etc/profile3、配置:hbase-env vim /opt/hbase-1.3.1/conf/hbase-env.shexport JAVA_HOME=/opt/jdk1.8export HBASE_MANAGES_ZK=false4、配置:hbase-site vim /opt/hbase-1.3.1/conf/hbase-site.xml<configuration> <!--HDFS存储--> <property> <name>hbase.rootdir</name> <value>hdfs://hop01:9000/HBase</value> </property> <!--开启集群--> <property> <name>hbase.cluster.distributed</name> <value>true</value> </property> <!-- 端口 --> <property> <name>hbase.master.port</name> <value>16000</value> </property> <!--ZK集群--> <property> <name>hbase.zookeeper.quorum</name> <value>hop01,hop02,hop03</value> </property> <!--ZK数据--> <property> <name>hbase.zookeeper.property.dataDir</name> <value>/data/zookeeper/data/</value> </property></configuration>5、配置:regionservers vim /opt/hbase-1.3.1/conf/regionservershop01hop02hop036、配置:软连贯 软连贯hadoop配置文件到HBase ln -s /opt/hadoop2.7/etc/hadoop/core-site.xml /opt/hbase-1.3.1/conf/core-site.xmlln -s /opt/hadoop2.7/etc/hadoop/hdfs-site.xml /opt/hbase-1.3.1/conf/hdfs-site.xml7、同步集群服务环境 也能够手动配置集群,或者应用同步命令。 xsync hbase/8、启动集群 在hop01节点启动即可。 /opt/hbase-1.3.1/bin/start-hbase.sh启动日志: hop03: starting regionserver, logging to /opt/hbase-1.3.1/bin/../logs/hbase-root-regionserver-hop03.outhop02: starting regionserver, logging to /opt/hbase-1.3.1/bin/../logs/hbase-root-regionserver-hop02.outhop01: starting regionserver, logging to /opt/hbase-1.3.1/bin/../logs/hbase-root-regionserver-hop01.out9、查看状态 ...

January 11, 2021 · 3 min · jiezi

关于hadoop:Hadoop之性能测试与调优

Hadoop测试集群搭建起来,是不是就高枕无忧了呢?如果只是用来学习或者做做试验,貌似够了,但生产环境中还不够,因为咱们还没有对集群进行测试,是不是能达到咱们预期。 1.1写测试测试写入100个128M的文件 hadoop jar /opt/module/hadoop-3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.1.3-tests.jar TestDFSIO -write -nrFiles 100 -fileSize 128MB1.2.读测试测试读100个128的文件 hadoop jar /opt/module/hadoop-3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.1.3-tests.jar TestDFSIO -read -nrFiles 100 -fileSize 128MB1.3删除测试数据测试数据必须删除,不能带到生产中 hadoop jar /opt/module/hadoop-3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.1.3-tests.jar TestDFSIO -clean1.4 用Sort评估MapReduce1)应用RandomWriter来产生随机数,每个节点运行10个Map工作,每个Map产生大概1G大小的二进制随机数 hadoop jar /opt/module/hadoop-3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar randomwriter random-data2)执行sort hadoop jar /opt/module/hadoop-3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar sort random-data sorted-data3)验证后果 hadoop jar /opt/module/hadoop-3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.1.3-tests.jar testmapredsort -sortInput random-data -sortOutput sorted-data哈哈,我的电脑不给力,没法间接演示,看来要降级了。决定进入大数据坑的同学,电脑配置得高点,不然带不动。 2.Hadoop性能调优集群测试,不合乎预期,那就要进入性能调优了。 2.1 MpaReduce的优化MapReduce执行效率的瓶颈在两个方面1.计算机性能影响,像CPU、内存大小、磁盘、网络提早。2.IO方面的优化状况1)数据歪斜问题2)Map和Reduce的个数设置状况3)Map耗时太长4)小文件太多5)Spill和Merge次数太多等等 咱们对MapReduce的优化大抵是六个方面1)数据输出2)Map阶段3)Reduce阶段4)IO传输5)数据歪斜6)参数调优 2.1.1 数据输出例如合并小文件,咱们都晓得小文件会产生大量的MapTask,所以咱们能够在执行MR工作前,先进行小文件的合并。 默认状况下TextInputformat对工作的切片机制是按文件布局切片,不论文件多小,都会有一个独自的切片,都会交给一个maptask,如果有大量的小文件,就会产生大量的maptask,解决效率及其低下咱们能够改用CombineTextInputFormat,解决输出端大量小文件的问题。 2.1.2 Map阶段1.缩小Spill次数,也就是溢写次数:通过调整io.sort.mb及sort.spill.percent参数值,增大触发Spill的内存下限,缩小Spill次数,从而缩小磁盘IO。 2.缩小Merge次数:通过调整io.sort.factor参数,增大Merge的文件数目,缩小Merge的次数,从而缩短MR解决工夫。 3.Map之后,在不影响业务逻辑前提之下,能够先进行Combine,缩小IO。 2.1.3 Reduce阶段1.Map和Reduce个数的设置:两个不能设置太少,也不能太多。太少,会导致Task期待,缩短解决工夫;太多,会导致Map、Reduce工作间竞争资源,造成解决超时等谬误。 2.Map、Reduce共存:调整slowstart.completedmaps参数,使Map运行到肯定水平后,Reduce也开始运行,缩小Reduce的等待时间。 3.躲避应用Reduce:因为Reduce在用于连贯数据集的时候将会产生大量的网络耗费。 2.1.4 IO传输1)数据压缩2)应用SequenceFile二进制文件 2.1.5 数据歪斜什么是数据歪斜?简略来说就是大量的雷同key被partition调配到一个分区里,造成了'一个人累死,其他人闲死'的状况。 解决办法:1)自定义分区,也就是Partition,指定分区策略2)从新设计key,例如在map阶段给key加一个随机值,有了随机值的key就不会有大概率的机会被大量分到同一个节点上了,到了reduce阶段,在把随机值去掉。3)应用Combine,Combinner是在map阶段,reduce之前的一个两头阶段,在这个阶段能够选择性的把大量的雷同key数据先进行一个合并,能够看做是local reduce,而后再交给reduce来解决,这样做的益处很多,即加重了map端向reduce端发送的数据量(加重了网络带宽),也加重了map端和reduce端两头的shuffle阶段的数据拉取数量(本地化磁盘IO速率)解决办法也不止下面所述,具体也要依据理论状况来说。 ...

January 6, 2021 · 1 min · jiezi

关于hadoop:Distcp的那点事

[TOC] 灵魂拷问:你真的理解distcp吗?这里说的就是distcp的那点事背景明天在整顿笔记的时候,发现了好几篇长期记录都是记录的集群间文件复制须要留神的中央,尽管记录的货色和重点不同,然而外围的货色都是distcp相干的,所以,感觉还是有点必要归总一下,这篇文章的内容次要是一点细节问题,更多的是偏重在遇到疑难的时候如何疾速去找到本人的答案参考地址 概述首先,distcp是个什么货色呢,从字面意思来说就是 distributed copy(分布式拷贝),也就是说将原来以一个人做的事件,摊派给很多人来并行处理,当然这个工作分工的粒度是基于文件的,也就是说只有一个文件,那么这个拷贝最多也就只能一个人来实现 根本用法# 能够应用hdfs协定(同版本hadoop),也能够是用hftp协定(不同版本hadoop可用)hadoop distcp hdfs://nn1:8020/foo/bar hdfs://nn2:8020/bar/foo# 同时能够指定多个数据源进行拷贝hadoop distcp hdfs://nn1:8020/foo/bar1 hdfs://nn2:8020/foo/bar2 hdfs://nn3:8020/bar/foo# 也能够应用 -f ,字面意思就是 -file也就是我的数据源source是以绝对路径模式列表存储一个文件中参数阐明这里就不一一翻译每一个参数的中文意思,根本都能直译是什么意思,这里次要说一下我感觉应用上可能须要留神的细节问题[yourFather@hadoop-onedata ~]$ hadoop distcp --helpusage: distcp OPTIONS [source_path...] <target_path> OPTIONS -append Reuse existing data in target files and append new data to them if possible -async Should distcp execution be blocking -atomic Commit all changes or none -bandwidth <arg> Specify bandwidth per map in MB -delete Delete from target, files missing in source -diff <arg> Use snapshot diff report to identify the difference between source and target -f <arg> List of files that need to be copied -filelimit <arg> (Deprecated!) Limit number of files copied to <= n -i Ignore failures during copy -log <arg> Folder on DFS where distcp execution logs are saved -m <arg> Max number of concurrent maps to use for copy -mapredSslConf <arg> Configuration for ssl config file, to use with hftps:// -overwrite Choose to overwrite target files unconditionally, even if they exist. -p <arg> preserve status (rbugpcaxt)(replication, block-size, user, group, permission, checksum-type, ACL, XATTR, timestamps). If -p is specified with no <arg>, then preserves replication, block size, user, group, permission, checksum type and timestamps. raw.* xattrs are preserved when both the source and destination paths are in the /.reserved/raw hierarchy (HDFS only). raw.* xattrpreservation is independent of the -p flag. Refer to the DistCp documentation for more details. -sizelimit <arg> (Deprecated!) Limit number of files copied to <= n bytes -skipcrccheck Whether to skip CRC checks between source and target paths. -strategy <arg> Copy strategy to use. Default is dividing work based on file sizes -tmp <arg> Intermediate work path to be used for atomic commit -update Update target, copying only missingfiles or directories--append,--overwrite,--update之间的关系参数解释备注append追加,复用sink文件曾经存在的数据,并尝试将数据追加,判断规范TODO overwrite笼罩,不论之前是否存在是从新生成 update更新,判断规范是source和sink文件大小是否统一 -m这个很好解释,应为distcp应用的是mapreduce模型,和sqoop有点相似,所以-m就是-map,说的就是并行度,启动最多多少个map来同时拷贝,为什么说最多呢,因为拷贝是基于文件的(严格来说应该是block),一个文件拆成多份拷贝的难度必定要略微大一点,所以如果source只有一个文件,那么-m指定多少个,也都只会有一个map task执行拷贝工作 ...

January 3, 2021 · 2 min · jiezi

关于hadoop:Hadoop之Yarn

1.Yarn概述YARN 是 Hadoop2.x 版本中的一个新个性。在1.x版本中,MapReduce版本承当了过重的工作,包含资源调度,而到2.x版本中,则将资源调度这部分独立进去了,就是Yarn,这使得hadoop更加巩固,领有更好的扩展性,可用性,可靠性。 所以咱们能够晓得,Yarn是一个资源调度平台,负责为运算程序提供服务器运算资源,相当于一个分布式的操作系统平台。 2.Yarn 架构YARN次要由ResourceManager、NodeManager、ApplicationMaster和Container等组件形成。 2.1ResourceManagerResourceManager 领有零碎所有资源分配的决定权,负责协调和治理整个集群(所有NodeManager)的资源,响应用户提交的不同类型应用程序的解析、调度、监控等工作。ResourceManager 会为每一个 Application 启动一个 MRAppMaster,并且 MRAppMaster扩散在各个 NodeManager节点。 ResourceManager(RM)次要作用:1)解决客户端申请;2)监控NodeManager3)启动或监控ApplicationMaster4)调配与调度资源 2.2NodeManagerNodeManager是YARN集群当中资源的提供者,监控应用程序的资源应用状况,通过心跳向集群资源调度器 ResourceManager汇报本人的额状态。NodeManager监督Container 的生命周期,每个 Container 的资源应用(内存、CPU等)状况,追踪节点健康状况等。次要作用:1)治理节点上的资源2)接管解决ResourceManager的命令3)执行来自ApplicationMaster的命令 2.3ContainerContainer 容器是一个形象进去的逻辑资源单位,它封装了某个节点上的多维度资源,如内存、CPU、磁盘、网络等。Container和集群节点的关系是:一个节点会运行多个Container,但一个Container不会跨节点。每一个应用程序从ApplicationMaster开始,它自身就是一个container(第0个),一旦启动,ApplicationMaster就会增加工作需要,与Resourcemanager协商更多的container,并且能够动静开释和再申请container。 2.4ApplicationMasterApplicationMaster负责与scheduler协商适合的container,跟踪应用程序的状态,以及监控它们的进度,ApplicationMaster是协调集群中应用程序执行的过程。每个应用程序都有本人的ApplicationMaster,负责与ResourceManager协商资源(container)和NodeManager协同工作来执行和监控工作 。 Yarn工作流程 大抵流程如下1)MR程序提交工作,也就是执行这一步 main{ job.waitForCompletion() }2)YarnRunner向ResourceManage(RM)r申请一个Application,RM将该应用程序的资源门路返回给YarnRunner。3)程序拿到资源门路,将运行所需资源提交到hdfs上。4)程序提交资源完后请运行MrAppMaster。5)RM将用户的申请封装成一个Task,放到队列中。6)当NodeManager获取到Task工作,开始创立容器Container,并生成MrAppmaster。7)Container从HDFS上拷贝资源到本地,MrAppmaster向RM申请运行指定MapTask资源。8)RM将运行MapTask任务分配到其余NodeManager,NodeManager别离支付工作并创立容器。9)MR向接管到工作的NodeManager发送程序启动脚本,NodeManager别离启动MapTask。10) MapTask对数据分区排序,所有MapTask运行结束后,MrAppMaster向RM申请资源,运行ReduceTask。11) ReduceTask从MapTask获取相应分区的数据。12)执行结束,MR申请登记。

January 1, 2021 · 1 min · jiezi

关于hadoop:Hadoop之MapReduce四序列化和排序

1.Hadoop序列化和自定义实现序列化序列化就是把内存中的对象,转换成字节序列,或这是其余传入协定,而后进行网络传输或者长久化到磁盘中。反序列化就是一个相同的过程,将收到的字节序列或者磁盘中长久化的数据,转换成内存中的对象。 hadoop有一套本人的序列化机制,像后面提到的BooleanWritable、ByteWritable、IntWritable、FloatWritable、LongWritable、DoubleWritable、Text、MapWritable、ArrayWritable,这些都是hadoop实现好的序列化类型,咱们能够间接拿来应用。 但有些时候,这些根本的序列化类型不能满足咱们的需要,咱们就须要本人去实现一个序列化类型。 该怎么去实现?先看看hadoop中实现形式,就看IntWritable public class IntWritable implements WritableComparable<IntWritable> 它实现WritableComparable这接口,那咱们自定义的类也能够实现这个接口,那么先看看这个接口有哪些要实现的办法 public interface WritableComparable<T> extends Writable, Comparable<T> {}好难堪,这个接口啥都没有啊,那持续看它继承的接口,有两个。第一个Writable接口 public interface Writable { // 序列化办法 void write(DataOutput var1) throws IOException; // 反序列化办法 void readFields(DataInput var1) throws IOException;}两个要实现的办法,一个序列化办法和一个反序列化办法 而后咱们第二个接口 public interface Comparable<T> { public int compareTo(T o);}为什么要实现这个接口? 在MapReduce的shuffle过程要求key必须可能排序,所以如果自定义序列化类须要放在key中传输,那么就要实现这个接口中的办法,当然如果不须要,就能够略过了。 示例,实现一个能够序列化的StuInfoBean public class StuInfoBean implements WritableComparable<StuInfoBean> { private Integer stuid; private String name; private Integer age; private Boolean sex; public StuInfoBean(){} public Integer getStuid() { return stuid; } public void setStuid(Integer stuid) { this.stuid = stuid; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public Boolean getSex() { return sex; } public void setSex(Boolean sex) { this.sex = sex; } @Override public String toString() { return "StuInfoBean{" + "stuid=" + stuid + ", name='" + name + '\'' + ", age=" + age + ", sex=" + sex + '}'; } /** * 如果须要就实现,不须要就略过 */ @Override public int compareTo(StuInfoBean o) { return this.stuid.compareTo(o.getStuid()); } @Override public void write(DataOutput dataOutput) throws IOException { dataOutput.writeInt(stuid); dataOutput.writeUTF(name); dataOutput.writeInt(age); dataOutput.writeBoolean(sex); } /** * 这里要留神,反序列的程序要和序列化保持一致 */ @Override public void readFields(DataInput dataInput) throws IOException { stuid = dataInput.readInt(); name = dataInput.readUTF(); age = dataInput.readInt(); sex = dataInput.readBoolean(); }}2.排序MapTask收集咱们的map()办法输入的kv对,放到内存缓冲区中,这是一个环形数据结构,其实就是一个字节数组,叫kvbuffer。外面寄存着咱们的数据及索引数据kvmeta。kvbuffer的大小尽管能够设置,但终归是无限的,当写满的时候,内存中的数据就会刷到磁盘上,这个过程就是溢写,溢写产生的文件可能会不止一个,多个溢出文件会被合并成大的溢出文件。在这个过程中,都要调用Partitioner进行分区和针对key进行排序sort。分区之前曾经说了,这里就说下排序sort。 ...

January 1, 2021 · 2 min · jiezi

关于hadoop:Hadoop之MapReduce三Shuffle机制和Partition分区

1.Shuffle机制Shuffle指的map()办法之后,reduce()之前的数据处理过程。 就是将 MapTask 输入的后果数据,依照 Partitioner 分区制订的规定分发给ReduceTask执行,并在散发的过程中,对数据进行分区和排序。 2.Partition分区在进行MapReduce计算时,有时候须要把最终的输入数据分到不同的文件中,这时候,就须要用到分区。 举个例子:有这样一组数据 class1_aaa 50class2_bbb 100class3_ccc 80class1_ddd 10class2_eee 100class3_fff 70class1_hhh 150class2_lll 100class3_www 80想实现这样一个需要,对外面的数据的值分组求和,并将后果别离输入一个文件,那这里就须要Partition分区了。 Map 代码示例 public class ClMap extends Mapper<LongWritable, Text,Text, IntWritable> { // 输入的k和v Text outk = new Text(); IntWritable outv = new IntWritable(); @Override protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { String line = value.toString(); String[] contents = line.split(" "); String outkey = contents[0].split("_")[0]; outk.set(outkey); outv.set(Integer.parseInt(contents[1])); context.write(outk,outv); }}Partition代码示例 ...

December 31, 2020 · 1 min · jiezi

关于hadoop:Hadoop之MapReduce二工作流和InputFormat介绍

1.残缺的MapReduce程序一个残缺的MapReduce程序在分布式运行中蕴含两类实例过程:1)MrAppMaster :负责整个程序运行过程的调度及状态协调2)YarnChild:负责Map阶段的整个数据处理流程3)YarnChild:负责Reduce阶段的整个数据处理流程。MapTask和ReduceTask都是跑在YarnChild的过程中,当然是各自的YarnChild过程。 2.MapReduce的数据流示意图 1)一个mr程序已启动,首先启动MrAppMaster,它负责整个程序的过程调度及状态协调。2)MrAppMaster依据job的形容信息,计算出须要MapTask的数量n,而后申请启动n个MapTask过程。3)MapTask启动后,从InputFormat取得RecordReader,(RecordReader封装了输出的数据),从中读取数据,以kv对的模式传递到map()办法中,再将map()输入的kv对加到缓存中保留,之后将缓存中kv对依照k进行分区排序,溢写到磁盘文件。4)MrAppMaster监控所有MapTask过程,当发现所有MapTask过程实现工作,去启动指定数量的ReduceTask过程,调配ReduceTask过程要解决的数据分区。5)ReduceTask过程启动后,从若干个MapTask获取若干个输入后果文件,在本地进行归并排序,将雷同的key的kv分为一个组,调用reduce()办法进行逻辑解决,最初出后果kv,调用OutputFormat将后果输入到指定地位。 当然理论当中,并不是间接应用InputFormat,而是应用FileInputFormat的实现类,常见的实现类TextInputFormat、KeyValueTextInputFormat、NLineInputFormat、CombineTextInputFormat和自定义InputFormat等。OutputFormat同样,应用的是它实现类,像TextOutputFormat或者自定义实现。 3.InputFormatInputFormat 负责Map端数据的输出 public abstract class InputFormat<K, V> { public InputFormat() { } public abstract List<InputSplit> getSplits(JobContext var1) throws IOException, InterruptedException; public abstract RecordReader<K, V> createRecordReader(InputSplit var1, TaskAttemptContext var2) throws IOException, InterruptedException;}源码中两个办法getSplits(): 生成切片信息。createRecordReader(): 负责输出数据的读取解决 这是一个抽象类,不能间接应用,InputFormat有一个子抽象类FileInputFormat,它继承了InputFormat,具体实现了getSplits()办法,也是Hadoop的默认切片实现规定。 FileInputFormat的切片机制1)简略的依照文件的内容长度进行切片2)切片大小默认等于Block大小,默认Block在2.x和3.x版本为128M3)切片时不思考数据集整体,而是一一针对每一个文件独自切片外围实现过程就在getSplits()办法中。 举个示例:20201120.log 200M20201121.log 100M 切片实现后:20201120.log.split1 0-12820201120.log split2 128-20020201121.log.split1 100M FileInputFormat实现类FileInputFormat常见的接口实现类包含:TextInputFormat、KeyValueTextInputFormat等。 TextInputFormat:默认的FileInputFormat实现类。按行读取每条记录。键是存储该行在整个文件中的起始字节偏移量, LongWritable类型。值是这行的内容,不包含任何行终止符(换行符和回车符),Text类型。2.KeyValueTextInputFormat 每一行均为一条记录,被分隔符宰割为key,value。能够通过在驱动类中设置conf.set(KeyValueLineRecordReader.KEY_VALUE_SEPERATOR, "\t");来设定分隔符。默认分隔符是tab当然还有其余实现类NLineInputFormat、CombineTextInputFormat等,咱们也能够本人实现。

December 31, 2020 · 1 min · jiezi

关于hadoop:Hadoop之MapReduce一初识

1.MapReduce介绍MapReduce是一个分布式运算程序的编程框架,是用户开发“基于Hadoop的数据分析利用”的外围框架。MapReduce外围性能是将用户编写的业务逻辑代码和自带默认组件整合成一个残缺的分布式运算程序,并发运行在一个Hadoop集群上。MapReduce的作用就是大数据处理。 2.MapReduce的核心思想举一个例子,咱们有1000个球,外面有红色、蓝色、红色各种色彩的球,咱们想晓得外面有多少红球,咱们把这个找出红球数量的工作交给了MapReduce来做。 1)MapReduce会将这1000个球交分成若干份,交给若干人2)每人数本人手中红球的数量,而后上报下来3)汇总所有数,求和,失去红球数量。 在大数据处理上,MapReduce设计思维的外围就是"分而治之",它将简单的、运行在大规模集群上的并行计算过程高度形象成两个Map和Reduce两个函数。 函数名输出解决输入Map键值对\<k1,v1\>Map 函数将解决这些键值对,并以另一种键值对模式输入两头后果 List(\<K2,V2\>)List(\<K2,V2\>ReduceList(\<K2,V2\>对传入的两头后果列表数据进行某种整顿或进一步的解决,并产生最终的输入后果List(\<K3,V3\>List(\<K3,V3\>简略来说,Map阶段负责拆分解决,Reduce阶段将Map阶段的处理结果进行汇总 3.官放wordcount示例这里有一个words.txt文件 [v2admin@hadoop10 demo]$ cat words.txt zhangsan hello tianjinbeijing shanghai shandonghebei guangzhou tangshan上传至hadoop上 [v2admin@hadoop10 demo]$ hadoop fs -put words.txt /home/input运行wordcount // 进入$HADOOP_HOME/share/hadoop/mapreduce[v2admin@hadoop10 mapreduce]$ hadoop jar hadoop-mapreduce-examples-3.1.3.jar wordcount /home/input /home/output1而后咱们看下过程 2020-12-30 14:31:30,989 INFO [main] mapreduce.Job (Job.java:monitorAndPrintJob(1647)) - map 0% reduce 0%2020-12-30 14:31:36,035 INFO [main] mapreduce.Job (Job.java:monitorAndPrintJob(1647)) - map 100% reduce 0%2020-12-30 14:31:41,134 INFO [main] mapreduce.Job (Job.java:monitorAndPrintJob(1647)) - map 100% reduce 100%跟上述所说一样,工作被分成两个阶段map和reduce,咱们看下最终后果 ...

December 30, 2020 · 2 min · jiezi

关于hadoop:Hadoop之HDFS三HDFS-API操作示例和读写流程

1.HDFS API示例1.1 Client API1)筹备工作自己习惯应用Ubuntu,ide工具则是idea,如果是windows零碎或者eclipse自行百度吧,我没有试过。 老套路,创立Maven工程,导入依赖 <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-slf4j-impl</artifactId> <version>2.12.0</version> </dependency> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-client-api</artifactId> <version>3.1.3</version> </dependency> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-client-runtime</artifactId> <version>3.1.3</version> </dependency>在resources下增加日志配置文件“log4j2.xml” <?xml version="1.0" encoding="UTF-8"?><Configuration status="error" strict="true" name="XMLConfig"> <Appenders> <Appender type="Console" name="STDOUT"> <Layout type="PatternLayout" pattern="[%p] [%d{yyyy-MM-dd HH:mm:ss}][%c{10}]%m%n" /> </Appender> </Appenders> <Loggers> <Logger name="test" level="info" additivity="false"> <AppenderRef ref="STDOUT" /> </Logger> <Root level="info"> <AppenderRef ref="STDOUT" /> </Root> </Loggers></Configuration>2)在src/main/java下创立包cn.leaf。能够随便,之后创立类HdfsClient,客户端的应用大抵如下 public void hdClient() throws IOException, InterruptedException { // 取得一个客户端对象 URI uri = URI.create("hdfs://hadoop10:9820"); Configuration conf = new Configuration(); String user = "v2admin"; FileSystem fs = FileSystem.get(uri,conf,user); // TODO 执行操作 // 敞开资源 fs.close(); }1.2 上传文件示例代码 public static void main(String[] args) throws IOException, InterruptedException { // 取得一个客户端对象 URI uri = URI.create("hdfs://hadoop10:9820"); Configuration conf = new Configuration(); String user = "v2admin"; FileSystem fs = FileSystem.get(uri,conf,user); // TODO 执行操作 Path upsrc = new Path("/home/zhaow/桌面/Shell/passwd.txt"); Path updst = new Path("/home"); upFile(fs,upsrc,updst); // 敞开资源 fs.close(); } /** * 上传文件 * @param fs Client对象 * @param src 待上传文件 * @param dst hdfs 门路 */ public static void upFile(FileSystem fs, Path src, Path dst){ try { fs.copyFromLocalFile(src, dst); } catch (IOException e) { e.printStackTrace(); } }1.3 下载文件示例代码 /** * 下载文件 * @param fs 客户端对象 * @param src 待下载的文件门路,也就是HDFS上的文件门路 * @param dst 指标门路 */ public static void downFile(FileSystem fs, Path src, Path dst){ try { fs.copyToLocalFile(false,src,dst); } catch (IOException e) { e.printStackTrace(); } }2 读写流程2.1写文件流程通过代码实现了文件上传,那么这两头HDFS是怎么实现文件的写入的呢?流程如下图所示: ...

December 30, 2020 · 2 min · jiezi

关于hadoop:Hadoop之HDFS二HDFS工作机制和集群安全模式

1 NameNode和DataNode之间的心跳机制1)NameNode启动时,会启动一个IPC server服务,2)DataNode启动后会被动连贯NameNode的IP server服务,默认每隔3秒连贯一次,也就是心跳。这个工夫能够通过 dfs.heartbeat.interval参数设置,也就是心跳工夫。3)DataNode通过心跳在NameNode注册汇报本人的状态,NameNode通过心跳获取DataNode的状态和下达指令。4)当NameNode长时间没有收到DataNode的心跳,就认为DataNode挂掉了。这种心跳机制同样存在于Yarn中ResourceManager和NodeManager中。 这个就是Hadoop的Master/Slave架构,NameNode和ResourceManager就是Master,DataNode和NodeManager就是Slave。 2 NameNode和SecondaryNameNode的工作机制第一个问题,NameNode元数据怎么保留的?首先NaomNode的元数据须要放在内存中,因为咱们须要常常拜访NameNode节点获取元数据,若是放在磁盘中,那效率会非常低。 既然放在内存中,那必要要有一个机制保障内存数据的平安,因为内存中数据一旦断电就丢了,所以内存中的元数据也必须要落地到磁盘,这个就是FstImage. 但这样还没有到高枕无忧的境地,内存中的元数据随时可能更新,这时是否要同步更新FsImage呢?如果咱们更新,必然会导致效率底下,如果咱们不更新,那内存中的元数据和FsImage就会不统一,一旦呈现NameNode节点断电之类的状况,就会呈现局部数据失落。 那么咱们引入这样一个记录文件Edits,只有内存中的元数据减少或者更新,那么就同步把这个操作记录追加到Edits,这样即使NameNode断电,咱们还能够依据Edits和FsImage来复原元数据。 新的问题又来了,内存中的元数据可是常常发生变化的,那一直的追加记录到Edits中,那必然会导致这个文件越来越大,那么将来咱们须要复原元数据时,须要破费的工夫也必然大大增加,影响咱们效率,所以咱们须要定期对FsImage和Edits进行合并。 好了,工作来了,定义把FsImage和Edits进行合并,那这个工作谁来做呢?NameNode能够吗?当然能够,但这会导致NameNode工作过重,影响效率,那为了保障效率,就把这个工作交给另外一个人来做,那就是Secondary NameNode。 从这里能够明确Secondary NameNode并不是NameNode的热备,当NameNode挂了的时候,它并不能代替NameNode工作,但它能够用帮忙复原NameNode。 具体NameNode和Secondary NameNode的工作流程如下阶段1:1)首次启动集群后,咱们须要对NameNode格式化,这时会创立FsImage和Edits,这些文件就在$HADOOP_HOME/data/name/current下.之后启动,间接加载Edits和FsImage到内存中。2)Client也就是客户端对元数据进行增删改的操作申请。3)NameNode先记录操作,更新日志,而后在内存中对元数据进行增删改的操作。 阶段2:SecondaryNameNode执行合并的操作,叫CheckPoint,这个操作有两个触发条件。第一个,就是间隔时间到,默认是1小时,这个能够调整。第二个,就是SecondaryNameNode会一分钟查看一次操作次数,当操作数达到设置的下限,就会触发。 1)首先SecondaryNameNode会询问NameNode是否须要执行CheckPoint2)拿到NameNode的返回后果,就开始申请执行CheckPoint3)NameNode滚动更新正在的Edits日志,将滚动前的Edits和FsImage文件拷贝到SecondaryNameNode上。4)SecondaryNameNode将两个文件加载到内存进行合并,生成新的fsImage.chkpoint,拷贝到NameNode上。5)NameNode将fsimage.chkpoint命名为fsimage。 当然在有了HA后,也很少应用SecondaryName了。 3 平安模式后面讲了,当NameNode启动后,首先是将FsImage和Edits文件退出内存,这个是为保障失去最新的元数据,这个其实也是合并,之后生成一个新的FsImage和一个空白的Edits,而后启动IPC Server服务,监听DataNode的申请,在这个期间,NameNode的文件系统对外界处于只读状态,也就是平安模式。 之后DataNode启动,在各个DataNode通过NameNode的IPCServer 发送他们最新的块列表信息。 当达到dfs.replication.min 设定的值,NameNode会退出平安模式,这个参数设置的值就是最小正本条件,指的是文件系统中块满足的最小正本级别。

December 29, 2020 · 1 min · jiezi

关于hadoop:Hadoop之HDFS一概述与常用Shell操作

1.HDFS概述1.1 HDFS简介HDFS(Hadoop Distributed File System) ,Hadoop分布式文件系统,用来解决海量数据的存储问题。 1.2 HDFS的特点劣势高容错性:HDFS多正本分布式存储,当一个正本失落了,可能主动复原,所以HDFS具备高容错性,默认是3正本。大数据处理:HDFS解决数据的规模甚至能够达到PB级别,文件数量甚至百万之上HDFS是设计成适应一次写入,屡次读出的场景,且不反对文件的批改劣势HDFS不善于大量小文件的存储,因为NameNode的内存是无限的,但大量小文件存储,会耗用大量NameNode的内存,来存储文件的目录、块信息等。HDFS高延时,不适宜低延时的拜访HDFS不反对并发写和文件的批改1.3 HDFS架构图解 1)NameNode(nn):它是一个主管、管理者,Master节点,负责保护整个hdfs文件系统的目录树,以及每一个门路(文件)所对应的block块信息。(1)治理HDFS的名称空间;(2)配置正本策略;(3)治理数据块(Block)映射信息;(4)解决客户端读写申请。 2)DataNode:就是Slave。NameNode下达命令,DataNode执行理论的操作,负责存储client发来的数据块block;执行数据块的读写操作。Datanode是HDFS集群从节点,每一个block都能够在多个datanode上存储多个正本,正本数量也能够通过参数dfs.replication设置。HDFS存储文件是分块存储(block),默认大小在hadoop2.x版本中是128M,老版本中是64M。这个能够通过配置参数dfs.blocksize来进行调整。HDFS块的大小设置次要取决于磁盘传输速率, 3)Secondary NameNode:充当小弟的角色。(1)辅助NameNode,分担其工作量,比方定期合并Fsimage和Edits,并推送给NameNode ;(2)在NameNode挂掉时,可辅助复原NameNode,不过当初有HA,所以很少应用Secondary NameNode。 4)Client:顾名思义,就是客户端。(1)文件切分。Client将文件切分成一个一个的Block,而后进行上传到HDFS上。(2)与NameNode交互,取得读取或写入文件的地位信息;(3)与DataNode交互,读写数据;(4)Client提供一些命令治理HDFS,比方NameNode格式化操作;(5)Client提供一些命令拜访HDFS,比方对HDFS增删查改操作; 2.HDFS Shell命令2.1 语法操作1)hadoop fs 命令2)hdfs dfs 命令 2.2 常用命令hadoop的shell命令应用起来非常简单,和linux Shell命令十分相似。 1.启动集群sbin/start-dfs.shsbin/start-yarn.sh2.查看命令帮忙hadoop fs -help ls3.查看零碎系统目录[v2admin@hadoop10 sbin]$ hadoop fs -ls /2020-12-29 10:20:58,645 INFO [main] Configuration.deprecation (Configuration.java:logDeprecation(1395)) - No unit for dfs.client.datanode-restart.timeout(30) assuming SECONDSFound 7 itemsdrwxr-xr-x - v2admin supergroup 0 2020-12-23 20:37 /flumedrwxr-xr-x - v2admin supergroup 0 2020-12-28 17:23 /hbasedrwxr-xr-x - v2admin supergroup 0 2020-12-23 14:43 /home4.创立文件夹[v2admin@hadoop10 sbin]$ hadoop fs -mkdir /student5.多级文件夹创立[v2admin@hadoop10 sbin]$ hadoop fs -mkdir /student/zhangsan/course_count6.上传和下载文件从本地拷贝文件至hdfs ...

December 29, 2020 · 2 min · jiezi

关于hadoop:Hadoop入门与进阶

1.[Hadoop入门之部署篇后续陆续更新

December 29, 2020 · 1 min · jiezi

关于hadoop:Hadoop入门之部署篇

Hadoop概述与部署参考: http://hadoop.apache.org/docs... 1.Hadoop概述什么是Hadoop?Hadoop是由Apache基金会开发的分布式系统基础架构,用来解决海量数据的存储和剖析计算问题。 Hadoop的劣势 高牢靠:Hadoop数据存储底层采纳多正本高扩大:集群部署,能够轻松进行节点的扩大高效性:Hadoop并行工作,放慢工作处理速度高容错:可能主动地将失败的工作重新分配2.Hadoop组成2.x版本和3.x版本组成如下: MapReduce:计算Yarn:资源调度HDFS:数据存储Common:辅助工具备注:1.x版本中,没有Yarn,MapRedcuer承当计算和资源调度 3.部署布局三台虚拟机IP- 主机名操作系统配置节点192.168.122.10-Hadoop10CentOS 7.51核/4G内存/50G硬盘NameNode、DataNode、NodeManager192.168.122.11-Hadoop11CentOS 7.51核/4G内存/50G硬盘ResourceManager、DataNode、NodeManager192.168.122.12-Hadoop12CentOS 7.51核/4G内存/50G硬盘SecondaryNameNode、DataNode、NodeManager4.集群部署4.1 零碎更新和ssh免密配置更新降级yum install -y epel-releaseyum update配置ssh免密登录[v2admin@hadoop10 ~]$ ssh-keygen -t rsa//...间断回车即可生成私钥id_rsa和id_rsa.pub// 我的用户是v2admin,后续操作都是以这个用户[v2admin@hadoop10 ~]$ ssh-copy-id hadoop10[v2admin@hadoop10 ~]$ ssh-copy-id hadoop11[v2admin@hadoop10 ~]$ ssh-copy-id hadoop12// hadoop11 hadoop12 执行同样操作上传jdk和Hadoop包至三台虚拟机的/home/v2admin目录下// 我本人的用操作系统是Ubuntu 18.04,间接应用scp进行上传。// 如果应用windows零碎,能够装置lrzsz或者应用ftp形式上传至虚拟机scp jdk-8u212-linux-x64.tar.gz hadoop-3.1.3.tar.gz v2admin@192.168.122.10:/home/v2adminscp jdk-8u212-linux-x64.tar.gz hadoop-3.1.3.tar.gz v2admin@192.168.122.11:/home/v2adminscp jdk-8u212-linux-x64.tar.gz hadoop-3.1.3.tar.gz v2admin@192.168.122.12:/home/v2admin4.2 装置JDK[v2admin@hadoop10 ~]$tar zxvf jdk-8u212-linux-x64.tar.gz[v2admin@hadoop10 ~]$sudo mv jdk1.8.0_212/ /usr/local/jdk84.2 装置Hadoop[v2admin@hadoop10 ~]$sudo tar zxvf hadoop-3.1.3.tar.gz -C /opt[v2admin@hadoop10 ~]$ sudo chown -R v2admin:v2admin /opt/hadoop-3.1.3 // 批改所属用户和组为以后用户4.3 配置jdk和Hadoop环境变量[v2admin@hadoop10 ~]$sudo vim /etc/profile // 最初面增加......# set jdk hadoop envexport JAVA_HOME=/usr/local/jdk8export JRE_HOME=${JAVA_HOME}/jreexport CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/libexport HADOOP_HOME=/opt/hadoop-3.1.3export PATH=${PATH}:${JAVA_HOME}/bin:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin....[v2admin@hadoop10 ~]$source /etc/profile[v2admin@hadoop10 ~]$java -version // 验证下jdkjava version "1.8.0_212"Java(TM) SE Runtime Environment (build 1.8.0_212-b10)Java HotSpot(TM) 64-Bit Server VM (build 25.212-b10, mixed mode)[v2admin@hadoop10 ~]$hadoop version // 验证下hadoopHadoop 3.1.3Source code repository https://gitbox.apache.org/repos/asf/hadoop.git -r ba631c436b806728f8ec2f54ab1e289526c90579Compiled by ztang on 2019-09-12T02:47ZCompiled with protoc 2.5.0From source with checksum ec785077c385118ac91aadde5ec9799This command was run using /opt/module/hadoop-3.1.3/share/hadoop/common/hadoop-common-3.1.3.jar4.4 散发文件的脚本因为三台虚拟机配置文件是一样的,如果没有这个脚本,则须要一台一台配置,很繁琐脚本文件名xrsync.sh 赋予执行权限,将其放到bin目录下,这样能够像应用其余shell命令一样间接调用 ...

December 28, 2020 · 3 min · jiezi

关于hadoop:hadoop教程MapReduce

什么是MapReduceMapReduce是hadoop进行多节点计算时采纳的计算模型,说白了就是hadoop拆分工作的一套方法论,刚接触MapReduce这个概念时,一时很难了解,也查了很多材料,因为每个人了解不一样,反而看的越多越糊涂,其实实质是很简略的货色,这里举一个例子帮忙了解,因为网上大部分是hadoop官网计算单词(wordcount)的例子,这里就换一个场景举例。 假如有以下一份成绩单 1,张三,78,87,692,李四,56,76,913,王五,65,46,844,赵六,89,56,98...各列别离是编号,学生姓名,语文问题,数学问题,英语问题,当初要求统计各科问题最高分,假如这份成绩单十分十分的长,有上千万行,在没有任何计算机系统的帮忙下,要怎么靠人工解决这个问题? 单人统计专门派一个人进行统计工作,长处是简略,毛病也很显著,须要十分长的工夫,甚至数据量达到肯定水平,一个人一辈子可能也统计不完 多人统计如果有足够的人能够进行统计工作,要怎么去协调这些人?假如成绩单有100w行并且有1000人能够进行统计 设一个管理员,管理员把成绩单均匀拆分成1000份给1000集体,每个人须要统计1000行数据管理员制作一个表格,要求每个人把本人统计的后果填入该表格,表格格局如下科目人员1后果人员2后果...人员1000后果语文 数学 英语 管理员最终失去了如下数据科目| 人员1后果|人员2后果|...|人员1000后果 语文8085...76 数学8990...88 英语9485...90 各科各有1000个后果,管理员又把这个表格拆成了100个小表格分给100集体进行统计,这样每个小表格各有10个数据,小表格格局如下第一个人领到的小表格 科目人员1后果人员2后果...人员10后果语文8085...76 数学8990...88 英语9485...90 第二个领到的小表格 科目人员11后果人员12后果...人员20后果语文8375...88 数学7995...58 英语9485...90 管理员再次把每个人的后果收集上来,又失去了100份数据,如果管理员违心又能够把这个数据进行拆分交给多集体进行统计,如此重复最终失去一个最大值后果,管理员也能够本人实现最初的统计,因为数据量不大。那么在这个过程中,咱们看到了,一份宏大的成绩单通过以下几个步骤后,最终咱们取得了咱们想要的后果 成绩单拆分多份每一份进行独自统计对后果进行注销对统计的后果能够再次进行拆分,也能够间接进行统计如此重复之后最终失去了后果那么把这个过程用MapReduce语言进行形容就能够是以下过程: 成绩单拆分多份- 分片(split)每一份进行独自统计 - map并且对后果进行注销 - shuffle对统计的后果能够再次进行拆分- combiner也能够间接进行统计 - reduce另外在管理员的表格中,三个科目前面记录 开发咱们用理论java代码解决下面的问题,假如你曾经依照上一篇教程装置好了hadoop集群环境 创立工程你能够用你相熟的ide创立一个一般java工程,倡议用maven进行包治理,并退出以下包依赖 <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-client</artifactId> <version>2.5.1</version></dependency>创立MapperMapper对应是MapReduce中的map过程,在以下mapper代码: StudentMapper.java public class StudentMapper extends MapReduceBase implements Mapper<LongWritable, Text, Text, IntWritable> { public void map(LongWritable longWritable, Text text, OutputCollector<Text, IntWritable> outputCollector, Reporter reporter) throws IOException { String[] ss = text.toString().split(","); outputCollector.collect(new Text("语文"), new IntWritable(Integer.parseInt(ss[2]))); outputCollector.collect(new Text("数学"), new IntWritable(Integer.parseInt(ss[3]))); outputCollector.collect(new Text("英语"), new IntWritable(Integer.parseInt(ss[4]))); }}StudentMapper实现了 Mapper<LongWritable, Text, Text, IntWritable>接口,这里有四个参数,四个参数含意如下 ...

December 19, 2020 · 4 min · jiezi

关于hadoop:hadoop教程hdfs客户端开发

hadoop环境hadoop版本为 hadoop versionHadoop 2.10.1Subversion https://github.com/apache/hadoop -r 1827467c9a56f133025f28557bfc2c562d78e816Compiled by centos on 2020-09-14T13:17ZCompiled with protoc 2.5.0From source with checksum 3114edef868f1f3824e7d0f68be03650客户端开发引入依赖(应用maven)<dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-client</artifactId> <version>2.10.1</version></dependency><dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-hdfs</artifactId> <version>2.10.1</version></dependency><dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-common</artifactId> <version>2.10.1</version></dependency>编写代码package com.definesys.hadoop;import org.apache.commons.io.IOUtils;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.FSDataOutputStream;import org.apache.hadoop.fs.FileSystem;import org.apache.hadoop.fs.Path;import org.apache.hadoop.hdfs.DistributedFileSystem;import java.io.FileInputStream;import java.io.IOException;/** * @Description: * @author: jianfeng.zheng * @since: 2020/12/14 12:36 上午 * @history: 1.2020/12/14 created by jianfeng.zheng */public class HDFS { public static void main(String[] cmd) throws IOException { Configuration conf = new Configuration(); conf.set("fs.defaultFS", "hdfs://master:9000/");// conf.set("fs.hdfs.impl", DistributedFileSystem.class.getName()); System.setProperty("HADOOP_USER_NAME", "hadoop"); FileSystem fs = FileSystem.get(conf); Path dst = new Path("hdfs://master:9000/demo/hello.txt"); FSDataOutputStream os = fs.create(dst); FileInputStream is = new FileInputStream("/root/hello.txt"); IOUtils.copy(is, os); is.close(); os.close(); fs.close(); }}打包如果是web利用,个别会打包为war或者ear,不论是哪种,这两种包格局都会把依赖包打进去,因而不必做非凡解决,如果须要本地运行,那么须要借助两个插件,把以下配置信息复制到pom.xml中 ...

December 18, 2020 · 2 min · jiezi

关于hadoop:hadoop节点地址localhost问题

问题形容hadoop集群装置结束,在yarn的控制台显示节点id和节点地址都是localhost hadoop@master sbin]$ yarn node -list20/12/17 12:21:19 INFO client.RMProxy: Connecting to ResourceManager at master/172.16.8.42:18040Total Nodes:1 Node-Id Node-State Node-Http-Address Number-of-Running-Containers localhost:43141 RUNNING localhost:8042 0提交作业时在yarn的日志中也打印出节点信息为127.0.0.1,并且应用该ip作为节点IP,必定连贯出错 2020-12-17 00:53:30,721 INFO org.apache.hadoop.yarn.server.resourcemanager.amlauncher.AMLauncher: Setting up container Container: [ContainerId: container_1607916354082_0008_01_000001, AllocationRequestId: 0, Version: 0, NodeId: localhost:43141, NodeHttpAddress: localhost:8042, Resource: <memory:2048, vCores:1>, Priority: 0, Token: Token { kind: ContainerToken, service: 127.0.0.1:35845 }, ExecutionType: GUARANTEED, ] for AM appattempt_1607916354082_0008_000001020-12-17 00:56:30,801 INFO org.apache.hadoop.yarn.server.resourcemanager.amlauncher.AMLauncher: Error launching appattempt_1607916354082_0008_000001. Got exception: java.net.ConnectException: Call From master/172.16.8.42 to localhost:43141 failed on connection exception: java.net.ConnectException: Connection refused; For more details see: http://wiki.apache.org/hadoop/ConnectionRefused at sun.reflect.GeneratedConstructorAccessor46.newInstance(Unknown Source) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at org.apache.hadoop.net.NetUtils.wrapWithMessage(NetUtils.java:827) at org.apache.hadoop.net.NetUtils.wrapException(NetUtils.java:757) at org.apache.hadoop.ipc.Client.getRpcResponse(Client.java:1553) at org.apache.hadoop.ipc.Client.call(Client.java:1495) at org.apache.hadoop.ipc.Client.call(Client.java:1394) at org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.java:232) at org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.java:118)问题起因在hadoop的源码中,获取节点信息的代码如下 ...

December 17, 2020 · 1 min · jiezi

关于hadoop:Hadoop集群的部署二

在上一篇文章中,介绍了Hadoop集群的伪散布的部署,在读这篇前,倡议先读上篇文章:Hadoop集群的部署(一) 这篇文章中咱们将介绍Hadoop集群分布式的部署。 分布式集群的部署虚拟机筹备分布式的集群,当然须要多个虚拟机的筹备。这是应用3台虚拟机,其中一个为主节点,另外两个为从节点。其中,上篇文章中曾经配置好的虚拟机当做主节点。 ip和主机名两个从节点的ip别离为:192.168.19.11和192.168.19.12。 两个从节点的主机名别离为:hadoop101和hadoop102。 配置过程参见上一篇文章。 留神:这里在配置hosts文件的时候,不仅要配置本人的ip和主机名,还要设置另外两台的ip和主机名。即每台机器都要有如下的配置。 防火墙的敞开防火墙都进行敞开。 ssh免明码登录这一步在配置的时候有点不同。 伪散布时只有一台机器,所以只用实现本人登录本人就能够了。 然而在集群中设置免明码登录的时候,至多要实现主节点免明码登录其余所有节点。 留神:这里之前要看本人的三台机器的ip是否属于同一网段。如果不是,可能会呈现连贯不上的状况。在主节点的机器上,应用命令: ssh-copy-id -i hadoop101ssh-copy-id -i hadoop102 这一步的时候还是须要输出对应从节点机器的明码的,而后再用ssh连贯的时候就能够实现免密登录了。 拷贝jdk将主节点上咱们之前上传好的jdk拷贝到另外两天从节点上: scp -rq /opt/jdk1.8/ hadoop101:/opt/而后还须要将环境变量的配置文件拷贝过来: scp -rq /etc/profile hadoop101:/etc/而后咱们到hadoop101机器下来确认一下: 接着再拷贝另一个从节点的。 hadoop装置因为咱们这里从伪分布式换成分布式,所以首先须要对之前的一些配置文件做些批改。 hdfs-site.xml: <configuration> <property> <name>dfs.replication</name> <value>2</value> </property> <property> <name>dfs.namenode.secondary.http-address</name> <value>hadoop100:50090</value> </property></configuration>留神:这里有两个从节点了,所以咱们的备份数量改为2。而后设定secondaryNameNode的这个过程也是在主节点上启动。yarn-site.xml: <configuration> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.nodemanager.env-whitelist</name> <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value> </property> <property> <name>yarn.resourcemanager.hostname</name> <value>hadoop100</value> </property></configuration>留神:这里多个一个属性,用来指定resourcemanager在主节点的机器上启动workers: 因为当初是集群的构造,咱们须要通知机器那些是从节点。 vim etc/hadoop/workers 默认是将本机作为从节点的,咱们要将hadoop101和hadoop102两台机器作为从节点。 删掉之前的,将两台机器的主机名加上: hadoop101hadoop102拷贝hadoop目录到另外两台机器上: scp -rq /opt/hadoop-3.2.1/ hadoop101:/opt从新格式化因为咱们这里相当是装置了一个新的集群,在首次启动集群前,须要对集群进行格式化。前面在启动就不须要了。 删除文件: 删除/data/hadoop_repo/文件夹。 ...

December 17, 2020 · 1 min · jiezi

关于hadoop:Hadoop集群的部署一

Hadoop集群的部署分为分布式集群和伪分布式集群的部署。这篇文章中,我会对伪散布集群的装置和部署做阐明。为什么先进行伪分布式集群部署呢,这是因为它只须要一台虚拟机(因为在本人的电脑上进行部署,应用的就是虚拟机),而分布式集群的部署个别须要三台及以上的虚拟机(一台为主节点,)。 并且,在实际操作的时候,分布式和伪分布式根本是没有区别的,在思考电脑启动多个虚拟机可能会卡,所以先对伪散布集群进行阐明。 伪散布集群的部署虚拟机筹备首先筹备一台虚拟机,我这里应用的是Centos6.x,如果应用其余版本的linux,前面的局部命令会有所不同,本人在试验时须要留神。 配置动态ip和主机名配置ip 终端输出: vim /etc/sysconfig/network-scripts/ifcfg-eth0配置文件: BOOTPROTO=staticIPADDR=192.168.19.0GATEWAY=192.168.19.2NETMASK=255.255.255.0DNS1=114.114.114.114 这里须要留神的是,ip地址要对应本人的虚拟机的地址。我这里网络连接应用的是NAT模式。设置主机名 终端输出: vim /etc/sysconfig/network批改HOSTNAME: 设置ip和主机名的绑定映射 终端输出: vim /etc/hosts批改hosts文件: 敞开防火墙形式1: service iptables stop形式二: chkconfig iptables off设置ssh免明码登录ssh hadoop100 这时会提醒输出明码。咱们要做的就是实现输出下面的命令的时候,间接连贯主机,不必输出明码。 留神:如果下面没有将ip和主机名绑定的话,ssh是不能解析主机的ssh -keygen -t rsa前面一路回车就行。这个命令会生成一个公钥和私钥。 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys 这步会向本机复制一个公钥。 这样免密就搞定了。 装置jdk这里首先须要将jdk的安装包传到虚拟机里。能够共享文件,或应用近程连贯工具进行上传。这里就不做演示了。 首先先解压,重命名文件为jdk1.8(为了不便): 而后配置环境变量: vim /etc/profileexport JAVA_HOME=/opt/jdk1.8export PATH=.:$JAVA_HOME/bin:$PATHHadoop的装置同样,先上传Hadoop的安装包。 https://archive.apache.org/dist/hadoop/common/ 能够在这里找到想要下的所有历史版本。 而后就须要对Hadoop外面的一些配置做批改了。 1.hadoop-env.sh先进入Hadoop的配置文件目录: cd /opt/hadoop-3.2.1/etc/hadoop批改hadoop-env.sh文件: vim hadoop-env.shexport JAVA_HOME=/opt/jdk1.8export HADOOP_LOG_DIR=/data/hadoop_repo/logs/hadoop这里留神,如果没有data目录,须要当初根目录下创立一个。2.core-site.xmlvim core-site.xml<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://hadoop100:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/data/hadoop_repo</value> </property></configuration>留神:本人的主机名是不是hadoop100,如果不是,批改为本人的。上面的目录hadoop会本人创立,只须要保障有/data目录即可。3.hdfs-site.xmlvim hdfs-site.xml<configuration> <property> <name>dfs.replication</name> <value>1</value> </property></configuration>留神:这个配置示意正本数量,咱们这里是伪散布集群,只有一台机器,只容许一个正本。4.mapred-site.xmlvim mapred-site.xml<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property></configuration>他示意mapreduce在yarn这个引擎里去执行。 ...

December 14, 2020 · 1 min · jiezi

关于hadoop:Hadoop框架Yarn基本结构和运行原理

本文源码:GitHub·点这里 || GitEE·点这里 一、Yarn根本构造Hadoop三大外围组件:分布式文件系统HDFS、分布式计算框架MapReduce,分布式集群资源调度框架Yarn。Yarn并不是在Hadoop初期就有的,是在Hadoop降级倒退才诞生的,典型的Master-Slave架构。 Yarn包含两个次要过程:资源管理器Resource-Manager,节点管理器Node-Manager。 资源管理器 通常部署在独立的服务器,解决客户端申请;解决集群中的资源分配和调度治理;节点管理器 治理以后节点上的资源;执行解决各种具体的命令;监督节点资源状况,并上报资源管理器;ApplicationMaster 提供容错能力,切割数据;给应用程序申请资源并分配任务;Container Yarn中的一个动静资源分配的概念;容器蕴含了一定量的内存、CPU等计算资源;由NodeManager过程启动和治理;二、根本执行流程 向Yarn提交MapReduce应用程序程序进行调度;RM组件返回资源提交门路和ApplicationId;RM过程NM过程通信,依据集群资源分配容器;将MRAppMaster散发到下面调配的容器下面;运行所需资源提交到HDFS上申请运行MRAppMaster;RM通过上述操作把客户端申请转换为Task工作;容器中运行的就是Map或者Reduce工作;工作在运行期间和MRAppMaster通信上报状态;工作执行完结后过程登记并且开释容器资源;MapReduce利用开发遵循Yarn标准的MapReduceApplicationMaster,所以能够在Yarn上运行,其它计算框架如果也恪守该标准,这样就实现资源的对立调度治理。 三、资源调度器调度器的根本作用就是依据节点资源的应用状况和作业需要,将任务调度到各个节点上执行。单了解工作队列的话要害的因素有如下几个:进出形式,优先级,容量等。 Hadoop作业调度器次要有三种:FIFO、CapacityScheduler和FairScheduler,默认的资源调度器是CapacityScheduler。 先进先出调度器 FIFO一种批处理调度器,调度策略先依照作业的优先级高下,再依照达到工夫的先后抉择被执行的作业。 容量调度器 CapacityScheduler反对多个队列,每个队列可配置肯定的资源量,每个队列采纳FIFO调度策略,计算队列中正在运行的任务书和计算资源的比值,选中比值小绝对闲暇的队列,而后装置作业优先级和提交工夫的排序。为了避免同一个用户的作业独占队列中的资源,该调度器会对同一用户提交的作业所占资源量进行限定。 例如下面图例,假如100个slot分为三个队列(ABC),依照如下调配规定:队列A给20%的资源,队列B给50%的资源,队列C给30%的资源;三个队列都依照工作的先后顺序顺次执行,下面的job11、job21、job31是最先运行,也是并行运行。 偏心调度器 和容量调度器原理相似,反对多队列多用户,每个队列中的资源量能够配置,同一队列中的作业偏心共享队列中所有资源。 比方有三个队列(ABC),每个队列中的job依照优先级分配资源,优先级越高调配的资源越多,然而每个job都会调配到资源以确保偏心。在资源无限的状况下,每个job现实状况下取得的计算资源与理论取得的计算资源存在一种差距,,这个差距就叫做缺额。在同一个队列中,job的资源缺额越大,越先取得资源优先执行,作业是依照缺额的高下来先后执行的。 四、源代码地址GitHub·地址https://github.com/cicadasmile/big-data-parentGitEE·地址https://gitee.com/cicadasmile/big-data-parent举荐浏览:编程体系整顿 序号项目名称GitHub地址GitEE地址举荐指数01Java形容设计模式,算法,数据结构GitHub·点这里GitEE·点这里☆☆☆☆☆02Java根底、并发、面向对象、Web开发GitHub·点这里GitEE·点这里☆☆☆☆03SpringCloud微服务根底组件案例详解GitHub·点这里GitEE·点这里☆☆☆04SpringCloud微服务架构实战综合案例GitHub·点这里GitEE·点这里☆☆☆☆☆05SpringBoot框架根底利用入门到进阶GitHub·点这里GitEE·点这里☆☆☆☆06SpringBoot框架整合开发罕用中间件GitHub·点这里GitEE·点这里☆☆☆☆☆07数据管理、分布式、架构设计根底案例GitHub·点这里GitEE·点这里☆☆☆☆☆08大数据系列、存储、组件、计算等框架GitHub·点这里GitEE·点这里☆☆☆☆☆

December 13, 2020 · 1 min · jiezi

关于hadoop:大数据集群安装hadoop

装置hadoop筹备Hadoop下载地址:https://archive.apache.org/dist/hadoop/common/hadoop-2.7.2/ 装置解压安装文件到/opt/server上面tar -zxvf hadoop-2.7.2.tar.gz -C /opt/server/查看是否解压胜利 将Hadoop增加到环境变量关上/etc/profile文件vi /etc/profile在profile文件开端增加JDK门路:(shitf+g) HADOOP\_HOMEexport HADOOP\_HOME=/opt/server/hadoop-2.7.2export PATH=$PATH:$HADOOP\_HOME/binexport PATH=$PATH:$HADOOP\_HOME/sbin 让批改后的文件失效source /etc/profile 测试是否装置胜利hadoop versionHadoop 2.7.2... 配置文件批改core-site.xml<configuration><!-- 指定NameNode的HA高可用的zk地址 --> <property> <name>ha.zookeeper.quorum</name> <value>node01:2181,node02:2181,node03:2181</value> </property> <!-- 指定HDFS拜访的域名地址 --> <property> <name>fs.defaultFS</name> <value>hdfs://ns</value> </property> <!-- 临时文件存储目录 --> <property> <name>hadoop.tmp.dir</name> <value>/export/servers/hadoop-2.7.5/data/tmp</value> </property> <!-- 开启hdfs垃圾箱机制,指定垃圾箱中的文件七天之后就彻底删掉 单位为分钟 --> <property> <name>fs.trash.interval</name> <value>10080</value> </property></configuration>批改hdfs-site.xml<configuration><!-- 指定命名空间 --> <property> <name>dfs.nameservices</name> <value>ns</value> </property><!-- 指定该命名空间下的两个机器作为咱们的NameNode --> <property> <name>dfs.ha.namenodes.ns</name> <value>nn1,nn2</value> </property> <!-- 配置第一台服务器的namenode通信地址 --> <property> <name>dfs.namenode.rpc-address.ns.nn1</name> <value>node01:8020</value> </property> <!-- 配置第二台服务器的namenode通信地址 --> <property> <name>dfs.namenode.rpc-address.ns.nn2</name> <value>node02:8020</value> </property> <!-- 所有从节点之间互相通信端口地址 --> <property> <name>dfs.namenode.servicerpc-address.ns.nn1</name> <value>node01:8022</value> </property> <!-- 所有从节点之间互相通信端口地址 --> <property> <name>dfs.namenode.servicerpc-address.ns.nn2</name> <value>node02:8022</value> </property> <!-- 第一台服务器namenode的web拜访地址 --> <property> <name>dfs.namenode.http-address.ns.nn1</name> <value>node01:50070</value> </property> <!-- 第二台服务器namenode的web拜访地址 --> <property> <name>dfs.namenode.http-address.ns.nn2</name> <value>node02:50070</value> </property> <!-- journalNode的拜访地址,留神这个地址肯定要配置 --> <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://node01:8485;node02:8485;node03:8485/ns1</value> </property> <!-- 指定故障主动复原应用的哪个java类 --> <property> <name>dfs.client.failover.proxy.provider.ns</name> <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> </property> <!-- 故障转移应用的哪种通信机制 --> <property> <name>dfs.ha.fencing.methods</name> <value>sshfence</value> </property> <!-- 指定通信应用的公钥 --> <property> <name>dfs.ha.fencing.ssh.private-key-files</name> <value>/root/.ssh/id_rsa</value> </property> <!-- journalNode数据寄存地址 --> <property> <name>dfs.journalnode.edits.dir</name> <value>/export/servers/hadoop-2.7.5/data/dfs/jn</value> </property> <!-- 启用主动故障复原性能 --> <property> <name>dfs.ha.automatic-failover.enabled</name> <value>true</value> </property> <!-- namenode产生的文件寄存门路 --> <property> <name>dfs.namenode.name.dir</name> <value>file:///export/servers/hadoop-2.7.5/data/dfs/nn/name</value> </property> <!-- edits产生的文件寄存门路 --> <property> <name>dfs.namenode.edits.dir</name> <value>file:///export/servers/hadoop-2.7.5/data/dfs/nn/edits</value> </property> <!-- dataNode文件寄存门路 --> <property> <name>dfs.datanode.data.dir</name> <value>file:///export/servers/hadoop-2.7.5/data/dfs/dn</value> </property> <!-- 敞开hdfs的文件权限 --> <property> <name>dfs.permissions</name> <value>false</value> </property> <!-- 指定block文件块的大小 --> <property> <name>dfs.blocksize</name> <value>134217728</value> </property></configuration>批改yarn-site.xml<configuration><!-- Site specific YARN configuration properties --><!-- 是否启用日志聚合.应用程序实现后,日志汇总收集每个容器的日志,这些日志挪动到文件系统,例如HDFS. --><!-- 用户能够通过配置"yarn.nodemanager.remote-app-log-dir"、"yarn.nodemanager.remote-app-log-dir-suffix"来确定日志挪动到的地位 --><!-- 用户能够通过应用程序工夫服务器拜访日志 --><!-- 启用日志聚合性能,应用程序实现后,收集各个节点的日志到一起便于查看 --> <property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property> <!--开启resource manager HA,默认为false--> <property> <name>yarn.resourcemanager.ha.enabled</name> <value>true</value></property><!-- 集群的Id,应用该值确保RM不会做为其它集群的active --><property> <name>yarn.resourcemanager.cluster-id</name> <value>mycluster</value></property><!--配置resource manager 命名--><property> <name>yarn.resourcemanager.ha.rm-ids</name> <value>rm1,rm2</value></property><!-- 配置第一台机器的resourceManager --><property> <name>yarn.resourcemanager.hostname.rm1</name> <value>node03</value></property><!-- 配置第二台机器的resourceManager --><property> <name>yarn.resourcemanager.hostname.rm2</name> <value>node02</value></property><!-- 配置第一台机器的resourceManager通信地址 --><property> <name>yarn.resourcemanager.address.rm1</name> <value>node03:8032</value></property><property> <name>yarn.resourcemanager.scheduler.address.rm1</name> <value>node03:8030</value></property><property> <name>yarn.resourcemanager.resource-tracker.address.rm1</name> <value>node03:8031</value></property><property> <name>yarn.resourcemanager.admin.address.rm1</name> <value>node03:8033</value></property><property> <name>yarn.resourcemanager.webapp.address.rm1</name> <value>node03:8088</value></property><!-- 配置第二台机器的resourceManager通信地址 --><property> <name>yarn.resourcemanager.address.rm2</name> <value>node02:8032</value></property><property> <name>yarn.resourcemanager.scheduler.address.rm2</name> <value>node02:8030</value></property><property> <name>yarn.resourcemanager.resource-tracker.address.rm2</name> <value>node02:8031</value></property><property> <name>yarn.resourcemanager.admin.address.rm2</name> <value>node02:8033</value></property><property> <name>yarn.resourcemanager.webapp.address.rm2</name> <value>node02:8088</value></property><!--开启resourcemanager主动复原性能--><property> <name>yarn.resourcemanager.recovery.enabled</name> <value>true</value></property><!--在node1上配置rm1,在node2上配置rm2,留神:个别都喜爱把配置好的文件近程复制到其它机器上,但这个在YARN的另一个机器上肯定要批改,其余机器上不配置此项--> <property> <name>yarn.resourcemanager.ha.id</name> <value>rm1</value> <description>If we want to launch more than one RM in single node, we need this configuration</description> </property> <!--用于长久存储的类。尝试开启--><property> <name>yarn.resourcemanager.store.class</name> <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value></property><property> <name>yarn.resourcemanager.zk-address</name> <value>node02:2181,node03:2181,node01:2181</value> <description>For multiple zk services, separate them with comma</description></property><!--开启resourcemanager故障主动切换,指定机器--> <property> <name>yarn.resourcemanager.ha.automatic-failover.enabled</name> <value>true</value> <description>Enable automatic failover; By default, it is enabled only when HA is enabled.</description></property><property> <name>yarn.client.failover-proxy-provider</name> <value>org.apache.hadoop.yarn.client.ConfiguredRMFailoverProxyProvider</value></property><!-- 容许调配给一个工作最大的CPU核数,默认是8 --><property> <name>yarn.nodemanager.resource.cpu-vcores</name> <value>4</value></property><!-- 每个节点可用内存,单位MB --><property> <name>yarn.nodemanager.resource.memory-mb</name> <value>512</value></property><!-- 单个工作可申请起码内存,默认1024MB --><property> <name>yarn.scheduler.minimum-allocation-mb</name> <value>512</value></property><!-- 单个工作可申请最大内存,默认8192MB --><property> <name>yarn.scheduler.maximum-allocation-mb</name> <value>512</value></property><!--多长时间聚合删除一次日志 此处--><property> <name>yarn.log-aggregation.retain-seconds</name> <value>2592000</value><!--30 day--></property><!--工夫在几秒钟内保留用户日志。只实用于如果日志聚合是禁用的--><property> <name>yarn.nodemanager.log.retain-seconds</name> <value>604800</value><!--7 day--></property><!--指定文件压缩类型用于压缩汇总日志--><property> <name>yarn.nodemanager.log-aggregation.compression-type</name> <value>gz</value></property><!-- nodemanager本地文件存储目录--><property> <name>yarn.nodemanager.local-dirs</name> <value>/export/servers/hadoop-2.7.5/yarn/local</value></property><!-- resourceManager 保留最大的工作实现个数 --><property> <name>yarn.resourcemanager.max-completed-applications</name> <value>1000</value></property><!-- 逗号隔开的服务列表,列表名称应该只蕴含a-zA-Z0-9_,不能以数字开始--><property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value></property><!--rm失联后从新链接的工夫--> <property> <name>yarn.resourcemanager.connect.retry-interval.ms</name> <value>2000</value></property></configuration>批改mapred-site.xml<configuration><!--指定运行mapreduce的环境是yarn --><property> <name>mapreduce.framework.name</name> <value>yarn</value></property><!-- MapReduce JobHistory Server IPC host:port --><property> <name>mapreduce.jobhistory.address</name> <value>node03:10020</value></property><!-- MapReduce JobHistory Server Web UI host:port --><property> <name>mapreduce.jobhistory.webapp.address</name> <value>node03:19888</value></property><!-- The directory where MapReduce stores control files.默认 ${hadoop.tmp.dir}/mapred/system --><property> <name>mapreduce.jobtracker.system.dir</name> <value>/export/servers/hadoop-2.7.5/data/system/jobtracker</value></property><!-- The amount of memory to request from the scheduler for each map task. 默认 1024--><property> <name>mapreduce.map.memory.mb</name> <value>1024</value></property><!-- <property> <name>mapreduce.map.java.opts</name> <value>-Xmx1024m</value> </property> --><!-- The amount of memory to request from the scheduler for each reduce task. 默认 1024--><property> <name>mapreduce.reduce.memory.mb</name> <value>1024</value></property><!-- <property> <name>mapreduce.reduce.java.opts</name> <value>-Xmx2048m</value> </property> --><!-- 用于存储文件的缓存内存的总数量,以兆字节为单位。默认状况下,调配给每个合并流1MB,给个合并流应该寻求最小化。默认值100--><property> <name>mapreduce.task.io.sort.mb</name> <value>100</value></property> <!-- <property> <name>mapreduce.jobtracker.handler.count</name> <value>25</value> </property>--><!-- 整顿文件时用于合并的流的数量。这决定了关上的文件句柄的数量。默认值10--><property> <name>mapreduce.task.io.sort.factor</name> <value>10</value></property><!-- 默认的并行传输量由reduce在copy(shuffle)阶段。默认值5--><property> <name>mapreduce.reduce.shuffle.parallelcopies</name> <value>25</value></property><property> <name>yarn.app.mapreduce.am.command-opts</name> <value>-Xmx1024m</value></property><!-- MR AppMaster所需的内存总量。默认值1536--><property> <name>yarn.app.mapreduce.am.resource.mb</name> <value>1536</value></property><!-- MapReduce存储两头数据文件的本地目录。目录不存在则被疏忽。默认值${hadoop.tmp.dir}/mapred/local--><property> <name>mapreduce.cluster.local.dir</name> <value>/export/servers/hadoop-2.7.5/data/system/local</value></property></configuration>批改slavesnode01node02node03批改hadoop-env.shexport JAVA_HOME=/export/servers/jdk1.8.0_141集群启动过程将第一台机器的安装包发送到其余机器上第一台机器执行以下命令 ...

December 6, 2020 · 3 min · jiezi

关于hadoop:hadoop-start-namenode-deamon-and-datanode-deamon-failed

执行命令hadoop/sbin/start-dfs.sh失败,报错信息如下: WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicableIncorrect configuration: namenode address dfs.namenode.servicerpc-address or dfs.namenode.rpc-address is not configured.WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable查找起因:1、查看更具体的debug信息 执行命令export HADOOP_ROOT_LOGGER=DEBUG,console,而后再执行命令hadoop/sbin/start-dfs.sh,发现version `GLIBC_2.14' not found:Failed to load native-hadoop with error: java.lang.UnsatisfiedLinkError: /usr/local/hadoop/lib/native/libhadoop.so.1.0.0: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /usr/local/hadoop/lib/native/libhadoop.so.1.0.0) 好了,当初发现问题了,是查找GLIBC_2.14这个货色找不到,那么接下来就来理解一下这是个什么货色,怎样才能让hadoop找到这个货色。2、GLIBC是什么 glibc是GNU公布的libc库,即c运行库。glibc是linux零碎中最底层的api,简直其它任何运行库都会依赖于glibc。glibc除了封装linux操作系统所提供的零碎服务外,它自身也提供了许多其它一些必要性能服务的实现…3、/lib64/libc.so.6是什么 libc.so.6 是c运行时库 glibc的软链接,而零碎简直所有程序都依赖c运行时库。程序启动和运行时,是依据libc.so.6 软链接找到glibc库。每个glibc.so文件有它反对的libc版本,能够通过 strings /lib64/libc.so.6 |grep GLIBC查看,肯定要抉择这条命令列出的版本。如果程序编译的时候链接的libc库版本不在程序运行环境下的glibc库反对的libc版本之内,也会报错。于是,零碎的所有命令 ls,cp,cd 等等都无奈应用了。4、查看零碎的GLIBC版本 ...

December 3, 2020 · 1 min · jiezi

关于hadoop:记录一次异常

20/11/30 18:13:16 ERROR Shell: Failed to locate the winutils binary in the hadoop binary pathjava.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries. at org.apache.hadoop.util.Shell.getQualifiedBinPath(Shell.java:378) at org.apache.hadoop.util.Shell.getWinUtilsPath(Shell.java:393) at org.apache.hadoop.util.Shell.<clinit>(Shell.java:386) at org.apache.hadoop.util.StringUtils.<clinit>(StringUtils.java:79) at org.apache.hadoop.security.Groups.parseStaticMapping(Groups.java:116) at org.apache.hadoop.security.Groups.<init>(Groups.java:93) at org.apache.hadoop.security.Groups.<init>(Groups.java:73) at org.apache.hadoop.security.Groups.getUserToGroupsMappingService(Groups.java:293) at org.apache.hadoop.security.UserGroupInformation.initialize(UserGroupInformation.java:283) at org.apache.hadoop.security.UserGroupInformation.ensureInitialized(UserGroupInformation.java:260) at org.apache.hadoop.security.UserGroupInformation.loginUserFromSubject(UserGroupInformation.java:789) at org.apache.hadoop.security.UserGroupInformation.getLoginUser(UserGroupInformation.java:774) at org.apache.hadoop.security.UserGroupInformation.getCurrentUser(UserGroupInformation.java:647) at org.apache.spark.util.Utils$.$anonfun$getCurrentUserName$1(Utils.scala:2422) at scala.Option.getOrElse(Option.scala:189) at org.apache.spark.util.Utils$.getCurrentUserName(Utils.scala:2422) at org.apache.spark.SparkContext.<init>(SparkContext.scala:293) at Transformation$.<init>(Transformation.scala:7) at Transformation$.<clinit>(Transformation.scala) at Transformation.main(Transformation.scala)

November 30, 2020 · 1 min · jiezi

关于hadoop:基于Hadoop的数据仓库工具Hive附超实用示例

Hive性能Hive是基于Hadoop构建的一套数据仓库剖析零碎,它提供了丰盛的SQL查问形式来剖析存储在Hadoop分布式文件系统中的数据:能够将结构化的数据文件映射为一张数据库表,并提供残缺的SQL查问性能;能够将SQL语句转换为MapReduce工作运行,通过本人的SQL查问剖析须要的内容,这套SQL简称Hive SQL,使不相熟mapreduce的用户能够很不便地利用SQL语言查问、汇总和剖析数据。而mapreduce开发人员能够把本人写的mapper和reducer作为插件来反对Hive做更简单的数据分析。它与关系型数据库的SQL略有不同,但反对了绝大多数的语句如DDL、DML以及常见的聚合函数、连贯查问、条件查问。它还提供了一系列的1:具进行数据提取转化加载,用来存储、查问和剖析存储在Hadoop中的大规模数据集,并反对UDF(User-Defined Function)、UDAF(User-Defnes AggregateFunction)和UDTF(User-Defined Table-Generating Function),也能够实现对map和reduce函数的定制,为数据操作提供了良好的伸缩性和可扩展性。 Hive不适宜用于联机(online)上事务处理,也不提供实时查问性能。它最适宜利用在基于大量不可变数据的批处理作业。Hive的特点包含:可伸缩(在Hadoop的集群上动静增加设施)、可扩大、容错、输出格局的涣散耦合。 外部表Hive的外部表与数据库中的Table在概念上是相似。每一个Table在Hive中都有一个相应的目录存储数据。删除表时,元数据与数据都会被删除。 外部示意例: 创立数据文件:test_inner_table.txt 创立表:create table test_inner_table (key string) 加载数据:LOAD DATA LOCAL INPATH ‘filepath’ INTO TABLE test_inner_table 查看数据:select from test_inner_table;  select count() from test_inner_table 删除表:drop table test_inner_table 内部表内部表指向曾经在HDFS中存在的数据,能够创立Partition。内部表加载数据和创立表同时实现(CREATE EXTERNAL TABLE ……LOCATION),理论数据是存储在LOCATION前面指定的 HDFS 门路中,并不会挪动到数据仓库目录中。当删除一个External Table时,仅删除该链接。 内部示意例: 创立数据文件:test_external_table.txt 创立表:create external table test_external_table (key string) 加载数据:LOAD DATA INPATH ‘filepath’ INTO TABLE test_inner_table 查看数据:select from test_external_table;  •select count() from test_external_table 删除表:drop table test_external_table ...

November 30, 2020 · 2 min · jiezi

关于hadoop:SQL分组函数和聚合函数的几点说明

1 分组聚合的起因SQL中分组函数和聚合函数之前的文章曾经介绍过,单说这两个函数有可能比拟好了解,分组函数就是group by,聚合函数就是COUNT、MAX、MIN、AVG、SUM。 拿上图中的数据进行解释,假如依照product_type这个字段进行分组,分组之后后果如下图。 SELECT product_type from productgroup by product_type 从图中能够看出被分为了三组,别离为厨房用具、衣服和办公用品,就相当于对product_type这个字段进行了去重,的确group by函数有去重的作用。 SELECT DISTINCT product_type from product假如分组之后,我想看一下价格,也就是sale_price这个字段的值,依照如下这个写法,会报如下谬误。 SELECT product_type,sale_price from productgroup by product_type 这是为什么呢?原表依照product_type分组之后,厨房用具对应4个值,衣服对应2个值,办公用品对应2个值,这就是在取sale_price这个字段的时候为什么报错了,一个空格中不能填入多个值,这时候就能够用聚合函数了,比方求和,求均匀,求最大最小值,求行数。聚合之后的值就只有一个值了。 SELECT product_type,sum(sale_price),avg(sale_price),count(sale_price),max(sale_price) from productgroup by product_type 对于多个字段的分组,其原理是一样的。从上述中记住两点:分组去重和分组聚合。 2 distinct和group by去重的区别Distinct 和group by 设计时侧重点不一样distinct只是为了去重,而group by是为了聚合统计的。 两者都有去重的成果,然而执行的效率不一样单个字段去重 --DISTINCTSELECT distinct product_type from product--GROUP BYselect product_type from productGROUP BY product_type 多个字段去重 --DISTINCTSELECT distinct product_name, product_type from product--GROUP BYselect product_name, product_type from productGROUP BY product_name, product_type ...

November 29, 2020 · 1 min · jiezi

关于hadoop:Hadoop框架MapReduce基本原理和入门案例

本文源码:GitHub·点这里 || GitEE·点这里 一、MapReduce概述1、基本概念Hadoop外围组件之一:分布式计算的计划MapReduce,是一种编程模型,用于大规模数据集的并行运算,其中Map(映射)和Reduce(归约)。 MapReduce既是一个编程模型,也是一个计算组件,解决的过程分为两个阶段,Map阶段:负责把工作合成为多个小工作,Reduce负责把多个小工作的处理结果进行汇总。其中Map阶段次要输出是一对Key-Value,通过map计算后输入一对Key-Value值;而后将雷同Key合并,造成Key-Value汇合;再将这个Key-Value汇合转入Reduce阶段,通过计算输入最终Key-Value后果集。 2、特点形容MapReduce能够实现基于上千台服务器并发工作,提供很弱小的数据处理能力,如果其中单台服务挂掉,计算工作会主动本义到另外节点执行,保障高容错性;然而MapReduce不适应于实时计算与流式计算,计算的数据是动态的。 二、操作案例1、流程形容 数据文件个别以CSV格局居多,数据行通常以空格分隔,这里须要思考数据内容特点; 文件通过切片调配在不同的MapTask工作中并发执行; MapTask工作执行结束之后,执行ReduceTask工作,依赖Map阶段的数据; ReduceTask工作执行结束后,输入文件后果。 2、根底配置hadoop: # 读取的文件源 inputPath: hdfs://hop01:9000/hopdir/javaNew.txt # 该门路必须是程序运行前不存在的 outputPath: /wordOut3、Mapper程序public class WordMapper extends Mapper<LongWritable, Text, Text, IntWritable> { Text mapKey = new Text(); IntWritable mapValue = new IntWritable(1); @Override protected void map (LongWritable key, Text value, Context context) throws IOException, InterruptedException { // 1、读取行 String line = value.toString(); // 2、行内容切割,依据文件中分隔符 String[] words = line.split(" "); // 3、存储 for (String word : words) { mapKey.set(word); context.write(mapKey, mapValue); } }}4、Reducer程序public class WordReducer extends Reducer<Text, IntWritable, Text, IntWritable> { int sum ; IntWritable value = new IntWritable(); @Override protected void reduce(Text key, Iterable<IntWritable> values,Context context) throws IOException, InterruptedException { // 1、累加求和统计 sum = 0; for (IntWritable count : values) { sum += count.get(); } // 2、输入后果 value.set(sum); context.write(key,value); }}5、执行程序@RestControllerpublic class WordWeb { @Resource private MapReduceConfig mapReduceConfig ; @GetMapping("/getWord") public String getWord () throws IOException, ClassNotFoundException, InterruptedException { // 申明配置 Configuration hadoopConfig = new Configuration(); hadoopConfig.set("fs.hdfs.impl", org.apache.hadoop.hdfs.DistributedFileSystem.class.getName() ); hadoopConfig.set("fs.file.impl", org.apache.hadoop.fs.LocalFileSystem.class.getName() ); Job job = Job.getInstance(hadoopConfig); // Job执行作业 输出门路 FileInputFormat.addInputPath(job, new Path(mapReduceConfig.getInputPath())); // Job执行作业 输入门路 FileOutputFormat.setOutputPath(job, new Path(mapReduceConfig.getOutputPath())); // 自定义 Mapper和Reducer 两个阶段的工作解决类 job.setMapperClass(WordMapper.class); job.setReducerClass(WordReducer.class); // 设置输入后果的Key和Value的类型 job.setOutputKeyClass(Text.class); job.setOutputValueClass(IntWritable.class); //执行Job直到实现 job.waitForCompletion(true); return "success" ; }}6、执行后果查看将应用程序打包放到hop01服务上执行; ...

November 22, 2020 · 2 min · jiezi

关于hadoop:Hadoop3x完全分布式集群搭建教程二

以下操作全副须要切换到hadoop用户 编写集群批量操作脚本1.在/home/hadoop/bin目录下上传脚本cd ~/binrz(1)xsync这个脚本的作用就是将指定目录的所有文件复制到其余虚拟机雷同目录中用法为: xsync 文件门路留神:因为要保障集群每台机器的配置都雷同,所以任意一台机器有批改都须要及时应用xsync脚本散发批改后的文件给其它机器(2)ssh有以下几个文件ips_zk、ips_hadoop、ssh-all.sh、zk-ssh-all.sh 其中ssh-all.sh、zk-ssh-all.sh实现多机操作两个脚本的区别是前者操作hadoop集群,后者操作zookeeper集群用法为: ssh-all.sh 命令ips:用于寄存要操作的主机列表,用回车或空格隔开而后批改权限chmod -R 777 ~/bin2.测试脚本xsync ~/binssh-all.sh hostname此时调用ssh脚本须要输出各虚拟机的明码(因为还没有设置免密登录其它机器)设置免密登录实现任意一台虚拟机都能够免密登录到其它虚拟机,即任意一台虚拟机执行 ssh hadoop10x 不须要输明码 1.生成公钥和私钥:cd ~ssh-keygen -t rsa而后敲(三个回车),就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)2.将公钥拷贝到要免密登录的指标机器上ssh-copy-id hadoop101ssh-copy-id hadoop102ssh-copy-id hadoop103ssh-copy-id hadoop104ssh-copy-id hadoop1053.把整个.ssh文件夹散发到其它虚拟机xsync ~/.ssh批改集群的相干配置文件1.批改Zookeeper配置文件(1)在hadoop101上创立data目录,创立myid文件 cd /opt/module/zookeeper-3.6.2/mkdir datatouch myid(2)批改zoo.cfg文件 cd confmv zoo_sample.cfg zoo.cfgvim zoo.cfg找到dataDir,将其批改为 dataDir=/opt/module/zookeeper-3.6.2/data并减少如下配置 #######################cluster##########################server.1=hadoop101:2888:3888server.2=hadoop102:2888:3888server.3=hadoop103:2888:3888(3)散发 xsync /opt/module4.批改zookeeper集群的myid文件讲hadoop101、hadoop102、hadoop103的myid文件内容别离批改为1、2、3 [hadoop@hadoop101 ~]$ vim /opt/module/zookeeper-3.6.2/data/myid[hadoop@hadoop101 data]$ ssh hadoop102[hadoop@hadoop102 ~]$ vim /opt/module/zookeeper-3.6.2/data/myid[hadoop@hadoop102 ~]$ ssh hadoop103[hadoop@hadoop103 ~]$ vim /opt/module/zookeeper-3.6.2/data/myid2.批改HDFS、YARN、MapReduce配置文件须要批改的文件有:core-site.xmlhadoop-env.shworkers(hadoop2.x版本里的名字为slaves)hdfs-site.xmlyarn-site.xmlyarn-env.shmapred-site.xmlmapred-env.sh 以上配置文内容比拟多(因为配置的是HA集群),所以就不贴出来了,都在我之前分享的网盘链接里。须要将其上传并笼罩至/opt/module/hadoop-3.1.3/etc/hadoop而后,在集群上散发配置xsync /opt/module/hadoop-3.1.3/etc第一次启动集群1.Zookeeper批量启动zookeeper服务zk-ssh-all.sh zkServer.sh查看是否启动胜利zk-ssh-all.sh zkServer.sh status 初始化HA的zookeeper信息(只有第一次启动须要)hdfs zkfc -formatZK启动zkclient,并连贯zookeeper集群zkCli.sh -server hadoop101:2181,hadoop102:2181,hadoop103:2181 2.HDFS(1)启动NameNode ...

November 20, 2020 · 1 min · jiezi

关于hadoop:hadoopAPI开发问题

报错信息Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/tracing/SpanReceiverHos参考链接Hadoop Java API 简略应用 集体解决形式:因为用的父子maven文件2个都加了对应jar版本依赖

November 19, 2020 · 1 min · jiezi

关于hadoop:Hadoop学习01hdfs概念

hadoop解决什么问题1.海量数据如何存储(hdfs)2.海量数据如何计算(mapreduce) 1.HDFS两个外围 namenode与datanodenamenode:治理datanode,相似仓库管理员,治理元数据信息,有单点故障问题datanode:存储数据的节点,数据寄存具备备份。1.保留具体的block数据,2.负责数据的读写操作和复制操作3.DataNode启动会想NameNode报告以后存储的block信息,4.DataNode之间会进行通信(RPC),保证数据的冗余性SecondaryNameNode不是热备,它的职责是合并NameNode 的edit log,到 fsiamge这个文件中。tip:hdfs不适宜存储海量小文件 起因:20kB放在128M的block里,他只占用了20Kb,然而须要一个装128M的袋子装,这个袋子不能再装其余货色了。假如我有1000w * 1Kb,则namenode须要这么多元数据信息,导致NameNode 瘫痪。 hdfs是磁盘,也就是波及两个问题:写与读。

November 16, 2020 · 1 min · jiezi

关于hadoop:Apache-Hadoop的重要组成

Hadoop = HDFS(分布式文件系统) + MapReduce(分布式计算框架) + Yarn(资源协调框架) + Common模块HDFSHadoop Distribute File System 一个高牢靠, 高吞量的分布式文件系统"分而治之" NameNode(nn): 存储文件的元数据. 比方文件名, 文件目录构造, 文件属性(生成工夫, 正本数, 文件权限), 以及每个文件的块列表和块所在的DataNode等SecondaryNameNode(2nn): 辅助NameNode更好地工作, 用来监控HDFS状态的辅助后台程序, 每隔一段时间获取HDFS元数据快照DataNode(dn): 在本地文件系统存储文件块数据, 以及块数据的校验NN, 2NN, DN 这些既是角色名称, 也是过程名称, 更是代指电脑节点名称 MapReduceMapReduce计算 = Map阶段 + Reduce阶段Map阶段就是分的阶段, 并行处理输出数据Reduce阶段就是合的阶段, 对Map阶段后果进行汇总 Yarn作业调度与集群资源管理的框架 ResourceManager(rm): 解决客户端申请, 启动/监控ApplicationMaster, 监控NodeManager, 资源分配与调度NodeManager(nm): 单个节点上的资源管理, 解决来自ResourceManager的命令, 解决来自ApplicationMaster的命令ApplicationMaster(am): 数据切分, 为应用程序申请资源并调配给外部工作, 工作监控与容错Container: 对工作运行环境的形象, 封装了CPU, 内存等多维资源以及环境变量, 启动命令等工作运行相干的信息ResourceManager是老大, NodeManager是小弟, ApplicationMaster是计算工作专员

November 9, 2020 · 1 min · jiezi

关于hadoop:一文带你了解数据仓库HIVE的安装过程

HIVE是一个数据仓库,该仓库基于hadoop框架,能够将存在hdfs上的结构化数据文件映射为一张数据库表。HIVE能够应用类SQL语句来解决结构化数据(查问数据),也即是把结构化数据当成一张类mysql中的表,采纳SQL语句查问。 结构化数据即行数据,能够用二维表构造来体现的数据;非结构化数据即不能二维表构造来体现的数据,包含所有格局的办公文档、文本、图片、XML、HTML、各类报表、图像和音频/视频信息。Hive 的实质是将 SQL 语句转换为 MapReduce 工作运行,使不相熟 MapReduce 的用户很不便地利用 HQL 解决和计算 HDFS 上的结构化的数据,实用于离线的批量数据计算。 HIVE官网 官网介绍: The Apache Hive ™ data warehouse software facilitates reading,writing, and managing large datasets residing in distributed storage using SQL. Structure can be projected onto data already in storage. A command line tool and JDBC driver are provided to connect users to Hive.1 MySQL 装置HIVE默认把元数据放在内嵌的 Derby 数据库中,但因为Derby数据库只能容许一个会话连贯,不实用理论生产环境中,所以本文采纳MySQL存储HIVE的元数据。 MySQL下载地址 采纳yum工具装置MySQL #下载mysql80-community-release-el8-1.noarch.rpmwget https://dev.mysql.com/get/mysql80-community-release-el8-1.noarch.rpm#装置rpm软件包yum localinstall mysql80-community-release-el8-1.noarch.rpm#装置mysql服务端yum install mysql-community-server#启动mysql服务端,并设置开机启动systemctl start mysqldsystemctl enable mysqldsystemctl daemon-reload#登陆mysql客户端之前先批改root账户的默认明码#日志文件中查看mysql的root用户默认明码grep 'temporary password' /var/log/mysqld.log#mysql客户端登陆,填写上边命令取出的明码,三个选一个。mysql -uroot -p#批改明码,明码必须要有大小写和数字。ALTER USER 'root'@'localhost' IDENTIFIED BY 'Pass9999';批改好明码,要重新启动服务端。systemctl restart mysqld#登陆客户端mysql -uroot -p Pass9999#批改root的近程拜访权限,即可近程连贯mysql。GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'Pass9999' WITH GRANT OPTION;#刷新MySQL的零碎权限FLUSH PRIVILEGES;mysql存贮hive的元数据,元数据都有哪些表,每个表具体含意如下: ...

November 7, 2020 · 1 min · jiezi

关于hadoop:一文带你了解HDFS的shell命令

1 筹备常识HDFS:hadoop集群分布式文件系统,用来存储海量数据。HDFS采纳分而治之的设计思维,将文件切分为文件块进行存储,存储数据的节点为datanode,存储这些数据具体寄存地位的节点为namenode。HDFS的架构为一主多从,即namenode为主,datanade为从。本文次要介绍HDFS的shell命令,即如何通过命令行对HDFS进行操作。 首先附上官网链接,HDFS Commands Guide。 介绍HDFS之前,须要理解一下命令行的格局,找个例子讲一下。 hadoop fs [generic options] [-appendToFile <localsrc> ... <dst>] [-cat [-ignoreCrc] <src> ...] [-getfattr [-R] {-n name | -d} [-e en] <path>]命令行中符号的含意如下表: []可选内容<>必选内容{}分组\ 二选一…同一个内容可屡次呈现-前面连贯单个字符,可多个组合应用--前面跟残缺的单词Localsrc本地源文件dst指标门路参考上述,可写如下命令: hadoop fs -appendToFile <localsrc> ...<dst>或者hadoop fs -getfattr -d <path> 2 shell命令查看hdfs命令的形式,间接在hadoop集群上输出hdfs,会输入usage(用法)。 hdfs的命令分为三种,别离是admin command(管理员)、client commands(客户端)和 Daemon Command(过程) 管理员命令客户端命令过程命令cacheadminclasspathbalancercryptodfsdatanodedebugenvvarsdfsrouterdfsadminfetchdtdiskbalancerdfsrouteradmingetconfhttpfsecgroupsjournalnodefscklsSnapshottableDirmoverhaadminsnapshotDiffnamenodejmxgetversionnfs3oev portmapoiv secondarynamenodeoiv_legacy spserstoragepolicies zkfc2.1 admin command管理员命令次要介绍 dfsadmin和fsck 输出 hdfs dfsadmin 查看usage hdfs dfsadmin -report #报告集群状态 hdfs dfsadmin -safemode #设置集群的平安模式,当集群呈现问题时,可设置平安模式。enter :进入平安模式,平安模式状态下,不能够向hdfs上传输文件;leave:来到;get:获取以后状态;wait:期待。 ...

November 1, 2020 · 1 min · jiezi

关于hadoop:五Windows下Hadoop的启动HDFS上传文件等命令

PS:肯定要在管理员窗口关上,不要关上powershell!PS:肯定要在管理员窗口关上,不要关上powershell!PS:肯定要在管理员窗口关上,不要关上powershell!PS D:\open_source\hadoop-2.5.2\bin> hdfs namenode -formatPS D:\open_source\hadoop-2.5.2\bin> start-all.cmdPS D:\open_source\hadoop-2.5.2\bin> hadoop fs -mkdir hdfs://localhost:9000/inputPS D:\open_source\hadoop-2.5.2\bin> hadoop fs -mkdir hdfs://localhost:9000/outputPS D:\open_source\hadoop-2.5.2\bin> hadoop fs -put D:\open_source\hadoop-2.5.2\AvgTemperature.txt hdfs://localhost:9000/input/ 1、进行集群(切换到/sbin目录下)stop-all.sh2、从新格式化namenode(切换到hadoop目录下的bin目录下)hdfs namenode -format3、重新启动hadoop集群(切换到hadoop目录下的sbin目录下)start-all.sh4、hadoop dfsadmin -reportD:\open_source\hadoop-2.5.2\bin>hadoop fs -ls /input/D:\open_source\hadoop-2.5.2\bin>hadoop fs -cat /output/part-00000

October 31, 2020 · 1 min · jiezi

关于hadoop:本文将大数据学习门槛降到了地平线

Hadoop介绍Hadoop-大数据开源世界的亚当夏娃。 外围是HDFS数据存储系统,和MapReduce分布式计算框架。 HDFS原理是把大块数据切碎, 每个碎块复制三份,离开放在三个便宜机上,始终放弃有三块可用的数据互为备份。应用的时候只从其中一个备份读出来,这个碎块数据就有了。 存数据的叫datenode(格子间),治理datenode的叫namenode(执伞人)。 MapReduce原理是大工作先分堆解决-Map,再汇总处理结果-Reduce。分和汇是多台服务器并行进行,能力体现集群的威力。难度在于如何把工作拆解成合乎MapReduce模型的分和汇,以及两头过程的输入输出<k,v> 都是什么。 单机版Hadoop介绍对于学习hadoop原理和hadoop开发的人来说,搭建一套hadoop零碎是必须的。但 配置该零碎是十分头疼的,很多人配置过程就放弃了。没有服务器供你应用这里介绍一种免配置的单机版hadoop装置应用办法,能够简略疾速的跑一跑hadoop例子辅助学习、开发和测试。 要求笔记本上装了Linux虚拟机,虚拟机上装了docker。 装置应用docker下载sequenceiq/hadoop-docker:2.7.0镜像并运行。 [root@bogon ~]# docker pull sequenceiq/hadoop-docker:2.7.0 2.7.0: Pulling from sequenceiq/hadoop-docker860d0823bcab: Pulling fs layer e592c61b2522: Pulling fs layer下载胜利输入 Digest: sha256:a40761746eca036fee6aafdf9fdbd6878ac3dd9a7cd83c0f3f5d8a0e6350c76aStatus: Downloaded newer image for sequenceiq/hadoop-docker:2.7.0启动[root@bogon ~]# docker run -it sequenceiq/hadoop-docker:2.7.0 /etc/bootstrap.sh -bash --privileged=trueStarting sshd: [ OK ]Starting namenodes on [b7a42f79339c]b7a42f79339c: starting namenode, logging to /usr/local/hadoop/logs/hadoop-root-namenode-b7a42f79339c.outlocalhost: starting datanode, logging to /usr/local/hadoop/logs/hadoop-root-datanode-b7a42f79339c.outStarting secondary namenodes [0.0.0.0]0.0.0.0: starting secondarynamenode, logging to /usr/local/hadoop/logs/hadoop-root-secondarynamenode-b7a42f79339c.outstarting yarn daemonsstarting resourcemanager, logging to /usr/local/hadoop/logs/yarn--resourcemanager-b7a42f79339c.outlocalhost: starting nodemanager, logging to /usr/local/hadoop/logs/yarn-root-nodemanager-b7a42f79339c.out启动胜利后命令行shell会主动进入Hadoop的容器环境,不须要执行docker exec。在容器环境进入/usr/local/hadoop/sbin,执行./start-all.sh和./mr-jobhistory-daemon.sh start historyserver,如下 ...

October 29, 2020 · 4 min · jiezi

关于hadoop:Hadoop框架DataNode工作机制详解

本文源码:GitHub·点这里 || GitEE·点这里 一、工作机制1、根底形容 DataNode上数据块以文件模式存储在磁盘上,包含两个文件,一个是数据自身,一个是数据块元数据包含长度、校验、工夫戳; DataNode启动后向NameNode服务注册,并周期性的向NameNode上报所有的数据块元数据信息; DataNode与NameNode之间存在心跳机制,每3秒一次,返回后果带有NameNode给该DataNode的执行命令,例如数据复制删除等,如果超过10分钟没有收到DataNode的心跳,则认为该节点不可用。 2、自定义时长通过hdfs-site.xml配置文件,批改超时时长和心跳,其中中的heartbeat.recheck.interval的单位为毫秒,dfs.heartbeat.interval的单位为秒。 <property> <name>dfs.namenode.heartbeat.recheck-interval</name> <value>600000</value></property><property> <name>dfs.heartbeat.interval</name> <value>6</value></property>3、新节点上线以后机器的节点为hop01、hop02、hop03,在此基础上新增节点hop04。 根本步骤 基于以后一个服务节点克隆失去hop04环境; 批改Centos7相干根底配置,并删除data和log文件; 启动DataNode,即可关联到集群; 4、多目录配置该配置同步集群下服务,格式化启动hdfs及yarn,上传文件测试。 <property> <name>dfs.datanode.data.dir</name> <value>file:///${hadoop.tmp.dir}/dfs/data01,file:///${hadoop.tmp.dir}/dfs/data02</value></property>二、黑白名单配置1、白名单设置配置白名单,该配置散发到集群服务下; [root@hop01 hadoop]# pwd/opt/hadoop2.7/etc/hadoop[root@hop01 hadoop]# vim dfs.hostshop01hop02hop03配置hdfs-site.xml,该配置散发到集群服务下; <property> <name>dfs.hosts</name> <value>/opt/hadoop2.7/etc/hadoop/dfs.hosts</value></property>刷新NameNode [root@hop01 hadoop2.7]# hdfs dfsadmin -refreshNodes刷新ResourceManager [root@hop01 hadoop2.7]# yarn rmadmin -refreshNodes2、黑名单设置配置黑名单,该配置散发到集群服务下; [root@hop01 hadoop]# pwd/opt/hadoop2.7/etc/hadoop[root@hop01 hadoop]# vim dfs.hosts.excludehop04配置hdfs-site.xml,该配置散发到集群服务下; <property> <name>dfs.hosts.exclude</name> <value>/opt/hadoop2.7/etc/hadoop/dfs.hosts.exclude</value></property>刷新NameNode [root@hop01 hadoop2.7]# hdfs dfsadmin -refreshNodes刷新ResourceManager [root@hop01 hadoop2.7]# yarn rmadmin -refreshNodes三、文件存档1、根底形容HDFS存储的特点,适宜海量数据的大文件,如果每个文件都很小,会产生大量的元数据信息,占用过多的内存,并且在NaemNode和DataNode交互的时候变的迟缓。 HDFS能够对一些小的文件进行归档存储,这里能够了解为压缩存储,即缩小NameNode的耗费,也较少交互的累赘,同时还容许对归档的小文件拜访,进步整体的效率。 2、操作流程创立两个目录 # 寄存小文件[root@hop01 hadoop2.7]# hadoop fs -mkdir -p /hopdir/harinput# 寄存归档文件[root@hop01 hadoop2.7]# hadoop fs -mkdir -p /hopdir/haroutput上传测试文件 ...

October 20, 2020 · 1 min · jiezi

关于hadoop:hadoop基础整理

一、大数据概念次要解决海量数据的存储和数据分析计算的问题 8bite =1 Byte,1k=1024Byte, Bite Byte KB MB,GB,TB,PB,EB,ZB,YB,BB,NB,DB 大数据特点:Volume 大量 (局部企业数据量达EB) Velocity 高速(数据处理效率要高) Variety 多样。(结构化+非结构化) value 低价值密度 二、从hadoop框架探讨大数据生态Hadoophadoop的初衷是采纳大量的便宜机器,组成一个集群!实现大数据的存储和计算!1 hadoop 1.x和2.x区别1.x和2.x的区别是将资源调度和治理进行拆散!由对立的资源调度平台YARN进行大数据计算资源的调度!晋升了Hadoop的通用性!Hadoop搭建的集群中的计算资源,不仅能够运行Hadoop中的MR程序!也能够运行其余计算框架的程序! 在hadoop不久之后,因为MR的低效性,呈现了许多更为高效的计算框架!例如: Tez,Storm,Spark,Flink 实现大数据的计算①写程序,程序须要复合计算框架的要求! java---->main----->运行 MapReduce(编程模型)----->Map--Reducer②运行程序,申请计算资源(cpu+内存,磁盘IO,网络IO) java----->JVM------>OS----->申请计算资源 1.0: MapReduce(编程模型)---->JobTracker----->JVM----->申请计算资源 2.0: MapReduce(编程模型)---->jar------>运行时,将jar包中的工作,提交给YARN,和YARN进行通信 由YARN中的组件-----JVM------>申请计算资源2 hadoop的组件HDFS(框架):负责大数据的存储YARN(框架): 负责大数据的资源调度 MR(编程模型): 应用Hadoop制订的编程要求,编写程序,实现大数据的计算! 2.1 HDFS:负责大数据的存储Namenode(1个): 负责文件,名称等元数据(属性信息)的存储!文件名,大小,文件切分了多少块(block),创立和批改工夫等!职责:承受客户端的申请;承受DN的申请 ;向DN分配任务DataNode(N个) 负责文件中数据的存储!负责承受NM调配的工作;负责数据块(block)的治理(读,写)!可选过程:SecondaryNamenode(N个): 负责辅助NameNode工作!2.2 MapReduceMapReduce(编程标准): 程序中有Mapper(简略解决)和Reducer(合并) 遵循MapReduce的编程标准,编写的程序,打包后,称为一个Job(工作)! Job须要提交到YARN上,向YARN申请计算资源,运行Job中的Task(过程)! Job会先创立一个过程MRAppMaster(mapreduce 利用管理者),由MRAppMaster向YARN申请资源!MRAppMaster负责监控Job中各个Task运行状况,进行容错治理! 2.3 Yarn:负责集群中所有计算资源的治理和调度!ResourceManager(1个): 负责整个集群所有资源的治理! 负责承受客户端的提交Job的申请!负责向NM分配任务!负责承受NM上报的信息!NodeManager(N个): 负责单台计算机所有资源的治理! 负责和RM进行通信,上报本机中的可用资源!负责支付RM调配的工作!负责为Job中的每个Task调配计算资源!Container(容器): 对工作运行环境的形象 NodeManager为Job的某个Task调配了2个CPU和2G内存的计算资源!,防止被其余的task抢占资源!将计算资源,封装到一个Container中,在Container中的资源,会被临时隔离以后Task运行完结后,以后Container中的资源会被开释!容许其余task来应用ApplicationMaster :数据切分,为应用程序申请资源,并调配给外部工作,工作监控与容错三、Hadoop 的运行环境搭建1、重要目录(1)bin目录:寄存对Hadoop相干服务(HDFS,YARN)进行操作的脚本 (2)etc目录:Hadoop的配置文件目录,寄存Hadoop的配置文件 (3)lib目录:寄存Hadoop的本地库(对数据进行压缩解压缩性能) (4)sbin目录:寄存启动或进行Hadoop相干服务的脚本 (5)share目录:寄存Hadoop的依赖jar包、文档、和官网案例 2、配置文件(1)4个默认的配置文件: 地位: HADOOP_HOME/share/xxxx.jar/xxx-default.xml 文件名:core-default.xml: 设置hadoop最外围的参数! hdfs-default.xml 保留的是hdfs相干的参数! ...

October 18, 2020 · 2 min · jiezi

关于hadoop:Hadoop框架NameNode工作机制详解

本文源码:GitHub·点这里 || GitEE·点这里 一、存储机制1、根底形容NameNode运行时元数据须要寄存在内存中,同时在磁盘中备份元数据的fsImage,当元数据有更新或者增加元数据时,批改内存中的元数据会把操作记录追加到edits日志文件中,这里不包含查问操作。如果NameNode节点产生故障,能够通过FsImage和Edits的合并,从新把元数据加载到内存中,此时SecondaryNameNode专门用于fsImage和edits的合并。 2、工作流程 NameNode机制 NameNode格式化启动之后,首次会创立Fsimage和Edits文件;非首次启动间接加载FsImage镜像文件和Edits日志到内存中;客户端对元数据执行增删改操作会记录到Edits文件;而后申请的相干操作会批改内存中的元数据;SecondaryNameNode机制 询问NameNode是否须要CheckPoint,NameNode返回信息;如果须要SecondaryNameNode申请执行CheckPoint;NameNode切割现有日志文件,新记录滚动写入新Edits文件;滚动前的编辑日志和镜像文件拷贝到SecondaryNameNode;SecondaryNameNode加载Edits日志和FsImage镜像文件到内存合并;生成新的镜像文件fsimage.chkpoint后拷贝到NameNode;NameNode将fsimage.chkpoint重新命名成fsimage;3、CheckPoint设置通过批改hdfs-default.xml文件的相干配置,设置一些SecondaryNameNode的机制,例如每隔一小时执行一次。 <property> <name>dfs.namenode.checkpoint.period</name> <value>3600</value></property><property> <name>dfs.namenode.checkpoint.txns</name> <value>1000000</value><description>文件满1000000记录数</description></property><property> <name>dfs.namenode.checkpoint.check.period</name> <value>60</value><description> 1分钟查看一次文件记录数</description></property >二、文件信息1、FsImage文件NameNode内存中元数据序列化备份信息; 生成门路:基于NameNode节点 cd /opt/hadoop2.7/data/tmp/dfs/name/current/ 查看文件 # 根本语法hdfs oiv -p 转换文件类型 -i 镜像文件 -o 转换后文件输入门路基于语法格局,操作上图中的文件: # 转换文件hdfs oiv -p XML -i fsimage_0000000000000000019 -o /data/fsimage.xml# 查看cat /data/fsimage.xml这样就能够看到一些元数据的信息。 2、Edits文件寄存HDFS文件的所有增删改操作的门路,会记录在Edits文件中。 根本语法 hdfs oev -p 转换文件类型 -i 日志文件 -o 转换后文件输入门路查看文件 # 转换文件hdfs oev -p XML -i edits_0000000000000000020-0000000000000000020 -o /data/edits.xml# 查看cat /data/edits.xml三、故障复原1、拷贝SecondaryNameNode数据首先完结NameNode过程; 删除NameNode存储的数据; [root@hop01 /] rm -rf /opt/hadoop2.7/data/tmp/dfs/name/*拷贝SecondaryNameNode中数据到NameNode数据存储目录下; ...

October 12, 2020 · 1 min · jiezi

关于hadoop:Hadoop框架HDFS读写机制与API详解

本文源码:GitHub·点这里 || GitEE·点这里 一、读写机制1、数据写入 客户端拜访NameNode申请上传文件;NameNode查看指标文件和目录是否曾经存在;NameNode响应客户端是否能够上传;客户端申请NameNode文件块Block01上传服务地位;NameNode响应返回3个DataNode节点;客户端通过输出流建设DataNode01传输通道;DataNode01调用DataNode02,DataNode02调用DataNode03,通信管道建设实现;DataNode01、DataNode02、DataNode03逐级应答客户端。客户端向DataNode01上传第一个文件块Block;DataNode01接管后传给DataNode02,DataNode02传给DataNode03;Block01传输实现之后,客户端再次申请NameNode上传第二个文件块;2、数据读取 客户端通过向NameNode申请下载文件;NameNode查问获取文件元数据并返回;客户端通过元数据信息获取文件DataNode地址;就近准则抉择一台DataNode服务器,申请读取数据;DataNode传输数据返回给客户端;客户端以本地解决指标文件;二、根底API案例1、根底演示接口public interface HdfsFileService { // 创立文件夹 void mkdirs(String path) throws Exception ; // 文件判断 void isFile(String path) throws Exception ; // 批改文件名 void reName(String oldFile, String newFile) throws Exception ; // 文件详情 void fileDetail(String path) throws Exception ; // 文件上传 void copyFromLocalFile(String local, String path) throws Exception ; // 拷贝到本地:下载 void copyToLocalFile(String src, String dst) throws Exception ; // 删除文件夹 void delete(String path) throws Exception ; // IO流上传 void ioUpload(String path, String local) throws Exception ; // IO流下载 void ioDown(String path, String local) throws Exception ; // 分块下载 void blockDown(String path, String local1, String local2) throws Exception ;}2、命令API用法@Servicepublic class HdfsFileServiceImpl implements HdfsFileService { @Resource private HdfsConfig hdfsConfig ; @Override public void mkdirs(String path) throws Exception { // 1、获取文件系统 Configuration configuration = new Configuration(); FileSystem fileSystem = FileSystem.get(new URI(hdfsConfig.getNameNode()), configuration, "root"); // 2、创立目录 fileSystem.mkdirs(new Path(path)); // 3、敞开资源 fileSystem.close(); } @Override public void isFile(String path) throws Exception { // 1、获取文件系统 Configuration configuration = new Configuration(); FileSystem fileSystem = FileSystem.get(new URI(hdfsConfig.getNameNode()), configuration, "root"); // 2、判断文件和文件夹 FileStatus[] fileStatuses = fileSystem.listStatus(new Path(path)); for (FileStatus fileStatus : fileStatuses) { if (fileStatus.isFile()) { System.out.println("文件:"+fileStatus.getPath().getName()); }else { System.out.println("文件夹:"+fileStatus.getPath().getName()); } } // 3、敞开资源 fileSystem.close(); } @Override public void reName(String oldFile, String newFile) throws Exception { // 1、获取文件系统 Configuration configuration = new Configuration(); FileSystem fileSystem = FileSystem.get(new URI(hdfsConfig.getNameNode()), configuration, "root"); // 2、批改文件名 fileSystem.rename(new Path(oldFile), new Path(newFile)); // 3、敞开资源 fileSystem.close(); } @Override public void fileDetail(String path) throws Exception { // 1、获取文件系统 Configuration configuration = new Configuration(); FileSystem fileSystem = FileSystem.get(new URI(hdfsConfig.getNameNode()), configuration, "root"); // 2、读取文件详情 RemoteIterator<LocatedFileStatus> listFiles = fileSystem.listFiles(new Path(path), true); while(listFiles.hasNext()){ LocatedFileStatus status = listFiles.next(); System.out.println("文件名:"+status.getPath().getName()); System.out.println("文件长度:"+status.getLen()); System.out.println("文件权限:"+status.getPermission()); System.out.println("所属分组:"+status.getGroup()); // 存储块信息 BlockLocation[] blockLocations = status.getBlockLocations(); for (BlockLocation blockLocation : blockLocations) { // 块存储的主机节点 String[] hosts = blockLocation.getHosts(); for (String host : hosts) { System.out.print(host+";"); } } System.out.println("==============Next=============="); } // 3、敞开资源 fileSystem.close(); } @Override public void copyFromLocalFile(String local, String path) throws Exception { // 1、获取文件系统 Configuration configuration = new Configuration(); FileSystem fileSystem = FileSystem.get(new URI(hdfsConfig.getNameNode()), configuration, "root"); // 2、执行上传操作 fileSystem.copyFromLocalFile(new Path(local), new Path(path)); // 3、敞开资源 fileSystem.close(); } @Override public void copyToLocalFile(String src,String dst) throws Exception { // 1、获取文件系统 Configuration configuration = new Configuration(); FileSystem fileSystem = FileSystem.get(new URI(hdfsConfig.getNameNode()), configuration, "root"); // 2、执行下载操作 // src 服务器文件门路 ; dst 文件下载到的门路 fileSystem.copyToLocalFile(false, new Path(src), new Path(dst), true); // 3、敞开资源 fileSystem.close(); } @Override public void delete(String path) throws Exception { // 1、获取文件系统 Configuration configuration = new Configuration(); FileSystem fileSystem = FileSystem.get(new URI(hdfsConfig.getNameNode()), configuration, "root"); // 2、删除文件或目录 是否递归 fileSystem.delete(new Path(path), true); // 3、敞开资源 fileSystem.close(); } @Override public void ioUpload(String path, String local) throws Exception { // 1、获取文件系统 Configuration configuration = new Configuration(); FileSystem fileSystem = FileSystem.get(new URI(hdfsConfig.getNameNode()), configuration, "root"); // 2、输入输出流 FileInputStream fis = new FileInputStream(new File(local)); FSDataOutputStream fos = fileSystem.create(new Path(path)); // 3、流对拷 IOUtils.copyBytes(fis, fos, configuration); // 4、敞开资源 IOUtils.closeStream(fos); IOUtils.closeStream(fis); fileSystem.close(); } @Override public void ioDown(String path, String local) throws Exception { // 1、获取文件系统 Configuration configuration = new Configuration(); FileSystem fileSystem = FileSystem.get(new URI(hdfsConfig.getNameNode()), configuration, "root"); // 2、输入输出流 FSDataInputStream fis = fileSystem.open(new Path(path)); FileOutputStream fos = new FileOutputStream(new File(local)); // 3、流对拷 IOUtils.copyBytes(fis, fos, configuration); // 4、敞开资源 IOUtils.closeStream(fos); IOUtils.closeStream(fis); fileSystem.close(); } @Override public void blockDown(String path,String local1,String local2) throws Exception { readFileSeek01(path,local1); readFileSeek02(path,local2); } private void readFileSeek01(String path,String local) throws Exception { // 1、获取文件系统 Configuration configuration = new Configuration(); FileSystem fileSystem = FileSystem.get(new URI(hdfsConfig.getNameNode()), configuration, "root"); // 2、输入输出流 FSDataInputStream fis = fileSystem.open(new Path(path)); FileOutputStream fos = new FileOutputStream(new File(local)); // 3、局部拷贝 byte[] buf = new byte[1024]; for(int i =0 ; i < 1024 * 128; i++){ fis.read(buf); fos.write(buf); } // 4、敞开资源 IOUtils.closeStream(fos); IOUtils.closeStream(fis); fileSystem.close(); } private void readFileSeek02(String path,String local) throws Exception { // 1、获取文件系统 Configuration configuration = new Configuration(); FileSystem fileSystem = FileSystem.get(new URI(hdfsConfig.getNameNode()), configuration, "root"); // 2、输入输出流 FSDataInputStream fis = fileSystem.open(new Path(path)); // 定位输出数据地位 fis.seek(1024*1024*128); FileOutputStream fos = new FileOutputStream(new File(local)); // 3、流拷贝 IOUtils.copyBytes(fis, fos, configuration); // 4、敞开资源 IOUtils.closeStream(fos); IOUtils.closeStream(fis); fileSystem.close(); }}3、合并切割文件cat hadoop-2.7.2.zip.block1 hadoop-2.7.2.zip.block2 > hadoop.zip三、机架感知Hadoop2.7的文档阐明 ...

September 30, 2020 · 3 min · jiezi

关于hadoop:Hadoop框架集群模式下分布式环境搭建

本文源码:GitHub·点这里 || GitEE·点这里 一、根底环境配置1、三台服务筹备三台Centos7服务,根底环境从伪分布式环境克隆过去。 133 hop01,134 hop02,136 hop032、设置主机名## 设置名称hostnamectl set-hostname hop01## 重启reboot -f3、主机名通信vim /etc/hosts# 增加服务节点192.168.37.133 hop01192.168.37.134 hop02192.168.37.136 hop034、SSH免密登录配置三台服务SSH免密登录。 [root@hop01 ~]# ssh-keygen -t rsa...一路回车完结[root@hop01 ~]# cd .ssh...权限调配到指定集群服务[root@hop01 .ssh]# ssh-copy-id hop01[root@hop01 .ssh]# ssh-copy-id hop02[root@hop01 .ssh]# ssh-copy-id hop03...在hop01免密登录到hop02[root@hop01 ~]# ssh hop02这里针对hop01服务,在hop02和hop03服务都要执行该操作。 5、同步工夫ntp组件装置 # 装置yum install ntpdate ntp -y# 查看rpm -qa|grep ntp根底治理命令 # 查看状态service ntpd status# 启动service ntpd start# 开机启动chkconfig ntpd on批改工夫服务hop01 # 批改ntp配置vim /etc/ntp.conf# 增加内容restrict 192.168.0.0 mask 255.255.255.0 nomodify notrapserver 127.0.0.1fudge 127.0.0.1 stratum 10批改hop02hop03工夫机制,从hop01同步工夫,并登记网络获取工夫的机制。 ...

September 27, 2020 · 1 min · jiezi

关于hadoop:阿里云搭建Hadoop集群

1 前言在讲述Hadoop集群搭建之前,首先要理解Hadoop和集群两个名词,Hadoop是由Apache基金会开发的分布式系统基础架构,简略了解就是大数据技术利用的根底。集群能够了解为多台装有hadoop的服务器。搭建Hadoop集群的目标就是为了治理多台服务器,使多台服务器之间可能协调工作。本文抉择了3台阿里云服务器。从下图中能够对整个大数据架构有了大体的理解。 Hadoop次要有HDFS(分布式文件存储系统)、Yarn(集群资源管理与调度)和MapReduce(分布式计算框架)组成。Hadoop集群中分为主机(master)和从机(slave),本文配置一台阿里云服务器为主机和从机。其余两台为从机。HDFS(分布式文件存储系统)在主机上称为Namenode节点,在从机上称为Datanode节点。Namenode保护HDFS的文件系统树以及文件树中所有的文件和文件夹的元数据。能够了解为win零碎中文件夹属性中的那些信息,Datanode是存储和检索数据的中央。能够了解为win零碎中文件夹中理论数据。 Yarn(集群资源管理与调度)在主机上称为ResourceManager节点,在从机上称为NodeManager。ResourceManager是全局的资源管理器,负责整个零碎的资源管理和调配,NodeManager是节点上的资源和工作管理器。定时地向ResourceManager汇报本节点的资源应用状况。 MapReduce(分布式计算框架)顾名思义就是计算框架,有啥特点呢,就是分布式,能够把大型数据处理工作分解成很多单个简略的工作,而后再把各个处理结果合在一起。计算过程能够百度理解。 2 Hadoop集群搭建 2.1 服务器零碎设置网上教程多采纳虚拟机创立多个linux零碎来搭建Hadoop集群,我感觉虚拟机有弊病就采纳了阿里云服务器。阿里云服务器购买选配过程后续再介绍。 hosts文件批改hosts是一个没有扩展名的系统文件,其根本作用就是将一些罕用的网址域名与其对应的 IP 地址建设一个关联“ 数据库 ”。当用户在浏览器中输出一个须要登录的网址时,零碎会首先主动从hosts文件中寻找对应的 IP 地址,一旦找到,零碎就会立刻关上对应网页,如果没有找到,则零碎会将网址提交 DNS 域名解析服务器进行 IP 地址的解析。就如你拜访本地的时候,你输出127.0.0.1和localhost是统一的。hosts文件批改就是在增加三台服务器IP和域名的映射。 vi /etc/hosts增加一下映射 172.27.66.8 master172.27.66.10 slave1172.27.66.9 slave2后续拜访域名和拜访IP的成果是一样的。 依照IP地址批改三台服务器的主机名 hostnamectl set-hostname masterhostnamectl set-hostname slave1hostnamectl set-hostname slave2SSH免密登录SSH免密登录是为了各个服务器之间拜访不在须要明码。三台服务器别离执行一遍如下命令。执行完该命令会在root/.ssh下生成密钥。 ssh-keygen -t rsa#在slave1和slave2下别离把id_rsa.pub发送到主机上,并从新命令scp id_rsa.pub root@master:~/.ssh/id_rsa.pub.slave1scp id_rsa.pub root@master:~/.ssh/id_rsa.pub.slave2在主机root/.ssh下把id_rsa.pub、id_rsa.pub.slave1、id_rsa.pub.slave2追加到authorized_keys中。 cat id_rsa.pub >> authorized_keys cat id_rsa.pub.slave1 >> authorized_keys cat id_rsa.pub.slave2 >> authorized_keys而后把authorized_keys传回到slave1和slave2中 scp authorized_keys root@slave1:~/.ssh scp authorized_keys root@slave2:~/.ssh最初批改文件权限。 chmod 755 ~chmod 700 ~/.sshchmod 600 ~/.ssh/authorized_keys 2.2 Hadoop装置hadoop各组件软件下载地址: ...

September 21, 2020 · 2 min · jiezi

关于hadoop:Hadoop集群部署与启动Yarn模式要考虑Container内存资源分配

Hadoop集群的部署装置版本: hadoop-2.8.3.tar.gz mkdir /usr/local/hadooptar zxvf hadoop-2.8.3.tar.gz -C /usr/local/hadoop配置环境变量(hadoop2和hadoop3同样也须要批改hosts文件) vi /etc/profileexport FLINK_HOME=/usr/local/hadoop/hadoop-2.8.3export PATH=$FLINK_HOME/bin:$PATHsource /etc/profile先建好稍后须要用到的文件夹 mkdir /usr/local/hadoopmkdir /usr/local/hadoop/tmpmkdir /usr/local/hadoop/varmkdir /usr/local/hadoop/dfsmkdir /usr/local/hadoop/dfs/namemkdir /usr/local/hadoop/dfs/data批改core-site.xml文件 vi /usr/local/hadoop/hadoop-2.8.3/etc/hadoop/core-site.xml<configuration><property><name>hadoop.tmp.dir</name><value>/usr/local/hadoop/tmp</value><description>Abase for other temporary directories.</description></property><property><name>fs.defaultFS</name><value>hdfs://hadoop1:9000</value></property></configuration>批改mapred-site.xml文件 cp /usr/local/hadoop/hadoop-2.8.3/etc/hadoop/mapred-site.xml.template /usr/local/hadoop/hadoop-2.8.3/etc/hadoop/mapred-site.xml vi /usr/local/hadoop/hadoop-2.8.3/etc/hadoop/mapred-site.xml <name>mapreduce.framework.name</name><value>yarn</value></property><property><name>mapreduce.jobhistory.address</name><value>hadoop1:10020</value></property><property><name>mapreduce.jobhistory.webapp.address</name><value>hadoop1:19888</value></property>批改hdfs-site.xml文件 vi /usr/local/hadoop/hadoop-2.8.3/etc/hadoop/hdfs-site.xml<configuration><property><name>dfs.replication</name><value>1</value></property><property><name>dfs.namenode.name.dir</name><value>/usr/local/hadoop/dfs/name</value></property><property><name>dfs.datanode.data.dir</name><value>/usr/local/hadoop/dfs/data</value></property><property> <name>dfs.replication</name> <value>2</value> <description>HDFS 的数据块的正本存储个数, 默认是3</description> </property> <property> <name>dfs.permissions</name> <value>false</value> <description>need not permissions</description></property></configuration>批改hdfs-site.xml文件 vi /usr/local/hadoop/hadoop-2.8.3/etc/hadoop/yarn-site.xml<property><name>yarn.resourcemanager.hostname</name><value>hadoop1</value></property><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property><property><name>yarn.resourcemanager.address</name><value>hadoop1:8032</value></property><property><name>yarn.resourcemanager.scheduler.address</name><value>hadoop1:8030</value></property><property><name>yarn.resourcemanager.resource-tracker.address</name><value>hadoop1:8031</value></property><property><name>yarn.resourcemanager.admin.address</name><value>hadoop1:8033</value></property><property><name>yarn.resourcemanager.webapp.address</name><value>hadoop1:8088</value></property><property> <name>yarn.resourcemanager.am.max-attempts</name> <value>4</value> <description> The maximum number of application master execution attempts. </description></property>如果是以Flink on Yarn形式启动的,因为Hadoop Yarn是一个资源调度器,所以咱们应该思考好每个Conatiner被调配到的内存资源,所以须要在文件hdfs-site.xml中配置好 yarn.nodemanager.resource.memory-mb, yarn.scheduler.minimum-allocation-mb, yarn.scheduler.maximum-allocation-mb, yarn.app.mapreduce.am.resource.mb和yarn.app.mapreduce.am.command-opts,不然会产生内存不足,导致Application启动失败。 ...

September 21, 2020 · 1 min · jiezi

关于hadoop:Hadoop完全分布式集群搭建

集群布局HDFS: 1个NameNode + n个DataNode + 1个2NNYARN: 1个ResourceManager + n个NodeManagerhadoop1 hadoop2 hadoop3 DN DN DN NM NM NM NN RM 2NN 筹备工作筹备3台虚拟机,能够新建1台,而后克隆2台 1.批改主机名vi /etc/sysconfig/network,三台机器HOSTNAME别离改为hadoop1,hadoop2,hadoop3 2.设置动态ip在hadoop1机器上a.输出命令vi /etc/sysconfig/network-scripts/ifcfg-eth0批改BOOTPROTO=staticONBOOT=yes增加IPADDR=192.168.148.11 - - >这是你本人设置的IP地址,必须合乎规定GATEWAY=192.168.148.2 - - >这是网关地址NETMASK=255.255.255.0 - - >这是子网掩码DNS1=192.168.148.2 - - >写成网关地址b.重启虚拟机hadoop2,hadoop3反复以上操作,ip别离为IPADDR=192.168.148.12IPADDR=192.168.148.13 3.敞开防火墙三台机器上service iptables stopchkconfig iptables off 4.批改hosts映射三台机器上192.168.148.11 hadoop1192.168.148.12 hadoop2192.168.148.13 hadoop3 5.配置免密登录在hadoop1上ssh-keygen -t rsa,回车三下而后别离输出ssh-copy-id hadoop1ssh-copy-id hadoop2ssh-copy-id hadoop3 6.上传源码包并解压在hadoop1机器上mkdir /opt/softwaremkdir /opt/module上传jdk,hadoop的tar.gz到software,解压至moduletar -zxvf jdk-8u121-linux-x64.tar.gz -C /opt/module/tar -zxvf hadoop-2.7.2.tar.gz -c /opt/module/ 7.分布式集群配置文件在hadoop1机器上cd /opt/hadoop-2.7.2/cd /etc/hadoop/批改以下四个文件:a.vi core-site.xml ...

September 21, 2020 · 1 min · jiezi

关于hadoop:Hadoop框架单服务下伪分布式集群搭建

本文源码:GitHub·点这里 || GitEE·点这里 一、根底环境1、环境版本环境:centos7hadoop版本:2.7.2jdk版本:1.82、Hadoop目录构造bin目录:寄存对Hadoop的HDFS,YARN服务进行操作的脚本etc目录:Hadoop的相干配置文件目录lib目录:寄存Hadoop的本地库,提供数据压缩解压缩能力sbin目录:寄存启动或进行Hadoop相干服务的脚本share目录:寄存Hadoop的依赖jar包、文档、和相干案例3、配置加载vim /etc/profile# 增加环境export JAVA_HOME=/opt/jdk1.8export PATH=$PATH:$JAVA_HOME/binexport HADOOP_HOME=/opt/hadoop2.7export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin# 退出刷新配置source /etc/profile二、伪集群配置以下配置文件所在门路:/opt/hadoop2.7/etc/hadoop,这里是Linux环境,脚本配置sh格局。 1、配置hadoop-envroot# vim hadoop-env.sh# 批改前export JAVA_HOME=# 批改后export JAVA_HOME=/opt/jdk1.82、配置core-site文件构造概览 <?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href="configuration.xsl"?><configuration></configuration>NameNode的地址 <property> <name>fs.defaultFS</name> <value>hdfs://127.0.0.1:9000</value></property>数据寄存目录:Hadoop运行时产生文件的存储目录。 <property> <name>hadoop.tmp.dir</name> <value>/opt/hadoop2.7/data/tmp</value></property>3、配置hdfs-site文件构造和上述一样,配置hdfs正本个数,这里伪环境,配置1个即可。 <property> <name>dfs.replication</name> <value>1</value></property>4、配置yarn-envexport JAVA_HOME=/opt/jdk1.85、配置yarn-site指定YARN的ResourceManager的地址 <property> <name>yarn.resourcemanager.hostname</name> <value>192.168.72.132</value></property>指定map产生的两头后果传递给reduce采纳的机制是shuffle <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value></property>6、配置mapred-envexport JAVA_HOME=/opt/jdk1.87、配置mapred-site将mapred-site.xml.template重新命名为mapred-site.xml。 指定MapReduce程序资源调在度集群上运行。如果不指定为yarn,那么MapReduce程序就只会在本地运行而非在整个集群中运行。 <property> <name>mapreduce.framework.name</name> <value>yarn</value></property>三、环境启动测试1、测试文件系统Hdfs相干 格式化NameNode 第一次启动时执行该操作。 [hadoop2.7]# bin/hdfs namenode -format格式化NameNode,会产生新的clusterID,导致NameNode和DataNode的集群id不统一,集群找不到已往数据。所以,格局NameNode时,肯定要进行相干过程,删除data数据和log日志,而后再格式化NameNode。clusterID在如下目录中的VERSION文件里,可自行查看比照。 /opt/hadoop2.7/data/tmp/dfs/name/current/opt/hadoop2.7/data/tmp/dfs/data/current启动NameNode [hadoop2.7]# sbin/hadoop-daemon.sh start namenode启动DataNode [hadoop2.7]# sbin/hadoop-daemon.sh start datanodejps查看状态 [root@localhost hadoop2.7]# jps2450 Jps2276 NameNode2379 DataNodeWeb界面查看 须要Linux敞开防火墙和相干平安加强管制(这里很重要)。 IP地址:50070 Yarn相干 启动ResourceManager ...

September 16, 2020 · 1 min · jiezi

关于hadoop:报错hadoop的NameNode无法启动

起因是: 每次开机都须要再次格式化NameNode 执行语句hadoop namenode -format 再从新start-all.sh就能够了

September 13, 2020 · 1 min · jiezi

关于hadoop:idea远程连接hadoopmacOS

windows零碎可间接参考 因为mac零碎的idea中图标地位不太一样, hadoop装置地位也不一样, 所以这里补充我在mac上的配置形式. 前提是电脑中曾经装置有hadoop 首先下载安装jdk8官网下载JDK8我的电脑上本来有JDK11, 然而hadoop对于JDK9以上的配置对于我这个老手太不敌对了, 加上近程虚拟机装置的是hadoop2.7,所以这里就抉择十分保险的JDK8. 装置好后进入idea, 创立新maven工程 接下来关上Finder, 找到刚刚创立的工程目录如果没有lib文件夹, 就手动创立一个 而后进入hadoop的装置门路, 将复制到刚刚创立的lib文件夹中因为我是应用homebrew装置,所以门路默认是暗藏的关上Finder后按下Shift+Command+G, 输出/usr/local我的hadoop门路是 /usr/local/Cellar/hadoop/3.2.1而后持续找上来

September 13, 2020 · 1 min · jiezi

关于hadoop:mac搭建hadoop321伪分布环境

参考: mac搭建hadoop3.1.1伪散布环境(CSDN)大体的搭建过程能够参考下面的文章,写得很全面.然而有一些配置细节和我这边的不太一样, 我就补充我的一些配置 hadoop-env.sh配置export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_261.jdk/Contents/Home我替换了电脑里本来有的jdk11, 改用jdk8并且在这里指定jdk版本 (起因: jdk起因导致无奈启动ResourceManager) core-site.sh配置configuration><property><name>fs.defaultFS</name><value>hdfs://localhost:8020</value></property> <!--用来指定hadoop运行时产生文件的寄存目录 本人创立--><property><name>hadoop.tmp.dir</name><value>file:/usr/local/Cellar/hadoop/tmp</value></property></configuration>yarn-site.xml配置<configuration><!-- Site specific YARN configuration properties --><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property> <property><name>yarn.resourcemanager.address</name><value>localhost:9000</value></property></configuration>另外, 运行.sh文件, 我是间接进入文件夹双击运行的.

September 9, 2020 · 1 min · jiezi

关于hadoop:hadoop配置配置伪分布无法启动ResourceManager

通过jps查看没有启动ResourceManager, 依照上面的门路查看日志 usr/local/Cellar/hadoop/3.2.1/libexec/logs/xxxresourcemanagerxxx.log 通过vscode关上 FATAL org.apache.hadoop.yarn.server.resourcemanager.ResourceManager: Error starting ResourceManagerorg.apache.hadoop.yarn.webapp.WebAppException: Error starting http serverat org.apache.hadoop.yarn.webapp.WebApps$Builder.start(WebApps.java:443)at org.apache.hadoop.yarn.server.resourcemanager.ResourceManager.startWepApp(ResourceManager.java:1231)at org.apache.hadoop.yarn.server.resourcemanager.ResourceManager.serviceStart(ResourceManager.java:1340)at org.apache.hadoop.service.AbstractService.start(AbstractService.java:194)at org.apache.hadoop.yarn.server.resourcemanager.ResourceManager.main(ResourceManager.java:1535)Caused by: java.io.IOException: Unable to initialize WebAppContextat org.apache.hadoop.http.HttpServer2.start(HttpServer2.java:1177)at org.apache.hadoop.yarn.webapp.WebApps$Builder.start(WebApps.java:439)... 4 moreCaused by: com.google.inject.ProvisionException: Unable to provision, see the following errors:1) Error injecting constructor, java.lang.NoClassDefFoundError: javax/activation/DataSourceat org.apache.hadoop.yarn.server.resourcemanager.webapp.JAXBContextResolver.<init>(JAXBContextResolver.java:41)at org.apache.hadoop.yarn.server.resourcemanager.webapp.RMWebApp.setup(RMWebApp.java:54)while locating org.apache.hadoop.yarn.server.resourcemanager.webapp.JAXBContextResolver1 error网上查一下, 是jdk版本导致, 我是用的jdk11, 说是jdk9之后就要怎么怎么解决. 网上给的通过批改hadoop-env.sh的形式,写--allxxx这种形式我试了也不胜利,所以间接还是装置jdk8就好了. (装置参考:mac实现不同版本jdk切换) 因为下面形式能够实现不同jdk切换, 然而还是会主动跳转到jdk11, 所以还是要批改hadoop-env.sh, 应用指定版本的jdkexport JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_261.jdk/Contents/Home 配置文件的地位如下

September 9, 2020 · 1 min · jiezi

关于hadoop:hadoop配置配置伪分布无法启动datanode

在部署hadoop伪散布时,运行start-all.sh后,终端输出jps,发现datanode没有启动 依照hadoop-3.2.1-libexec-logs-xxxdatanodexx.log这个门路找到日志文件, 应用vscode(或其它文本编辑器)关上. 找到java.io.IOException: Incompatible clusterIDs in /usr/local/Cellar/hadoop/tmp/dfs/data: namenode clusterID = CID-fc509379-ff86-4058-8e4c-6c31a21065d0; datanode clusterID = CID-688bc71e-fba6-4e80-ac1e-b38a24956a87. 这里能够看到namenode 与 datanode 二者的clusterID不统一, 所以改成统一的就好. 批改形式如下: 进入到下面报错中提到的门路tmp/dfs/data/current/VERSION 应用文本编辑器关上,将clusterID批改成与namenode的统一就好了. 下面报错信息有给出namenode的clusterID, 也能够通过门路查看(tmp/dfs/name/current/VERSION) 下面的门路tmp/是在配置core-site.xml时自定义的,能够创立也能够不创立

September 9, 2020 · 1 min · jiezi

关于hadoop:macbook搭建hadoop伪分布记录

VMware Fusion 下载 这里mac和windows不太一样, 理解到windows装置虚拟机应用的是vmware workstation, 然而mac应用的是vmware fusion

September 8, 2020 · 1 min · jiezi

关于hadoop:阿里云体验实验室-教你搭建Hadoop环境

体验平台简介面向开发者和中小企业打造的一站式、全云端的开发平台,关上浏览器就能够开发、调试、上线,所测即所得,并联合无服务器的模式,从新定义云原生时代的研发工作方法论。旨在升高开发者上手老本和中小企业的启动老本、经营老本、以及突发流量带来的运维危险。 教程介绍本教程介绍如何在Linux实例上疾速搭建一个Hadoop伪分布式环境。 场景体验场景内容选自 阿里云体验实验室 阿里云体验实验室 提供一台配置了CentOS 7.7的ECS实例(云服务器)。通过本教程的操作,您能够基于ECS实例搭建Hadoop伪分布式环境。 阿里云场景免费资源:https://developer.aliyun.com/adc/scenario/cf48abdfe41e4187be079722b9dc15b6 背景常识Apache Hadoop Apache Hadoop软件库是一个框架,该框架容许应用简略的编程模型跨计算机集群对大型数据集进行分布式解决。它旨在从单个服务器扩大到数千台机器,每台机器都提供本地计算和存储。库自身不是设计用来依附硬件来提供高可用性,而是旨在检测和解决应用程序层的故障,因而能够在计算机集群的顶部提供高可用性的服务,而每台计算机都容易呈现故障。 步骤一:装置JDK1.执行以下命令,下载JDK1.8安装包。 wget https://download.java.net/openjdk/jdk8u41/ri/openjdk-8u41-b04-linux-x64-14_jan_2020.tar.gz2.执行以下命令,解压下载的JDK1.8安装包。 tar -zxvf openjdk-8u41-b04-linux-x64-14_jan_2020.tar.gz3.执行以下命令,挪动并重命名JDK包。 mv java-se-8u41-ri/ /usr/java84.执行以下命令,配置Java环境变量。 echo 'export JAVA_HOME=/usr/java8' >> /etc/profileecho 'export PATH=$PATH:$JAVA_HOME/bin' >> /etc/profilesource /etc/profile5.执行以下命令,查看Java是否胜利装置。 java -version如果返回以下信息,则示意装置胜利。 步骤二:装置Hadoop1.执行以下命令,下载Hadoop安装包。 wget https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-2.9.2/hadoop-2.9.2.tar.gz2.执行以下命令,解压Hadoop安装包至/opt/hadoop。 tar -zxvf hadoop-2.9.2.tar.gz -C /opt/mv /opt/hadoop-2.9.2 /opt/hadoop3.执行以下命令,配置Hadoop环境变量。 echo 'export HADOOP_HOME=/opt/hadoop/' >> /etc/profileecho 'export PATH=$PATH:$HADOOP_HOME/bin' >> /etc/profileecho 'export PATH=$PATH:$HADOOP_HOME/sbin' >> /etc/profilesource /etc/profile 4.执行以下命令,批改配置文件yarn-env.sh和hadoop-env.sh。 echo "export JAVA_HOME=/usr/java8" >> /opt/hadoop/etc/hadoop/yarn-env.shecho "export JAVA_HOME=/usr/java8" >> /opt/hadoop/etc/hadoop/hadoop-env.sh5.执行以下命令,测试Hadoop是否装置胜利。 ...

August 27, 2020 · 1 min · jiezi

关于hadoop:本地分布式Hadoop完整搭建过程

1 概述Hadoop在大数据技术体系中极为重要,被誉为是扭转世界的7个Java我的项目之一(剩下6个是Junit、Eclipse、Spring、Solr、HudsonAndJenkins、Android),本篇文章以Hadoop 3.3.0官网文档为根底,首先会介绍Hadoop相干术语,包含HDFS,MapReduce等,接着会残缺形容Hadoop的搭建过程,包含本地以及分布式集群的搭建。 2 术语介绍Hadoop:Hadoop是Apache开发的分布式系统基础架构,用户能够在不理解分布式底层细节的状况下,开发分布式程序,充分利用集群的威力进行高速运算和存储HDFS:全称Hadoop Distributed File System,Hadoop分布式文件系统,被设计成适宜运行在通用硬件上的分布式文件系统,具备高度容错性的特点,能提供高吞吐量的数据拜访MapReduce:一个编程模型,用于大规模数据集的并行运算,是面向大数据并行处理的计算模型、架构以及平台。平台指的是容许应用一般商用服务器形成一个蕴含数十甚至数千个节点的散布和并行计算集群。架构指的是MapReduce提供了一个宏大但设计精良的并行计算软件框架,能主动实现计算工作的并行化解决,主动划分计算数据和计算工作。模型指的是借助于函数式编程语言的设计思维,提供了一种简便的并行程序设计办法YARN:YARN是Hadoop的一种资源管理器,一个通用的资源管理零碎,能够为下层利用提供对立的资源管理以及调度,根本思维是将JobTracker的两个次要性能(资源管理和作业调度/监控)拆散3 环境操作环境:Manjaro 20.0.3虚拟机环境:VirtualBox 6.1.10+CentOS-8.2.2004-x86_64-minimal × 3Hadoop 3.3.0(aarch64+x86_64)OpenJDK 11(aarch64+x86_64)服务器:CentOS 8 × 3(aarch64 × 1 + x86_64 × 2)4 Hadoop部署模式首先来看一下Hadoop反对的部署模式,Hadoop集群搭建反对以下三种模式: 本地模式:默认模式,运行在繁多Java过程中伪分布模式:运行在一个节点中然而在不同的Java过程中齐全分布模式:运行在不同机器上的规范集群模式,利用多台主机部署Hadoop5 装置前筹备5.1 Hadoop官网下载戳这里,本文采纳目前最新的3.3.0版本,留神如果服务器的架构为aarch64须要下载对应版本。 5.2 JDK对于JDK的抉择,参考文末的链接: 3.3版本在运行时反对Java11,3.2(包含3.2)以下只反对Java8,另外也提到了当初Hadoop应用OpenJDK作为构建/测试以及公布的JDK,因而这里应用OpenJDK11,戳这里下载,如果服务器架构为aarch64能够应用yum install装置。 5.3 虚拟机虚拟机用的是Virtual Box,6.1.10版本。 应用虚拟机是为了模仿搭建集群,就算有实在服务器也倡议先在虚拟机上跑一遍大略流程。 5.4 服务器部署Hadoop的实在服务器,这里应用了三台服务器进行搭建集群。 6 入手吧!筹备工作做好后就开始入手吧! 因为篇幅略长所以分成了四篇文章不便查看: (一)本地模式(二)伪分布模式(三)齐全分布模式(虚拟机)(四)齐全分布模式(服务器)7 结语本文讲述了搭建Hadoop集群的三种形式,如无意外就能够搭建一个根本的Hadoop集群了。 然而,一般来说,并不能间接投入生产环境中应用,因为须要配合ZooKeeper搭建HA(高可用)集群,本文限于篇幅就不再叙述了。本文的初衷是教会读者如何搭建,至于ZooKeeper,网上有不少文章能够参考。最初心愿读者看完之后可能对Hadoop有一个大略的意识,理解Hadoop的组成部分以及根本工作原理。 8 参考Hadoop3.3.0官网文档Hadoop-Java版本如果感觉文章难看,欢送点赞。 同时欢送关注微信公众号:氷泠之路。

August 22, 2020 · 1 min · jiezi

关于hadoop:Hadoop完整搭建过程四完全分布模式服务器

1 概述上一篇文章介绍了如何应用虚拟机搭建集群,到了这篇文章就是实战了,应用实在的三台不同服务器进行Hadoop集群的搭建。具体步骤其实与虚拟机的差不多,然而因为平安组以及端口等等一些列的问题,会与虚拟机有所不同,废话不多说,上面正式开始。 2 约定Master节点的ip用MasterIP示意,主机名用master示意两个Worker节点的ip用Worker1IP/Worker2IP示意,主机名用worker1/worker2示意这里为了演示不便对立应用root用户登录,当然生产环境不会这样3 (可选)本地Host批改本地Host,方便使用主机名来进行操作: sudo vim /etc/hosts# 增加MaterIP masterWorker1IP worker1Worker2IP worker24 ssh本机生成密钥对后复制公钥到三台服务器上: ssh-keygen -t ed25519 -a 100 # 应用更快更平安的ed25519算法而不是传统的RSA-3072/4096ssh-copy-id root@masterssh-copy-id root@worker1ssh-copy-id root@worker2这时能够间接应用root@host进行连贯了: ssh root@masterssh root@worker1ssh root@worker2不须要输出明码,如果不能连贯或者须要输出明码请查看/etc/ssh/sshd_config或系统日志。 5 主机名批改Master节点的主机名为master,两个Worker节点的主机名为worker1、worker2: # Master节点vim /etc/hostnamemaster# Worker1节点# worker1# Worker2节点# worker2同时批改Host: # Master节点vim /etc/hostsWorker1IP worker1Worker2IP worker2# Worker1节点vim /etc/hostsMasterIP masterWorker2IP worker2# Worker1节点vim /etc/hostsMasterIP masterWorker1IP worker1批改实现之后须要互ping测试: ping masterping worker1ping worker2ping不通的话应该是平安组的问题,凋谢ICMP协定即可: 6 配置根本环境6.1 JDKscp上传OpenJDK 11,解压并搁置于/usr/local/java下,同时批改PATH: export PATH=$PATH:/usr/local/java/bin如果原来的服务器装有了其余版本的JDK能够先卸载: yum remove java留神设置环境变量后须要测试以下java,因为不同服务器的架构可能不一样: 比方笔者的Master节点为aarch64架构,而两个Worker都是x86_64架构,因而Master节点执行java时报错如下: ...

August 22, 2020 · 1 min · jiezi

关于hadoop:Hadoop完整搭建过程三完全分布模式虚拟机

1 齐全分布模式齐全分布模式是比本地模式与伪分布模式更加简单的模式,真正利用多台Linux主机来进行部署Hadoop,对集群进行布局,使得Hadoop各个模块别离部署在不同的多台机器上,这篇文章介绍的是通过三台虚拟机进行集群配置的形式,次要步骤为: 筹备虚拟机:筹备虚拟机根本环境ip+Host配置:手动设置虚拟机ip以及主机名,须要确保三台虚拟机能相互ping通ssh配置:生成密钥对后复制公钥到三台虚拟机中,使其可能实现无明码相互连接Hadoop配置:core-site.xml+hdfs-site.xml+workersYARN配置:yarn-site.xml2 虚拟机装置须要应用到三台虚拟机,其中一台为Master节点,两台Worker节点,首先装置虚拟机并配置环境,最初进行测试。 2.1 镜像下载应用VirtualBox进行虚拟机的装置,先去CentOS官网下载最新版本的镜像: 这里有三种不同的镜像: boot:网络安装版dvd1:完整版minimal:最小化安装版这里为了不便抉择最小化安装版的,也就是不带GUI的。 2.2 装置下载后,关上Virtual Box并点击New,抉择专家模式: 命名为CentOSMaster,作为Master节点,并且分配内存,这里是1G,如果感觉本人内存大的能够2G: 磁盘30G足够,其余能够放弃默认: 创立好后从设置中的存储中,抉择下载的镜像: 启动后会提醒抉择启动盘,确定即可: 好了之后会呈现如下提醒画面,抉择第一个装置: 期待一会后进入装置界面: 接下来对装置地位以及时区进行配置,首先抉择装置地位: 因为是虚构的单个空磁盘,抉择主动分区即可: 时区这里能够抉择中国的上海: 接着选择网络,首先批改主机名为master: 接着点击Configure: 增加ip地址以及DNS服务器,ip地址能够参考本机,比方笔者的机器本地ip为192.168.1.7,则: 虚拟机的ip能够填192.168.1.8子网掩码个别为255.255.255.0默认网关为192.168.1.1DNS服务器为114.114.114.114(当然也能够换其余的公共DNS比方阿里的223.5.5.5、百度的180.76.76.76等) 点击Save后利用主机名并开启: 没问题的话就能够装置了: 装置的时候设置root用户的明码以及创立用户: 用户这里采纳一个叫hadoopuser的用户,前面的操作都间接基于该用户: 期待一段时间后装置实现重启即可。 2.3 启动在启动之前首先把原来的镜像去掉: 启动后是黑框界面: 登录方才创立的hadoopuser用户即可。 3 ssh连贯虚拟机默认的话是不能连贯外网的,须要在菜单栏中的Devices中抉择Network,设置为Bridged Adapter(桥接模式): 应用ping测试: 接着能够测试是否ping通本地机器: 通了之后能够通过ssh连贯虚拟机,像平时操作服务器一样,在本地终端中连贯虚拟机,首先增加指纹: 接着输出明码连贯即可: 如果想偷懒能够应用密钥连贯的形式,在本地机器中: ssh-keygen -t ed25519 -a 100ssh-copy-id -i ~/.ssh/id_ed25519.pub hadoopuser@192.168.1.84 根本环境搭建根本环境搭建就是装置JDK以及Hadoop,应用scp上传OpenJDK以及Hadoop。 ...

August 22, 2020 · 2 min · jiezi

关于hadoop:Hadoop完整搭建过程二伪分布模式

1 伪分布模式伪分布模式是运行在单个节点以及多个Java过程上的模式。相比起本地模式,须要进行更多配置文件的设置以及ssh、YARN相干设置。 2 Hadoop配置文件批改Hadoop装置目录下的三个配置文件: etc/hadoop/core-site.xmletc/hadoop/hdfs-site.xmletc/hadoop/hadoop-env.sh2.1 core-site.xml首先批改core-site.xml: <configuration> <property> <name>fs.defaultFS</name> <value>hdfs://localhost:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/usr/local/hadoop/tmp</value> </property></configuration>fs.defaultFS设置的是HDFS的地址,设置运行在本地的9000端口上hadoop.tmp.dir设置的是长期目录,如果没有设置的话默认在/tmp/hadoop-${user.name}中,零碎重启后会导致数据失落,因而批改这个长期目录的门路接着创立该长期目录: mkdir -p /usr/local/hadoop/tmp2.2 hdfs-site.xml接着批改hdfs-site.xml: <configuration> <property> <name>dfs.replication</name> <value>1</value> </property></configuration>dfs.replication设置的是HDFS存储的长期备份数量,因为伪分布模式中只有一个节点,所以设置为1。 2.3 hadoop-env.sh批改该文件增加JAVA_HOME环境变量,就算JAVA_HOME在 ~/.bashrc~/.bash_profile/etc/profile等中设置了,运行时也是会提醒找不到JAVA_HOME,因而须要手动在hadoop-env.sh中设置JAVA_HOME: 3 本地无明码ssh连贯下一步须要设置本地无明码ssh连贯,首先先查看确保开启sshd服务: systemctl status sshd开启后能够间接localhost连贯: ssh localhost输出本人的用户明码后就能够拜访了,然而这里须要的是无明码连贯,因而配置密钥认证连贯的形式: ssh-keygen -t ed25519 -a 100 cat ~/.ssh/id_25519.pub >> ~/.ssh/authorized_keyschmod 0600 ~/.ssh/authorized_keys这里生成公私钥后把公钥增加到authorized_keys中,并且批改权限,须要留神600权限,只能本用户有写权限。 而后间接ssh localhost就能够连贯本地主机了。 4 运行4.1 格式化HDFS这里以繁多节点的模式运行,首先格式化HDFS: # HADOOP为Hadoop装置目录HADOOP/bin/hdfs namenode -format格式化是对HDFS中的DataNode进行分块,统计所有分块后的初始元数据,存储在NameNode中。 格式化胜利后会在下面配置文件中设置的长期目录中生成dfs目录,如下所示: 外面只有一个目录:dfs/name/current,其中tmp/dfs/name/current的文件如下: 文件阐明如下: fsimage:NameNode元数据在内存满后,长久化保留到的文件fsimage*.md5:校验文件,用于校验fsimage的完整性seen_txid:寄存transactionID文件,format之后为0,示意NameNode外面的edits_*文件的尾数VERSION:保留创立工夫,namespaceID、blockpoolID、storageType、cTime、clusterID、layoutVersion对于VERSION的阐明: namespaceID:HDFS惟一标识符,在HDFS首次格式化后生成blockpoolID:标识一个block pool,跨集群全局惟一storageType:存储什么过程的数据结构信息cTime:创立工夫clusterID:系统生成或指定的集群ID,能够应用-clusterid指定layoutVersion:示意HDFS永久性数据结构版本的信息4.2 启动NameNodeHADOOP/sbin/start-dfs.sh而后能够通过 localhost:9870拜访NameNode: ...

August 22, 2020 · 1 min · jiezi

关于hadoop:Hadoop完整搭建过程一本地模式

1 本地模式本地模式是最简略的模式,所有模块都运行在一个JVM过程中,应用本地文件系统而不是HDFS。 本地模式次要是用于本地开发过程中的运行调试用,下载后的Hadoop不须要设置默认就是本地模式。 2 筹备工作笔者喜爱把JDK放在/usr/local下,运行前请确保设置了JAVA_HOME,留神是在etc/hadoop/hadoop-env.sh中设置: tar -zxvf openjdk-11+28_linux-x64_bin.tar.gzsudo mv openjdk-11+28_linux-x64_bin /usr/local/javasudo vim HADOOP/etc/hadoop/hadoop-env.sh # HADOOP为Hadoop装置目录# 输出export JAVA_HOME=/usr/local/java3 应用官网对于该模式没有太多的形容,只有一个应用默认配置文件作为输出,而后匹配正则表达式作为输入的简略例子: # HADOOP示意Hadoop装置目录mkdir inputcp HADOOP/etc/hadoop/*.xml inputHADOOP/bin/hadoop jar HADOOP/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.0.jar grep input output 'dfs[a-z.]+'cat output/*从下图的id能够看出是以本地模式工作的: 4 输入输入文件夹output有两个文件: _SUCCESS:是个空文件,示意运行胜利part-r-00000:输入后果文件,词数统计part-r-00000后果如上图所示。 实际上本地模式不须要特地的解决,因为默认就是本地模式。 5 参考Hadoop3.3.0官网文档

August 22, 2020 · 1 min · jiezi

关于hadoop:配置-Hue-访问-AWS-S3-中国区qbit

Hue: Hadoop User Experience环境AWS emr-5.30.1Hue 4.6.0qbit 参照这两篇 Hue文档搞了很久都没配好:文档一,文档二文档编写者预计没思考到独立经营的 AWS 中国区用户的痛搞明确了也简略,就是在官网文档的根底上还得配置 host 参数摘录配置如下[aws] [[aws_accounts]] # Default AWS account [[[default]]]# AWS credentialsaccess_key_id=XXXsecret_access_key=YYYallow_environment_credentials=falseregion=cn-northwest-1# Hue 官网文档没讲到的就是这个 host 参数# qbit 用的是中国宁夏区host=s3.cn-northwest-1.amazonaws.com.cn最初放张图吧 本文出自 qbit snap

July 18, 2020 · 1 min · jiezi

Hadoop篇08Hadoop数据压缩

简洁而不简单Hadoop数据压缩数据压缩优点和缺点 压缩技术能够有效减少底层存储系统(HDFS)读写字节数。压缩提高了网络带宽和磁盘空间的效率。在 Hadoop下,尤其是数据规模很大和工作负载密集的情况下,使用数据压缩显得非常重要。在这种情况下,IO操作和网络数据传输要花大量的时间。还有, Shuffle与 Merge过程同样也面临着巨大的IO压力鳘于磁盘IO和网络带宽是 Hadoop的宝贵资源,数据压缩对于节省资源、最小化磁盘IO和网络传输非常有帮助。 不过,尽管压缩与解压操作的CPU开销不髙,其性能的提升和资源的节省并非没有代价。如果磁盘IO和网络带宽影响了 MapReduce作业性能,在任意 MapReduce阶段启用压缩都可以改善端到端处理时间并減少IO和网络流量。 压缩策略和原则 压缩是提高 Hadoop运行效率的一种优化策略通过对 Mapper、 Reducer运行过程的数据进行压缩,以减少磁盘IO,提高MR程序运行速度。 注意:釆用压缩技术减少了磁盘IO,但同时增加了CPU运算负担。所以,压缩特性运用得当能提高性能,但运用不当也可能降低性能压缩基本原则: (1)运算密集型的job,少用压缩(2)IO密集型的job,多用压缩!! MR支持的压缩编码压缩格式hadoop自带?算法文件扩展名是否可切分换成压缩格式后,原来的程序是否需要修改DEFLATE是,直接使用DEFLATE.deflate否和文本处理一样,不需要修改Gzip是,直接使用DEFLATE.gz否和文本处理一样,不需要修改bzip2是,直接使用bzip2.bz2是和文本处理一样,不需要修改LZO否,需要安装LZO.lzo是需要建索引,还需要指定输入格式Snappy否,需要安装Snappy.snappy否和文本处理一样,不需要修改为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器,如下表所示。 压缩格式对应的编码/解码器DEFLATEorg.apache.hadoop.io.compress.DefaultCodecgziporg.apache.hadoop.io.compress.GzipCodecbzip2org.apache.hadoop.io.compress.BZip2CodecLZOcom.hadoop.compression.lzo.LzopCodecSnappyorg.apache.hadoop.io.compress.SnappyCodec压缩性能的比较压缩算法原始文件大小压缩文件大小压缩速度解压速度gzip8.3GB1.8GB17.5MB/s58MB/sbzip28.3GB1.1GB2.4MB/s9.5MB/sLZO8.3GB2.9GB49.3MB/s74.6MB/s压缩方式选择Gzip压缩 Bzip2压缩 Lzo压缩 Snappy压缩 压缩位置选择 压缩参数配置参数默认值阶段建议io.compression.codecs (在core-site.xml中配置)org.apache.hadoop.io.compress.DefaultCodec, org.apache.hadoop.io.compress.GzipCodec, org.apache.hadoop.io.compress.BZip2Codec输入压缩Hadoop使用文件扩展名判断是否支持某种编解码器mapreduce.map.output.compress(在mapred-site.xml中配置)falsemapper输出这个参数设为true启用压缩mapreduce.map.output.compress.codec(在mapred-site.xml中配置)org.apache.hadoop.io.compress.DefaultCodecmapper输出使用LZO或Snappy编解码器在此阶段压缩数据mapreduce.output.fileoutputformat.compress(在mapred-site.xml中配置)falsereducer输出这个参数设为true启用压缩mapreduce.output.fileoutputformat.compress.codec(在mapred-site.xml中配置)org.apache.hadoop.io.compress. DefaultCodecreducer输出使用标准工具或者编解码器,如gzip和bzip2mapreduce.output.fileoutputformat.compress.type(在mapred-site.xml中配置)RECORDreducer输出SequenceFile输出使用的压缩类型:NONE和BLOCK压缩案例 public class TestCompress { public static void main(String[] args) throws Exception { compress("e:/hello.txt","org.apache.hadoop.io.compress.BZip2Codec");// decompress("e:/hello.txt.bz2"); } // 1、压缩 private static void compress(String filename, String method) throws Exception { // (1)获取输入流 FileInputStream fis = new FileInputStream(new File(filename)); Class codecClass = Class.forName(method); CompressionCodec codec = (CompressionCodec) ReflectionUtils.newInstance(codecClass, new Configuration()); // (2)获取输出流 FileOutputStream fos = new FileOutputStream(new File(filename +codec.getDefaultExtension())); CompressionOutputStream cos = codec.createOutputStream(fos); // (3)流的对拷 IOUtils.copyBytes(fis, cos, 1024*1024*5, false); // (4)关闭资源 fis.close(); cos.close(); fos.close(); } // 2、解压缩 private static void decompress(String filename) throws FileNotFoundException, IOException { // (0)校验是否能解压缩 CompressionCodecFactory factory = new CompressionCodecFactory(new Configuration()); CompressionCodec codec = factory.getCodec(new Path(filename)); if (codec == null) { System.out.println("cannot find codec for file " + filename); return; } // (1)获取输入流 CompressionInputStream cis = codec.createInputStream(new FileInputStream(new File(filename))); // (2)获取输出流 FileOutputStream fos = new FileOutputStream(new File(filename + ".decoded")); // (3)流的对拷 IOUtils.copyBytes(cis, fos, 1024*1024*5, false); // (4)关闭资源 cis.close(); fos.close(); }}Map输出端采用压缩public class WordCountDriver { public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException { Configuration configuration = new Configuration(); // 开启map端输出压缩 configuration.setBoolean("mapreduce.map.output.compress", true); // 设置map端输出压缩方式 configuration.setClass("mapreduce.map.output.compress.codec", BZip2Codec.class, CompressionCodec.class); Job job = Job.getInstance(configuration); job.setJarByClass(WordCountDriver.class); job.setMapperClass(WordCountMapper.class); job.setReducerClass(WordCountReducer.class); job.setMapOutputKeyClass(Text.class); job.setMapOutputValueClass(IntWritable.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(IntWritable.class); FileInputFormat.setInputPaths(job, new Path(args[0])); FileOutputFormat.setOutputPath(job, new Path(args[1])); boolean result = job.waitForCompletion(true); System.exit(result ? 1 : 0); }}Mapper和Reducer代码不变 ...

July 1, 2020 · 2 min · jiezi

软件工具篇01如何用思维导图构建自己的知识体系

如何用思维导图构建自己的知识体系思维导图是什么百度百科上说 思维导图,英文是The Mind Map,又叫心智导图,是表达发散性思维的有效图形思维工具 ,它简单却又很有效,是一种实用性的思维工具 关键词:发散性思维,图形思维工具 思维导图的作用大脑的思考方式是放射性的,我们能思考总是先关注一个点,然后从这个点映射出去到其他知识点,从而来获得灵感解决问题,但这种映射可能不够全面,因为我们对知识点还不够熟悉,或者是遗忘了这些知识点,所以我们就需要思维导图来帮助我们进行知识点集合的关系构建,还有进行记录,当我们需要某方面的灵感时候,打开思维导图这就是灵感的源泉。 还要强调一点的是,思维导图可以构建知识之间的层级关系,这有助于我们自顶向下或自底向上的思考 Xmind8Pro基础使用创建思维导图 (1) 创建空白思维导图下面就选第一个新建即可,简单实用 选择风格 (2) 根据模板创建思维导图如果想创建快速创建好看的思维导图,可以根据模板创建 (3) 思维导图常用功能和快捷键Tab新增子主题 Enter新增平级主题 其实只要上面那两个键就可以构建基本的思维导图了,下面是其它常用快捷键和功能 F4给主题添加备注 F6进行主题下钻 建立主题联系 设置主题集合区域 ![image-2020050109013 展开和关闭全部导图 除号/ 和 乘号* 添加更多信息到主题,比如超链接,附件都行 遍历导图,这个功能可以帮助我们进行复习和巩固,下面的头脑风暴功能个人觉得用处不大 图标设置,可以表明知识点的重要程度 大家可以把导图导出成自己喜欢的格式 【精】使用思维导图构建自己的知识体系现在到了最关键的时候了,到底我们应该怎么使用思维导图去构建属于自己的知识体系呢?在具体点如何使用思维导图去学习一门框架或者一门编程语言呢?在具体点如何使用思维导图去学习思维导图呢? 在最开始就要了解到思维导图作用是用来构建知识和知识之间的关联的,而不是单纯用来做记录的,很多人都把思维导图当作笔记使用(做笔记我推荐用markdown来做),思维导图是用来压缩信息,提取公共特征的,千万不要只是把知识丢进去,然后思维导图就变成思维大杂烩了。 啊怎么感觉博主还是废话一大堆,这些都不是废话,都是在使用思维导图之前必须了解的不然构建不出好的思维导图。举例子是构建知识和应用之间最好的方式。开始构建一张思维导图去学习思维导图。 基本思维导图架构: 又用同学会觉得这个没有什么啊,其实不然,我讲一下我的设计 概念:存放和思维导图有关的概念和定义 理解:存放学习过程中的问题和自己独到的理解 细节:存放一些重要的细节 操作:存放思维导图的常见操作 这四个是最开头的主题 下面是可选的展开主题 下面用5w2h法分析导图 what:是什么在图中已经讲清楚了 why:为什么使用导图呢,那就讲它的作用或者好处 where:xmind8中使用 when:在学习庞大的知识使用 who:自己 how:基础操作 how good:进阶操作 ...

July 1, 2020 · 1 min · jiezi

Hadoop篇07Hadoop集群脚本编写

积极乐观的态度是解决任何问题和战胜任何困难的第一步Hadoop集群脚本编写编写分发文件脚本应用场景如下:比如有三台主机master1,slave1,slave2如果简历完全分布式的集群就需要将文件从master1拷贝到slave从机上 那么可以使用rsync命令分发单个文件,也可以使用如下脚本分发文件夹或者文件 #!/bin/bash#1 获取输入参数个数,如果没有参数,直接退出# $#代表获得命令行参数个数pcount=$#if((pcount==0)); thenecho no args;exit;fi#2 获取文件名称# $1代表获得命令行第一个参数p1=$1fname=`basename $p1`echo fname=$fname#3 获取上级目录到绝对路径pdir=`cd -P $(dirname $p1); pwd`echo pdir=$pdir#4 获取当前用户名称user=`whoami`#5 rsync命令可以分发文件到指定主机# 这里slave就是从机的机名for((host=1; host<3; host++))do echo ------------------- slave$host -------------- rsync -rvl $pdir/$fname $user@slave$host:$pdirdone群起Hadoop集群脚本先在主机上启动HDFS,再去从机启动YARN资源管理器,但是切换麻烦,只想在主机就能解决集群启动问题这里演示的是三台服务器,如果是更多台服务器,循环即可【有问题都可以私聊我WX:focusbigdata,或者关注我的公众号:FocusBigData,注意大小写】 #!/bin/bash# master1上启动HDFS/opt/module/hadoop-2.7.2/sbin/start-dfs.sh# slave1上启动Yarnssh slave1 /opt/module/hadoop-2.7.2/sbin/start-yarn.sh# 这是启动历史服务器/opt/module/hadoop-2.7.2/sbin/mr-jobhistory-daemon.sh start historyserver停止Hadoop集群脚本#!/bin/bash# 关闭历史服务器/opt/module/hadoop-2.7.2/sbin/mr-jobhistory-daemon.sh stop historyserver# 关闭YARNssh slave1 /opt/module/hadoop-2.7.2/sbin/stop-yarn.sh# 关闭HDFS/opt/module/hadoop-2.7.2/sbin/stop-dfs.sh查看所有机器的Java进程脚本其实也是用ssh发送命令到每台主机上执行然后返回结果,原理简单而且也很实用#!/bin/bashecho ---------- Master1 --------/opt/module/jdk1.8.0_131/bin/jpsfor((host=1; host<=2; host++));do echo ---------- Slave$host -------- ssh slave$host /opt/module/jdk1.8.0_131/bin/jpsdone群起Zookeeper集群脚本#!/bin/bashfor((host=102; host<=104; host++));do echo ----------ZK start in $host-------- ssh hadoop$host /opt/module/zookeeper-3.4.10/bin/zkServer.sh startdone停止Zookeeper集群脚本#!/bin/bashfor((host=102; host<=104; host++));do echo ----------ZK start in $host-------- ssh hadoop$host /opt/module/zookeeper-3.4.10/bin/zkServer.sh stopdone查看Zookeeper集群状态脚本#!/bin/bashfor((host=102; host<=104; host++));do echo ----------ZK start in $host-------- ssh hadoop$host /opt/module/zookeeper-3.4.10/bin/zkServer.sh statusdone群起HBase集群脚本#!/bin/bash# 自己的命令也能拿来作为脚本代码哦/opt/shell/startHadoop.sh/opt/shell/startZookeeper.shecho --------------- HBase Starting ---------------------/opt/module/hbase-1.3.1/bin/start-hbase.sh/opt/shell/j停止HBase集群脚本#!/bin/bashecho --------------- HBase Stoping ---------------------/opt/module/hbase-1.3.1/bin/stop-hbase.shecho --------------- ZK Stoping ---------------------/opt/shell/stopZookeeper.shecho --------------- Hadoop Stoping ---------------------/opt/shell/stopHadoop.sh/opt/shell/j相关资料 ...

June 30, 2020 · 1 min · jiezi

Hadoop篇06Hadoop源码编译

没有谁必须要帮助你,任何事情都得靠自己去完成Hadoop源码编译准备工作(1)CentOS联网配置CentOS能连接外网。Linux虚拟机ping是畅通的注意:采用root角色编译,减少文件夹权限出现问题(2)jar包准备(hadoop源码、JDK8、maven、ant 、protobuf)(1)hadoop-2.7.2-src.tar.gz(2)jdk-8u144-linux-x64.tar.gz(3)apache-ant-1.9.9-bin.tar.gz(build工具,打包用的)(4)apache-maven-3.0.5-bin.tar.gz(5)protobuf-2.5.0.tar.gz(序列化的框架)编译工具安装(1)安装JDK[root@hadoop101 software] # tar -zxf jdk-8u144-linux-x64.tar.gz -C /opt/module/[root@hadoop101 software]# vi /etc/profile\#JAVA_HOME:export JAVA_HOME=/opt/module/jdk1.8.0_144export PATH=$PATH:$JAVA_HOME/bin[root@hadoop101 software]#source /etc/profile验证命令:java -version(2)Maven解压、配置 MAVEN_HOME和PATH[root@hadoop101 software]# tar -zxvf apache-maven-3.0.5-bin.tar.gz -C /opt/module/[root@hadoop101 apache-maven-3.0.5]# vi conf/settings.xml<mirrors> <!-- mirror | Specifies a repository mirror site to use instead of a given repository. The repository that | this mirror serves has an ID that matches the mirrorOf element of this mirror. IDs are used | for inheritance and direct lookup purposes, and must be unique across the set of mirrors. |<mirror> <id>mirrorId</id> <mirrorOf>repositoryId</mirrorOf> <name>Human Readable Name for this Mirror.</name> <url>http://my.repository.com/repo/path</url> </mirror> --> <mirror> <id>nexus-aliyun</id> <mirrorOf>central</mirrorOf> <name>Nexus aliyun</name> <url>http://maven.aliyun.com/nexus/content/groups/public</url> </mirror></mirrors>[root@hadoop101 apache-maven-3.0.5]# vi /etc/profile\#MAVEN_HOMEexport MAVEN_HOME=/opt/module/apache-maven-3.0.5export PATH=$PATH:$MAVEN_HOME/bin[root@hadoop101 software]#source /etc/profile验证命令:mvn -version(3)配置ANT[root@hadoop101 software]# tar -zxvf apache-ant-1.9.9-bin.tar.gz -C /opt/module/[root@hadoop101 apache-ant-1.9.9]# vi /etc/profile\#ANT_HOMEexport ANT_HOME=/opt/module/apache-ant-1.9.9export PATH=$PATH:$ANT_HOME/bin[root@hadoop101 software]#source /etc/profile验证命令:ant -version(4)安装 glibc-headers 和 g++[root@hadoop101 apache-ant-1.9.9]# yum install glibc-headers[root@hadoop101 apache-ant-1.9.9]# yum install gcc-c++(5)安装make和cmake[root@hadoop101 apache-ant-1.9.9]# yum install make[root@hadoop101 apache-ant-1.9.9]# yum install cmake(6)安装protobuf[root@hadoop101 software]# tar -zxvf protobuf-2.5.0.tar.gz -C /opt/module/[root@hadoop101 opt]# cd /opt/module/protobuf-2.5.0/[root@hadoop101 protobuf-2.5.0]#./configure [root@hadoop101 protobuf-2.5.0]# make [root@hadoop101 protobuf-2.5.0]# make check [root@hadoop101 protobuf-2.5.0]# make install [root@hadoop101 protobuf-2.5.0]# ldconfig [root@hadoop101 hadoop-dist]# vi /etc/profile\#LD_LIBRARY_PATHexport LD_LIBRARY_PATH=/opt/module/protobuf-2.5.0export PATH=$PATH:$LD_LIBRARY_PATH [root@hadoop101 software]#source /etc/profile验证命令:protoc --version(7)安装openssl库[root@hadoop101 software]#yum install openssl-devel(8)安装 ncurses-devel库[root@hadoop101 software]#yum install ncurses-devel到此,编译工具安装基本完成编译源码(1)解压源码到/opt/目录[root@hadoop101 software]# tar -zxvf hadoop-2.7.2-src.tar.gz -C /opt/(2)进入到hadoop源码主目录[root@hadoop101 hadoop-2.7.2-src]# pwd/opt/hadoop-2.7.2-src(3)通过maven执行编译命令[root@hadoop101 hadoop-2.7.2-src]#mvn package -Pdist,native -DskipTests -Dtar等待时间30分钟左右,最终成功是全部SUCCESS# 成功的64位hadoop包在/opt/hadoop-2.7.2-src/hadoop-dist/target下[root@hadoop101 target]# pwd/opt/hadoop-2.7.2-src/hadoop-dist/target(4)编译源码过程中常见的问题及解决方案(1)MAVEN install时候JVM内存溢出处理方式:在环境配置文件和maven的执行文件均可调整MAVEN_OPT的heap大小。(详情查阅MAVEN 编译 JVM调优问题,如:http://outofmemory.cn/code-snippet/12652/maven-outofmemoryerror-method)(2)编译期间maven报错。可能网络阻塞问题导致依赖库下载不完整导致,多次执行命令(一次通过比较难):[root@hadoop101 hadoop-2.7.2-src]#mvn package -Pdist,nativeN -DskipTests -Dtar(3)报ant、protobuf等错误,插件下载未完整或者插件版本问题,最开始链接有较多特殊情况,同时推荐2.7.0版本的问题汇总帖子 http://www.tuicool.com/articl... ...

June 30, 2020 · 1 min · jiezi

Hadoop篇04Hadoop配置日志聚集

成长这一路就是懂得闭嘴努力,知道低调谦逊,学会强大自己,在每一个值得珍惜的日子里,拼命去成为自己想成为的人Hadoop配置日志聚集应用场景为了让应用运行完成以后,将程序运行日志信息上传到HDFS系统上,有了日志之后就可以查看程序中的报错信息,从而调试程序配置步骤1.配置yarn-site.xml<!-- 日志聚集功能使能 --><property> <name>yarn.log-aggregation-enable</name> <value>true</value></property><!-- 日志保留时间设置7天 --><property> <name>yarn.log-aggregation.retain-seconds</name> <value>604800</value></property> 2.重启集群sbin/stop-yarn.shsbin/stop-dfs.shsbin/mr-jobhistory-daemon.sh stop historyserversbin/start-dfs.shsbin/start-yarn.shsbin/mr-jobhistory-daemon.sh start historyserver3.运行程序上传数据到HDFS 赋给文件权限 运行程序 查看运行结果 4.查看日志 相关资料 本文配套GitHub:https://github.com/zhutiansam...本文配套公众号:FocusBigData 回复【大数据面经】【大数据面试经验】【大数据学习路线图】会有惊喜哦

June 29, 2020 · 1 min · jiezi

Hadoop篇05Hadoop配置集群时间同步

做任何事都要经受得挫折,要有恒心和毅力,满怀信心坚持到底Hadoop配置集群事件同步时间同步方式找一台机器,作为时间服务器,所有的机器与这台集群时间进行定时的同步,比如,每隔十分钟,同步一次时间配置时间同步步骤1.时间服务器配置(必须root用户)rpm -qa|grep ntp 2.修改ntp配置文件vi /etc/ntp.conf修改内容如下a)修改1(授权192.168.1.0网段上的所有机器可以从这台机器上查询和同步时间)打开限制#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap为restrict 192.168.1.0 mask 255.255.255.0 nomodify notrapb)修改2(集群在局域网中,不使用其他的网络时间)server 0.centos.pool.ntp.org iburstserver 1.centos.pool.ntp.org iburstserver 2.centos.pool.ntp.org iburstserver 3.centos.pool.ntp.org iburst为#server 0.centos.pool.ntp.org iburst#server 1.centos.pool.ntp.org iburst#server 2.centos.pool.ntp.org iburst#server 3.centos.pool.ntp.org iburstc)添加3(当该节点丢失网络连接,依然可以作为时间服务器为集群中的其他节点提供时间同步)server 127.127.1.0fudge 127.127.1.0 stratum 103.修改/etc/sysconfig/ntpd 文件vim /etc/sysconfig/ntpd增加内容如下(让硬件时间与系统时间一起同步)SYNC_HWCLOCK=yes4.重新启动ntpdservice ntpd statusservice ntpd start5.加入配置项chkconfig ntpd on6.其他机器配置(必须root用户)(1) 编写定时任务10分钟和主时间服务器同步一次 crontab -e编写定时任务如下:*/10 * * * * /usr/sbin/ntpdate hadoop102(2)修改任意时间 date -s "2017-9-11 11:11:11"(3)十分钟后查看是否同步成功 date相关资料 本文配套GitHub:https://github.com/zhutiansam...本文配套公众号:FocusBigData 回复【大数据面经】【大数据面试经验】【大数据学习路线图】会有惊喜哦

June 29, 2020 · 1 min · jiezi

2020版冲刺年薪30W超全大数据学习路线思维导图

大数据学习路线 下面和大家讲一下大数据学习的路线,帮助大家快速进入大数据行业。我会结合自己的实际经历还说明学习路线。该路线针对的对象是零基础小白,目标是到初中级大数据工程师,要求掌握数据建模,数据存储,数据存储,数据传输,数据分析等能力达到大数据岗位的应聘标准。 (一)Java基础和web开发 很多人问过我,学大数据要不要学Java,我的答案是肯定的。首先Java是一门面向对象的编程语言,也是一门应用非常之广的语言,对于零基础的小白必须先有一些基本的编码能力和面向对象编程的思想。其次很多框架的底层就是用Java进行开发的,比如Hadoop,如果想要更近一步,源码是要看的。所以学习Java基础是十分必要的。Java基础重点包括: Java常用类【特别是字符串处理相关的类】异常处理集合泛型IO流多线程反射网络编程常见设计模式JVM【难点+重点,但比较花时间】 那么JavaWeb开发要不要会呢?我的建议是了解就行,了解常见的SSM框架,了解Web项目大致的开发流程,对整个软件的开发有一个感性的认识,这样就足够了。当然学有余力请继续深入。 (二)工具类软件开发都绕不开使用别人的轮子,好的工具让我们开发效率大大提升,下面工具必须掌握: 编辑器:Eclipse + IDEA 项目构建工具:Maven + Gradle(有余力) 数据库:Mysql【初期先了解增删改查,后面有时间能多深入就多深入】 操作系统:Linux【常见命令会就行】 脚本语言:Shell【看得懂就行】 虚拟机:VMware 创建-克隆虚拟机,拍摄-还原快照【操作过就行】 (三)Hadoop生态系统HDFS:学会搭建完全分布式集群,知道如何根据业务编写MapReduce程序,并放到集群上运行YARN:知道它是个资源管理器和k8s一样,熟悉Job提交的过程Mapreduce:编写业务程序【熟悉一些数据倾斜的解决方案和底层Shuffle过程】Zookeeper:分布式协调框架【知道Zookeeper选举机制和常用命令】Hive:数据仓库,底层是MapReduce【重点掌握:HQL语句书写,窗口函数,多做一些案例总结自己的套路,优化也要了解一下】HBase:超大型分布式数据库,经常用来做实时查询【了解HBase架构,RowKey设计原则,后面开发用到再来深入】Flume:数据传输框架【知道Flume组成,拦截器和选择器使用】Kafka:消息缓存框架【Kafka架构-压测-监控-ISR同步队列-事务-高效读取】Sqoop:关系型数据库和HDFS,HBase之间数据的传输框架Ambari: 用于配置、管理和监视Hadoop集群,基于Web,界面友好Impala: 对存储在Apache Hadoop的HDFS,HBase的数据提供直接查询互动的SQL (四)Spark生态 到这里又要学习一门新的编程语言Scala,初入Scala可能会对它的语法结构产生不习惯,熟悉之后你会发现Java代码是很繁琐的。编程语言是什么不重要,关键是背后的思想和逻辑才重要。 Scala:了解基础语法、函数式编程和隐式转换就行 Spark:可以看作是对Hadoop框架的优化,它是基于内存进行计算的,性能提高很多。【熟悉Spark部署方式-提交流程-参数设置-RDD血统-宽窄依赖-转换和行动算子-广播变量和累加器-性能调优】 Spark-Sql:spark中负责和数据库交互的模块【熟悉DataFrame-DataSet,SQL语句书写,UDF和UDTF函数使用】 Spark-Streaming:spark中负责流式计算的模块【了解流式计算的原理,背压机制,窗口函数】 (五)Flink框架Flink是目前最火的处理流式数据的框架应掌握一下内容 相关资料 本文配套GitHub:https://github.com/zhutiansam...本文配套公众号:FocusBigData 回复【大数据面经】【大数据面试经验】【大数据学习路线图】会有惊喜哦

June 29, 2020 · 1 min · jiezi

Hadoop篇03Hadoop配置历史服务

天空才是你的极限Hadoop配置历史服务器应用场景为了查看运行过程序的情况,因此需要配置历史服务器配置步骤1.配置mapred-site.xml<!-- 指定历史服务器的IP和端口 --><property> <name>mapreduce.jobhistory.address</name> <value>hadoop102:10020</value></property><!-- 指定历史服务器Web访问的IP和端口 --><property> <name>mapreduce.jobhistory.webapp.address</name> <value>hadoop102:19888</value></property> 2.启动历史服务器sbin/mr-jobhistory-daemon.sh start historyserver 3.查看历史服务器进程jps命令查看即可4.Web端查看# 前提是hosts文件配置了域名映射http://hadoop102:19888/jobhistory 相关资料 本文配套GitHub:https://github.com/zhutiansam...本文配套公众号:FocusBigData 回复【大数据面经】【大数据面试经验】【大数据学习路线图】会有惊喜哦

June 28, 2020 · 1 min · jiezi

Hadoop篇02Hadoop完全分布式环境搭建

优于别人,并不高贵,真正的高贵应该是优于过去的自己Hadoop完全分布式环境搭建编写分发文件脚本应用场景如下:比如有三台主机master1,slave1,slave2如果简历完全分布式的集群就需要将文件从master1拷贝到slave从机上 那么可以使用rsync命令分发单个文件,也可以使用如下脚本分发文件夹或者文件 #!/bin/bash#1 获取输入参数个数,如果没有参数,直接退出# $#代表获得命令行参数个数pcount=$#if((pcount==0)); thenecho no args;exit;fi#2 获取文件名称# $1代表获得命令行第一个参数p1=$1fname=`basename $p1`echo fname=$fname#3 获取上级目录到绝对路径pdir=`cd -P $(dirname $p1); pwd`echo pdir=$pdir#4 获取当前用户名称user=`whoami`#5 rsync命令可以分发文件到指定主机# 这里slave就是从机的机名for((host=1; host<3; host++))do echo ------------------- slave$host -------------- rsync -rvl $pdir/$fname $user@slave$host:$pdirdone集群规划 hadoop102hadoop103hadoop104HDFSNameNodeDataNodeDataNodeSecondaryNameNode<br/>DataNodeYARNNodeManagerResourceManager<br/>NodeManagerNodeManager配置集群配置文件都在hadoop2.7.2/etc/hadoop下 配置core-site.xml<!-- 指定HDFS中NameNode的地址 --><property> <name>fs.defaultFS</name> <value>hdfs://hadoop102:9000</value></property><!-- 指定Hadoop运行时产生文件的存储目录 --><property> <name>hadoop.tmp.dir</name> <value>/opt/module/hadoop-2.7.2/data/tmp</value></property>配置hadoop-env.shexport JAVA_HOME=/opt/module/jdk1.8.0_144配置hdfs-site.xml<!-- 指定副本数量 --><property> <name>dfs.replication</name> <value>3</value></property><!-- 指定SecondaryNamenode主机配置 --><property> <name>dfs.namenode.secondary.http-address</name> <value>hadoop104:50090</value></property>配置yarn-env.shexport JAVA_HOME=/opt/module/jdk1.8.0_144配置yarn-site.xml<!-- reducer获取数据的方式 --><property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value></property><!-- 指定YARN的ResourceManager的地址 --><property> <name>yarn.resourcemanager.hostname</name> <value>hadoop103</value></property>配置mapred-env.shexport JAVA_HOME=/opt/module/jdk1.8.0_144配置mapred-site.xml【需要拷贝mapred-site.xml.template 然后重命名即可】 <!-- 指定mr运行在yarn上 --><property> <name>mapreduce.framework.name</name> <value>yarn</value></property>分发配置到集群中# xsync就是刚刚编写的分发脚本xsync /opt/module/hadoop-2.7.2/集群格式化# 这部分必须没有报错才行,不然就重来一篇,必须在hadoop根目录下执行hadoop namenode -format集群启动测试在主机hadooop102在sbin目录下,运行start-dfs.sh启动HDFS在主机hadooop103在sbin目录下,运行start-yarn.sh启动yarn然后使用jps查看进程即可 ...

June 28, 2020 · 1 min · jiezi

Hadoop篇01Hadoop本地模式环境搭建

生命中真正重要的不是你遭遇了什么,而是你记住了哪些事,又是如何铭记的Hadoop本地模式环境搭建一.准备虚拟机环境(1)克隆虚拟机使用VMware克隆三台虚拟机(2)修改主机名vim /etc/hosts(3)配置IP为静态IPifconfig (4)配置ip和域名之间的映射 (5)创建用户, 并设置密码useradd zhutiansamapasswd 123456(6)给用户配置具有root权限 root ALL=(ALL) ALLzhutiansama ALL=(ALL) ALL(7)关闭防火墙sudo chkconfig iptables off(8)在/opt目录下创建文件夹mkdir /opt/module二.安装jdk(1)使用ftp工具将jdk安装包导入到/opt/software目录下 (2)解压jdk到/opt/module目录下 (3)配置jdk环境变量打开etc/profile文件, 在文件末尾加入如下两行:修改后的文件生效测试JDK是否安装成功 三. 安装Hadoop(1)把Hadoop安装包传递到/opt/software(2)解压到module下 (3)配置Hadoop环境变量打开/etc/profile文件, 末尾添加两行代码:使用文件生效:测试是否配置成功 相关资料 本文配套GitHub:https://github.com/zhutiansam...本文配套公众号:FocusBigData 回复【大数据面经】【大数据面试经验】【大数据学习路线图】会有惊喜哦 本文作者WX:focusbigdata,欢迎咨询职业规划,简历书写,项目经验等关于大数据的问题

June 24, 2020 · 1 min · jiezi

第四步HADOOPSPARK2

scala $ wget https://downloads.lightbend.com/scala/2.12.11/scala-2.12.11.tgz$ tar -zxvf scala-2.12.11.tgz -C /usr/local$ su hadoop$ cd$ vim ~/.bashrc#scalaexport SCALA_HOME=/usr/local/scala-2.12.11export PATH=$PATH:$SCALA_HOME/bin$ source ~/.bashrc$ exitspark $ wget https://mirrors.tuna.tsinghua.edu.cn/apache/spark/spark-2.4.6/spark-2.4.6-bin-without-hadoop.tgz$ tar -zxvf spark-2.4.6-bin-without-hadoop.tgz -C /data$ mv /data/spark-2.4.6-bin-without-hadoop/ /data/spark$ chown -R hadoop.hadoop /data/spark/$ su hadoopspark配置文件 $ cd /data/spark/conf$ cp spark-env.sh.template spark-env.sh$ cp spark-defaults.sh.template spark-defaults.sh$ cp slaves.template slavesspark-env.sh $ vim spark-env.shexport JAVA_HOME=/usr/local/jdk1.8.0_231export SPARK_MASTER_PORT=7077export SPARK_MASTER_WEBUI_PORT=18088export SPARK_WORKER_WEBUI_PORT=18081export SPARK_WORKER_CORES=2export SPARK_WORKER_MEMORY=4096mLD_LIBRARY_PATH=/data/hadoop/lib/nativeSPARK_DIST_CLASSPATH=$(hadoop classpath)export SPARK_MASTER_HOSTexport SPARK_MASTER_PORTexport SPARK_WORKER_CORESexport SPARK_WORKER_MEMORYexport LD_LIBRARY_PATHexport SPARK_DIST_CLASSPATHexport SPARK_WORKER_INSTANCESexport HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoopexport SPARK_HOME=/data/sparkexport SPARK_WORKER_DIR=/data/spark/workexport SPARK_PID_DIR=/tmpexport SPARK_JAR=/data/spark/jars/*.jarexport PATH=$SPARK_HOME/bin:$PATHexport SPARK_CLASSPATH=$SPARK_CLASSPATH:/data/spark/jars/mysql-connector-java-5.1.49-bin.jarexport SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=192.168.233.17:2181,192.168.233.238:2181,192.168.233.157:2181 -Dspark.deploy.zookeeper.dir=/spark"spark-defaults.conf ...

June 18, 2020 · 1 min · jiezi

HADOOP环境配置

所有机器执行关闭防火墙$ systemctl stop firewalld && systemctl disable firewalld关闭selinux$ setenforce 0$ vim /etc/selinux/configSELINUX=disabled配置swappiness$ sysctl -w vm.swappiness=10$ echo vm.swappiness = 10 >> /etc/sysctl.conf$ cat /proc/sys/vm/swappiness10关闭透明大页面$ echo never > /sys/kernel/mm/transparent_hugepage/defrag$ echo never > /sys/kernel/mm/transparent_hugepage/enabled$ vim /etc/rc.d/rc.localif test -f /sys/kernel/mm/transparent_hugepage/enabled; then echo never > /sys/kernel/mm/transparent_hugepage/enabledfiif test -f /sys/kernel/mm/transparent_hugepage/defrag; then echo never > /sys/kernel/mm/transparent_hugepage/defragfi$ chmod +x /etc/rc.d/rc.local文件句柄$ vim /etc/security/limits.conf* soft nofile 100000* hard nofile 100000时间服务器$ yum install ntp ntpdate -y$ systemctl start ntpd && systemctl enable ntpd基础软件$ yum install -y chkconfig python bind-utils psmisc libxslt zlib sqlite cyrus-sasl-plain cyrus-sasl-gssapi fuse fuse-libs redhat-lsb mod_ssl unzip lrzszJDK8部署OpenJDK8 ...

June 18, 2020 · 1 min · jiezi

HADOOPzookeeper

集群规划系统版本主机名IP用途CentOS-7.7hadoop-test-1192.168.233.65nn dn hive hmaster resourcemanagerCentOS-7.7hadoop-test-2192.168.233.94nn dn hmaster resourcemanagerCentOS-7.7hadoop-test-3192.168.233.17dn zkCentOS-7.7hadoop-test-4192.168.233.238dn zkCentOS-7.7hadoop-test-5192.168.233.157dn zk免密登陆$ for i in {1..5};do ssh hadoop-test-$i "useradd hadoop";done$ for i in {1..5};do ssh hadoop-test-$i "echo 'pwhadoop' | passwd --stdin 'hadoop'";done$ su hadoop$ ssh-keygen $ ssh-copy-id ......zookeeper-3.5.8安装 wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.5.8/apache-zookeeper-3.5.8-bin.tar.gztar -zxvf apache-zookeeper-3.5.8-bin.tar.gz -C /datamv /data/apache-zookeeper-3.5.8-bin /data/zookeepercp /data/zookeeper/conf/zoo_sample.cfg /data/zookeeper/conf/zoo.cfg同步所有zk节点的配置文件 $ vim /data/zookeeper/conf/zoo.cfgtickTime=2000initLimit=10syncLimit=5dataDir=/data/zookeeper/zkdataclientPort=2181maxClientCnxns=2000server.1=192.168.233.17:2888:3888server.2=192.168.233.238:2888:3888server.3=192.168.233.157:2888:3888autopurge.snapRetainCount=20autopurge.purgeInterval=48authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProviderrequireClientAuthScheme=sasljaasLoginRenew=3600000zookeeper.sasl.client=true在每个zk的data目录内写入myid文件,对应配置文件中的server.1,server.2,server.3: $ vim /data/zookeeper/zkdata/myid1$ vim /data/zookeeper/zkdata/myid2$ vim /data/zookeeper/zkdata/myid3vim .bashrcexport ZOOKEEPER_HOME=/data/zookeeper export PATH=$PATH:$ZOOKEEPER_HOME/binsource .bashrc启动 $ for i in {3..5};do ssh hadoop-test-$i "zkServer.sh start";done/usr/bin/javaZooKeeper JMX enabled by defaultUsing config: /data/zookeeper/bin/../conf/zoo.cfgStarting zookeeper ... STARTED/usr/bin/javaZooKeeper JMX enabled by defaultUsing config: /data/zookeeper/bin/../conf/zoo.cfgStarting zookeeper ... STARTED/usr/bin/javaZooKeeper JMX enabled by defaultUsing config: /data/zookeeper/bin/../conf/zoo.cfgStarting zookeeper ... STARTED查看状态 ...

June 18, 2020 · 1 min · jiezi

基于Hadoop不同版本搭建hive集群附配置文件

本教程采用了两种方案 一种是hive-1.21版本,hadoop版本为hadoop2.6.5 还有一种是主要讲基于hadoop3.x hive的搭建 关注公众号:Java架构师联盟,每日更新技术好文 先来第一种 一、本地方式(内嵌derby) 步骤 这种存储方式需要在本地运行一个mysql服务器,并作如下配置 解压 修改安装包内conf文件夹下的hive-default.xml.template,并重命名为hite-site.xml <configuration>  将hive/lib目录下的jline jar包拷贝到hadoop的yarn lib下,并将原jar包删除或改名令其失效。否则会报版本不匹配的错误 问题 使用derby存储方式时,运行hive会在当前目录生成一个derby文件和一个metastore_db目录。这种存储方式的弊端是在同一个目录下同时只能有一个hive客户端能使用数据库,多个用户登录时会报错。(这是由于derby数据库的局限性造成的) 二、Local模式(mysql) 这种存储方式需要在本地运行一个mysql服务器,并作如下配置 步骤 安装一个mysql数据库 yum install mysql-server -y拷贝mysql驱动包到$HIVE_HOME\lib目录下 修改hive-site,xml <configuration> 启动sql服务 service mysqld start设置开机启动 chkconfig mysqld on修改root用户权限 (1)登录mysql        mysql -uroot(2)修改权限 GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123' WITH GRANT OPTION;(3)刷新 flush privileges;创建hive_meta数据库 create database hive_meta;添加用户并修改权限 (1)创建hive用户和密码 CREATE USER 'hive'@'%' IDENTIFIED BY '123';(2)赋予权限 grant all privileges on hive_meta.* to hive@"%" identified by '123';删除多余权限 ...

May 29, 2020 · 1 min · jiezi

Server IPC version 9 cannot communicate with client version 4 hadoop hdfs连接不上

commons-httpclient-3.1.jarcommons-io-2.4.jarcommons-lang-2.6.jarcommons-logging-1.1.3.jarcommons-net-3.1.jarguava-11.0.2.jarhadoop-common-2.6.2.jarhadoop-auth-2.6.2.jarslf4j-api-1.7.5.jarhadoop-hdfs-2.6.2.jarcommons-cli-1.2.jarprotobuf-java-2.5.0.jarhtrace-core-3.0.4.jar在pom.xml中添加这些commons-httpclient-3.1.jarcommons-io-2.4.jarcommons-lang-2.6.jarcommons-logging-1.1.3.jarcommons-net-3.1.jarguava-11.0.2.jarhadoop-common-2.6.2.jarhadoop-auth-2.6.2.jarslf4j-api-1.7.5.jarhadoop-hdfs-2.6.2.jarcommons-cli-1.2.jarprotobuf-java-2.5.0.jarhtrace-core-3.0.4.jar 以下为示例代码: /** * @Autohor: liyj * @Description: * @Date:Created in 2017/11/7 * @Modified by : */import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.FileStatus;import org.apache.hadoop.fs.FileSystem;import org.apache.hadoop.fs.Path;import java.io.IOException;import java.net.URI;import java.net.URISyntaxException;public class HdfsFileReader { private static final String NAME_NODE = “hdfs://tj02:8020”;//nameNomeHost = localhost if you use hadoop in local mode public static void main(String[] args) throws URISyntaxException, IOException {// String fileInHdfs = “/user/hive/warehouse/t001011003”; Configuration configuration = new Configuration();// configuration.set(“fs.hdfs.impl”,// org.apache.hadoop.hdfs.DistributedFileSystem.class.getName()// );// configuration.set(“fs.file.impl”,// org.apache.hadoop.fs.LocalFileSystem.class.getName()// ); FileSystem fs = FileSystem.get(URI.create(NAME_NODE), configuration);//// fs.createNewFile(new Path("/user/hive/warehouse/t001011003/0000sadasd"));// String fileContent = IOUtils.toString(fs.open(new Path(fileInHdfs)), “UTF-8”);// System.out.println(“File content - " + fileContent);// copyFile2Hdfs(); Path listf = new Path("/user/hive/warehouse/t001011003”); FileStatus stats[] = fs.listStatus(listf); for (int i = 0; i < stats.length; ++i) { System.out.println(stats[i].getPath().toString()); } fs.close(); } public static void copyFile2Hdfs() throws IOException { Configuration conf = new Configuration(); FileSystem hdfs = FileSystem.get(conf); //本地文件// Path src =new Path(“D:\HebutWinOS”); //HDFS为止 Path dst = new Path("/");// hdfs.copyFromLocalFile(src, dst); System.out.println(“Upload to” + conf.get(“fs.default.name”)); FileStatus files[] = hdfs.listStatus(dst); for (FileStatus file : files) { System.out.println(file.getPath()); } }} ...

November 8, 2017 · 1 min · jiezi