日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

第02讲:Hadoop 发行版选型和伪分布式平台的构建 2020/05/02 高俊峰(南非蚂蚁)

發(fā)布時(shí)間:2024/1/1 编程问答 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第02讲:Hadoop 发行版选型和伪分布式平台的构建 2020/05/02 高俊峰(南非蚂蚁) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本課時(shí)主要介紹 Hadoop 發(fā)行版選型以及偽分布式平臺(tái)的構(gòu)建。

Hadoop 發(fā)行版介紹與選擇
到目前為止,你應(yīng)該初步了解了大數(shù)據(jù)以及 Hadoop 相關(guān)的概念了。本課時(shí)我將介紹 Hadoop 如何快速使用,由于 Hadoop 平臺(tái)的構(gòu)建過程相當(dāng)復(fù)雜,它涉及系統(tǒng)、網(wǎng)絡(luò)、存儲(chǔ)、配置與調(diào)優(yōu),但為了能讓你盡快嘗鮮體驗(yàn)一下 Hadoop 的功能和特性,我們先一起構(gòu)建一個(gè)偽分布式 Hadoop 集群,也就是一個(gè)假的 Hadoop 集群,麻雀雖小,但五臟俱全。

偽分布式 Hadoop 集群能夠?qū)崿F(xiàn) Hadoop 的所有功能,并且部署簡單,因此非常適合新手進(jìn)行學(xué)習(xí)、開發(fā)、測(cè)試等工作。

Hadoop 有哪些發(fā)行版
與 Linux 有眾多發(fā)行版類似,Hadoop 也有很多發(fā)行版本,但基本上分為兩類,即開源社區(qū)版和商業(yè)付費(fèi)版。社區(qū)版是指由 Apache 軟件基金會(huì)維護(hù)的版本,是官方維護(hù)的版本體系;商業(yè)版付費(fèi)版是指由第三方商業(yè)公司在社區(qū)版 Hadoop 基礎(chǔ)上進(jìn)行了一些修改、整合以及各個(gè)服務(wù)組件兼容性測(cè)試而發(fā)行的穩(wěn)定版本,比較著名的有 Cloudera 的 CDP、CDH、Hortonworks 的 Hortonworks Data Platform(HDP)、mapR 等。

?

在這些商業(yè) Hadoop 發(fā)行版中,為了吸引用戶的使用,廠商也提供了一些開源產(chǎn)品作為誘餌,比如 Cloudera 的 CDH 發(fā)行版、Hortonworks 的 HDP 發(fā)行版等,所以,目前而言,不收費(fèi)的 Hadoop 版本主要有三個(gè),即 Apache Hadoop、Cloudera 的 CDH 版本、Hortonworks 的 HDP。

經(jīng)過多年的發(fā)展,Cloudera 的 CDH 版本和 Hortonworks 的 HDP 版本在大數(shù)據(jù)開源社區(qū)互為競(jìng)爭(zhēng),兩分天下,占據(jù)了國內(nèi)、外 90% 以上的大數(shù)據(jù)市場(chǎng),但隨著公有云市場(chǎng)趨于成熟,很多云廠商在云端也提供了 Hadoop 服務(wù),比如亞馬遜的 Elastic MapReduce(EMR)、Microsoft Azure Hadoop、阿里云 E-MapReduce(Elastic MapReduce,EMR)等,這些基于云的大數(shù)據(jù)服務(wù)搶走了 Cloudera 和 Hortonworks 的大部分客戶,所謂天下大勢(shì),分久必合,合久必分,最終,Cloudera 和 Hortonworks 從競(jìng)爭(zhēng)走到了一起,他們相愛了。

下面我們來聊下常用的三個(gè) Hadoop 發(fā)行版本,看看他們的產(chǎn)品特點(diǎn)以及如何選型。

Apache Hadoop 發(fā)行版本
Apache Hadoop 是最原始的 Hadoop 發(fā)行版本,目前總共發(fā)行了三個(gè)大版本,即 Hadoop1.x、Hadoop2.x、Hadoop3.x,每個(gè)版本的功能特性如下表所示:

Apache Hadoop 發(fā)行版提供源碼包和二進(jìn)制包兩種形式下載,對(duì)我們來說,下載二進(jìn)制包更加方便,點(diǎn)擊這里獲得下載。

