在Ubuntu 16.04上构建多节点的(分布式)Hadoop-2.7.3集群

实验环境

  • Ubuntu 16.04
  • Hadoop-2.7.3
  • Java 7
  • SSH

在本篇教程中,我总共使用了两台装有Ubuntu 16.04虚拟机,分别称为master和slave。

IP 主机名 (hostname) 内存 CPU
192.168.0.161 hadoop-master 8192 MB 4 cores
192.168.0.162 hadoop-s1 8192 MB 4 cores

首先需要在两台机器上各自的/etc/hosts文件中加上彼此的主机名和IP地址:

h1.png

安装Java 7

$ sudo add-apt-repository ppa:openjdk-r/ppa
$ sudo apt-get update
$ sudo apt-get install openjdk-7-jdk
$ java -version

如果java安装成功,那么默认是装在了/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需要节点之间可以免密访问,因此我们需要生成SSH秘钥并且加入对方的配置文件。
首先在master上执行:

$ 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

此时master已经可以对localhost免密访问了

$ ssh localhost

接下来,为了使master能免密访问slave:

$ ssh-copy-id -i $HOME/.ssh/id_rsa.pub administrator@hadoop-s1
$ ssh hadoop-s1

安装Hadoop

Hadoop的各个版本的Release版本在http://hadoop.apache.org/releases.html

<u>在Master和Slave节点上</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

此时可以通过以下命令确认hadoop是否成功安装

$ cd hadoop-2.7.3/
$ bin/hadoop-2.7.3

如果成功安装,则把hadoop的以下环境变量加入.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里,这个文件指定了Hadoop的守护进程使用的JDK环境变量。

$ 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

接下来我们创建NameNode和DataNode的目录。

$ cd
$ mkdir -p $HADOOP_HOME/hadoop2_data/hdfs/namenode
$ mkdir -p $HADOOP_HOME/hadoop2_data/hdfs/datanode

Hadoop有很多的配置文件需要我们根据需求来做相应的配置,下面一个一个地进行配置。

$ 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

现在对Hadoop集群master的配置已经完成了,我们需要按照同样的步骤配置slave节点。当两台机器都安装并配置好hadoop之后,我们就可以启动hadoop集群了。首先要格式化hadoop的文件系统。

<u>On Master</u>

$ cd hadoop-2.7.3/bin
$ hadoop namenode -format

然后就可以启动Hadoop的守护进程了(NameNode, DataNode, ResourceManager和NodeManager)

$ cd ..
$ sbin/start-dfs.sh

运行完成后再启动yarn。

$ sbin/start-yarn.sh

通过在命令行运行jps指令我们可以看到当前运行在master节点上的守护进程。

h2.png
h3.png

此时可在hadoop-master节点上访问http://hadoop-master:8088/cluster/nodeshttp://hadoop-master:50070/dfshealth.html来查看集群的一些状态信息。

h4.png

运行MapReduce示例程序做词频统计

Hadoop中的所有MapReduce都是运行在HDFS上的。首先我们可以去网上随便找一篇莎士比亚全集,用txt格式保存在某个目录中,本文是保存在master的$HOME下,文件大小为54MB。

把用来做词频统计的输入文件放到HDFS中,就可以运行wordcount来做词频统计了。

$ 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

程序运行起来后可以在http://hadoop-master:8088/cluster/nodes查看任务的状态。如果运行成功,统计结果会存在HDFS的/output目录下。如果想查看的话可以从HDFS中导入到本地的文件系统。

hdfs dfs -getmerge /output $HOME/output.txt

如果想了解更多对HDFS的操作方式,可以访问https://hadoop.apache.org/docs/r2.7.2/hadoop-project-dist/hadoop-common/FileSystemShell.html#Overview

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,590评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,808评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,151评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,779评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,773评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,656评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,022评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,678评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,038评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,756评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,411评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,005评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,973评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,053评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,495评论 2 343

推荐阅读更多精彩内容