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

大数据时代,离不开的Hadoop

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

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

主要包含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的架构图如下:

主要包括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

参考链接:

OpenMagic API

Need more than content? Move into the product flow.

If you are here for model access, pricing, developer docs, or the future API console, the dedicated product path now lives on api.openmagic.ai.

登录免费注册