<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          我的 Hadoop 3.2.2 之旅 【收藏夾吃灰系列】

          共 23698字,需瀏覽 48分鐘

           ·

          2021-04-06 13:59

          點(diǎn)擊藍(lán)色“有關(guān)SQL”關(guān)注我喲

          加個(gè)“星標(biāo)”,天天與10000人一起快樂(lè)成長(zhǎng)

          圖 | Lenis


          清明小假期結(jié)束了。

          以往經(jīng)驗(yàn)告訴我,三天不練手,代碼倒著走!


          這樣的心情,大學(xué)時(shí)代更有體會(huì)。每次假期回家,總要帶回一大包書(shū),告訴自己要奮斗,要看書(shū),結(jié)果回校前一夜,發(fā)現(xiàn)包里的書(shū),安靜如初。如果不趕緊翻出來(lái)品上一兩頁(yè),緩解下心焦,那可恥的厭惡感,總揮之不去。


          不知道什么時(shí)候起,我養(yǎng)成了習(xí)慣,假期中,即使拿不出10個(gè)小時(shí)來(lái)讀書(shū)和寫(xiě)代碼,每天也總得練上 2-3 小時(shí),讓自己不空著。


          這次也不例外,離上次搭建 Hadoop,過(guò)去有段時(shí)間了。趁著這個(gè)假期,我從頭到尾,把 Hadoop 3.2.2 給搭了起來(lái)。以下是實(shí)況記錄,如果能幫到各位,那也算是沒(méi)白糟蹋這段好時(shí)光!




          首先,說(shuō)下文章的結(jié)構(gòu)圖。



          本次實(shí)驗(yàn),完成的事情全部包括在這張 xmind 圖中了。



          環(huán)境搭建篇


          1 CentOS 的虛擬化安裝

          成功安裝 Hadoop,第一要?jiǎng)?wù)是正確安裝 Linux 操作系統(tǒng)。

          本次安裝,選擇 CentOS. CentOS 有很多版本,選擇哪個(gè),需根據(jù) Hadoop 版本來(lái)判定。

          我在寫(xiě)這篇文章時(shí),查詢過(guò) Hadoop 官方文檔,當(dāng)前它最新版本是 Hadoop 3.2.2. 安裝指南中,著重閱讀 Prerequisites(預(yù)備) 部分,發(fā)現(xiàn)它并未對(duì) CentOS 的版本提出要求,而僅要求 CentOS 安裝 Java 即可。所以,本次安裝選用最新的 CentOS 8.

          Hadoop 官網(wǎng): https://hadoop.apache.org/docs/stable/

          CentOS 的下載非???,需要時(shí)從官網(wǎng)下載最新版本,而不一定非得存儲(chǔ)起來(lái)。如今的網(wǎng)絡(luò)環(huán)境,給我可憐的 SSD 存儲(chǔ)系統(tǒng)減輕了不少經(jīng)濟(jì)壓力。但需說(shuō)明一點(diǎn),官方宣布,CentOS 8 支持服務(wù)將于 2021 年底失效,而 CentOS 7 則到 2024 年才退役。所以,生產(chǎn)環(huán)境使用 CentOS  7 還是 8 ,需要提前考慮好!

          CentOS 官網(wǎng):https://www.centos.org/

          image.png

          本次實(shí)驗(yàn)用途搭建的 Hadoop 環(huán)境,我采取三臺(tái)獨(dú)立虛擬機(jī)做法。

          D:\vm\HadoopCluster
           - Yarn
            - NodeA
            - NodeB

          D:\vm\HadoopCluster 是總目錄,分目錄 Yarn, NodeA, NodeB 分別存放主從服務(wù)器虛擬機(jī)。如果你有充足預(yù)算,當(dāng)然可以用三臺(tái)物理機(jī)來(lái)模擬。作為極客,配置個(gè) 5,6 臺(tái)主機(jī),很重要。如果沒(méi)有,單機(jī)配置足夠強(qiáng)大,勉強(qiáng)也湊合。

          所有 CentOS 虛擬機(jī)的密碼都是 : SparkAdmin

          虛擬機(jī)軟件用 Vmware. 預(yù)配置8G 內(nèi)存,4核,和50GB 硬盤(pán).

          2 創(chuàng)建專屬Hadoop軟件的用戶

          為每臺(tái)服務(wù)器,創(chuàng)建如下的賬戶:

          用戶名:HadoopAdmin 密碼: SparkAdmin

          一個(gè)小鋪墊:其實(shí) Hadoop 是基礎(chǔ),是開(kāi)胃菜,從 SparkAdmin 就不難猜到,之后還將有 Hive 和 Spark.小伙伴們,趕緊收藏加關(guān)注!

          為了和其他應(yīng)用隔離開(kāi)來(lái),有必要為 Hadoop 單獨(dú)建立一個(gè)應(yīng)用目錄。

          配置軟件安裝目錄:/opt/Hadoop.  用戶 HadoopAdmin 對(duì) /opt/Hadoop 具有無(wú)限訪問(wèn)權(quán)限 當(dāng)使用 HadoopAdmin 登錄時(shí),沒(méi)有權(quán)限建立目錄,所以要先登錄 root 賬戶:

          $su
          --輸入 HadoopAdmin密碼
          #cd /opt
          #mkdir Hadoop
          #chown hadoopadmin Hadoop
          #exit

          3 主從服務(wù)器之間的無(wú)密登錄

          主機(jī)名與網(wǎng)絡(luò)映射

          新建三臺(tái)虛擬機(jī)時(shí),采用了“建一復(fù)二”的策略,說(shuō)人話,就是新建一臺(tái),復(fù)制兩臺(tái)。

          這三臺(tái)都使用了相同的主機(jī)名,所以需要修改他們,分別為:namenode, nodea, nodeb

          為了防止修改錯(cuò)誤,先把 /etc/hosts 備份起來(lái):

          $ su
          # cp /etc/hosts /etc/hosts.backup
          # exit

          修改 /etc/hosts 文件:

          # 127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
          ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
          127.0.0.1       namenode        namenode.hadoop

          注釋掉第一行,加上 namenode

          事實(shí)上,修改 hosts 文件,并不解決問(wèn)題,而是要修改 /etc/hostname 文件。注釋掉第一行,加入 namenode.hadoop

          -- /etc/hostname 文件
          # localhost.localdomain
          namenode.hadoop

          --再切回 bash 控制臺(tái),# 就變成如下的提示:
          [root@namenode hadoopadmin]

          接下來(lái),添加主機(jī)識(shí)別地址。在 CentOS 中,主機(jī)與 ip 之間的映射,通過(guò) /etc/hosts 可以很容易建立。

          已知,三臺(tái)節(jié)點(diǎn)名稱分別是 namenode, nodea, nodeb. 將他們加入 hadoop 這個(gè)集群,分別擔(dān)任 Master 和 Worker 節(jié)點(diǎn)。所以修改 /etc/hosts 如下:

          192.168.31.10 namenode namenode.hadoop
          192.168.31.11 nodea nodea.hadoop
          192.168.31.12 nodeb nodeb.hadoop

          將以上三個(gè)映射,分別添加到每臺(tái)機(jī)器上。

          需要說(shuō)明下,vmware 提供了橋接,NAT 和僅主機(jī)的網(wǎng)絡(luò)模式,這個(gè)設(shè)置一定要選擇橋接模式(Bridge). 我不知道另外兩種模式下能不能搭建成功,有成功經(jīng)驗(yàn)的朋友,可以留言證實(shí)下。

          SSH 無(wú)密登錄原理

          無(wú)密登錄是通過(guò) ssh 實(shí)現(xiàn)的,大概步驟如下:

          1. 在客戶端(經(jīng)常使用其來(lái)登錄遠(yuǎn)程服務(wù)器)生成一對(duì)密鑰對(duì)
          2. 將公鑰放入遠(yuǎn)程服務(wù)器賬戶下

          生成密鑰對(duì)的命令工具是:

          ssh-keygen [-t rsa|dsa ]

          如果沒(méi)有指定特定的加密算法,默認(rèn)是用 rsa 來(lái)加密。

          將 /home/hadoopadmin/.ssh/id_rsa.pub 添加到遠(yuǎn)程服務(wù)器 nodea 的授權(quán)認(rèn)證文件下,那么從 namenode 訪問(wèn) nodea 時(shí),無(wú)需輸入密碼就可直接登錄。

          配置 SSH 無(wú)密登錄

          首先,通過(guò) scp 將公鑰文件上傳到遠(yuǎn)程服務(wù)器的用戶 hadoopadmin 的默認(rèn)工作目錄下:

          scp id_rsa.pub hadoopadmin@nodea:~

          在遠(yuǎn)程服務(wù)器 nodea 上,將公鑰加入本賬戶下的  ~/.ssh/authorized_keys 文件中去。

           cat id_rsa.pub >>.ssh/authorized_keys
           chmod 644 authorized_keys

          如此反復(fù),直到所有服務(wù)器,都能兩兩通過(guò) SSH 登錄。

          4 Java 環(huán)境搭建

          安裝 Hadoop 時(shí),唯一對(duì) CentOS 有要求的是,安裝正確的 Java.

          為調(diào)試方便,盡量安裝 JDK. Jre 缺少了 JPS 工具,而 JPS 在后續(xù)檢測(cè)環(huán)境時(shí),極為方便!

          截止本文寫(xiě)作時(shí),Hadoop 選用的是 3.2.2,它對(duì) Java 運(yùn)行時(shí)環(huán)境的要求是 Java8/Java11

          Java 與 Hadoop 的版本對(duì)應(yīng):

          Hadoop 版本Java 版本備注
          Hadoop 3.3 及以上Java 8; Java 11Java 11 不支持編譯 Hadoop
          Hadoop 3.0.x - 3.2.xJava 8
          Hadoop 2.7.x - 2.10.xJava 7; Java 8

          步驟:

          • 下載 JDK 8

          安裝包有兩種,tar.gz 的壓縮包 和 rpm 管理的安裝包。為了普適性,選擇 tar.gz 的壓縮包,這樣在任何 Linux 平臺(tái)上,都可以參考它來(lái)安裝。

          下載地址:https://www.java.com/zh-CN/download/manual.jsp

          • 解壓到 /opt/java

          /opt/java 是與 /opt/Hadoop 齊平的目錄,為了體現(xiàn) Hadoop 生態(tài)的完整性安裝,Java 安裝目錄就放在這里。同樣,需要配置 HadoopAdmin 用戶對(duì)這個(gè)目錄的權(quán)限。假如 HadoopAdmin 擁有對(duì) /opt 的 Owner 權(quán)限,那么這里 /opt/java 自然繼承了這個(gè)權(quán)限。

          給 HadoopAdmin 附上 /opt/Java 的 owner 權(quán)限:

          -- 先切換到 root 賬戶
          $ su
          -- 輸入密碼
          # cd /opt
          # mkdir java
          # chown hadoopadmin java
          • 設(shè)置環(huán)境變量 JAVA_HOME=/opt/java/jdk8

          回到 HadoopAdmin 用戶的工作目錄(先退出 root 賬戶) :

          # exit
          cd ~

          打開(kāi) .bashrc 編輯:

          vi .bashrc

          加入 JAVA_HOME 變量,編輯 PATH 變量,使其指向新建的 Java bin 目錄:

          JAVA_HOME=/opt/java/jdk8
          PATH=$PATH:$JAVA_HOME

          export JAVA_HOME
          export PATH
          • 驗(yàn)證 Java 安裝正確性:
          -- Java -version

          [hadoopadmin@localhost ~]$ java -version
          java version "1.8.0_281"
          Java(TM) SE Runtime Environment (build 1.8.0_281-b09)
          Java HotSpot(TM) 64-Bit Server VM (build 25.281-b09, mixed mode)



          Hadoop軟件安裝配置



          1 下載與安裝

          再次聲明,本次實(shí)驗(yàn)使用的 Hadoop 版本是 3.2.2.

          下載地址:http://www.apache.org/dyn/closer.cgi/hadoop/common/我在上海,通過(guò)訪問(wèn)這個(gè)網(wǎng)址可直達(dá):https://mirrors.bfsu.edu.cn/apache/hadoop/common/hadoop-3.2.2/

          image.png

          目錄中會(huì)有幾個(gè)文件,比較繞。除了安裝文件,還有源代碼文件包,組件包,說(shuō)明文件等等。如果你只是要安裝使用 Hadoop, 那下載紅圈部分即可。

          下載速度非???,不到1分鐘就可全部下載完畢。所以不用在本地保存。

          若上述地址無(wú)法訪問(wèn),可通過(guò)官網(wǎng)尋找:

          Hadoop 官方地址:https://hadoop.apache.org/docs/stable/

          2 配置文件

          在設(shè)定 Hadoop 的配置文件前,先要簡(jiǎn)單了解下 Hadoop 的基本原理:

          如果僅對(duì)配置文件具體內(nèi)容感興趣,可略過(guò)這部分原理解釋,直接看《可用的一套 Hadoop Cluster 配置》

          01 Hadoop集群框架圖.svg

          Hadoop 是由 HDFS 和 YARN 構(gòu)成的分布式存儲(chǔ)和分布式計(jì)算的集群。

          HDFS 用作分布式存儲(chǔ),主體部分由 Name Node 和 Data Node 組成。Name Node 節(jié)點(diǎn)記錄所有 Data Node 的地址和文件信息。

          YARN 是分布式計(jì)算框架,主體部分由 Resource Manager 和 Node Manager 組成。Resource Manager 可看做大腦管理中心,Node Manager 就是四肢與軀干和神經(jīng)細(xì)胞。

          由于 Name Node 和 Resource Manager 都帶有管理性質(zhì),所以可放在同一臺(tái)服務(wù)器上,方便完成個(gè)人搭建的測(cè)試。在生產(chǎn)環(huán)境中,分開(kāi)來(lái)創(chuàng)建,肯定是利大于弊。

          有了上面的基本概念,則可以修改配置文件:

          • Core-Site:配置 Name Node 與 Data Node
          • HDFS-Site: 配置分布式存儲(chǔ)的資源范圍
          • YARN-Site: 配置 YARN 的資源范圍
          • Map-Reduce Site: 配置 MapReduce 1的資源范圍
          • env-site: 配置 Hadoop 所在的環(huán)境變量,比如 Hadoop 安裝目錄,Java 安裝目錄

          Hadoop 的配置,采用分層控制策略。

          • 總策略配置,設(shè)置了不可寫(xiě),這類配置文件放在頂級(jí)目錄里:

          core-default.xml,  hdfs-default.xml,  yarn-default.xml, mapred-default.xml.

          • 自定義配置的文件,用戶可讀可寫(xiě),放在特定的目錄里:

          etc/hadoop/core-site.xml,  etc/hadoop/hdfs-site.xml,  etc/hadoop/yarn-site.xml , etc/hadoop/mapred-site.xml.

          • 并且,還配置了影響 Hadoop 進(jìn)程執(zhí)行的環(huán)境變量控制文件:

          etc/hadoop/hadoop-env.sh , etc/hadoop/yarn-env.sh.

          前兩層的配置,主要是針對(duì) Hadoop 集群的配置,而最后一組控制文件,是針對(duì) Hadoop 單個(gè)組件的進(jìn)程做配置,控制的粒度更細(xì),更偏單臺(tái)服務(wù)器。

          配置同一個(gè) Hadoop 集群時(shí),采用的策略是所有配置文件都用同一套。即配置一套,然后同步到 Master 和 Workder 節(jié)點(diǎn)。

          下面就一一說(shuō)明,配置文件中坑會(huì)遇到的細(xì)節(jié)和默認(rèn)值,以便很好的配置 Hadoop 集群及其所在服務(wù)器環(huán)境。

          節(jié)點(diǎn)服務(wù)器的環(huán)境控制:

          這層的控制,主要通過(guò) HADOOP_HOME/etc/hadoop/yarn-env.sh 來(lái)控制。那么這兩個(gè)文件到底可以控制哪些環(huán)境變量呢?

          DaemonEnvironment Variable
          NameNodeHDFS_NAMENODE_OPTS
          DataNodeHDFS_DATANODE_OPTS
          Secondary NameNodeHDFS_SECONDARYNAMENODE_OPTS
          ResourceManagerYARN_RESOURCEMANAGER_OPTS
          NodeManagerYARN_NODEMANAGER_OPTS
          WebAppProxyYARN_PROXYSERVER_OPTS
          Map Reduce Job History ServerMAPRED_HISTORYSERVER_OPTS

          $HADOOP_HOME 是 Hadoop 安裝的本機(jī)地址

          這地方要注意 2個(gè)問(wèn)題:

          • 同一個(gè)Hadoop集群,共用同一份配置文件,通過(guò) scp 就可以擴(kuò)散到整個(gè)集群中

          這很好理解。將同一份文件,傳播給其他節(jié)點(diǎn),或?qū)⑺泄?jié)點(diǎn)上的進(jìn)程,使用同一個(gè)命令來(lái)運(yùn)行,正是分布式存儲(chǔ)和計(jì)算要解決的問(wèn)題。比如 YARN, 在分發(fā)計(jì)算包的時(shí)候,調(diào)用同樣一個(gè)進(jìn)程,來(lái)運(yùn)算不同的數(shù)據(jù)集

          • 環(huán)境參數(shù)到底在控制什么

          比如 HDFS_NAMENODE_OPTS,指定了使用 ParallevlGC ,并啟動(dòng) 4G Java 堆。

          export HDFS_NAMENODE_OPTS="-XX:+UseParallelGC -Xmx4g"

          最后,節(jié)點(diǎn)服務(wù)器的環(huán)境配置,包含兩個(gè)重要參數(shù),HADOOP_HOME & JAVA_HOME.

          HADOOP_HOME 是 Hadoop 安裝的路徑,省去每次執(zhí)行 Hadoop 命令時(shí),需要輸入 Hadoop 所在的全路徑名。相比 /opt/hadoop/bin/HDFS, 僅敲入 HDFS 簡(jiǎn)潔得多。

          JAVA_HOME, 則可以在 Hadoop 服務(wù)賬戶的環(huán)境變量中配置,也可以在 hadoop-env.sh 中指定特定的 Java 版本。

          節(jié)點(diǎn)服務(wù)器配置

          再次說(shuō)明,配置文件部署策略,是一組配置文件全局復(fù)用,而不用每個(gè)角色節(jié)點(diǎn)各自配置。

          開(kāi)頭的那張架構(gòu)圖,一個(gè)完整的 Hadoop 集群,有四種組件存在于 Hadoop 集群中,NameNode, DataNode, Resource Manager, 和 Node Manager. 這四種各自有配置參數(shù),互不影響。

          真正核心的配置文件,也正是這四個(gè):

          • core-site.xml
          • hdfs-site.xml
          • mapred-site.xml
          • yarn-site.xml

          下面具體說(shuō)細(xì)節(jié)。

          • $HADOOP_HOME/etc/hadoop/core-site.xml
          ParameterValueNotes
          fs.defaultFSNameNode URIhdfs://host:port/
          io.file.buffer.size131072Size of read/write buffer used in SequenceFiles.

          這里的 core-site 其實(shí)可以把  "-site" 去掉,配置的是集群的基本設(shè)定,全局唯一。比如 fs.defaultFS,指向的是 NameNode 所在的節(jié)點(diǎn)和端口位置,用來(lái)配置工作節(jié)點(diǎn)與主節(jié)點(diǎn)之間的通信;io.file.buffer.size 控制的是緩存單位,比如131072 是128K,寫(xiě)入時(shí),數(shù)據(jù)滿 128K 就會(huì)從內(nèi)存寫(xiě)到磁盤(pán)上。

          更詳細(xì)的配置參數(shù),看這里:https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/core-default.xml

          • etc/hadoop/hdfs-site.xml

          這個(gè)文件就需要分類來(lái)配置。hdfs 代表的是 Hadoop File System, 即 Hadoop 文件系統(tǒng)。HDFS 有兩類節(jié)點(diǎn), NameNode 與 DataNode. 這兩類節(jié)點(diǎn)上的 Hadoop 進(jìn)程,用到的參數(shù)是不一樣的。

          針對(duì) NameNode 可用的配置參數(shù)有:

          ParameterValueNotes
          dfs.namenode.name.dirPath on the local filesystem where the NameNode stores the namespace and transactions logs persistently.If this is a comma-delimited list of directories then the name table is replicated in all of the directories, for redundancy.

          針對(duì) DataNode 可用的配置參數(shù)有:

          ParameterValueNotes
          dfs.datanode.data.dirComma separated list of paths on the local filesystem of a DataNode where it should store its blocks.If this is a comma-delimited list of directories, then data will be stored in all named directories, typically on different devices.

          其他 HDFS 服務(wù)器 參考配置:https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml

          • 分布式計(jì)算配置 YARN-site.xml

          稍比 HDFS-site.xml 配置復(fù)雜一些。有三層配置:Resource Manager, Node Manager 共通的配置;Resource Manager 獨(dú)有配置;Node Manager 獨(dú)有配置。

          共通的配置:

          ParameterValueNotes
          yarn.acl.enabletrue / falseEnable ACLs? Defaults to false.

          Resource Manager 配置:

          ParameterValueNotes
          yarn.resourcemanager.addressResourceManager host:port for clients to submit jobs.host:port If set, overrides the hostname set in yarn.resourcemanager.hostname.
          yarn.resourcemanager.hostnameResourceManager host.host Single hostname that can be set in place of setting all yarn.resourcemanager*address resources. Results in default ports for ResourceManager components.

          Node Manager 配置:

          arameterValueNotes
          yarn.nodemanager.log-dirsComma-separated list of paths on the local filesystem where logs are written.Multiple paths help spread disk i/o.
          yarn.nodemanager.remote-app-log-dir-suffixlogsSuffix appended to the remote log dir. Logs will be aggregated to {user}/${thisParam} Only applicable if log-aggregation is enabled.
          yarn.nodemanager.aux-servicesmapreduce_shuffleShuffle service that needs to be set for Map Reduce applications.

          更詳細(xì)的配置參數(shù),戳這里:https://hadoop.apache.org/docs/stable/hadoop-yarn/hadoop-yarn-common/yarn-default.xml

          可用的一套 Hadoop Cluster 配置:

          上面說(shuō)的是泛泛的配置原理,這里提供一套,親測(cè)可用的配置文件組合。

          這將是一套完整的配置文件組合:Hadoop 環(huán)境配置 + Hadoop Core/HDFS/YARN 配置

          強(qiáng)烈建議:安裝 visual studio code 用作文本編輯器

          請(qǐng)根據(jù)自己需要,配置相關(guān)目錄

          --.bashrc


          JAVA_HOME=/opt/java/jdk8
          PATH=$PATH:$JAVA_HOME/bin

          VSCODE_HOME=/opt/java/VSCode-linux-x64/bin
          HADOOP_HOME=/opt/Hadoop/hadoop-3.2.2
          PATH=$PATH:$VSCODE_HOME:$HADOOP_HOME/bin:$HADOOP_HOME/sbin


          export HADOOP_HOME
          export HADOOP_MAPRED_HOME=${HADOOP_HOME}
          export HADOOP_COMMON_HOME=${HADOOP_HOME}
          export HADOOP_HDFS_HOME=${HADOOP_HOME}
          export HADOOP_YARN_HOME=${HADOOP_HOME}
          export VSCODE_HOME 
          export JAVA_HOME
          export PATH
          --$HADOOP_HOME/etc/hadoop/hadoop-env.sh

          export JAVA_HOME=/opt/java/jdk8
          export HADOOP_HOME=/opt/Hadoop/hadoop-3.2.2

          -- $HADOOP_HOME/bin/hadoop

          export HADOOP_HOME=/opt/Hadoop/hadoop-3.2.2
           
          -- $HADOOP_HOME/etc/hadoop/core-site.xml


          <configuration>
            <property>
              <name>fs.defaultFS</name>
              <value>hdfs://namenode:9000</value>
              <description>the default name node address</description>
            </property>

            <property>
              <name>hadoop.tmp.dir</name>
              <value>/opt/Hadoop/tmp</value>
            </property>
          </configuration>

          -- $HADOOP_HOME/etc/hadoop/hdfs-site.xml


          <configuration>
            <property>
              <name>dfs.namenode.name.dir</name>
              <value>/opt/Hadoop/namenode</value>
            </property>
            <property>
              <name>dfs.datanode.data.dir</name>
              <value>/opt/Hadoop/datanode</value>
            </property>
            
            <property>
              <name>dfs.replication</name>
              <value>2</value>
            </property>
          </configuration>
          -- $HADOOP_HOME/etc/hadoop/mapred-site.xml



          <configuration>
            <property>
              <name>mapreduce.framework.name</name>
              <value>yarn</value>
            </property>
            
            <property>
              <name>yarn.app.mapreduce.am.env</name>
              <value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
            </property>

            <property>
              <name>mapreduce.map.env</name>
              <value>HADOOP_MAPRED_HOME=$HADOOP_NAME</value>
            </property>


            <property>
              <name>mapreduce.reduce.env</name>
              <value>HADOOP_MAPRED_HOME=$HADOOP_NAME</value>
            </property>

          </configuration>



          -- $HADOOP_HOME/etc/hadoop/yarn-site.xml

          <configuration>

          <!-- Site specific YARN configuration properties -->
            <property>
              <name>yarn.acl.enable</name>
              <value>0</value>
            </property>

            <property>
              <name>yarn.resourcemanager.hostname</name>
              <value>192.168.31.10</value>
            </property>

            <property>
              <name>yarn.nodemanager.aux-services</name>
              <value>mapreduce_shuffle</value>
            </property>

            <property>
              <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
              <value>org.apache.hadoop.mapred.ShuffleHandler</value>
            </property>
            
            <property>
              <name>yarn.application.classpath</name>
              <value>/opt/Hadoop/hadoop-3.2.2/etc/hadoop:/opt/Hadoop/hadoop-3.2.2/share/hadoop/common/lib/*:/opt/Hadoop/hadoop-3.2.2/share/hadoop/common/*:/opt/Hadoop/hadoop-3.2.2/share/hadoop/hdfs:/opt/Hadoop/hadoop-3.2.2/share/hadoop/hdfs/lib/*:/opt/Hadoop/hadoop-3.2.2/share/hadoop/hdfs/*:/opt/Hadoop/hadoop-3.2.2/share/hadoop/mapreduce/lib/*:/opt/Hadoop/hadoop-3.2.2/share/hadoop/mapreduce/*:/opt/Hadoop/hadoop-3.2.2/share/hadoop/yarn:/opt/Hadoop/hadoop-3.2.2/share/hadoop/yarn/lib/*:/opt/Hadoop/hadoop-3.2.2/share/hadoop/yarn/*</value>
            </property>


          </configuration>

          -- $HADOOP_HOME/etc/hadoop/workers

          nodea
          nodeb

          復(fù)制所有的 HADOOP_HOME/etc/hadoop 下。即可完成子節(jié)點(diǎn)的配置。

          當(dāng)然也要考慮整個(gè)用戶級(jí)別的環(huán)境變量同步,即 ~/.bashrc 或者~/.bash_profile 同步, 或者其他設(shè)置環(huán)境變量文件的同步。

          3 啟動(dòng)集群

          整個(gè) Hadoop 集群是由兩部組成的, 分布式存儲(chǔ)(HDFS)和分布式計(jì)算(YARN)。HDFS 是 YARN 得以施展魔法的前提存在,所以在 YARN 啟動(dòng)之前, HDFS 必定首先要存在。

          就跟我們使用電腦是一模一樣的,必須先把硬盤(pán)架起來(lái),進(jìn)行格式化,然后才是安裝操作系統(tǒng)。此時(shí),Hadoop 就像是剛配好的電腦,第一步首先要進(jìn)行硬盤(pán)格式化,也就是 HDFS 的 namenode format:

          hdfs namenode -format

          然后打開(kāi) hadoop hdfs ,歡迎 YARN 服務(wù)的降臨:

          start-dfs.sh

          試著給 HDFS 加一個(gè)自定義目錄,用來(lái)操作測(cè)試文件:

          HDFS dfs -mkdir -p /user/hadoop
          HDFS dfs -ls 

          通過(guò)訪問(wèn) http://namenode:9870 以網(wǎng)頁(yè)形式監(jiān)控 hdfs 的運(yùn)行情況

          如果上面的 HDFS 測(cè)試沒(méi)有問(wèn)題,接下來(lái)就可以開(kāi)始做 YARN 的啟動(dòng):

          start-yarn.sh

          4 關(guān)閉集群

          有兩種方法,可以關(guān)閉一個(gè) Hadoop 集群

          第一種方法,依次關(guān)閉 YARN 和 HDFS:

          stop-yarn.sh
          stop-dfs.sh

          第二種方法,執(zhí)行一個(gè)腳本,關(guān)閉 YARN 和 HDFS:

          stop-all.sh

          5 遇到的問(wèn)題

          • Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).

          這是 SSH 配置問(wèn)題。實(shí)際上,每臺(tái)服務(wù)器之間,都需要 SSH 無(wú)密登錄,不僅僅是 master node 到 worker node 之間,任意一臺(tái) worker node 與 worker node 之間 worker node 與 master node 之間都需要配置。

          除此之外,還需要設(shè)置 /etc/ssh/sshd_config:

          PermisRootLogin no
          PubkeyAuthentication yes

          # GSSAPIAuthentication yes
          # GSSAPICleanupCredentials no

          UsePAM yes

          每個(gè)節(jié)點(diǎn)都需要修改,這樣 SSH 才能保證起作用。之后重新啟動(dòng) ssh 服務(wù):

          systemctl restart sshd

          并且修改 ~/.ssh/authorized_keys 的權(quán)限,

          chmod 0600 ~/.ssh/authorized_keys

          即便這樣設(shè)置了,在啟動(dòng) start-dfs.sh 時(shí)還會(huì)遇到同樣的問(wèn)題,看過(guò)這份 shell 腳本才知道,還需要把本機(jī)的 public key 加入到 authorized_keys 里面去:

          cat ~/.ssh/id_rsa_namenode.pub >>authorized_Keys

          /* +++++++++++++++++
          id_rsa_namenode.pub 是在本次實(shí)驗(yàn)中,
          充當(dāng) namenode 和 resource manager 的服務(wù)器上,
          使用ssh-keygen 生成的公鑰(public key)
          +++++++++++++++++++*/


          • 沒(méi)有 datanode, 即使start-dfs.sh/start-all.sh 已經(jīng)完全成功運(yùn)行

          2021-04-03 03:09:45,554 WARN org.apache.hadoop.hdfs.server.datanode.DataNode: Problem connecting to server: namenode/192.168.31.10:9000 2021-04-03 03:09:49,551 WARN org.apache.hadoop.hdfs.server.datanode.DataNode: Block pool ID needed, but service not yet registered with NN, trace: java.lang.Exception at org.apache.hadoop.hdfs.server.datanode.BPOfferService.getBlockPoolId(BPOfferService.java:214) at (此處省卻Log信息)


          搜索了無(wú)數(shù)的帖子,最后發(fā)現(xiàn)其實(shí)只要把 /etc/hosts 中的 127.0.0.1 去掉,就可以。

          • 沒(méi)有找到可用的 nodemanager, 其實(shí)被防火墻給擋住,nodemanager 無(wú)法與 resource manager 通信
          • YarnChild class 沒(méi)有找到,那是 因?yàn)?yarn-site.xml 沒(méi)有配置 hadoop classpath 命令返回的路徑

          我在本次實(shí)驗(yàn)中,需要將如下的這些目錄,賦值給 hadoop classpath:

          /opt/Hadoop/hadoop-3.2.2/etc/hadoop: /opt/Hadoop/hadoop-3.2.2/share/hadoop/common/lib/: /opt/Hadoop/hadoop-3.2.2/share/hadoop/common/: /opt/Hadoop/hadoop-3.2.2/share/hadoop/hdfs: /opt/Hadoop/hadoop-3.2.2/share/hadoop/hdfs/lib/: /opt/Hadoop/hadoop-3.2.2/share/hadoop/hdfs/: /opt/Hadoop/hadoop-3.2.2/share/hadoop/mapreduce/lib/: /opt/Hadoop/hadoop-3.2.2/share/hadoop/mapreduce/: /opt/Hadoop/hadoop-3.2.2/share/hadoop/yarn: /opt/Hadoop/hadoop-3.2.2/share/hadoop/yarn/lib/: /opt/Hadoop/hadoop-3.2.2/share/hadoop/yarn/

          其中, /opt/Hadoop/hadoop-3.2.2 就是本次實(shí)驗(yàn)安裝的 hadoop 目錄所在。

          -- yarn-site.xml

          <property>
              <name>yarn.application.classpath</name>
              <value>/opt/Hadoop/hadoop-3.2.2/etc/hadoop:/opt/Hadoop/hadoop-3.2.2/share/hadoop/common/lib/*:/opt/Hadoop/hadoop-3.2.2/share/hadoop/common/*:/opt/Hadoop/hadoop-3.2.2/share/hadoop/hdfs:/opt/Hadoop/hadoop-3.2.2/share/hadoop/hdfs/lib/*:/opt/Hadoop/hadoop-3.2.2/share/hadoop/hdfs/*:/opt/Hadoop/hadoop-3.2.2/share/hadoop/mapreduce/lib/*:/opt/Hadoop/hadoop-3.2.2/share/hadoop/mapreduce/*:/opt/Hadoop/hadoop-3.2.2/share/hadoop/yarn:/opt/Hadoop/hadoop-3.2.2/share/hadoop/yarn/lib/*:/opt/Hadoop/hadoop-3.2.2/share/hadoop/yarn/*</value>
            </property>



          wordcount 入門(mén)實(shí)例



          WordCount 是大數(shù)據(jù)編程領(lǐng)域的 Hello World 實(shí)例,也是用來(lái)測(cè)試 Hadoop 有效性的實(shí)例之一。

          它被封裝在 Jar 包,通過(guò)“吃進(jìn)”文本文件,“吐出”單詞的總計(jì)數(shù)。所以做這個(gè)實(shí)驗(yàn),需要準(zhǔn)備文本文件, 在 HDFS 上創(chuàng)建存放這些文本文件的目錄,同時(shí)還需創(chuàng)建 wordcount 的結(jié)果輸出目錄。

          獲取文本文件

          從 gutenberg 下載文本文件,分別保存為 franklin.txt, herbert.txt, maria.txt. 要注意,這些文件是存在當(dāng)前活動(dòng)目錄下。

          wget -O franklin.txt http://www.gutenberg.org/files/13482/13482.txt
          wget -O herbert.txt http://www.gutenberg.org/files/20220/20220.txt
          wget -O maria.txt http://www.gutenberg.org/files/29635/29635.txt

          創(chuàng)建HDFS相關(guān)目錄

          wordcount 會(huì)讀取指定目錄下所有文件,所以使用的輸入輸出兩個(gè)目錄,一定要分開(kāi)創(chuàng)建。

          hdfs dfs -mkdir -p /user/hadoop/wordcounter/input
          hdfs dfs -mkdir -p /user/hadoop/wordcounter/output

          上傳文本文件到HDFS

          一次性上傳所有文本文件

          hdfs dfs -put franklin.txt herbert.txt maria.txt /user/hadoop/wordcounter/input

          檢查文件是否上傳到位:

          [hadoopadmin@namenode ~]$ hdfs dfs -ls /user/hadoop/wordcounter/input
          Found 3 items
          -rw-r--r--   2 hadoopadmin supergroup     143220 2021-04-04 04:28 /user/hadoop/wordcounter/input/franklin.txt
          -rw-r--r--   2 hadoopadmin supergroup     561609 2021-04-04 04:28 /user/hadoop/wordcounter/input/herbert.txt
          -rw-r--r--   2 hadoopadmin supergroup     172797 2021-04-04 04:28 /user/hadoop/wordcounter/input/maria.txt

          運(yùn)行 wordcount 實(shí)例

          使用 Yarn 來(lái)執(zhí)行 wordcount 這里要注意,/user/hadoop/wordcounter/output/wordcountresult.txt 會(huì)被 wordcount 當(dāng)做一個(gè)輸出目錄。這是我一開(kāi)始疏忽的地方。由于 MapReduce 會(huì)產(chǎn)生大量的數(shù)據(jù),單個(gè)文件在理論上不能存下,所以輸出結(jié)果只能以目錄為目標(biāo),目錄下可以生成多個(gè)小文件,用來(lái)存放這些結(jié)果數(shù)據(jù)。

          [hadoopadmin@namenode ~]$ yarn jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.2.jar wordcount /user/hadoop/wordcounter/input/*.* /user/hadoop/wordcounter/output/wordcountresult.txt
          2021-04-04 23:02:54,101 INFO client.RMProxy: Connecting to ResourceManager at namenode/192.168.31.10:8032
          2021-04-04 23:02:55,042 INFO mapreduce.JobResourceUploader: Disabling Erasure Coding for path: /tmp/hadoop-yarn/staging/hadoopadmin/.staging/job_1617530419259_0003
          2021-04-04 23:02:55,263 INFO input.FileInputFormat: Total input files to process : 3
          2021-04-04 23:02:55,367 INFO mapreduce.JobSubmitter: number of splits:3
          2021-04-04 23:02:55,779 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1617530419259_0003
          2021-04-04 23:02:55,780 INFO mapreduce.JobSubmitter: Executing with tokens: []
          2021-04-04 23:02:56,511 INFO conf.Configuration: resource-types.xml not found
          2021-04-04 23:02:56,511 INFO resource.ResourceUtils: Unable to find 'resource-types.xml'.
          2021-04-04 23:02:56,950 INFO impl.YarnClientImpl: Submitted application application_1617530419259_0003
          2021-04-04 23:02:57,027 INFO mapreduce.Job: The url to track the job: http://namenode:8088/proxy/application_1617530419259_0003/
          2021-04-04 23:02:57,028 INFO mapreduce.Job: Running job: job_1617530419259_0003
          2021-04-04 23:03:04,166 INFO mapreduce.Job: Job job_1617530419259_0003 running in uber mode : false
          2021-04-04 23:03:04,167 INFO mapreduce.Job:  map 0% reduce 0%

            Total time spent by all maps in occupied slots (ms)=46766
            Total time spent by all reduces in occupied slots (ms)=2713
          ……(省去多余l(xiāng)og信息)
            Peak Reduce Virtual memory (bytes)=2612924416
           Shuffle Errors
            BAD_ID=0
            CONNECTION=0
            IO_ERROR=0
            WRONG_LENGTH=0
            WRONG_MAP=0
            WRONG_REDUCE=0
           File Input Format Counters 
            Bytes Read=877626
           File Output Format Counters 
            Bytes Written=203817
          [hadoopadmin@namenode ~]$ 

          檢查 wordcount 運(yùn)行結(jié)果

          [hadoopadmin@namenode ~]$ hdfs dfs -cat /user/hadoop/wordcounter/output/wordcountresult.txt/part-r-00000
          ...
          end-organ 5
          end-organ; 1
          end-organs 12
          end-organs, 3
          end-organs. 2
          end-organs: 1
          end-organs_. 1
          ...

          這里截取一段結(jié)果作為展示。



          應(yīng)用監(jiān)控


          Hadoop 主要分兩類監(jiān)控:HDFS 和 Yarn.

          HDFS

          它的訪問(wèn)地址是 http://namenode:9870namenode 是 HDFS 主控節(jié)點(diǎn) name node(與 data node區(qū)分開(kāi)來(lái))機(jī)器名。

          image.png

          YARN

          它的訪問(wèn)地址是 http://namenode:8088/cluster/namenode其實(shí)是 Resource Manager 所在的機(jī)器。

          通過(guò)訪問(wèn) Finished 頁(yè)面,查看剛才運(yùn)行的 wordcount 實(shí)例應(yīng)用



          小結(jié)


          太長(zhǎng)的技術(shù)文,直擊了公眾號(hào)的軟肋。用線性的書(shū)寫(xiě),表達(dá)網(wǎng)狀的思維,挑戰(zhàn)太大了。僅僅把文章搬到公眾號(hào)上,就花了差不多近半小時(shí)。但對(duì)個(gè)人來(lái)講,公眾號(hào)又確實(shí)是發(fā)布個(gè)人觀點(diǎn)的優(yōu)秀窗口,值得花這個(gè)時(shí)間。


          良好的閱讀體驗(yàn),能增加個(gè)人閱讀興趣。為此,我購(gòu)買(mǎi)過(guò)一系列產(chǎn)品,kindle, mind pad, ipad pro 12, 硬件配置是上去了,但內(nèi)容,卻始終得不到很好得表現(xiàn)。比如我喜歡楷體,黃背景光,但幾乎所有的閱讀器,除了微信讀書(shū) ipad 版能令我滿意,其他都缺點(diǎn)意思。


          為了給大家更好的內(nèi)容閱讀體驗(yàn),我把這份文章放在語(yǔ)雀上,地址如下:

          https://www.yuque.com/books/share/4ab0cdd2-927d-491d-bd97-622b0d7c047a?# 《數(shù)據(jù)科學(xué)實(shí)踐》


          閱讀風(fēng)格是這樣的


          隨機(jī)打開(kāi)一個(gè)主題,可在右邊側(cè)欄,看到閱讀的子標(biāo)題



          這樣一來(lái),閱讀體驗(yàn)爆棚,還有另外的 3 個(gè)好處:


          一,增加閱讀的立體感;

          二,方便以后局部更新;

          三,你可以導(dǎo)出任何你喜歡的格式


          希望各位看官喜歡!




          --完--





          往期精彩:


          本號(hào)精華合集(三)

          外企一道 SQL 面試題,刷掉 494 名候選人

          我在面試數(shù)據(jù)庫(kù)工程師候選人時(shí),常問(wèn)的一些題

          零基礎(chǔ) SQL 數(shù)據(jù)庫(kù)小白,從入門(mén)到精通的學(xué)習(xí)路線與書(shū)單







          瀏覽 67
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  免费一级小黄片 | 日韩精品熟女 | 人妻无码专区 | 欧美一级内射美妇网站 | 久久亚洲综合精品人妻 |