Hortonworks Hadoop 發(fā)行版
Hortonworks 的主打產(chǎn)品是 HDP,同樣是 100% 開源的產(chǎn)品,它最接近 Apache Hadoop 的版本,除此之外,HDP 還包含了 Ambari,這是一款開源的 Hadoop 管理系統(tǒng)。它可以實(shí)現(xiàn)統(tǒng)一部署、自動(dòng)配置、自動(dòng)化擴(kuò)容、實(shí)時(shí)狀態(tài)監(jiān)控等,是個(gè)功能完備的大數(shù)據(jù)運(yùn)維管理平臺(tái)。

在使用 HDP 發(fā)行版時(shí),可以通過 Ambari 管理功能,實(shí)現(xiàn) Hadoop 的快速安裝和部署,并且對(duì)大數(shù)據(jù)平臺(tái)的運(yùn)維也有很大幫助,可以說 Ambari 實(shí)現(xiàn)了與 HDP 的無縫整合。

HDP 至今也發(fā)行了三個(gè)版本,即 HDP1.x、HDP2.x 和 HDP3.x,跟 Apache Hadoop 發(fā)行的大版本遙相呼應(yīng),而 HDP 發(fā)行版的安裝是基于 Ambari 實(shí)現(xiàn)的,通過 HDP 提供的 rpm 文件,可以在 Ambari 平臺(tái)實(shí)現(xiàn)自動(dòng)化的安裝和擴(kuò)容,后面會(huì)做詳細(xì)介紹。

Cloudera Hadoop 發(fā)行版
Cloudera 是最早將 Hadoop 商用的公司,目前旗下的產(chǎn)品主要有 CDH、Cloudera Manager、Cloudera Data Platform(CDP)等,下表簡單介紹了這些產(chǎn)品的特點(diǎn)。

CDH 支持 yum/apt 包、RPM 包、tarball 包、Cloudera Manager 四種方式安裝,但在最新版本 CDH6 中已經(jīng)不提供 tarball 方式了,這也是 Cloudera 進(jìn)行產(chǎn)品整合的一個(gè)信號(hào)。

Cloudera 在宣布與 Hortonworks 合并后,他們使用了類似紅帽公司的開源戰(zhàn)略,提供了訂閱機(jī)制來收費(fèi),同時(shí)為開發(fā)人員和試用提供了無支援的免費(fèi)版本,并向商業(yè)用戶提供訂閱付費(fèi)的版本。至此,Cloudera 成為全球第二大開源公司(紅帽第一)。

看到這里,也許會(huì)擔(dān)心,這么好的開源版本,后面是不是就不能免費(fèi)使用了呢,答案是否定的,Cloudera 承諾 CDH 和 HDP 平臺(tái)將可以繼續(xù)使用,直到 2022 年。

如何選擇發(fā)行版
作為用戶,應(yīng)該如何選擇呢,經(jīng)過多年對(duì) Hadoop 的使用,我的建議是:對(duì)于初學(xué)入門的話,建議選擇 Apache Hadoop 版本最好,因?yàn)樗纳鐓^(qū)活躍、文檔、資料詳實(shí)。而如果要在企業(yè)生產(chǎn)環(huán)境下使用的話,建議需要考慮以下幾個(gè)因素:

是否為開源產(chǎn)品(是否免費(fèi)),這點(diǎn)很重要;

是否有穩(wěn)定的發(fā)行版本,開發(fā)版是不能用在生產(chǎn)上的;

是否已經(jīng)接受過實(shí)踐的檢驗(yàn),看看是否有大公司在用(自己不能當(dāng)小白鼠);

是否有活躍的社區(qū)支持、充足的資料,因?yàn)橛龅絾栴},我們可以通過社區(qū)、搜索等網(wǎng)絡(luò)資源來解決問題。

在國內(nèi)大型互聯(lián)網(wǎng)企業(yè)中,使用較多的是 CDH 或 HDP 發(fā)行版本,個(gè)人推薦采用 HDP 發(fā)行版本,原因是部署簡單、性能穩(wěn)定。

?

偽分布式安裝 Hadoop 集群。


為了讓你快速了解 Hadoop 功能和用途,先通過偽分布式來安裝一個(gè) Hadoop 集群,這里采用 Apache Hadoop 發(fā)行版的二進(jìn)制包進(jìn)行快速部署。完全分布式 Hadoop 集群后面將會(huì)進(jìn)行更深入的介紹。

