hadoop2.6.0 完全分布式安装教程

来源:互联网 发布:获取基址的文本源码 编辑:程序博客网 时间:2024/05/21 15:45

最近用最新的hadoop2.6.0 版本搭了一个环境

步骤如下:

首先介绍一下软硬件:台式机win8.1,用VMware11.1建了三个Linux centos 6.5 64位的虚拟机。三个虚拟机的用户名和主机名

  用户名                主机名

  ckj1              hadoop-master

  ckj2,ckj1   hadoop-slave1

  ckj3,ckj1    hadoop-slave2

但是,建议大家建虚拟机时就把用户名选成一样的。 我现在还不知道不同用户名之间怎么在不同节点中用hadoop通信。

一开始,我是拒绝用同一用户名的,觉得太low。但是现实duang的一下把我脆弱的自尊给击碎。所以我在hadoop-slave1和  hadoop-slave2上又创建了一个用户ckj1。具体原因后面再说。

正式开始:

第一部分:编译hadoop2.6.0的native库

一、准备

1.1下载依赖包、jdk、hadoop 2.6.0-src.tar.gz、hadoop2.6.0.tar.gz

前提是虚拟机能连外网,只要在VMware编辑菜单里,选择虚拟机编辑,在里面选上桥接,而不是NAT。ping一下外网检测是不是连上外网了。

本人下的是jdk1.7版本,为啥不是jdk1.8,因为我亲测jdk1.8出错,网上说是因为jdk1.8脚本注释尾部有<\ul>,hadoop识别错误会报错。虽然还可以改,但是比较麻烦。

具体怎么解压我就不说了,tar -zxvf .......

下载依赖包:

yum install gcc  
yum intall gcc-c++  
yum install make 
yum install cmake  
yum install openssl-devel  
yum install ncurses-devel

yum install autoconf automake libtool lzo-devel zlib-devel

为啥要装这些依赖包,因为没他们编译无法正常进行。

我把这些软件都安装在了/opt/modules/;安装包都放在了/opt/softwares/下

其实这些信息可以在hadoop 2.6.0-src.tar.gz、BUILDING.txt下有介绍。

1.2 安装maven

我安装的是apache-maven-3.3.1-bin.tar.gz,而不是传说中的apache-maven-3.0.5-bin.tar.gz。因为老版本可能是跟jdk1.8(最初装的是这个版的jdk)不兼容,总是不能正确安装。换了一个新版本,问题就解决了。然后是添加全局变量:MAVEN_HOME和PATH。然后是. /etc/profile,使修改生效。

然后修改vi /opt/modules/apache-maven-3.0.5/conf/settings.xml

   <mirror>
        <id>nexus-osc</id>
         <mirrorOf>*</mirrorOf>
     <name>Nexusosc</name>
     <url>http://maven.oschina.net/content/groups/public/</url>
   </mirror>
   
   
在<profiles></profiles>内新添加


<profile>
       <id>jdk-1.7</id>
       <activation>
         <jdk>1.7</jdk>
       </activation>
       <repositories>
         <repository>
           <id>nexus</id>
           <name>local private nexus</name>
           <url>http://maven.oschina.net/content/groups/public/</url>
           <releases>
             <enabled>true</enabled>
           </releases>
           <snapshots>
             <enabled>false</enabled>
           </snapshots>
         </repository>
       </repositories>
       <pluginRepositories>
         <pluginRepository>
           <id>nexus</id>
          <name>local private nexus</name>
           <url>http://maven.oschina.net/content/groups/public/</url>
           <releases>
             <enabled>true</enabled>
           </releases>
           <snapshots>
             <enabled>false</enabled>
           </snapshots>
         </pluginRepository>
       </pluginRepositories>
     </profile>

这里必须注意的是:在<profiles></profiles>内新添加,<profile>......</profile>。二者单复数不一样。原因好像是因为,改了镜像,有些文件就可以下或者下的比较快。

1.3、安装protobuf-2.5.0

先解压缩,然后执行./configure 再执行make 最后是make install;

装它依赖一些包,比如:gcc gcc-c++ make等

这个不用设置环境变量

1.4、安装ant(可以不装)

记得设环境变量(跳过不叙);

1.5安装findbugs-3.0.0.tar.gz

记得设环境变量;

二、编译

