Hadoop,大数据离不开它

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

 [[399591]]

本文转载自微信公众号「虞大胆的叽叽喳喳」,作者虞大胆 。转载本文请联系虞大胆的叽叽喳喳公众号。

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

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

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

core-site.xml:

  1. <property> 
  2.     <name>fs.defaultFS</name
  3.     <value>hdfs://localhost:8001</value> 
  4. </property> 
  5. <property> 
  6.     <name>hadoop.tmp.dir</name
  7.     <value>/root/hadoop-3.2.2/tmp</value> 
  8. </property> 

 

其中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:

  1. $ bin/hdfs namenode -format 

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

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

  1. #创建登陆用户的根目录,有了根目录,则不需要指定hdfs://前缀 
  2. $ ./bin/hdfs dfs -mkdir  -p  "hdfs://localhost:8001/user/root" 
  3. $ ./bin/hdfs dfs -mkdir  -p  test2 
  4.  
  5. $ ./bin/hdfs dfs -put ~/test.log hdfs://localhost:8001/test 
  6. $ ./bin/hdfs dfs -put ~/test.log test2 
  7.  
  8. $ ./bin/hdfs dfs -ls test2 
  9. $ ./bin/hdfs dfs -cat  test2/test.log 

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

运行MapReduce过程很简单:

  1. $ bin/hdfs dfs -mkdir input 
  2. $ bin/hdfs dfs -put etc/hadoop/*.xml input 
  3. # 将mapreduce任务执行的结果放入 hdfs output 目录中 
  4. $ bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.2.jar grep input output 'dfs[a-z.]+'  
  5. 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:

  1. <property> 
  2.     <name>yarn.nodemanager.aux-services</name
  3.     <value>mapreduce_shuffle</value> 
  4. </property> 
  5.  
  6. <property> 
  7.     <name>yarn.resourcemanager.webapp.address</name
  8.     <value>0.0.0.0:7088</value> 
  9. </property> 

 

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

修改 mapred-site.xml:

  1. <property> 
  2.     <name>mapreduce.framework.name</name
  3.     <value>yarn</value> 
  4. </property> 

 

mapreduce.framework.name的值yarn表示MapReduce使用Yarn调度。

然后执行yarn调度:

  1. $ 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文件要修改:

  1. HDFS_DATANODE_USER=root 
  2. HDFS_DATANODE_SECURE_USER=root 
  3. HDFS_NAMENODE_USER=root 
  4. HDFS_SECONDARYNAMENODE_USER=root 

最后的启动命令:

  1. $ ./sbin/start-all.sh 
  2. $ ./sbin/stop-all.sh 

参考链接:

https://kontext.tech/column/hadoop/265/default-ports-used-by-hadoop-services-hdfs-mapreduce-yarn

https://hadoop.apache.org/docs/r3.2.2/hadoop-project-dist/hadoop-common/SingleCluster.html

 

责任编辑:武晓燕 来源: 虞大胆的叽叽喳喳
相关推荐

2015-10-13 10:41:39

大数据厚数据

2015-06-04 10:05:30

大数据分析认知计算沃森

2018-03-26 14:02:53

2016-11-25 20:55:28

2014-04-14 10:37:55

工业互联网云计算大数据

2020-04-28 10:35:14

数据安全

2016-05-03 15:12:35

数据科学

2013-08-05 11:15:45

GoogleNexus系列

2018-10-30 13:01:24

新华三

2015-02-03 10:32:19

软件定义存储SDS混合云

2018-06-05 23:41:11

2021-09-03 08:44:51

内核模块Linux社区

2021-08-19 08:31:46

云计算

2021-08-04 22:59:19

区块链汽车技术

2013-09-23 16:15:15

轻应用超级App何小鹏

2016-09-06 17:21:00

APM听云用户体验

2021-09-02 00:15:01

区块链农业技术

2016-12-20 18:21:29

Hadoop大数据面试

2019-05-24 11:51:18

BI数据仓库数据分析
点赞
收藏

51CTO技术栈公众号