安裝規(guī)劃
偽分布式安裝 Hadoop 只需要一臺(tái)機(jī)器,硬件配置最低為 4 核 CPU、8G 內(nèi)存即可,我們采用 Hadoop-3.2.1 版本,此版本要求 Java 版本至少是 JDK8,這里以 JDK1.8.0_171、CentOS7.6 為例進(jìn)行介紹。根據(jù)運(yùn)維經(jīng)驗(yàn)以及后續(xù)的升級(jí)、自動(dòng)化運(yùn)維需要,將 Hadoop 程序安裝到 /opt/hadoop 目錄下,Hadoop 配置文件放到 /etc/hadoop 目錄下。

安裝過程
點(diǎn)擊這里下載 Apache Hadoop 發(fā)行版本的 hadoop-3.2.1.tar.gz 二進(jìn)制版本文件,其安裝非常簡單,只需解壓文件即可完成安裝,操作過程如下:

[root@hadoop3server hadoop]#useradd hadoop [root@hadoop3server ~]#mkdir /opt/hadoop [root@hadoop3server ~]#cd /opt/hadoop [root@hadoop3server hadoop]#tar zxvf hadoop-3.2.1.tar.gz [root@hadoop3server hadoop]#ln -s hadoop-3.2.1 current [root@hadoop3server hadoop]#chown -R hadoop:hadoop /opt/hadoop


注意,將解壓開的 hadoop-3.2.1.tar.gz 目錄軟鏈接到 current 是為了后續(xù)運(yùn)維方便,因?yàn)榭赡苌婕?Hadoop 版本升級(jí)、自動(dòng)化運(yùn)維等操作,這樣設(shè)置后,可以大大減輕運(yùn)維工作量。

Hadoop 程序安裝完成后,還需要拷貝配置文件到 /etc/hadoop 目錄下,執(zhí)行如下操作:

[root@hadoop3server ~]#mkdir /etc/hadoop [root@hadoop3server hadoop]#cp -r /opt/hadoop/current/etc/hadoop /etc/hadoop/conf [root@hadoop3server hadoop]# chown -R hadoop:hadoop ?/etc/hadoop


這樣,就將配置文件放到 /etc/hadoop/conf 目錄下了。

接著,還需要安裝一個(gè) JDK,這里使用的是 JDK 1.8.0_171,將其安裝到 /usr/java 目錄下,操作過程如下:

[root@hadoop3server ~]#mkdir /usr/java [root@hadoop3server ~]#cd /usr/java [root@hadoop3server java]#tar zxvf jdk-8u171-linux-x64.tar.gz [root@hadoop3server java]#ln -s jdk1.8.0_171 default


這個(gè)操作過程的最后一步,做這個(gè)軟連接,也是為了后續(xù)運(yùn)維自動(dòng)化配置、升級(jí)方便。

最后一步,還需要?jiǎng)?chuàng)建一個(gè) Hadoop 用戶,然后設(shè)置 Hadoop 用戶的環(huán)境變量,配置如下:

[root@hadoop3server ~]#useradd hadoop [root@hadoop3server ~]# more /home/hadoop/.bashrc? # .bashrc # Source global definitions if [ -f /etc/bashrc ]; then. /etc/bashrc fi# User specific aliases and functions export JAVA_HOME=/usr/java/default export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export PATH=$JAVA_HOME/bin:$PATH export HADOOP_HOME=/opt/hadoop/current 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 CATALINA_BASE=${HTTPFS_CATALINA_HOME} export HADOOP_CONF_DIR=/etc/hadoop/conf export HTTPFS_CONFIG=/etc/hadoop/conf export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin


這里創(chuàng)建的 Hadoop 用戶,就是以后管理 Hadoop 平臺(tái)的管理員用戶,所有對(duì) Hadoop 的管理操作都需要通過這個(gè)用戶來完成,這一點(diǎn)需注意。

另外,在配置的環(huán)境變量中,以下兩個(gè)要特別注意,如果沒有配置或者配置錯(cuò)誤,將導(dǎo)致某些服務(wù)無法啟動(dòng):

HADOOP_HOME 是指定 Hadoop 安裝程序的目錄

HADOOP_CONF_DIR 是指定 Hadoop 配置文件目錄

到這里為止,Hadoop 已經(jīng)基本安裝完成了,是不是很簡單!

配置 Hadoop 參數(shù)
Hadoop 安裝完成后,先來了解一下其安裝目錄下幾個(gè)重要的目錄和文件,這里將 Hadoop 安裝在了 /opt/hadoop/current 目錄下,打開這個(gè)目錄,需要掌握的幾個(gè)目錄如下表所示:

