zoukankan      html  css  js  c++  java
  • Hadoop1.x安装:完全分布式安装

    1. 安装环境

    本文使用三台CentOS6.4虚拟机模拟完全分布式环境。

    1.1. 安装环境

    项目 参数
    主操作系统 Windows 10 64 bit,8GB内存
    虚拟软件 VMware® Workstation 12 Pro 12.5.2
    虚拟机操作系统 CentOS6.5 64位 512MB内存
    虚拟机数量 3
    jdk版本 java version "1.8.0_131"
    安装的hadoop版本 hadoop-1.2.1

    1.2. 集群环境

    集群包含三个节点:1个namenode、2个datanode

    主机名称 主机IP 节点类型 hadoop账号
    tiny1 192.168.132.101 namenode grid
    tiny2 192.168.132.102 datanode grid
    tiny3 192.168.132.103 datanode grid

    在我们的测试机上,我们使用三台虚拟机来模拟linux。我们下文中称之为tiny1、tiny2、tiny3

    2. 配置hosts文件

    我们希望三个主机之间都能够使用主机名称的方式相互访问而不是IP,我们需要在hosts中配置其他主机的host。因此我们在三个主机的/etc/hosts下均进行如下配置:
    1. 打开hosts文件

    [root@tiny1 ~]# vi /etc/hosts
    

    2. 配置主机host

    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
    192.168.132.101 tiny1
    192.168.132.102 tiny2
    192.168.132.103 tiny3
    

    3. 将配置发送到其他主机(同时在其他主机上配置)

    [root@tiny1 etc]# scp /etc/hosts root@tiny2:/etc/hosts
    [root@tiny1 etc]# scp /etc/hosts root@tiny3:/etc/hosts
    

    4. 测试

    [root@tiny1 root]$ ping tiny1
    [root@tiny1 root]$ ping tiny2
    [root@tiny1 root]$ ping tiny3
    

    3.建立hadoop运行账号

    我们在所有的主机下均建立一个grid账号用来运行hadoop
    创建grid账号的命令如下

    [root@tiny1 ~]# useradd grid
    [root@tiny1 ~]# # 通过手动输入修改密码
    [root@tiny1 ~]# passwd --stdin grid
    更改用户 grid 的密码 。
    123456
    passwd: 所有的身份验证令牌已经成功更新。
    

    测试:

    [root@tiny1 ~]# su admin
    [admin@tiny1 root]$ su grid
    密码:
    [grid@tiny1 root]$
    

    4. 设置SSH免密码登陆

    关于ssh免密码的设置,要求每两台主机之间设置免密码,自己的主机与自己的主机之间也要求设置免密码。 这项操作我们需要在hadoop用户下执行。

    [root@tiny1 ~]# su grid
    [grid@tiny1 ~]# ssh-keygen -t rsa
    [grid@tiny1 ~]# ssh-copy-id tiny1
    [grid@tiny1 ~]# ssh-copy-id tiny2
    [grid@tiny1 ~]# ssh-copy-id tiny3
    

    我们在每一台主机上执行如上命令。我们的设置结果如下,在每一台主机grid用户中的~/.ssh/authorized_keys文件中,其内容均为:

    
    ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAs5s4u1SHzkeqHHMozFWyqFj/qKwn57Gm8tpvOxSRY+5xqdEonJGvQ71AF+EOvttz/qBgEGB3UX2jp7YVIcKcc9WDoJXrb2NuBKbnP0zywDCsVQj/4KC7rQzG7YF2x8xueuDrW8nSxmNF1cYfENtYKpIITtL3cwAaVBBgwZJFTj9QN8/cMorG5aclMCETeklpUhGkSZ5Ccjc0FfGNKhnQntPqPVMBbDaSrJ31T7eONlIRymBJufAengHWYFGkEm/mnktxeDxDpVgLSEhbvwRUOeQUZzGfRcpdWwGFyQNoPTfCYKPpaQsJT7tCB97VY6aAZiaNqoN0kLEvKVAYLyhaJQ== grid@tiny1
    
    ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAs0uMn5wpUJNqxi++3i2WQu9KSv7Mj2Za4yu/8pXGFDxIEJCNEgREnfSAdrmpftRjp083RV3842zp2fqpbcE335fma7VbIcSqq20cQhWFyB1dZFP+H+f4+RbC5g31Hk5YG+DDY5dEm2B3RLDpLt0FukJcc0smN56ZwQ3JUXxe9ip8slTvtMr2ptvSg86cy+Eu7Gwt+7XHCNYIrxCzv7YQ0WilzvEpHP09wRp/K15HFHh+mTimxN2z4QERNMg77hNYEdEVrOVIhMztgakuhhSkpbyskkQuTeiyvKTLd/QL4iSFjt7dB1nieVFWCRP2yY2AsjD8nbHarBrgYojS/kslCw== grid@tiny2
    
    ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAy4h+XIl/IR8/QxtCxW8xl8QOqqZQWlL+rsI2zlhgTb+6dN4B6CE+u3/SrU8c8tLJSAXuRTg+MohIABrKRpFuu8VCLHw27JZ21c9KXpncAe+wkv3vagbH1lfxyYnBGn5XY6MEhNTx7nyBL7O55GNA92kD+JIEGvVF+NUq8yBJDBqeVFoFPU6FARI3OJi1Hlh47+gjIAIp2SP8QEhvjm+katL4+KtGgyHMkw8OYYzW6t6wjzmqgIRdzkIZI0Q0ChC8wAl8wkhwYXnbdw6m4pgSnVJ0zBhQZ5ovCHF3FR0OsrXpoe/2tpjT4LG04khTpqt2T4PC36No3dhcd/9wAw4+4Q== grid@tiny3
    

    5. 安装jdk

    此过程在root下进行

    [grid@tiny1 ~]$
    [grid@tiny1 ~]$ su root
    密码: 
    
    

    5.1 下载并解压jdk

    我们需要先下载并解压jdk,注意jdk的下载地址是经常变动的,因此请不要直接用下面的地址下载,下载时请先查看一下地址。

    1. 创建java的安装路径

    [root@tiny1 grid]# mkdir /usr/java
    [root@tiny1 grid]# cd /usr/java
    

    2. 下载jdk
    点击Java SE Development Kit 8 Downloads,点击同意后下载jdk-8u141-linux-x64.tar.gz(不同的版本也可以用相同的方式),复制下来下载链接
    然后使用wget 下载链接的方式下载jdk

    例如:

    [root@tiny1 java]#  wget http://download.oracle.com/otn-pub/java/jdk/8u131-b13/e9e7ea248e2c4826b92b3f075a80e441/jdk-8u131-linux-x64.tar.gz?AuthParam=1488850152_387f1ee536313aeb1ffd212acd203c87
    

    3. 解压jdk解压后删除安装包

    [root@tiny1 java]# tar -xzvf jdk-8u131-linux-x64.tar.gz\?AuthParam\=1497245763_bb5c713b336123c5d38ef99896a12489
    [root@tiny1 java]# rm -f jdk-8u131-linux-x64.tar.gz\?AuthParam\=1497245763_bb5c713b336123c5d38ef99896a12489
    

    4. 查看jdk的地址

    [root@tiny1 java]# cd jdk1.8.0_131/
    [root@tiny1 jdk1.8.0_131]# pwd
    /usr/java/jdk1.8.0_131
    

    5.配置环境变量
    /etc/profile文件中配置JAVA_HOME和PATH

    [root@tiny1 java]# vi /etc/profile
    

    添加

    export JAVA_HOME=/usr/java/jdk1.8.0_141
    export PATH=$PATH:/usr/java/jdk1.8.0_141/bin
    

    6.测试
    运行java -version检测配置是否成功

    [root@tiny01 opt]# java -version
    java version "1.8.0"
    gij (GNU libgcj) version 4.4.7 20120313 (Red Hat 4.4.7-18)
    
    Copyright (C) 2007 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions.  There is NO
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    

    安装成功

    5.2 向其他节点复制jdk

    [root@tiny1 jdk1.8.0_121]# ssh tiny2
    [root@tiny2 ~]# mkdir /usr/java
    [root@tiny2 ~]# ssh tiny3
    [root@tiny3 ~]# mkdir /usr/java
    [root@tiny3 ~]# logout
    [root@tiny2 ~]# logout
    [root@tiny1 jdk1.8.0_121]#
    
    [root@tiny1 jdk1.8.0_121]# scp -r /usr/java/jdk1.8.0_121 root@tiny2:/usr/java/jdk1.8.0_121
    [root@tiny1 jdk1.8.0_121]# scp -r /usr/java/jdk1.8.0_121 root@tiny3:/usr/java/jdk1.8.0_121
    

    5.3 在各个主机下配置jdk的环境变量

    编辑/etc/profile文件

    [root@tiny1 jdk1.8.0_121]# vi /etc/profile
    

    在该文件下添加如下内容

    ## JAVA_HOME 设置
    JAVA_HOME=/usr/java/jdk1.8.0_121
    export JAVA_HOME
    PATH=$PATH:/usr/java/jdk1.8.0_121/bin
    

    在每个主机下均进行设置,由于我的电脑上linux都是新安装的,环境变量相同,因此直接复制到了其他主机上。如果不同的主机的环境变量不同,请手动设置

    [root@tiny1 hadoop]# scp /etc/profile root@tiny2:/etc/profile
    [root@tiny1 hadoop]# scp /etc/profile root@tiny3:/etc/profile
    

    在每个主机上都重新编译一下/etc/profile

    [root@tiny1 hadoop]# source /etc/profile
    

    5.4 测试

    [root@tiny1 hadoop]# java -version
    java version "1.8.0_121"
    Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
    Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
    

    如果不是命令未找到则表示成功(建议重启一下linux)

    6. 下载并解压hadoop

    在tiny1的linux控制台下载hadoop并将其解压

    1. 切换回grid用户

    [root@tiny1 jdk1.8.0_121]# su grid
    

    2. 创建hadoop目录并进入到该目录中

    [grid@tiny1 ~]$ cd ~
    [grid@tiny1 ~]$ mkdir hadoop
    [grid@tiny1 ~]$ cd hadoop
    [grid@tiny1 hadoop]$
    

    3. 下载并解压hadoop

    [admin@tiny1 hadoop]$ wget https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-1.2.1/hadoop-1.2.1.tar.gz
    [admin@tiny1 hadoop]$ tar -xzvf hadoop-1.2.1.tar.gz
    

    7. 配置相关的配置文件

    7.1 修改hadooop-env.sh

    hadooop-env.sh是一个脚本文件,它主要用来建立环境用的,我们需要修改JAVA_HOME,值的注意的是,它虽然配置为export JAVA_HOME=${JAVA_HOME}但是实际上他不能获取系统设置的JAVA_HOME因此需要手动配置
    我们打开该文件:

    vi hadoop-1.2.1/conf/hadoop-env.sh
    

    我们将JAVA_HOME的注释解开并将它设置为我们在linux中安装的jdk的位置

    # The java implementation to use.  Required.
    export JAVA_HOME=/usr/java/jdk1.8.0_121
    

    7.2 修改core-site.xml

    打开该文件

    vi hadoop-1.2.1/conf/core-site.xml
    

    修改为下面的内容

    <?xml version="1.0"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    
    <!-- Put site-specific property overrides in this file. -->
    <configuration>
    <property>
    <!-- 指定名称节点 -->
    <name>fs.default.name</name>
    <!--tiny是主机名称,9000是端口号-->
    <value>hdfs://tiny1:9000</value>
    </property>
    
    <property>
    <!-- hadoop临时路径的指定,如果不指定则使用hadoop根目录,当系统重启后就会清空,那么将无法启动hadoop集群了,所以非常重要 -->
    <name>hadoop.tmp.dir</name>
    <value>/home/grid/hadoop/hadoop-1.2.1/tmp</value>
    </property>
    </configuration>
    

    创建/home/admin/hadoop/tmp文件夹

    [grid@tiny1 hadoop]$ mkdir /home/grid/hadoop/hadoop-1.2.1/tmp
    

    7.3 修改hdfs-site.xml文件

    打开该文件

    vi hadoop-1.2.1/conf/hdfs-site.xml
    

    修改为以下内容

    <?xml version="1.0"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    
    <!-- Put site-specific property overrides in this file. -->
    
    <configuration>
    <property>
    <name>dfs.replication</name>
    <value>1</value>
    </property>
    </configuration>
    

    上面配置是设置副本备份数,因为我们只有两个datanode所以需要配置为1或2,因此这里必须秀该

    7.4 修改mapred-site.xml文件

    打开该文件

    vi hadoop-1.2.1/conf/mapred-site.xml
    

    修改为以下内容

    <?xml version="1.0"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    
    <!-- Put site-specific property overrides in this file. -->
    
    <configuration>
    <property>
    <name>mapred.job.tracker</name>
    <value>tiny1:9001</value>
    </property>
    </configuration>
    

    这个参数指定的是job.tracker的地址,没有设置这个参数的话,默认是local,即job会进行本地运行。

    7.5配置masters和slaves文件

    master是namenode所在的机器,slave是datanode所在的机器,我们配置tiny1为master,tiny2和tiny3为slave

    修改masters文件(注意,要设置好host)

    vi hadoop-1.2.1/conf/masters
    

    修改该文件为:

    tiny1
    

    修改salves文件(注意,要设置好host)

    vi hadoop-1.2.1/conf/slaves
    

    修改该文件为:

    tiny2
    tiny3
    

    8.向各节点复制hadoop

    将hadoop复制到其他的节点中(每一台机器中的hadoop信息是完全一样的)
    将配置好的hadoop复制到其他节点上:

    [grid@tiny1 hadoop]$ scp -r ../hadoop grid@tiny2:/home/grid/hadoop
    [grid@tiny1 hadoop]$ scp -r ../hadoop grid@tiny3:/home/grid/hadoop
    

    9. 格式化namenode

    回到tiny1,格式化tiny1的namenode,执行hadoop安装目录下的bin/hadoop,即:

    [grid@tiny1 hadoop]$ hadoop-1.2.1/bin/hadoop namenode -format
    
    17/03/08 04:18:30 INFO namenode.NameNode: STARTUP_MSG:
    /************************************************************
    STARTUP_MSG: Starting NameNode
    STARTUP_MSG:   host = tiny1/192.168.132.101
    STARTUP_MSG:   args = [-format]
    STARTUP_MSG:   version = 1.2.1
    STARTUP_MSG:   build = https://svn.apache.org/repos/asf/hadoop/common/branches/branch-1.2 -r 1503152; compiled by 'mattf' on Mon Jul 22 15:23:09 PDT 2013
    STARTUP_MSG:   java = 1.8.0_121
    ************************************************************/
    17/03/08 04:18:31 INFO util.GSet: Computing capacity for map BlocksMap
    17/03/08 04:18:31 INFO util.GSet: VM type       = 64-bit
    17/03/08 04:18:31 INFO util.GSet: 2.0% max memory = 1013645312
    17/03/08 04:18:31 INFO util.GSet: capacity      = 2^21 = 2097152 entries
    17/03/08 04:18:31 INFO util.GSet: recommended=2097152, actual=2097152
    17/03/08 04:18:31 INFO namenode.FSNamesystem: fsOwner=grid
    17/03/08 04:18:31 INFO namenode.FSNamesystem: supergroup=supergroup
    17/03/08 04:18:31 INFO namenode.FSNamesystem: isPermissionEnabled=true
    17/03/08 04:18:31 INFO namenode.FSNamesystem: dfs.block.invalidate.limit=100
    17/03/08 04:18:31 INFO namenode.FSNamesystem: isAccessTokenEnabled=false accessKeyUpdateInterval=0 min(s), accessTokenLifetime=0 min(s)
    17/03/08 04:18:31 INFO namenode.FSEditLog: dfs.namenode.edits.toleration.length = 0
    17/03/08 04:18:31 INFO namenode.NameNode: Caching file names occuring more than 10 times
    17/03/08 04:18:32 INFO common.Storage: Image file /home/grid/hadoop/hadoop-1.2.1/tmp/dfs/name/current/fsimage of size 110 bytes saved in 0 seconds.
    17/03/08 04:18:32 INFO namenode.FSEditLog: closing edit log: position=4, editlog=/home/grid/hadoop/hadoop-1.2.1/tmp/dfs/name/current/edits
    17/03/08 04:18:32 INFO namenode.FSEditLog: close success: truncate to 4, editlog=/home/grid/hadoop/hadoop-1.2.1/tmp/dfs/name/current/edits
    17/03/08 04:18:32 INFO common.Storage: Storage directory /home/grid/hadoop/hadoop-1.2.1/tmp/dfs/name has been successfully formatted.
    17/03/08 04:18:32 INFO namenode.NameNode: SHUTDOWN_MSG:
    /************************************************************
    SHUTDOWN_MSG: Shutting down NameNode at tiny1/192.168.132.101
    ************************************************************/
    

    注意日志中的倒数第5行中的

    /home/grid/hadoop/hadoop-1.2.1/tmp/dfs/name has been successfully formatted.
    

    这句话表示格式化成功,如果没有显示这句话,那么格式化失败了,这里需要注意。

    10. 关闭master的防火墙

    在master(tiny1)下,切换为root用户查看防火墙的状态

    [root@tiny1 grid]# service iptables status
    表格:filter
    Chain INPUT (policy ACCEPT)
    num  target     prot opt source               destination
    1    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
    2    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0
    3    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
    4    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22
    5    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited
    
    Chain FORWARD (policy ACCEPT)
    num  target     prot opt source               destination
    1    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited
    
    Chain OUTPUT (policy ACCEPT)
    num  target     prot opt source               destination
    
    

    如果防火墙显示如上面类似,那么说明防火墙处于开启状态,我们需要关闭防火墙(这个命令是暂时关闭防火墙)

    [root@tiny1 grid]# service iptables stop
    iptables:清除防火墙规则:                                 [确定]
    iptables:将链设置为政策 ACCEPT:filter                    [确定]
    iptables:正在卸载模块:                                   [确定]
    [root@tiny1 grid]# service iptables status
    iptables:未运行防火墙。
    

    如果没有关闭防火墙,那么slave(tiny2,tiny3)将无法连接到master

    11. 启动hadoop集群

    在tiny1下执行hadoop安装目录下bin/start-all.sh脚本启动hadoop:

    [grid@tiny1 hadoop]$ hadoop-1.2.1/bin/start-all.sh
    starting namenode, logging to /home/grid/hadoop/hadoop-1.2.1/libexec/../logs/hadoop-grid-namenode-tiny1.out
    tiny2: starting datanode, logging to /home/grid/hadoop/hadoop-1.2.1/libexec/../logs/hadoop-grid-datanode-tiny2.out
    tiny3: starting datanode, logging to /home/grid/hadoop/hadoop-1.2.1/libexec/../logs/hadoop-grid-datanode-tiny3.out
    tiny1: starting secondarynamenode, logging to /home/grid/hadoop/hadoop-1.2.1/libexec/../logs/hadoop-grid-secondarynamenode-tiny1.out
    starting jobtracker, logging to /home/grid/hadoop/hadoop-1.2.1/libexec/../logs/hadoop-grid-jobtracker-tiny1.out
    tiny3: starting tasktracker, logging to /home/grid/hadoop/hadoop-1.2.1/libexec/../logs/hadoop-grid-tasktracker-tiny3.out
    tiny2: starting tasktracker, logging to /home/grid/hadoop/hadoop-1.2.1/libexec/../logs/hadoop-grid-tasktracker-tiny2.out
    

    我们可以在hadoop安装目录下的logs文件夹中查看文件日志

    12.用jps检验各后台进程是否成功启动

    检查tiny1(master)启动的进程

    [grid@tiny1 hadoop]$ jps
    2278 JobTracker
    2198 SecondaryNameNode
    2554 Jps
    2030 NameNode
    

    应该启动的进程就是上面四个。
    检查tiny2,tiny3(slave)启动的进程

    [grid@tiny1 ~]$ ssh tiny2
    [grid@tiny2 ~]$ jps
    2006 Jps
    1830 DataNode
    1903 TaskTracker
    [grid@tiny2 ~]$ ssh tiny3
    [grid@tiny3 ~]$ jps
    1923 Jps
    1799 TaskTracker
    1724 DataNode
    

    启动成功

  • 相关阅读:
    Hive内部表外部表转化分析
    20130515
    mapred.local.dir
    经典
    hive中巧用正则表达式的贪婪匹配
    做生意十大忌
    股价是最没有用的东西,要看公司基本面和盈利
    textView文本不同颜色
    Android中扫描wifi热点
    android 与 PC的socket通信
  • 原文地址:https://www.cnblogs.com/erygreat/p/7222504.html
Copyright © 2011-2022 走看看