(一)Hadoop的組成
? ? ? ? 對普通用戶來說, Hadoop就是一個東西,一個整體,它能給我們提供無限的磁盤用來保存文件,可以使用提供強大的計算能力。
? ? ? ? 在Hadoop3.X中,hadoop一共有三個組成部分:MapReduce,Yarn,HDFS。它們的作用如下:
1. MapReduce: 用來提供計算。
2. HDFS: 用來提供文件存儲功能。
3. Yarn: 用來協調調度。
(二)HDFS
? ? ? ? Hadoop Distributed File System, 簡稱HDFS,是一個分布式文件系統。在hadoop體系中,它用來存儲文件。
? 例如,當我們把一個文件(例如500M),保存到hadoop中時,它的背后要實現兩個效果:
1. 如果文件較大(>128M)把大文件拆小,并分別傳輸。
2. 存儲3份在不同的主機上。
? ? ? ? 在它的內部,有三個角色,分別如下:
? ? ? ? (1)NameNode(nn):存儲文件的元數據,如文件名,文件目錄結構,文件屬性(生成時間,副本數,文件權限),以及每個文件的塊列表和塊所在的DataNode等。
? ? ? ? (2)DataNode(dn):在本地文件系統存儲文件塊數據,以及塊數據的校驗和。
? ? ? ? (3)Secondary NameNode(2nn): 每隔一段時間對NameNode元數據備份。
HDFS集群:一主加三從,額外再配一個小秘書
(三)YARN
Yet Another Resource Negotiator,簡稱YARN,另一種資源協調者,是Hadoop的資源管理器。
(1)ResourceManager(RM):整個集群資源(內存,CPU等)的管理者
(2)NodeManager(NM): 單個節點服務器資源的管理者
Yarn和HDFS的關系說明:邏輯上分離,物理上在一起。
邏輯上分離:不是說非要啟動HDFS集群才能啟動YARN集群,不是先有哪個再有哪個?每個框都是一個進程,可能都運行在一臺主機上,但是,屬于不同的集群。
物理上在一起:每一臺機器上都有NN, NM。
(四)MapReduce
MapReduce用來提供計算的能力。它將計算過程分為兩個階段:Map和Reduce。
(1)Map階段并行處理輸入數據
(2)Reduce階段對Map結果進行匯總
第二課時
(五)集群配置規劃
集群部署規劃建議:
1.NameNode和SecondaryNameNode不要安裝在同一臺服務器
2.ResourceManager也很消耗內存,不要和NameNode、SecondaryNameNode配置在同一臺機器上。
根據我們的實際情況,我們配置如下
hadoop100
hadoop101
hadoop102
HDFS
NameNode
DataNode
DataNode
SecondaryNameNode
DataNode
YARN
NodeManager
ResourceManager
NodeManager
NodeManager
(六)修改配置文件
這里一共有5個文件要配置:分別是core-site.xml,hdfs-site.xml,yarn-site.xml,mapred-site.xml,workers。 五個配置文件都存放在$HADOOP_HOME/etc/hadoop這個路徑下。
(1)core-site.xml核心配置文件
當前要操作的文件是:/opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml我們使用編輯器,將它的文件內容修改如下:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
? ? <!-- 指定NameNode的地址 -->
? ? <property>
? ? ? ? <name>fs.defaultFS</name>
? ? ? ? <value>hdfs://hadoop100:8020</value>
? ? </property>
? ? <!-- 指定hadoop數據的存儲目錄 -->
? ? <property>
? ? ? ? <name>hadoop.tmp.dir</name>
? ? ? ? <value>/opt/module/hadoop-3.1.3/data</value>
? ? </property>
? ? <!-- 配置HDFS網頁登錄使用的靜態用戶為root-->
? ? <property>
? ? ? ? <name>hadoop.http.staticuser.user</name>
? ? ? ? <value>root</value>
? ? </property>
</configuration>
(2)HDFS配置文件
接下來配置第二個文件,/opt/module/hadoop-3.1.3/etc/hadoop/hdfs-site.xml
將它的文件內容修改如下:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
?
<configuration>
?? ?<!-- nn web端訪問地址-->
?? ?<property>
? ? ? ? <name>dfs.namenode.http-address</name>
? ? ? ? <value>hadoop100:9870</value>
? ? </property>
?? ?<!-- 2nn web端訪問地址-->
? ? <property>
? ? ? ? <name>dfs.namenode.secondary.http-address</name>
? ? ? ? <value>hadoop102:9868</value>
? ? </property>
</configuration>
(3)YARN配置文件
配置/opt/module/hadoop-3.1.3/etc/hadoop/yarn-site.xml,文件內容如下:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
? ? <!-- 指定MR走shuffle -->
? ? <property>
? ? ? ? <name>yarn.nodemanager.aux-services</name>
? ? ? ? <value>mapreduce_shuffle</value>
? ? </property>
? ? <!-- 指定ResourceManager的地址-->
? ? <property>
? ? ? ? <name>yarn.resourcemanager.hostname</name>
? ? ? ? <value>hadoop101</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>
</configuration>
(4)MapReduce配置文件
配置/opt/module/hadoop-3.1.3/etc/hadoop/mapred-site.xml,文件內容如下:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
?
<configuration>
?? ?<!-- 指定MapReduce程序運行在Yarn上 -->
? ? <property>
? ? ? ? <name>mapreduce.framework.name</name>
? ? ? ? <value>yarn</value>
? ? </property>
</configuration>
(5)配置workers
要修改的文件是:/opt/module/hadoop-3.1.3/etc/hadoop/workers,在該文件中增加如下內容:
hadoop100
hadoop101
hadoop102
注意:該文件中添加的內容結尾不允許有空格,文件中不允許有空行。
(七)同步分發配置文件
剛才我們是在hadoop100這臺機器上進行了正確的設置,但是,其他的2臺機器也要做相同的配置。所以我們用上一節課封裝的xsync 命令來進行文件同步。
把這個配置文件同步給其他的主機,使用命令如下:
[root@hadoop100 hadoop]$ xsync /opt/module/hadoop-3.1.3/etc/hadoop/
(九)啟動集群
(1)如果集群是第一次啟動,需要在hadoop100節點(指定為namenode的節點)格式化NameNode(注意:格式化NameNode,會產生新的集群id)
命令是:hd。具體如下:
[root@hadoop100 hadoop-3.1.3]$ hdfs namenode -format
(2)啟動HDFS
[root@hadoop100 hadoop-3.1.3]$ sbin/start-dfs.sh
提醒:此時會報錯不允許使用root用戶來啟動HDFS!
在環境變量中添加/etc/profile.d/my_env.sh
#添root加環境變量
#告訴 Hadoop 使用 root 用戶來啟動和管理相應的服務
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
同步給其他的機器,并使用source命令,讓環境變量生效!
再來試一次。
(3)在配置了ResourceManager的節點(hadoop101)啟動YARN
[root@hadoop101 hadoop-3.1.3]$ sbin/start-yarn.sh
(十)查看集群運行效果
(1)Web端查看HDFS的NameNode
(a)瀏覽器中輸入:http://hadoop100:9870
(b)查看HDFS上存儲的數據信息
(2)Web端查看YARN的ResourceManager
(a)瀏覽器中輸入:http://hadoop101:8088
(3)查看YARN上運行的Job信息
重置集群
如果集群出現了異常,可以嘗試如下操作(你將失去所有的數據,請謹慎)
停止hdfs. stop-dfs.sh
停止 yarn。 stop-yarn.sh
刪除 所有設備上的 /data, ?/log
重新初始化集群。hdfs namenode -format
重新啟動hdfs, yarn。 start-dfs.sh ? start-yarn.sh
三、課堂小結
通過本堂課的學習,我們學習了hadoop的基本組成,并且成功地配置了hadoop集群環境。