了解完目錄的功能后,就開始進(jìn)行配置操作了,Hadoop 的配置相當(dāng)復(fù)雜,不過這些是后面要講的內(nèi)容。而在偽分布模式下,僅僅需要修改一個(gè)配置文件即可,該文件是 core-site.xml,此文件目前位于 /etc/hadoop/conf 目錄下,在此文件 標(biāo)簽下增加如下內(nèi)容:

<property><name>fs.defaultFS</name><value>hdfs://hadoop3server</value> </property>


其中,fs.defaultFS 屬性描述的是訪問 HDFS 文件系統(tǒng)的 URI 加一個(gè) RPC 端口, 不加端口的話,默認(rèn)是 8020。另外,hadoop3server 可以是服務(wù)器的主機(jī)名,也可以是任意字符,但都需要將此標(biāo)識(shí)在服務(wù)器的 /etc/hosts 進(jìn)行解析,也就是添加如下內(nèi)容:

172.16.213.232 ?hadoop3server


這里的 172.16.213.232 就是安裝 Hadoop 軟件的服務(wù)器 IP 地址。

啟動(dòng) Hadoop 服務(wù)
配置操作完成后,下面就可以啟動(dòng) Hadoop 服務(wù)了,雖然是偽分布模式,但 Hadoop 所有的服務(wù)都必須要啟動(dòng),需要啟動(dòng)的服務(wù)有如下幾個(gè)。

服務(wù)的功能和用途,先介紹這么多,后面將會(huì)進(jìn)行更深入的闡述。接下來,要啟動(dòng) Hadoop 集群的服務(wù),必須以 Hadoop 用戶來執(zhí)行,并且每個(gè)服務(wù)的啟動(dòng)是有先后順序的,下面依次啟動(dòng)每個(gè)服務(wù)。

(1)啟動(dòng) NameNode 服務(wù)

首先需要對(duì) NameNode 進(jìn)行格式化,命令如下:

[root@hadoop3server ~]#su - hadoop [hadoop@hadoop3server ~]$ cd /opt/hadoop/current/bin [hadoop@hadoop3server bin]$ hdfs ?namenode -format 然后就可以啟動(dòng) NameNode 服務(wù)了,操作過程如下:[hadoop@hadoop3server conf]$ hdfs --daemon start namenode [hadoop@hadoop3server conf]$ jps|grep NameNode 27319 NameNode


通過 jps 命令查看 NameNode 進(jìn)程是否正常啟動(dòng),如果無法正常啟動(dòng),可以查看 NameNode 啟動(dòng)日志文件,檢查是否有異常信息拋出,這里的日志文件路徑是:/opt/hadoop/current/logs/hadoop-hadoop-namenode-hadoop3server.log。

NameNode 啟動(dòng)完成后,就可以通過 Web 頁面查看狀態(tài)了,默認(rèn)會(huì)啟動(dòng)一個(gè) http 端口 9870,可通過訪問地址:http://172.16.213.232:9870 查看 NameNode 服務(wù)狀態(tài),如下圖所示:

在上圖中,紅框標(biāo)注的幾個(gè)重點(diǎn)信息需要關(guān)注,第一個(gè)是 Hadoop 中 namenode 的訪問地址為 hdfs://hadoop3server:8020,這是我們?cè)谂渲梦募兄付ㄟ^的;另外還有 Hadoop 的版本、運(yùn)行模式、容量、“Live node”及“Dead node”,下面逐個(gè)解釋。

運(yùn)行模式顯示“Safe mode is ON”,這表示目前 namenode 處于安全模式下了,為什么呢,其實(shí)圖中已經(jīng)說明原因了,Namenode 在啟動(dòng)時(shí),會(huì)檢查 DataNode 的狀態(tài),如果 DataNode 上報(bào)的 block 個(gè)數(shù)達(dá)到了元數(shù)據(jù)記錄的 block 個(gè)數(shù)的 0.999 倍才可以離開安全模式,否則一直運(yùn)行在安全模式。安全模式也叫只讀模式,此模式下,對(duì) HDFS 上的數(shù)據(jù)無法進(jìn)行寫操作。因?yàn)楝F(xiàn)在還沒啟動(dòng) DataNode 服務(wù),所以肯定是處于安全模式下。

HDFS 容量,Configured Capacity 目前顯示為 0,這也是因?yàn)檫€沒啟動(dòng) DataNode 服務(wù)導(dǎo)致的,等啟動(dòng)后,應(yīng)該就有容量顯示了。

