前言
? ? ? ?隨著大數據時代的到來,處理和分析海量數據已成為企業和科研機構不可或缺的能力。Hadoop,作為開源的分布式計算平臺,因其強大的數據處理能力和良好的可擴展性,成為大數據處理領域的佼佼者。本圖文教程旨在幫助讀者理解Hadoop集群的安裝過程,并通過MapReduce應用實例,深入體驗Hadoop在大數據處理中的強大功能。
? ? ? ?在正式進入Hadoop集群安裝之前,我們將簡要介紹Hadoop的核心組件——HDFS(Hadoop Distributed File System)和MapReduce。HDFS提供了分布式存儲能力,使得數據可以存儲在集群中的多個節點上,從而實現高容錯性和高吞吐量。而MapReduce則是一種編程模型,用于處理大規模數據集,其獨特的“Map”和“Reduce”兩個階段使得數據處理任務可以并行執行,大大提高了處理效率。
? ? ? ?通過本教程的學習,讀者將能夠掌握Hadoop集群的搭建方法,理解MapReduce編程模型的基本原理,并通過實際案例體驗Hadoop在大數據處理中的強大能力。
安裝OpenEuler系統
選擇Installer oenEuler? 20.03-LTS
選擇默認磁盤分區
配置網絡
選擇ipv4 setting
填寫IP地址(手動配置地址必須遵守Vmware WorkStation的基本配置)
查看地址配置信息
開始安裝
配置root賬戶密碼
置root賬戶密碼
通過此部署依次部署4臺,并通過ssh登錄
為每一臺配置yum源地址
cd /etc/yum.repos.d/
vi openEulerOS.repo
配置華為Yum源地址。
[openEuler-source]name=openEuler-sourcebaseurl=https://repo.huaweicloud.com/openeuler/openEuler-20.03-LTS/source/enabled=1gpgcheck=1gpgkey=https://repo.huaweicloud.com/openeuler/openEuler-20.03-LTS/source/RPM-GPG-KEY-openEuler[openEuler-os]name=openEuler-osbaseurl=https://repo.huaweicloud.com/openeuler/openEuler-20.03-LTS/OS/x86_64/enabled=1gpgcheck=1gpgkey=https://repo.huaweicloud.com/openeuler/openEuler-20.03-LTS/OS/x86_64/RPM-GPG-KEY-openEuler[openEuler-everything]name=openEuler-everythingbaseurl=https://repo.huaweicloud.com/openeuler/openEuler-20.03-LTS/everything/x86_64/enabled=1gpgcheck=1gpgkey=https://repo.huaweicloud.com/openeuler/openEuler-20.03-LTS/everything/x86_64/RPM-GPG-KEY-openEuler[openEuler-EPOL]name=openEuler-epolbaseurl=https://repo.huaweicloud.com/openeuler/openEuler-20.03-LTS/EPOL/x86_64/enabled=1gpgcheck=0
清楚現有并生成新的緩存
安裝實驗所需工具 vim tar (4臺都安裝)
yum install -y vim? tar
基礎配置
此部分配置Hadoop各節點使其符合軟件安裝的要求,內容比較多,除了教程中給出的步驟,如果是物理服務器等需要另外設置時間同步,因為華為云已經同步了時間,所以此處不加上相應的配置過程,如感興趣,請自行查資料完成。下面操作以node01為例,進行相應的配置
1.1.1.1 修改主機名
注意:如果主機名不是對應的node01、node2、node3、node4,則需要分別將四個節點的主機名進行修改,四臺均需要修改,此處以node01為例子。如果你在購買的時候已經設置好主機名,則不需要修改,可忽略此步驟。
方式一:使用hostname命令,直接命名主機名(但是此種設置重啟后會變回原來的,可不操作):
>? hostname node01>? bash
方式二:修改/etc/hostname文件(修改好后重啟,發生修改已生效):
>? vim /etc/hostname
# 修改完畢后,效果如下:
>? cat /etc/hostnamenode01>? reboot
方式三(統一采用這種):此外,還有一種更加簡便的辦法,直接執行后就可以了,不需要重啟:
>? hostnamectl set-hostname node01>? bash
以下是修改結果:
步驟 1??修改hosts配置文件
使用命令vim /etc/hosts,為node01-4四個節點增加內網IP與節點主機名的映射,確保各節點之間可以使用主機名作為通信的方式。
>? vim /etc/hosts# 需刪除自己的主機名映射到127.0.0.1的映射,如node01為:127.0.0.1?????? node01?? node01此行務必刪除!# 加入以下內容如下:(注意IP地址必須是自己的IP地址)192.168.28.31?? node01192.168.28.32?? node02192.168.28.33?? node03192.168.28.34?? node04
呈現結果如下:
1.1.1.2 關閉防火墻
執行下面命令查看防火墻狀態:
>? systemctl status firewalld
如果發現默認是已經禁用的,所以不需要關閉了。如果是開啟的,則需要在node01-4四個節點執行如下命令關閉防火墻:
>? systemctl stop firewalld>? systemctl disable firewalld
4個節點均執行此命令:
1.1.1.3 配置ssh互信
????????? 步驟 1????? 生成id_rsa.pub 文件
各節點執行 ssh-keygen -t rsa 命令后,連續回車三次后生成/root/.ssh/id_rsa.pub 文件
?步驟 1????? 匯總id_rsa.pub
各個節點執行cat /root/.ssh/id_rsa.pub命令,我們需要將密鑰進行匯總,思路是先將node2、node3、node4的密鑰拷貝到node01,在node01進行匯總,然后將匯總好的文件分發到node2、node3、node4,這樣的話,每個節點就有了彼此的密鑰,達到互相免密碼登錄的效果。
將node2的密鑰拷貝到node01(在node2執行):
> scp ~/.ssh/id_rsa.pub root@node01:~/.ssh/id2
執行的時候可能輸入“yes”,并且需要輸入node01的服務器密碼。
將node3的密鑰拷貝到node01(在node3執行):
> scp ~/.ssh/id_rsa.pub root@node01:~/.ssh/id3
執行的時候可能輸入“yes”,并且需要輸入node01的服務器密碼。
將node4的密鑰拷貝到node01(在node4執行):
> scp ~/.ssh/id_rsa.pub root@node01:~/.ssh/id4
執行的時候可能輸入“yes”,并且需要輸入node01的服務器密碼。
查看一下是否拷貝完成(在node01執行):
> ll ~/.ssh
發現node2、node3、node4的密鑰都拷貝到node01上了:
繼續進行匯總:
> cd ~/.ssh> cat id2 id3 id4 >> authorized_keys此外,還要將node01的密鑰也放進去:> cat id_rsa.pub >> authorized_keys查看匯總后的文件authorized_keys,發現已經有四臺機器的密鑰了:> cat authorized_keys
最后,需要將此文件分發到node02、node03、node04:
> scp authorized_keys root@node02:~/.ssh/> scp authorized_keys root@node03:~/.ssh/> scp authorized_keys root@node04:~/.ssh/
步驟 1????? 驗證測試
每個節點分別 ssh node01~node4,選擇 yes 后,確保能夠互相免密碼登錄。
兩兩相互測試
????????? 步驟 1????? 安裝JDK,在 node01~node04
1. 下載jdk8,或者通過上傳本地安裝文件
> wget https://mirrors.huaweicloud.com/java/jdk/8u192-b12/jdk-8u192-linux-x64.tar.gz
(此次演示node01,02-04都需要執行)
2. 解壓jdk
> mkdir –p /usr/lib/jvm/
> tar -zxvf jdk-8u192-linux-x64.tar.gz -C /usr/lib/jvm/
> mv? /usr/lib/jvm/jdk1.8.0_192?? /usr/lib/jvm/java
3. 配置環境變量
執行指令vim /etc/profile,編輯環境變量文件,在文件末尾添加下面內容
>? vim /etc/profileexport JAVA_HOME=/usr/lib/jvm/javaexport PATH=$PATH:$JAVA_HOME/binexport CLASSPATH=.:%JAVA_HOME%/lib/dt.jar:%JAVA_HOME%/lib/tools.jar
示例子如下:
使環境變量生效
> source /etc/profile
?5. 驗證java環境
> java –version
出現以下信息表示jdk安裝成功
java version "1.8.0_192"
Java(TM) SE Runtime Environment (build 1.8.0_192-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.192-b12, mixed mode)
上面驗證通過,下面的步驟可以不用執行
6. 環境變量拷至bashrc文件,使每次打開shell都生效,編輯/etc/bashrc,在文件末尾添加下面內容 (可選)
>vim /etc/bashrc
export JAVA_HOME=/usr/lib/jvm/java
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:%JAVA_HOME%/lib/dt.jar:%JAVA_HOME%/lib/tools.jar
1.1.1.4 創建必要的目錄
> mkdir -p /home/modules/data/buf/
> mkdir -p /home/test_tools/
> mkdir -p /home/nm/localdir
注意:四臺服務器都需要操作。
1.2.1 下載軟件包
????????? 步驟 1????? 獲取Hadoop軟件包
在node01找到下載好的Hadoop軟件包,放到home目錄,或者從本地上傳安裝文件
> wget https://archive.apache.org/dist/hadoop/common/hadoop-2.8.3/hadoop-2.8.3.tar.gz
1.2.1 搭建Hadoop集群
1.2.1.1 查看解壓目錄
在node01上準備hadoop組件
> tar -zxvf hadoop-2.8.3.tar.gz -C /home/modules
> ls /home/modules/? | grep hadoop
hadoop-2.8.3
1.2.1.2 修改配置文件
????????? 步驟 1????? 配置hadoop-env.sh
在node010上執行命令:
> vim /home/modules/hadoop-2.8.3/etc/hadoop/hadoop-env.sh
修改JAVA_HOME路徑為ECS已經默認裝好了JDK路徑
export
=/usr/lib/jvm/java
步驟 1????? 預配置core-site.xml
在node01上執行命令+
> vim /home/modules/hadoop-2.8.3/etc/hadoop/core-site.xml
在<configuration>與</configuration>之間填入以下內容,此為預配置,后期還要再修改,注意涉及到的主機名如果不同需要根據具體情況修改:
<property><name>fs.defaultFS</name><value>hdfs://node01:8020</value></property><property><name>hadoop.tmp.dir</name><value>/home/modules/hadoop-2.8.3/tmp</value></property><property><name>fs.obs.buffer.dir</name><value>/home/modules/data/buf</value></property><property><name>fs.obs.readahead.inputstream.enabled</name><value>true</value></property><property><name>fs.obs.buffer.max.range</name><value>6291456</value></property><property><name>fs.obs.buffer.part.size</name><value>2097152</value></property><property><name>fs.obs.threads.read.core</name><value>500</value></property><property><name>fs.obs.threads.read.max</name><value>1000</value></property><property><name>fs.obs.write.buffer.size</name><value>8192</value></property><property><name>fs.obs.read.buffer.size</name><value>8192</value></property><property><name>fs.obs.connection.maximum</name><value>1000</value></property><property><name>fs.obs.impl</name><value>org.apache.hadoop.fs.obs.OBSFileSystem</value></property><property><name>fs.obs.connection.ssl.enabled</name><value>false</value></property><property><name>fs.obs.fast.upload</name><value>true</value></property><property><name>fs.obs.socket.send.buffer</name><value>65536</value></property><property><name>fs.obs.socket.recv.buffer</name><value>65536</value></property><property><name>fs.obs.max.total.tasks</name><value>20</value></property><property><name>fs.obs.threads.max</name><value>20</value></property>
效果如下:
1.2.1.3 配置hdfs-site.xml
在node01上執行命令
> vim /home/modules/hadoop-2.8.3/etc/hadoop/hdfs-site.xml在<configuration>與</configuration>之間內容替換如下:<property><name>dfs.replication</name><value>3</value></property><property><name>dfs.namenode.secondary.http-address</name><value>node01:50090</value></property><property><name>dfs.namenode.secondary.https-address</name><value>node01:50091</value></property>
1.2.1.4 配置yarn-site.xml
在node01上執行命令
> vim /home/modules/hadoop-2.8.3/etc/hadoop/yarn-site.xml
在<configuration>與</configuration>之間內容替換如下:
<property><name>yarn.resourcemanager.hostname</name><value>node01</value><description>表示ResourceManager安裝的主機</description></property><property><name>yarn.resourcemanager.address</name><value>node01:8032</value><description>表示ResourceManager監聽的端口</description></property><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value><description>為map reduce應用打開shuffle 服務</description></property><property><name>yarn.nodemanager.local-dirs</name><value>/home/nm/localdir</value><description>表示nodeManager中間數據存放的地方</description></property><property><name>yarn.nodemanager.resource.memory-mb</name><value>3072</value><description>表示這個NodeManager管理的內存大小</description></property><property><name>yarn.nodemanager.resource.cpu-vcores</name><value>2</value><description>表示這個NodeManager管理的cpu個數</description></property><property><name>yarn.nodemanager.pmem-check-enabled</name><value>false</value><description>不檢查每個任務的物理內存量</description></property><property><name>yarn.nodemanager.vmem-check-enabled</name><value>false</value><description>不檢查每個任務的虛擬內存量</description></property><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value><description>為map reduce應用打開shuffle?服務</description></property>
1.2.1.5 配置mapred-site.xml
在node01上執行命令:
> cp /home/modules/hadoop-2.8.3/etc/hadoop/mapred-site.xml.template /home/modules/hadoop-2.8.3/etc/hadoop/mapred-site.xml
然后編輯復制出來的配置文件:
? vim /home/modules/hadoop-2.8.3/etc/hadoop/mapred-site.xml
在<configuration>與</configuration>之間內容替換如下:
<property><name>mapreduce.framework.name</name><value>yarn</value></property><property><name>mapreduce.jobhistory.address</name><value>node1:10020</value></property><property><name>mapreduce.jobhistory.webapp.address</name><value>node1:19888</value></property><property><name>mapred.task.timeout</name><value>1800000</value></property>
1.2.1.6 配置slaves
在node01節點配置從節點,刪掉里面的localhost,配置上從節點(node02、node03、node04)
> vim /home/modules/hadoop-2.8.3/etc/hadoop/slaves# 刪掉里面的localhost,添加以下內容node02node03node04
1.2.1.7 分發組件
在 node01 執行如下命令,將 hadoop-2.8.3 目錄拷貝到其他各個節點的/home/modules/下
> for i in {02..04};do scp -r /home/modules/hadoop-2.8.3 root@node${i}:/home/modules/;done二選一scp -r /home/modules/hadoop-2.8.3 root@node02:/home/modules/scp -r /home/modules/hadoop-2.8.3 root@node03:/home/modules/scp -r /home/modules/hadoop-2.8.3 root@node04:/home/modules/
等待幾分鐘拷貝完畢后,在 node02~node04 節點執行如下命令檢查是否復制成功
> ls /home/modules/ | grep hadoop
1.2.1.8 添加并校驗環境變量
在 node01~node04,執行下面命令添加環境變量:
> vim /etc/profile# 添加內容為:export HADOOP_HOME=/home/modules/hadoop-2.8.3export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATHexport HADOOP_CLASSPATH=/home/modules/hadoop-2.8.3/share/hadoop/tools/lib/*:$HADOOP_CLASSPATH
注意:請在末尾添加!
在 node01~node4,執行如下命令,使環境變量生效:
> source /etc/profile
此處以node01為例子
在 node01~node4,執行如下命令,校驗環境變量:
> echo $HADOOP_HOME
顯示如下內容則為配置正確:
1.2.1.9 初始化namenode
在 node01上執行如下命令,初始化 Namenode:
> hdfs namenode -format
1.3.1 啟動Hadoop集群
步驟 1??? 在node01節點執行以下命令:
> start-dfs.sh ; start-yarn.sh返回信息中有以下內容,表示hadoop集群啟動成功:Starting namenodes on [node01]Starting secondary namenodes [node01]starting yarn daemonshi
1.3.2 驗證Hadoop狀態
步驟 1?? 使用jps命令在node01-4中查看Java進程
在node01中可以查看到 NameNode,SecondaryNameNode,ResourceManager
進程,在node2-4中可以查看到 NodeManager 和 Datanode 進程,表示hadoop集群狀態正常。
>? jps
1538 WrapperSimpleApp
5732 SecondaryNameNode
5508 NameNode
6205 Jps
5918 ResourceManager
>? jps
3026 Jps
2740 DataNode
1515 WrapperSimpleApp
2862 NodeManager
步驟 3??? 訪問,可以登錄Namenode的Web界面:
http://namenodeip:50070
訪問Yran界面:
1.4.1 使用Hadoop統計以下表格人名字的出現次數
首先找到hadoop自帶worldcount jar包示例的路徑
創建數據文件夾,以及輸出文件夾
編輯輸入數據:
具體輸入的數據聽從老師安排
將本地準備的輸入文件上傳到hdfs中:
查看文件
執行MapReduce
hadoop jar hadoop-mapreduce-examples-2.8.3.jar wordcount /data/wordcount /output/wordcountresult查看結果:jpshadoop fs -text /output/wordcountresult/part-r-00000
結尾
? ? ? ? 經過前面的學習,相信讀者已經對Hadoop集群的安裝和MapReduce應用有了深入的了解。Hadoop作為一個開源的分布式計算平臺,為大數據處理提供了強大的支持。通過本教程的學習,讀者可以搭建起自己的Hadoop集群,并嘗試使用MapReduce處理大規模數據集。當然,Hadoop的功能遠不止于此,它還有更多的高級特性和應用場景等待我們去探索。希望本教程能夠為您在大數據處理領域的學習和實踐提供一些幫助。