實(shí)驗(yàn)環(huán)境
- Ubuntu 16.04
- Hadoop-2.7.3
- Java 7
- SSH
在本篇教程中,我總共使用了兩臺(tái)裝有Ubuntu 16.04虛擬機(jī)掏颊,分別稱為master和slave璧微。
IP | 主機(jī)名 (hostname) | 內(nèi)存 | CPU |
---|---|---|---|
192.168.0.161 | hadoop-master | 8192 MB | 4 cores |
192.168.0.162 | hadoop-s1 | 8192 MB | 4 cores |
首先需要在兩臺(tái)機(jī)器上各自的/etc/hosts文件中加上彼此的主機(jī)名和IP地址:
安裝Java 7
$ sudo add-apt-repository ppa:openjdk-r/ppa
$ sudo apt-get update
$ sudo apt-get install openjdk-7-jdk
$ java -version
如果java安裝成功省有,那么默認(rèn)是裝在了/usr/lib/jvm
下的澜掩,我們需要把以下的兩句加入~/.bashrc
中账磺。
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
export PATH=$PATH:/usr/lib/jvm/java-7-openjdk-amd64/bin
SSH免密登錄
Hadoop需要節(jié)點(diǎn)之間可以免密訪問芹敌,因此我們需要生成SSH秘鑰并且加入對(duì)方的配置文件。
首先在master上執(zhí)行:
$ sudo apt-get install openssh-server
$ ssh-keygen -t rsa -P ""
然后把生成的id_rsa.pub加入authorized_keys
里:
$ cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys
此時(shí)master已經(jīng)可以對(duì)localhost
免密訪問了
$ ssh localhost
接下來垮抗,為了使master能免密訪問slave:
$ ssh-copy-id -i $HOME/.ssh/id_rsa.pub administrator@hadoop-s1
$ ssh hadoop-s1
安裝Hadoop
Hadoop的各個(gè)版本的Release版本在http://hadoop.apache.org/releases.html
<u>在Master和Slave節(jié)點(diǎn)上</u>
下載hadoop-2.7.3壓縮包氏捞,并解壓。
$ cd $HOME
$ wget http://mirror.fibergrid.in/apache/hadoop/common/hadoop-2.7.3/hadoop-2.7.3.tar.gz
$ tar -xvf hadoop-2.7.3.tar.gz
此時(shí)可以通過以下命令確認(rèn)hadoop是否成功安裝
$ cd hadoop-2.7.3/
$ bin/hadoop-2.7.3
如果成功安裝冒版,則把hadoop的以下環(huán)境變量加入.bashrc
文件中液茎。
# Set Hadoop-related environment variables
export HADOOP_HOME=$HOME/hadoop-2.7.3
export HADOOP_CONF_DIR=$HOME/hadoop-2.7.3/etc/hadoop
export HADOOP_MAPRED_HOME=$HOME/hadoop-2.7.3
export HADOOP_COMMON_HOME=$HOME/hadoop-2.7.3
export HADOOP_HDFS_HOME=$HOME/hadoop-2.7.3
export YARN_HOME=$HOME/hadoop-2.7.3
# Add Hadoop bin/ directory to PATH
export PATH=$PATH:$HOME/hadoop-2.7.3/bin
$ source .bashrc
然后將JAVA_HOME配置到hadoop-2.7.3/etc/hadoop/hadoop-env.sh
里,這個(gè)文件指定了Hadoop的守護(hù)進(jìn)程使用的JDK環(huán)境變量辞嗡。
$ cd hadoop-2.7.3/etc/hadoop/
$ sudo vim hadoop-env.sh
將以下命令貼到文件中并保存捆等。
# The java implementation to use.
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
接下來我們創(chuàng)建NameNode和DataNode的目錄。
$ cd
$ mkdir -p $HADOOP_HOME/hadoop2_data/hdfs/namenode
$ mkdir -p $HADOOP_HOME/hadoop2_data/hdfs/datanode
Hadoop有很多的配置文件需要我們根據(jù)需求來做相應(yīng)的配置续室,下面一個(gè)一個(gè)地進(jìn)行配置楚里。
$ cd hadoop-2.7.3/etc/hadoop/
$ sudo vim core-site.xml
<u>core-site.xml</u>
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
</configuration>
<u>hdfs-site.xml</u>
$ sudo vim hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/home/ubuntu/hadoop-2.7.3/hadoop2_data/hdfs/namenode</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/home/ubuntu/hadoop-2.7.3/hadoop2_data/hdfs/datanode</value>
</property>
</configuration>
<u>yarn-site.xml</u>
$ sudo vim yarn-site.xml
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>hadoop-master:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>hadoop-master:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>hadoop-master:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>hadoop-master:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>hadoop-master:8088</value>
</property>
</configuration>
<u>mapred-site.xml</u>
$ cp mapred-site.xml.template mapred-site.xml
$ sudo vim mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.map.memory.mb</name>
<value>4096</value>
</property>
<property>
<name>mapreduce.reduce.memory.mb</name>
<value>4096</value>
</property>
<property>
<name>mapreduce.map.java.opts</name>
<value>-Xmx3072m</value>
</property>
<property>
<name>mapreduce.reduce.java.opts</name>
<value>-Xmx3072m</value>
</property>
</configuration>
$ sudo vim hadoop-2.7.3/etc/hadoop/masters
hadoop-master
$ sudo vim hadoop-2.7.3/etc/hadoop/slaves
hadoop-master
hadoop-s1
現(xiàn)在對(duì)Hadoop集群master的配置已經(jīng)完成了,我們需要按照同樣的步驟配置slave節(jié)點(diǎn)猎贴。當(dāng)兩臺(tái)機(jī)器都安裝并配置好hadoop之后班缎,我們就可以啟動(dòng)hadoop集群了。首先要格式化hadoop的文件系統(tǒng)她渴。
<u>On Master</u>
$ cd hadoop-2.7.3/bin
$ hadoop namenode -format
然后就可以啟動(dòng)Hadoop的守護(hù)進(jìn)程了(NameNode, DataNode, ResourceManager和NodeManager)
$ cd ..
$ sbin/start-dfs.sh
運(yùn)行完成后再啟動(dòng)yarn达址。
$ sbin/start-yarn.sh
通過在命令行運(yùn)行jps
指令我們可以看到當(dāng)前運(yùn)行在master節(jié)點(diǎn)上的守護(hù)進(jìn)程。
此時(shí)可在hadoop-master節(jié)點(diǎn)上訪問http://hadoop-master:8088/cluster/nodes和http://hadoop-master:50070/dfshealth.html來查看集群的一些狀態(tài)信息趁耗。
運(yùn)行MapReduce示例程序做詞頻統(tǒng)計(jì)
Hadoop中的所有MapReduce都是運(yùn)行在HDFS上的沉唠。首先我們可以去網(wǎng)上隨便找一篇莎士比亞全集,用txt格式保存在某個(gè)目錄中苛败,本文是保存在master的$HOME下满葛,文件大小為54MB径簿。
把用來做詞頻統(tǒng)計(jì)的輸入文件放到HDFS中,就可以運(yùn)行wordcount來做詞頻統(tǒng)計(jì)了嘀韧。
$ cd $HADOOP_HOME
$ hdfs dfs -put $HOME/shakespeare.txt /input
$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-example-2.7.3.jar wordcount /input /output
程序運(yùn)行起來后可以在http://hadoop-master:8088/cluster/nodes查看任務(wù)的狀態(tài)篇亭。如果運(yùn)行成功,統(tǒng)計(jì)結(jié)果會(huì)存在HDFS的/output目錄下锄贷。如果想查看的話可以從HDFS中導(dǎo)入到本地的文件系統(tǒng)译蒂。
hdfs dfs -getmerge /output $HOME/output.txt
如果想了解更多對(duì)HDFS的操作方式,可以訪問https://hadoop.apache.org/docs/r2.7.2/hadoop-project-dist/hadoop-common/FileSystemShell.html#Overview