进入源码文件夹:/opt/softwares/hadoop 2.6.0-src.tar.peiz(我解压缩到这了)

mvn clean
mvn package -Pdist,native,docs -DskipTests -Dtar 

然后是漫长的等待。。。。。。

编译当然会出问题,我已在之前的博客中说了,在此不废话了。

第二部分:安装

1.1解压缩

1.2配置主机名,配置hosts文件,将ip地址和主机名绑定,这里包括三个主机名对应的ip地址;并且要把这份hosts远程拷贝到其他两台虚拟机上相应的目录下。用scp命令。主机名在/etc/sysconfig/network下改HOSTNAME=hadoop-master

1.3配置ssh 无密码登陆

这里要着重讲啦!

ssh是一个加密的通信协议。在用户主目录下的隐藏文件中~/.ssh 创建公钥和私钥。生成密钥的算法有两个,rsa和dsa

步骤:

1.ssh-keygen -t rsa

2.一路回车(三次好像)

3.将公钥拷贝到当前目录下的authorized_keys文件里。cat .ssh/id_rsa.pub >>.ssh/authorized_keys

4.以上操作在其他两台虚拟机的用户下都操作一遍。

5.若是A远程访问B,则将A的公钥添加到B的authorized_keys里。authorized_keys里存放的都是可以免密码登陆的机器的公钥。具体协议可以问度娘。这里需要使用scp命令。

6.重点:本人此前理解错误。之前,我认为A的用户ckj1远程登陆B机,可以用ckj1 的用户去访问。其实是不行的。这就像QQ里的远程控制一样,是别人在他的电脑上,以你的用户账号对你的电脑进行操作。具体的说:A台机子用户ckj1,B机子用户ckj2,则在A机上命令ssh ckj1@B-ip 则登陆失败;而ssh ckj2@B-ip则成功。ssh B-ip的操作其实就是ssh ckj1@B-ip。但是hadoop上运行命令star-dfs.sh,是默认的以ckj1的用户名去访问B机,结果是访问失败,于是HDFS启动失败。所以我只好在B机和C机上重新建了一个用户ckj1。然后在ckj1下重新生成密钥,重复上面过程。

7重点:这里面.ssh和改目录下的文件权限是非常重要的,千万不能弄错。

chmod 700 .ssh



我犯的错是:./ssh/的权限为760,系统认为这个存在安全漏洞,然后拒绝了正常用户的登陆请求

1.4修改hadoop文件目录下文件的用户

chown -R ckj1 hadoop-2.6.0

所以我觉得,当时把hadoop安装在用户目录下就好了

1.5修改配置文件

hadoop配置过程:要实现分布式环境,配置过程是最为重要的,

