zoukankan      html  css  js  c++  java
  • hadoop 2.6全分布安装

    环境:centos 6.6 + hadoop2.6

    虚拟机:(vmware fusion 7.0.0)

    虚拟机hostname      /    IP地址

    master / 192.168.187.102

    slave01 / 192.168.187.103

    slave02 / 192.168.187.104

    注:前三个步骤都是准备工作,如果已经完成,可直接进入步骤四

    步骤一: 先在3台虚拟机上,设置hostname及修改hosts文件

    1.1 先正确设置各虚拟机的hostname 

    sudo vi /etc/sysconfig/network

    将HOSTNAME=后的内容,改成想要的机器名

    1.2 修改hosts文件

    sudo vi /etc/hosts

    192.168.187.102 master

    192.168.187.103 slave01

    192.168.187.104 slave02

    这样,就不用记IP了

    这一步完成后,最好重启一次系统,以便生效。然后可以用ping master(或slave01、slave02)试下,正常的话,应该能ping通

    注:hostname不要命名为“xxx.01,xxx.02”之类以“.数字”结尾,否则到最后hadoop的NameNode服务将启动失败。

    步骤二:在3台虚拟机上安装jdk

    yum install java

    注:hadoop是java写的,jdk是必须的。上述命令,会安装openjdk最基本的运行时,没有源码和javac等其它工具。如果要安装javac等编译工具及源码

    yum install java-1.7.0-openjdk-devel

    yum install java-1.7.0-openjdk-src

    另外openjdk安装后,不会默许设置JAVA_HOME环境变量,要查看安装后的目录,可以用命令

    sudo update-alternatives --config java 看到

    默认jre目录为:/usr/lib/java/jvm/jre-1.7.0-openjdk.x86_64

    如要设置环境变量,可用命令 sudo vi /etc/profile

    在最后添加

    export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.75.x86_64
    export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/jre/lib/dt.jar:$JAVA_HOME/jre/lib/tools.jar
    export PATH=$PATH:$JAVA_HOME/bin

    注:如果不喜欢openjdk,想安装oracle官方的jdk,可按下面步骤操作

    a) rpm -qa | grep java

    即:查看当前已经安装的跟java相关的包,如果显示有openjdk在其中

    b) yum -y remove java

    一般这样就会卸载干净,执行完以后,再运行 a)中的rpm -qa | grep java看看,如果还有残留,可运行

    rpm -e --nodeps tzdata-java-2015a-1.el6.noarch (最后的部分为要删除的包名,即刚才查出来的结果)

    重新安装sun jdk,先从官网下载安装文件

    a) 上传rpm安装文件到虚拟机,参考下面的命令

    scp jdk-7u51-linux-x64.rpm root@master:/home/hadoop/

    b) 到虚拟机上,执行安装

    rpm -ivh jdk-7u51-linux-x64.rpm

    c) 然后修改环境变量 sudo vi /etc/profile,在最后加下面三行

    export JAVA_HOME=/usr/java/jdk1.7.0_51
    export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    export PATH=$PATH:$JAVA_HOME/bin

    保存退出,然后输入 source /etc/profile 以便让新环境变量生效

    注:如果机器上之前用 yum install hadoop之类的命令安装过低版本的hadoop,也必须先卸载干净

    步骤三:在3台虚拟机上创建专门用户hadoop

    useradd hadoop (创建用户)

    passwd hadoop (设置密码,为简单起见,3台机器上的hadoop密码最好设置成一样,比如hadoop123)

    为了方便,建议将hadoop加入root用户组,操作方法:

    先以root身份登录,然后输入

    usermod -g root hadoop ,执行完后hadoop即归属于root组了,可以再输入

    id hadoop 查看输出验证一下,如果看到类似下面的输出:

    uid=502(hadoop) gid=0(root) 组=0(root)

    就表示OK了 

    步骤四:配置ssh免密码登录

    hadoop工作时,各节点要相互通讯,正常情况下linux之间通讯要提供用户名、密码(目的是保证通讯安全),如果需要人工干预输入密码,显然不方便,做这一步的目的,是让各节点能自动通过安全认证,不影响正常通讯。

    4.1 先在master上,生成公钥、私钥对

    以hadoop身份登录到系统

    cd (进入个人主目录,默认为/home/hadoop)

    ssh-keygen -t rsa -P '' (注:最后是二个单引号)

    即:以rsa算法,生成公钥、私钥对,-P ''表示空密码。该命令运行完后,会在个人主目录下生成.ssh目录,里面会有二个文件id_rsa(私钥) ,id_rsa.pub(公钥)

    4.2 导入公钥

    cat .ssh/id_rsa.pub >> .ssh/authorized_keys

    执行完以后,可以在本机上测试下,用ssh连接自己,即:ssh localhost (或ssh master),如果不幸还是提示要输入密码,说明还没起作用,还有一个关键的操作

    chmod 600 .ssh/authorized_keys (修改文件权限,否则不起作用)

    然后再测试下 ssh localhost ,如果不需要输入密码,就连接成功,表示ok,一台机器已经搞定了。

    4.3 在其它机器上生成公钥、密钥,并将公钥文件复制到master

    a) 以hadoop身份登录其它二台机器 slave01、slave02,执行 ssh-keygen -t rsa -P '' 生成公钥、密钥

    b) 然后用scp命令,把公钥文件发放给master(即:刚才已经搞定的那台机器)

    slave01上:

    scp .ssh/id_rsa.pub hadoop@master:/home/hadoop/id_rsa_01.pub

    slave02上:

    scp .ssh/id_rsa.pub hadoop@master:/home/hadoop/id_rsa_02.pub

    这二行执行完后,回到master中,查看下/home/hadoop目录,应该有二个新文件id_rsa_01.pub、id_rsa_02.pub,然后在master上,导入这二个公钥

    cat id_rsa_01.pub >> .ssh/authorized_keys

    cat id_rsa_02.pub >> .ssh/authorized_keys

    这样,master这台机器上,就有所有3台机器的公钥了。

    4.4 将master上的“最全”公钥,复制到其它机器

    a) 继续保持在master上,

    scp .ssh/authorized_keys hadoop@slave01:/home/hadoop/.ssh/authorized_keys

    scp .ssh/authorized_keys hadoop@slave02:/home/hadoop/.ssh/authorized_keys

    b) 修改其它机器上authorized_keys文件的权限

    slave01以及slave02机器上,均执行命令

    chmod 600 .ssh/authorized_keys

    4.5 验证

    在每个虚拟机上,均用 ssh 其它机器的hostname 验证下,如果能正常无密码连接成功,表示ok

    小结:该步骤非常重要,主要思路是在各节点上生成公钥、私钥,然后将公钥发放其它所有节点。RSA算法是非对称加密算法,仅公布“公钥”,只要私钥不外泄,还是不能解密的,所以安全性依然有保障。

    如果本步骤失败,根据我个人经验,多半是权限问题,请检查hadoop是否具有足够权限,建议将hadoop加入sudoers列表及root用户组。另外,这里也整理了一些SSH免密码设置失败的原因,请移步 ssh 免密码设置失败原因总结

    步骤五:上传并解压hadoop2.6

    a)在本机上,用scp命令上传hadoop2.6到master

    scp hadoop-2.6.0.tar.gz hadoop@master:/home/hadoop/

    b) 以hadoop身份登录到master,运行以下命令解压

    tar -zxvf hadoop-2.6.0.tar.gz

    步骤六:修改配置

    一共有7个文件要修改:

    $HADOOP_HOME/etc/hadoop/hadoop-env.sh

    $HADOOP_HOME/etc/hadoop/yarn-env.sh

    $HADOOP_HOME/etc/hadoop/core-site.xml

    $HADOOP_HOME/etc/hadoop/hdfs-site.xml

    $HADOOP_HOME/etc/hadoop/mapred-site.xml

    $HADOOP_HOME/etc/hadoop/yarn-site.xml

    $HADOOP_HOME/etc/hadoop/slaves

    其中$HADOOP_HOME表示hadoop根目录,本文中默认为/home/hadoop/hadoop-2.6.0

    a) hadoop-env.sh 、yarn-env.sh

    这二个文件主要是修改JAVA_HOME后的目录,改成实际本机jdk所在目录位置

    vi etc/hadoop/hadoop-env.sh (及 vi etc/hadoop/yarn-env.sh)

    找到下面这行的位置,改成(jdk目录位置,大家根据实际情况修改)

    export JAVA_HOME=/usr/java/jdk1.7.0_51

    另外 hadoop-env.sh中 , 建议加上这句:

    export HADOOP_PREFIX=/home/hadoop/hadoop-2.6.0

    b) core-site.xml 参考下面的内容修改:

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
     3 <configuration>
     4   <property>
     5     <name>fs.defaultFS</name>
     6     <value>hdfs://master:9000</value>
     7   </property>
     8   <property>
     9     <name>hadoop.tmp.dir</name>
    10     <value>/home/hadoop/tmp</value>
    11   </property>
    12 </configuration>

    注:/home/hadoop/tmp 目录如不存在,则先mkdir手动创建

    core-site.xml的完整参数请参考 

    http://hadoop.apache.org/docs/r2.6.0/hadoop-project-dist/hadoop-common/core-default.xml

    c) hdfs-site.xml

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
     3 <configuration>
     4   <property>
     5     <name>dfs.datanode.ipc.address</name>
     6     <value>0.0.0.0:50020</value>
     7   </property>
     8   <property>
     9     <name>dfs.datanode.http.address</name>
    10     <value>0.0.0.0:50075</value>
    11   </property>
    12   <property>
    13     <name>dfs.replication</name>
    14     <value>2</value>
    15   </property>
    16 </configuration>

    注:dfs.replication表示数据副本数,一般不大于datanode的节点数。

    hdfs-site.xml的完整参数请参考

    http://hadoop.apache.org/docs/r2.6.0/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml

    d) mapred-site.xml

    1 <?xml version="1.0"?>
    2 <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    3 <configuration>
    4   <property>
    5     <name>mapreduce.framework.name</name>
    6     <value>yarn</value>
    7   </property>
    8 </configuration>

    mapred-site.xml的完整参数请参考

    http://hadoop.apache.org/docs/r2.6.0/hadoop-mapreduce-client/hadoop-mapreduce-client-core/mapred-default.xml

    e)yarn-site.xml

    1 <?xml version="1.0"?>
    2 <configuration>
    3   <property>
    4     <name>yarn.nodemanager.aux-services</name>
    5     <value>mapreduce_shuffle</value>
    6   </property>
    7 </configuration>

    yarn-site.xml的完整参数请参考

    http://hadoop.apache.org/docs/r2.6.0/hadoop-yarn/hadoop-yarn-common/yarn-default.xml

    另外,hadoop 1.x与2.x相比, 1.x中的很多参数已经被标识为过时,具体可参考

    http://hadoop.apache.org/docs/r2.6.0/hadoop-project-dist/hadoop-common/DeprecatedProperties.html

    最后一个文件slaves暂时不管(可以先用mv slaves slaves.bak 将它改名),上述配置弄好后,就可以在master上启用 NameNode测试了,方法:

    $HADOOP_HOME/bin/hdfs namenode –format 先格式化

    15/02/12 21:29:53 INFO namenode.FSImage: Allocated new BlockPoolId: BP-85825581-192.168.187.102-1423747793784

    15/02/12 21:29:53 INFO common.Storage: Storage directory /home/hadoop/tmp/dfs/name has been successfully formatted.

    等看到这个时,表示格式化ok

    $HADOOP_HOME/sbin/start-dfs.sh 

    启动完成后,输入jps查看进程,如果看到以下二个进程:

    5161 SecondaryNameNode

    4989 NameNode

    表示master节点基本ok了

    再输入$HADOOP_HOME/sbin/start-yarn.sh ,完成后,再输入jps查看进程 

    5161 SecondaryNameNode

    5320 ResourceManager

    4989 NameNode

    如果看到这3个进程,表示yarn也ok了

    f) 修改slaves

    如果刚才用mv slaves slaves.bak对该文件重命名过,先运行 mv slaves.bak slaves 把名字改回来,再

    vi slaves 编辑该文件,输入

    slave01

    slave02

    保存退出,最后运行

    $HADOOP_HOME/sbin/stop-dfs.sh 

    $HADOOP_HOME/sbin/stop-yarn.sh 

    停掉刚才启动的服务

     

    步骤七:将master上的hadoop目录复制到slave01,slave02

    仍然保持在master机器上

    cd 先进入主目录

    scp -r hadoop-2.6.0 hadoop@slave01:/home/hadoop/

    scp -r hadoop-2.6.0 hadoop@slave02:/home/hadoop/

    注:slave01、slave02上的hadoop临时目录(tmp)及数据目录(data),仍然要先手动创建。

     

    步骤八:验证

    master节点上,重新启动

    $HADOOP_HOME/sbin/start-dfs.sh

    $HADOOP_HOME/sbin/start-yarn.sh

    顺利的话,master节点上有几下3个进程:

    7482 ResourceManager

    7335 SecondaryNameNode

    7159 NameNode

    slave01、slave02上有几下2个进程:

    2296 DataNode

    2398 NodeManager

    同时可浏览:

    http://master:50070/

    http://master:8088/

    查看状态

    另外也可以通过 bin/hdfs dfsadmin -report 查看hdfs的状态报告

     

    其它注意事项:

    a) master(即:namenode节点)若要重新格式化,请先清空各datanode上的data目录(最好连tmp目录也一起清空),否则格式化完成后,启动dfs时,datanode会启动失败

    b) 如果觉得master机器上只运行namenode比较浪费,想把master也当成一个datanode,直接在slaves文件里,添加一行master即可

    c) 为了方便操作,可修改/etc/profile,把hadoop所需的lib目录,先加到CLASSPATH环境变量中,同时把hadoop/bin,hadoop/sbin目录也加入到PATH变量中,可参考下面的内容:

     export HADOOP_HOME=/home/hadoop/hadoop-2.6.0
     export JAVA_HOME=/usr/java/jdk1.7.0_51
     export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$HADOOP_HOME/share/hadoop/common/hadoop-common-2.6.0.jar:$HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-client-core-2.6.0.jar:$HADOOP_HOME/share/hadoop/common/lib/commons-cli-1.2.jar
     export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/sbin:$HADOOP_HOME/bin

     参考文档:Hadoop MapReduce Next Generation - Cluster Setup

  • 相关阅读:
    利用单臂路由实现VLAN间路由
    理解Hybrid接口的应用
    配置Trunk接口
    VLAN 基础设置及Aceess接口
    NFS实现文件共享
    Apache服务(基于IP地址,主机名,端口号)
    使用Vsftpd服务(匿名访问模式、本地用户模式)
    移动端响应式js代码
    快速搜索匹配插件
    无缝滚动插件
  • 原文地址:https://www.cnblogs.com/yjmyzz/p/hadoop-2_6_0-full-distribution-deploy-tutorial.html
Copyright © 2011-2022 走看看