Hadoop,大數(shù)據(jù)離不開它
本文轉(zhuǎn)載自微信公眾號「虞大膽的嘰嘰喳喳」,作者虞大膽 。轉(zhuǎn)載本文請聯(lián)系虞大膽的嘰嘰喳喳公眾號。
搭建數(shù)倉,hadoop雖然有點落伍,但還是不可或缺的。本文描述下單機版的hadoop運作機制。
HDFS是Google GFS的開源實現(xiàn),是一個分布式文件系統(tǒng),是大數(shù)據(jù)技術(shù)的基石,直接上架構(gòu)圖:
主要包含Namenode和Datanodes,MapReduce主要就是在Datanodes進行并行計算。
core-site.xml:
- <property>
- <name>fs.defaultFS</name>
- <value>hdfs://localhost:8001</value>
- </property>
- <property>
- <name>hadoop.tmp.dir</name>
- <value>/root/hadoop-3.2.2/tmp</value>
- </property>
其中8001端口就代表hdfs的根路徑,另外hdfs-site.xml配置參數(shù)也非常多。
比如dfs.replication表示hdfs副本集,單機版就設(shè)置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值。
如果修改目錄相關(guān)的參數(shù),需要格式化hdfs:
- $ bin/hdfs namenode -format
經(jīng)驗就是建議刪除dfs.namenode.data.dir下的文件,再格式化。
一旦hdfs可用,操作它們就像操作本地文件一樣:
- #創(chuàng)建登陸用戶的根目錄,有了根目錄,則不需要指定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處理數(shù)據(jù),然后shuffle將相關(guān)聯(lián)的數(shù)據(jù)交給reduce進行處理。
運行MapReduce過程很簡單:
- $ bin/hdfs dfs -mkdir input
- $ bin/hdfs dfs -put etc/hadoop/*.xml input
- # 將mapreduce任務(wù)執(zhí)行的結(jié)果放入 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即包含計算框架,又包含調(diào)度框架,比較臃腫,比如想在當前集群運行另外一種計算任務(wù),就不方便了,所以后來從MapReduce中將調(diào)度框架抽取出來,命名為Yarn,這樣不管是MapReduce還是Spark只要符合Yarn接口定義,就能被Yarn調(diào)度,MR和Spark專做做分布式運算,相當于解耦了。
Yarn的架構(gòu)圖如下:
主要包括ResourceManager和NodeManager,另外為了分布式運算NodeManager一般和HDFS的DataNodes運行在一起。
ResourceManager主要包含Scheduler和ApplicationsManager。
修改yarn-site.xml:
- <property>
- <name>yarn.nodemanager.aux-services</name>
- <value>mapreduce_shuffle</value>
- </property>
- <property>
- <name>yarn.resourcemanager.webapp.address</name>
- <value>0.0.0.0:7088</value>
- </property>
其中,mapreduce_shuffle表示調(diào)度MapReduce任務(wù),7088 是Yarn的Web管理地址;當然Yarn還有很多的參數(shù)。
修改 mapred-site.xml:
- <property>
- <name>mapreduce.framework.name</name>
- <value>yarn</value>
- </property>
mapreduce.framework.name的值yarn表示MapReduce使用Yarn調(diào)度。
然后執(zhí)行yarn調(diào)度:
- $ bin/yarn jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.2.jar grep input output 'dfs[a-z.]+'
只是將上面的hadoop修改為yarn,不過結(jié)果測試,不管怎么寫,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
參考鏈接:
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