“Live node”及“Dead node”分別顯示目前集群中活躍的 DataNode 節(jié)點(diǎn)和故障(死)DataNode 節(jié)點(diǎn),運(yùn)維經(jīng)常通過監(jiān)控這個(gè)頁面中“Dead node”的值來判斷集群是否出現(xiàn)異常。

(2)啟動(dòng) secondarynamenode 服務(wù)

在 NameNode 服務(wù)啟動(dòng)完成后,就可以啟動(dòng) secondarynamenode 服務(wù)了,直接執(zhí)行如下命令:

[hadoop@hadoop3server ~]$ hdfs --daemon start secondarynamenode [hadoop@hadoop3server ~]$ jps|grep SecondaryNameNode 29705 SecondaryNameNode


與 NameNode 類似,如果無法啟動(dòng) secondarynamenode 進(jìn)程,可以通過 /opt/hadoop/current/logs/hadoop-hadoop-secondarynamenode-hadoop3server.log 文件檢查 secondarynamenode 啟動(dòng)日志中是否存在異常。

(3)啟動(dòng) DataNode 服務(wù)

現(xiàn)在是時(shí)候啟動(dòng) DataNode 服務(wù)了,直接執(zhí)行如下命令:

[hadoop@hadoop3server ~]$ hdfs --daemon start datanode [hadoop@hadoop3server ~]$ jps|grep DataNode 3876 DataNode


如果無法啟動(dòng),可通過查看 /opt/hadoop/current/logs/hadoop-hadoop-datanode-hadoop3server.log 文件檢查 datanode 啟動(dòng)過程是否存在異常。

到這里為止,分布式文件系統(tǒng) HDFS 服務(wù)已經(jīng)啟動(dòng)完成,可以對(duì) HDFS 文件系統(tǒng)進(jìn)行讀、寫操作了。現(xiàn)在再次通過 http://172.16.213.232:9870 查看 NameNode 服務(wù)狀態(tài)頁面,如圖所示:

從圖中可以看出,HDFS 集群中安全模式已經(jīng)關(guān)閉,并且集群容量和活躍節(jié)點(diǎn)已經(jīng)有數(shù)據(jù)了,這是因?yàn)?datanode 服務(wù)已經(jīng)正常啟動(dòng)了。

(4)啟動(dòng) ResourceManager 服務(wù)

接下來,還需要啟動(dòng)分布式計(jì)算服務(wù),首先啟動(dòng)的是 ResourceManager,啟動(dòng)方式如下:

[hadoop@hadoop3server ~]$ yarn --daemon start resourcemanager [hadoop@hadoop3server ~]$ jps|grep ResourceManager 4726 ResourceManager


注意,啟動(dòng) resourcemanager 服務(wù)的命令變成了 yarn,而不是 hdfs,記住這個(gè)細(xì)節(jié)。

同理,如果 ResourceManager 進(jìn)程無法啟動(dòng),可以通過檢查 /opt/hadoop/current/logs/hadoop-hadoop-resourcemanager-hadoop3server.log 日志文件來排查 ResourceManager 啟動(dòng)問題。

ResourceManager 服務(wù)啟動(dòng)后,會(huì)默認(rèn)啟動(dòng)一個(gè) http 端口 8088,可通過訪問 http://172.16.213.232:8088 查看 ResourceManager 的 Web 狀態(tài)頁面,如下圖所示:

在上圖中,需要重點(diǎn)關(guān)注的是 ResourceManager 中可用的內(nèi)存資源、CPU 資源數(shù)及活躍節(jié)點(diǎn)數(shù),目前看來,這些數(shù)據(jù)都是 0,是因?yàn)檫€沒有 NodeManager 服務(wù)啟動(dòng)。

(5)啟動(dòng) NodeManager 服務(wù)

在啟動(dòng)完成 ResourceManager 服務(wù)后,就可以啟動(dòng) NodeManager 服務(wù)了,操作過程如下:

[hadoop@hadoop3server ~]$ yarn --daemon start nodemanager [hadoop@hadoop3server ~]$ jps|grep NodeManager 8853 NodeManager


如果有異常,可通過檢查 /opt/hadoop/current/logs/hadoop-hadoop-nodemanager-hadoop3server.log 文件來排查 NodeManager 問題。

(6)啟動(dòng) Jobhistoryserver 服務(wù)

等待 ResourceManager 和 NodeManager 服務(wù)啟動(dòng)完畢后,最后還需要啟動(dòng)一個(gè) Jobhistoryserver 服務(wù),操作過程如下:

[hadoop@hadoop3server ~]$ mapred ?--daemon start historyserver [hadoop@hadoop3server ~]$ jps|grep JobHistoryServer 1027 JobHistoryServer


注意,啟動(dòng) Jobhistoryserver 服務(wù)的命令變成了 mapred,而非 yarn。這是因?yàn)?Jobhistoryserver 服務(wù)是基于 MapReduce 的,Jobhistoryserver 服務(wù)啟動(dòng)后,會(huì)運(yùn)行一個(gè) http 端口,默認(rèn)端口號(hào)是 19888,可以通過訪問此端口查看每個(gè)任務(wù)的歷史運(yùn)行情況,如下圖所示:

至此,Hadoop 偽分布式已經(jīng)運(yùn)行起來了,可通過 jps 命令查看各個(gè)進(jìn)程的啟動(dòng)信息:

[hadoop@hadoop3server ~]$ jps 12288 DataNode 1027 JobHistoryServer 11333 NameNode 1158 Jps 29705 SecondaryNameNode 18634 NodeManager 19357 ResourceManager


不出意外的話,會(huì)輸出每個(gè)服務(wù)的進(jìn)程名信息,這些輸出表明 Hadoop 服務(wù)都已經(jīng)正常啟動(dòng)了。現(xiàn)在,可以在 Hadoop 下愉快的玩耍了。

運(yùn)用 Hadoop HDFS 命令進(jìn)行分布式存儲(chǔ)
Hadoop 的 HDFS 是一個(gè)分布式文件系統(tǒng),要對(duì) HDFS 進(jìn)行操作,需要執(zhí)行 HDFS Shell,跟 Linux 命令很類似,因此,只要熟悉 Linux 命令,可以很快掌握 HDFS Shell 的操作。

下面看幾個(gè)例子,你就能迅速知道 HDFS Shell 的用法, 需要注意,執(zhí)行 HDFS Shell 建議在 Hadoop 用戶或其他普用用戶下執(zhí)行。

(1)查看 hdfs 根目錄數(shù)據(jù),可通過如下命令:

[hadoop@hadoop3server ~]$ hadoop fs -ls /


通過這個(gè)命令的輸出可知,剛剛創(chuàng)建起來的 HDFS 文件系統(tǒng)是沒有任何數(shù)據(jù)的,不過可以自己創(chuàng)建文件或目錄。

(2)在 hdfs 根目錄創(chuàng)建一個(gè) logs 目錄,可執(zhí)行如下命令:

[hadoop@hadoop3server ~]$ hadoop fs -mkdir /logs


(3)從本地上傳一個(gè)文件到 hdfs 的 /logs 目錄下,可執(zhí)行如下命令:

[hadoop@hadoop3server ~]$ hadoop fs -put /data/test.txt /logs [hadoop@hadoop3server ~]$ hadoop fs -put /data/db.gz ?/logs [hadoop@hadoop3server ~]$ hadoop fs -ls /logs Found 2 items -rw-r--r-- ? 3 hadoop supergroup ? ? 150569 2020-03-19 07:11 /logs/test.txt -rw-r--r-- ? 3 hadoop supergroup ? ? ? ? 95 2020-03-24 05:11 /logs/db.gz


注意,這里的 /data/test.txt 及 db.gz 是操作系統(tǒng)下的一個(gè)本地文件,通過執(zhí)行 put 命令,可以看到,文件已經(jīng)從本地磁盤傳到 HDFS 上了。

(4)要查看 hdfs 中一個(gè)文本文件的內(nèi)容,可執(zhí)行如下命令:

[hadoop@hadoop3server ~]$ hadoop fs -cat /logs/test.txt [hadoop@hadoop3server ~]$ hadoop fs -text /logs/db.gz


可以看到,在 HDFS 上的壓縮文件通過“-text”參數(shù)也能直接查看,因?yàn)槟J(rèn)情況下 Hadoop 會(huì)自動(dòng)識(shí)別常見的壓縮格式。

(5)刪除 hdfs 上一個(gè)文件,可執(zhí)行如下命令:

[hadoop@hadoop3server ~]$ hadoop fs ?-rm ?-r /logs/test.txt


注意,HDFS 上面的文件,只能創(chuàng)建和刪除,無法更新一個(gè)存在的文件,如果要更新 HDFS 上的文件,需要先刪除這個(gè)文件,然后提交最新的文件即可。除上面介紹的命令之外,HDFS Shell 還有很多常用的命令,這個(gè)在后面會(huì)有專門課時(shí)來講解。

在 Hadoop 中運(yùn)行 MapreDuce 程序
要體驗(yàn) Hadoop 的分布式計(jì)算功能,這里借用 Hadoop 安裝包中附帶的一個(gè) mapreduce 的 demo 程序,做個(gè)簡單的 MR 計(jì)算。

這個(gè) demo 程序位于 $HADOOP_HOME/share/hadoop/mapreduce 路徑下,這個(gè)環(huán)境下的路徑為 /opt/hadoop/current/share/hadoop/mapreduce,在此目錄下找到一個(gè)名為 hadoop-mapreduce-examples-3.2.1.jar 的 jar 文件,有了這個(gè)文件下面的操作就簡單多了。

單詞計(jì)數(shù)是最簡單也是最能體現(xiàn) MapReduce 思想的程序之一,可以稱為 MapReduce 版“Hello World”,hadoop-mapreduce-examples-3.2.1.jar 文件中包含了一個(gè) wordcount 功能,它主要功能是用來統(tǒng)計(jì)一系列文本文件中每個(gè)單詞出現(xiàn)的次數(shù)。下面開始執(zhí)行分析計(jì)算。

(1)創(chuàng)建一個(gè)新文件

創(chuàng)建一個(gè)測(cè)試文件 demo.txt,內(nèi)容如下:

Linux Unix windows hadoop Linux spark hive hadoop Unix MapReduce hadoop ?Linux hive windows hadoop spark


(2)將創(chuàng)建的文件存入 HDFS

[hadoop@hadoop3server ~]$ hadoop fs -mkdir /demo [hadoop@hadoop3server ~]$ hadoop fs -put /opt/demo.txt /demo [hadoop@hadoop3server ~]$ hadoop fs -ls /demo Found 1 items -rw-r--r-- ? 3 hadoop supergroup ? ? ? ?105 2020-03-24 06:02 /demo/demo.txt


這里在 HDFS 上創(chuàng)建了一個(gè)目錄 /demo,然后將剛才創(chuàng)建好的本地文件 put 到 HDFS 上,這里舉例是一個(gè)文件,如果要統(tǒng)計(jì)多個(gè)文件內(nèi)容,將多個(gè)文件都上傳到 HDFS 的 /demo 目錄即可。

(3)執(zhí)行分析計(jì)算任務(wù)

下面開始執(zhí)行分析任務(wù):

[hadoop@hadoop3server ~]$ hadoop jar /opt/hadoop/current/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.1.jar ?wordcount /demo ?/output [hadoop@hadoop3server ~]$ hadoop fs -ls /output Found 2 items -rw-r--r-- ? 3 hadoop supergroup ? ? ? ? ?0 2020-03-24 06:05 /output/_SUCCESS -rw-r--r-- ? 3 hadoop supergroup ? ? ? ? 61 2020-03-24 06:05 /output/part-r-00000 [hadoop@hadoop3server ~]$ hadoop fs -text /output/part-r-00000 Linux ? 3 MapReduce ? ? 1 Unix ? ?2 hadoop ?4 hive ? ?2 spark ? 2 windows 2


在上面的操作中,通過執(zhí)行“hadoop jar”后面跟上 jar 包示例文件,并給出執(zhí)行的功能是 wordcount,即可完成任務(wù)的執(zhí)行,請(qǐng)注意,最后的兩個(gè)路徑都是 HDFS 上的路徑,第一個(gè)路徑是分析讀取文件的目錄,必須存在;第二個(gè)路徑是分析任務(wù)輸出結(jié)果的存放路徑,必須不存在,分析任務(wù)會(huì)自動(dòng)創(chuàng)建這個(gè)目錄。

任務(wù)執(zhí)行完畢后,可以查看 /output 目錄下有兩個(gè)文件,其中:

_SUCCESS,任務(wù)完成標(biāo)識(shí),表示執(zhí)行成功;

part-r-00000,表示輸出文件名,常見的名稱有 part-m-00000、part-r-00001,其中,帶 m 標(biāo)識(shí)的文件是 mapper 輸出,帶 r 標(biāo)識(shí)的文件是 reduce 輸出的,00000 為 job 任務(wù)編號(hào),part-r-00000 整個(gè)文件為結(jié)果輸出文件。

通過查看 part-r-00000 文件內(nèi)容,可以看到 wordcount 的統(tǒng)計(jì)結(jié)果。左邊一列是統(tǒng)計(jì)的單詞,右邊一列是在文件中單詞出現(xiàn)的次數(shù)。

(4)在 ResourceManager 的 Web 頁面展示運(yùn)行任務(wù)

