官术网_书友最值得收藏!

2.3 Hadoop的安裝與使用

在開始具體操作之前,需要首先選擇一個合適的操作系統(tǒng)。盡管 Hadoop 本身可以運行在Linux、Windows以及其他一些類UNIX系統(tǒng)(如FreeBSD、OpenBSD、Solaris等)之上,但是Hadoop官方真正支持的作業(yè)平臺只有Linux。這就導致其他平臺在運行Hadoop時,往往需要安裝很多其他的包來提供一些Linux操作系統(tǒng)的功能,以配合Hadoop的執(zhí)行。例如,Windows在運行Hadoop時,需要安裝Cygwin等軟件。我們這里選擇Linux作為系統(tǒng)平臺,來演示在計算機上如何安裝Hadoop、運行程序并得到最終結(jié)果。當然,其他平臺仍然可以作為開發(fā)平臺使用。對于正在使用Windows操作系統(tǒng)的用戶,可以通過在Windows操作系統(tǒng)中安裝Linux虛擬機的方式完成實驗。在Linux發(fā)行版的選擇上,我們傾向于使用企業(yè)級的、穩(wěn)定的操作系統(tǒng)作為實驗的系統(tǒng)環(huán)境,同時,考慮到易用性以及是否免費等方面的問題,我們排除了OpenSUSE和RedHat等發(fā)行版,最終選擇免費的Ubuntu桌面版作為推薦的操作系統(tǒng),讀者可以到網(wǎng)絡上下載Ubuntu系統(tǒng)鏡像文件(http://www.ubuntu.org.cn/download/desktop)進行安裝。關于 Hadoop 上機實踐的更多細節(jié)內(nèi)容,可以參見本書配套學習指南(http://dblab.xmu.edu.cn/post/5663/)。

Hadoop基本安裝配置主要包括以下5個步驟。

(1)創(chuàng)建Hadoop用戶。

(2)安裝Java。

(3)設置SSH登錄權限。

(4)單機安裝配置。

(5)偽分布式安裝配置。

下面將分別介紹每個步驟的具體實現(xiàn)方法,這里使用的操作系統(tǒng)是Ubuntu14.04,Hadoop版本為2.7.3。

2.3.1 創(chuàng)建Hadoop用戶

為方便操作,我們創(chuàng)建一個名為“Hadoop”的用戶來運行程序,這樣可以使不同用戶之間有明確的權限區(qū)別,同時,也可以使針對 Hadoop 的配置操作不影響其他用戶的使用。實際上,對于一些大的軟件(如MySQL),在企業(yè)中也常常為其單獨創(chuàng)建一個用戶。

創(chuàng)建用戶的命令是 useradd,設置密碼的命令為 passwd。此外,可能部分系統(tǒng)還需要為用戶創(chuàng)建文件夾,在這里不再詳細說明。

2.3.2 Java的安裝

由于Hadoop本身是使用Java語言編寫的,因此Hadoop的開發(fā)和運行都需要Java的支持,一般要求Java 6或者更新的版本。對于Ubuntu本身,系統(tǒng)上可能已經(jīng)預裝了Java,它的JDK版本為openjdk,路徑為“/usr/lib/jvm/default-java”,后文中需要配置的JAVA_HOME環(huán)境變量就可以設置為這個值。

對于Hadoop而言,采用更為廣泛應用的Oracle公司的Java版本,在功能上可能會更穩(wěn)定一些,因此用戶也可以根據(jù)自己的愛好,安裝Oracle版本的Java。在安裝過程中,請記錄JDK的路徑,即 JAVA_HOME 的位置,這個路徑的設置將用在后文 Hadoop 的配置文件中,目的是讓Hadoop程序可以找到相關的Java工具。

2.3.3 SSH登錄權限設置

對于 Hadoop 的偽分布和全分布而言,Hadoop 名稱節(jié)點(NameNode)需要啟動集群中所有機器的Hadoop守護進程,這個過程可以通過SSH登錄來實現(xiàn)。Hadoop并沒有提供SSH輸入密碼登錄的形式,因此,為了能夠順利登錄每臺機器,需要將所有機器配置為名稱節(jié)點可以無密碼登錄它們。

為了實現(xiàn)SSH無密碼登錄方式,首先需要讓名稱節(jié)點生成自己的SSH密鑰,命令如下:

ssh-keygen -t rsa -P '' //在后面選擇存放位置時,按照默認位置,會存放在用戶目錄的.ssh/路徑下

名稱節(jié)點生成自己的密鑰之后,需要將它的公共密鑰發(fā)送給集群中的其他機器。我們可以將id_dsa.pub中的內(nèi)容添加到需要匿名登錄的機器的“~/ssh/authorized_keys”目錄下,然后,在理論上名稱節(jié)點就可以無密碼登錄這臺機器了。對于無密碼登錄本機而言,可以采用以下代碼:

cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

這時可以通過ssh localhost命令來檢測一下是否需要輸入密碼。對于Ubuntu而言,到這里SSH就配置好了。

2.3.4 安裝單機Hadoop

這里使用的Hadoop版本為2.7.3,下載地址為http://hadoop.apache.org/releases.html#Download,在目錄中選擇hadoop-2.7.3.tar.gz進行下載即可。

將該文件夾解壓后,可以放置到自己喜歡的位置,如“/usr/local/hadoop”文件夾下。注意,文件夾的用戶和組必須都為hadoop。

在Hadoop的文件夾中(即“/usr/local/hadoop”),“etc/hadoop”目錄下面放置了配置文件,對于單機安裝,首先需要更改hadoop-env.sh文件,以配置Hadoop運行的環(huán)境變量,這里只需要將JAVA_HOME環(huán)境變量指定到本機的JDK目錄就可以了,命令如下:

$export JAVA_HOME=/usr/lib/jvm/default-java

完成之后,我們可以試著查看Hadoop的版本信息,可以運行如下命令:

$./bin/hadoop version

此時,應該得到如下提示:

Hadoop 2.7.3

........

This command was run using /usr/local/hadoop/share/hadoop/common/hadoop-common- 2.7.3.jar

Hadoop 文檔中還附帶了一些例子供我們測試,我們可以運行 WordCount 的例子來檢測一下Hadoop安裝是否成功。

首先,在hadoop目錄下新建input文件夾,用來存放輸入數(shù)據(jù);然后,將etc/hadoop文件夾下的配置文件拷貝進input文件夾中;接下來,在hadoop目錄下新建output文件夾,用來存放輸出數(shù)據(jù);最后,執(zhí)行如下代碼:

$cd /usr/local/hadoop

$mkdir ./input

$cp ./etc/hadoop/ *.xml ./input

$./bin/hadoop jar/usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep ./input ./output 'dfs[a-z.]+'

執(zhí)行之后,我們執(zhí)行以下命令查看輸出數(shù)據(jù)的內(nèi)容:

$cat ./output/ *

運行上面命令后,可以得到以下結(jié)果:

1 dfsadmin

這意味著,在所有的配置文件中,只有一個符合正則表達式的單詞,結(jié)果正確。

2.3.5 Hadoop偽分布式安裝

偽分布式安裝是指在一臺機器上模擬一個小的集群,但是集群中只有一個節(jié)點。需要說明的是,在一臺機器上也是可以實現(xiàn)完全分布式安裝的(而不是偽分布式),只需要在一臺機器上安裝多個 Linux虛擬機,每個Linux虛擬機成為一個節(jié)點,這時就可以實現(xiàn)Hadoop的完全分布式安裝。這里只介紹偽分布式安裝,完全分布式安裝方法可以參考本書配套學習指南(http://dblab.xmu.edu.cn/post/5663/)。

當 Hadoop 應用于集群時,不論是偽分布式還是真正的分布式運行,都需要通過配置文件對各組件的協(xié)同工作進行設置,最重要的幾個配置文件見表2-1。

表2-1 Hadoop中的配置文件

對于偽分布式配置,我們需要修改core-site.xml、hdfs-site.xml這2個文件。

修改后的core-site.xml文件如下:

<configuration>

  <property>

    <name>hadoop.tmp.dir</name>

    <value>file:/usr/local/hadoop/tmp</value>

    <description>Abase for other temporary directories.</description>

  </property>

  <property>

    <name>fs.defaultFS</name>

    <value>hdfs://localhost:9000</value>

  </property>

</configuration>

可以看出,core-site.xml配置文件的格式十分簡單,<name>標簽代表了配置項的名字,<value>項設置的是配置的值。對于core-site.xml文件,我們只需要在其中指定HDFS的地址和端口號,端口號按照官方文檔設置為9 000即可。

修改后的hdfs-site.xml文件如下:

<configuration>

  <property>

    <name>dfs.replication</name>

    <value>1</value>

  </property>

  <property>

    <name>dfs.namenode.name.dir</name>

    <value>file:/usr/local/hadoop/tmp/dfs/name</value>

  </property>

  <property>

    <name>dfs.datanode.data.dir</name>

    <value>file:/usr/local/hadoop/tmp/dfs/data</value>

  </property>

</configuration>

對于hdfs-site.xml文件,我們設置replication值為1,這也是Hadoop運行的默認最小值,它限制了HDFS文件系統(tǒng)中同一份數(shù)據(jù)的副本數(shù)量。因為這里采用偽分布式,集群中只有一個節(jié)點,因此副本數(shù)量replication的值也只能設置為1。

對于本書的實驗,我們這樣配置后就已經(jīng)滿足運行要求了。這里再給出一個官方文檔的詳細地址,感興趣的讀者可以查看文檔配置的其他項目,網(wǎng)址如下:http://hadoop.apache.org/docs/stable。

在配置完成后,首先需要初始化文件系統(tǒng),由于 Hadoop 的很多工作是在自帶的 HDFS 文件系統(tǒng)上完成的,因此需要將文件系統(tǒng)初始化之后才能進一步執(zhí)行計算任務。執(zhí)行初始化的命令如下:

$./bin/hadoop namenode -format

執(zhí)行結(jié)果如下:

15/01/14 18:04:15 INFO namenode.NameNode: STARTUP_MSG:

/ ************************************************************

STARTUP_MSG: Starting NameNode

STARTUP_MSG: host = ubuntu/127.0.1.1

STARTUP_MSG: args = [-format]

STARTUP_MSG: version = 2.7.3

*************************************************************/

......

16/09/08 11:30:04 INFO util.ExitUtil: Exiting with status 0

16/09/08 11:30:04 INFO namenode.NameNode: SHUTDOWN_MSG:

/ ************************************************************

SHUTDOWN_MSG: Shutting down NameNode at ubuntu/127.0.1.1

*************************************************************/

在看到運行結(jié)果中出現(xiàn)“Exiting with status 0”之后,就說明初始化成功了。

然后,用如下命令啟動所有進程,可以通過提示信息得知所有的啟動信息都寫入對應的日志文件。如果出現(xiàn)啟動錯誤,則可以在日志中查看錯誤原因。

$./bin/start-all.sh

運行之后,輸入jps指令可以查看所有的Java進程。在正常啟動時,可以得到如下類似結(jié)果:

$jps

8675 NodeManager

8885 Jps

8072 NameNode

8412 SecondaryNameNode

8223 DataNode

8559 ResourceManager

此時,可以訪問Web界面(http://localhost:50070)來查看Hadoop的信息。

接下來,我們執(zhí)行如下命令在HDFS中創(chuàng)建用戶目錄:

$./bin/hadoop dfs -mkdir -p /user/hadoop

在前面的安裝單機Hadoop內(nèi)容中,我們曾經(jīng)在本地hadoop文件夾下創(chuàng)建了input文件夾,并把etc/hadoop文件夾下的配置文件復制到input文件夾,作為實驗所需的文本文件。現(xiàn)在,我們需要將這些本地的文本文件(配置文件)“上傳”到分布式文件系統(tǒng)HDFS中的input文件夾。當然,這里的“上傳”并不意味著數(shù)據(jù)通過網(wǎng)絡傳輸,實際上,在我們這里介紹的偽分布式Hadoop環(huán)境下,本地的input文件夾和HDFS中的input文件夾都在同一臺機器上,并不需要通過網(wǎng)絡傳輸數(shù)據(jù)。我們可以執(zhí)行如下命令,將本地input文件夾中的數(shù)據(jù)上傳到HDFS的input文件夾:

$./bin/hadoop dfs -put ./input

接著,運行如下命令來執(zhí)行字數(shù)統(tǒng)計測試樣例:

$./bin/hadoop jar /usr/local/hadoop/share/hadoop/mapreduce /hadoop-mapreduce-examples*.jar grep input output 'dfs[a-z.]+'

在計算完成后,系統(tǒng)會自動在HDFS中生成output文件夾來存儲計算結(jié)果。大家可以輸入下面命令查看最終結(jié)果:

$./bin/hadoop fs -cat output/ *

最后需要指出的是,當需要重新運行程序時,首先需將HDFS中的output文件夾刪除,然后再去運行程序。

主站蜘蛛池模板: 金昌市| 齐齐哈尔市| 黄石市| 福泉市| 无棣县| 塔河县| 巩留县| 读书| 正镶白旗| 青铜峡市| 株洲县| 黔西| 三江| 陇川县| 卢氏县| 铜鼓县| 闻喜县| 呼伦贝尔市| 吴川市| 延津县| 舒城县| 临城县| 光山县| 麟游县| 芷江| 河源市| 调兵山市| 浪卡子县| 浠水县| 花莲市| 香河县| 绥江县| 英吉沙县| 元谋县| 永和县| 沧源| 林甸县| 阜宁县| 绿春县| 延庆县| 松阳县|