这里要涉及到的配置文件有7个:

  1. ~/hadoop/etc/hadoop/hadoop-env.sh

    ~/hadoop/etc/hadoop/yarn-env.sh

    ~/hadoop/etc/hadoop/slaves

    ~/hadoop/etc/hadoop/core-site.xml

    ~/hadoop/etc/hadoop/hdfs-site.xml

    ~/hadoop/etc/hadoop/mapred-site.xml

    ~/hadoop/etc/hadoop/yarn-site.xml

    之后会分别介绍各个配置的的作用和配置关键

    Hadoop 2.X 完全分布式部署安装

  2. 配置文件1:hadoop-env.sh

    该文件是hadoop运行基本环境的配置,需要修改的为java虚拟机的位置。

    故在该文件中修改JAVA_HOME值为本机安装位置(如,export JAVA_HOME=/usr/lib/jvm/java-1.7.0)

    Hadoop 2.X 完全分布式部署安装



  1. Hadoop 2.X 完全分布式部署安装
  1. 配置文件2:yarn-env.sh

    该文件是yarn框架运行环境的配置,同样需要修改java虚拟机的位置。

    在该文件中修改JAVA_HOME值为本机安装位置(如,export JAVA_HOME=/usr/lib/jvm/java-1.7.0)

    配置文件3:slaves
  2. 该文件里面保存所有slave节点的信息,以本篇为例

    写入以下内容(hosts里从机的主机名):

    Slave1

    Slave2

    Hadoop 2.X 完全分布式部署安装

  3. 配置文件4:core-site.xml

    <configuration>

    <property>

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

    <value>/data/hadoop-${user.name}</value>

    </property>

    <property>

    <name>fs.default.name</name>

    <value>hdfs://Master:9000</value>

    </property>

    </configuration>

    这个是hadoop的核心配置文件,这里需要配置的就这两个属性,fs.default.name配置了hadoop的HDFS系统的命名,位置为主机的9000端口;hadoop.tmp.dir配置了hadoop的tmp目录的根位置。这里使用了一个文件系统中没有的位置,所以要先用mkdir命令新建一下。

    Hadoop 2.X 完全分布式部署安装








  4. 配置文件5:hdfs-site.xml

    <configuration>

    <property>

    <name>dfs.http.address</name>

    <value>Master:50070</value>

    </property>

    <property>

    <name>dfs.namenode.secondary.http-address</name><value>Master:50090</value>

    </property>

    <property>

    <name>dfs.replication</name>

    <value>1</value>

    </property>

    </configuration>

    这个是hdfs的配置文件,dfs.http.address配置了hdfs的http的访问位置;dfs.replication配置了文件块的副本数,一般不大于从机的个数。

    Hadoop 2.X 完全分布式部署安装





  5. 配置文件6:mapred-site.xml

    <configuration>

    <property>

    <name>mapred.job.tracker</name>

    <value>Master:9001</value>

     </property>

    <property>

    <name>mapred.map.tasks</name>

    <value>20</value>

    </property>

    <property>

    <name>mapred.reduce.tasks</name>

    <value>4</value>

    </property>

    <property>

    <name>mapreduce.framework.name</name>

    <value>yarn</value>

    </property>

    <property>

    <name>mapreduce.jobhistory.address</name><value>Master:10020</value>

    </property>

    <property><name>mapreduce.jobhistory.webapp.address</name><value>Master:19888</value>

    </property>

    </configuration>

    这个是mapreduce任务的配置,由于hadoop2.x使用了yarn框架,所以要实现分布式部署,必须在mapreduce.framework.name属性下配置为yarn。mapred.map.tasks和mapred.reduce.tasks分别为map和reduce的任务数,至于什么是map和reduce,可参考其它资料进行了解。

    其它属性为一些进程的端口配置,均配在主机下。

    Hadoop 2.X 完全分布式部署安装






  6. 配置文件7:yarn-site.xml

    <configuration>

    <property>

     <name>yarn.resourcemanager.address</name>

    <value>Master:8032</value>

    </property>

    <property>

    <name>yarn.resourcemanager.scheduler.address</name>

     <value>Master:8030</value>

    </property>

    <property>

     <name>yarn.resourcemanager.webapp.address</name>

     <value>Master:8088</value>

    </property>

    <property>

    <name>yarn.resourcemanager.resource-tracker.address</name><value>Master:8031</value>

    </property>

    <property>

    <name>yarn.resourcemanager.admin.address</name><value>Master:8033</value>

    </property>

    <property>

    <name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value>

    </property>

    <property>

    <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name><value>org.apache.hadoop.mapred.ShuffleHandler</value></property>

    </configuration>

    该文件为yarn框架的配置,主要是一些任务的启动位置

    Hadoop 2.X 完全分布式部署安装步骤阅读









  7. 12

    将配置好的hadoop复制到其他节点

    scp –r ~/hadoop hadoop@Slave1:~/

    scp –r ~/hadoop hadoop@Slave2:~/

  8. 以上都是盗图,啦啦啦,很正常嘛,大家互相盗。不过我还是要很感谢这位原创大神的图。祝你事业顺利!

  9. 当然这些配置文件要根据自己的主机名做下修改

  10. 三、启动

    1. 格式化namenode:

      ./bin/hdfs namenode –format

      若出现如图所示提示,则格式化成功

      Hadoop 2.X 完全分布式部署安装

    2. 2

      启动hdfs: ./sbin/start-dfs.sh

      此时在Master上面运行的进程有:namenode secondarynamenode

      Slave1和Slave2上面运行的进程有:datanode

      启动yarn: ./sbin/start-yarn.sh

      此时在Master上面运行的进程有:namenode secondarynamenode resourcemanager

      Slave1和Slave2上面运行的进程有:datanode nodemanaget

      Hadoop 2.X 完全分布式部署安装

    3. 就是这样啦,很简单吧。大家要注意学会看日志。有什么不对的地方请多多指正!谢谢!


0 0
原创粉丝点击