細(xì)心的你可能已經(jīng)發(fā)現(xiàn)了,上面在命令行執(zhí)行的 wordcount 統(tǒng)計(jì)任務(wù)雖然最后顯示是執(zhí)行成功了,統(tǒng)計(jì)結(jié)果也正常,但是在 ResourceManager 的 Web 頁面并沒有顯示出來。

究其原因,其實(shí)很簡單:這是因?yàn)槟莻€(gè) mapreduce 任務(wù)并沒有真正提交到 yarn 上來,因?yàn)槟J(rèn) mapreduce 的運(yùn)行環(huán)境是 local(本地),要讓 mapreduce 在 yarn 上運(yùn)行,需要做幾個(gè)參數(shù)配置就行了。

需要修改的配置文件有兩個(gè),即 mapred-site.xml 和 yarn-site.xml,在你的配置文件目錄,找到它們。

打開 mapred-site.xml 文件,在 標(biāo)簽內(nèi)添加如下內(nèi)容:

<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_HOME}</value> </property><property><name>mapreduce.reduce.env</name><value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value> </property>


其中,mapreduce.framework.name 選項(xiàng)就是用來指定 mapreduce 的運(yùn)行時(shí)環(huán)境,指定為 yarn 即可,下面的三個(gè)選項(xiàng)是指定 mapreduce 運(yùn)行時(shí)一些環(huán)境信息。

最后,修改另一個(gè)文件 yarn-site.xml,添加如下內(nèi)容到 標(biāo)簽中:

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


其中,yarn.nodemanager.aux-services 選項(xiàng)代表可在 NodeManager 上運(yùn)行的擴(kuò)展服務(wù),需配置成 mapreduce_shuffle,才可運(yùn)行 MapReduce 程序。

配置修改完成后,需要重啟 ResourceManager 與 nodemanager 服務(wù)才能使配置生效。

現(xiàn)在,我們?cè)俅芜\(yùn)行剛才的那個(gè) mapreduce 的 wordcount 統(tǒng)計(jì),所有執(zhí)行的任務(wù)都會(huì)在 ResourceManager 的 Web 頁面展示出來,如下圖所示:

從圖中可以清晰的看出,執(zhí)行任務(wù)的 ID 名、執(zhí)行任務(wù)的用戶、程序名、任務(wù)類型、隊(duì)列、優(yōu)先級(jí)、啟動(dòng)時(shí)間、完成時(shí)間、最終狀態(tài)等信息。從運(yùn)維角度來說,這個(gè)頁面有很多信息都需要引起關(guān)注,比如任務(wù)最終狀態(tài)是否有失敗的,如果有,可以點(diǎn)擊倒數(shù)第二列“Tracking UI”下面的 History 鏈接查看日志進(jìn)行排查問題。

Namenode 的 Web 頁面和 ResourceManager 的 Web 頁面在進(jìn)行大數(shù)據(jù)運(yùn)維工作中,經(jīng)常會(huì)用到,這些 Web 界面主要用來狀態(tài)監(jiān)控、故障排查,更多使用細(xì)節(jié)和技巧,后面課時(shí)會(huì)做更加詳細(xì)的介紹。

小結(jié)
怎么樣,現(xiàn)在可以感受到 Hadoop 集群的應(yīng)用場(chǎng)景了吧!雖然本課時(shí)介紹的是偽分別式環(huán)境,但與真實(shí)的完全分布式 Hadoop 環(huán)境實(shí)現(xiàn)的功能完全一樣。上面的例子中我只是統(tǒng)計(jì)了一個(gè)小文本中單詞的數(shù)量,你可能會(huì)說,這么點(diǎn)數(shù)據(jù),手動(dòng)幾秒鐘就算出來了,真沒看到分布式計(jì)算有什么優(yōu)勢(shì)。沒錯(cuò),在小量數(shù)據(jù)環(huán)境中,使用 Yarn 分析是沒有意義的,而如果你有上百 GB 甚至 TB 級(jí)別的數(shù)據(jù)時(shí),就能深刻感受到分布式計(jì)算的威力了。但有一點(diǎn)請(qǐng)注意,不管數(shù)據(jù)量大小,分析的方法都是一樣的,所以,你可以按照上面執(zhí)行 wordcount 的方法去讀取 GB 甚至 TB 級(jí)別的數(shù)據(jù)。


?
?

總結(jié)

以上是生活随笔為你收集整理的第02讲:Hadoop 发行版选型和伪分布式平台的构建 2020/05/02 高俊峰(南非蚂蚁)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。