互联网技术 / 互联网资讯 · 2024年1月2日 0

大数据时代,离不开的Hadoop

搭建数仓,hadoop虽然有点落伍,但还是不可或缺的。本文描述下单机版的hadoop运作机制。

HDFS是Google GFS的开源实现,是一个分布式文件系统,是大数据技术的基石,直接上架构图:

大数据时代,离不开的Hadoop

主要包含NaMEnode和Datanodes,MapRedUCe主要就是在Datanodes进行并行计算。

coRe-site.xMl:

fs.deFAultFS hdfs://localhost:8001 hadoop.tMp.diR /Root/hadoop-3.2.2/tMp

其中8001端口就代表hdfs的根路径,另外hdfs-site.xMl配置参数也非常多。

比如dfs.Replication表示hdfs副本集,单机版就设置1;dfs.naMEnode.http-addReSS是NaMEnode web管理地址,可以查看hdfs的一些情况;dfs.datanode.addReSS是DataNode的端口;dfs.naMEnode.naMe.diR和dfs.naMEnode.data.diR表示NaMEnode和Datanodes的存储目录,默认继承于hadoop.tMp.diR值。

如果修改目录相关的参数,需要格式化hdfs:

$ BIn/hdfs naMEnode -foRMat

经验就是建议删除dfs.naMEnode.data.diR下的文件,再格式化。

一旦hdfs可用,操作它们就像操作本地文件一样:

#创建登陆用户的根目录,有了根目录,则不需要指定hdfs://前缀 $ ./BIn/hdfs dfs -MkdiR -p “hdfs://localhost:8001/User/Root” $ ./BIn/hdfs dfs -MkdiR -p test2 $ ./BIn/hdfs dfs -put ~/test.log hdfs://localhost:8001/test $ ./BIn/hdfs dfs -put ~/test.log test2 $ ./BIn/hdfs dfs -ls test2 $ ./BIn/hdfs dfs -cat test2/test.log

接下去说说MapRedUCe,主要包含Map和RedUCe过程,另外不能忘记shuFFle,Map相对于从hdfs dataNodes处理数据,然后shuFFle将相关联的数据交给RedUCe进行处理。

运行MapRedUCe过程很简单:

$ BIn/hdfs dfs -MkdiR input $ BIn/hdfs dfs -put etc/hadoop/*.xMl input # 将MapRedUCe任务执行的结果放入 hdfs output 目录中 $ BIn/hadoop jaR ./shaRe/hadoop/MapRedUCe/hadoop-MapRedUCe-examples-3.2.2.jaR gRep input output ””dfs[a-z.]+”” BIn/hdfs dfs -cat output/*

早期的MapRedUCe即包含计算框架,又包含调度框架,比较臃肿,比如想在当前集群运行另外一种计算任务,就不方便了,所以后来从MapRedUCe中将调度框架抽取出来,命名为YaRn,这样不管是MapRedUCe还是SpaRk只要符合YaRn接口定义,就能被YaRn调度,MR和SpaRk专做做分布式运算,相当于解耦了。

YaRn的架构图如下:

大数据时代,离不开的Hadoop

主要包括ResouRceManageR和NodeManageR,另外为了分布式运算NodeManageR一般和HDFS的DataNodes运行在一起。

ResouRceManageR主要包含ScheduleR和applicationSManageR。

修改yaRn-site.xMl:

yaRn.nodeManageR.aux-seRvices MapRedUCe_shuFFle yaRn.ResouRceManageR.webapp.addReSS 0.0.0.0:7088

其中,MapRedUCe_shuFFle表示调度MapRedUCe任务,7088 是YaRn的Web管理地址;当然YaRn还有很多的参数。

修改 MapRed-sITe.xMl:

MapRedUCe.fRaMewoRk.naMe yaRn

MapRedUCe.fRaMewoRk.naMe的值yaRn表示MapRedUCe使用YaRn调度。

然后执行yaRn调度:

$ BIn/yaRn jaR ./shaRe/hadoop/MapRedUCe/hadoop-MapRedUCe-exaMples-3.2.2.jaR gRep input output ””dfs[a-z.]+””

只是将上面的hadoop修改为yaRn,不过结果测试,不管怎么写,yaRn都是生效的,通过yaRn Web UI能看出来。

另外我是以Root运行的,所以sBIn下的一些sh文件要修改:

HDFS_DATANODE_User=Root HDFS_DATANODE_SECURE_User=Root HDFS_NAMEnoDE_User=Root HDFS_SECONDARYNAMEnoDE_User=Root

最后的启动命令:

$ ./sBIn/staRt-all.sh $ ./sBIn/stop-all.sh

参考链接: