• 32位Ubuntu12.04搭建Hadoop2.5.1完全分布式环境


    准备工作

    1、准备安装环境:

    4台PC,均安装32位Ubuntu12.04操作系统,统一用户名和密码

    交换机1台

    网线5根,4根分别用于PC与交换机相连,1根网线连接交换机和实验室网口

    2、使用ifconfig查看各PC的IP地址,并确保可以相互ping通

    pc1    192.168.108.101
    pc2    192.168.108.146
    pc3    192.168.108.200
    pc4    192.168.108.211

    3、安装jdk,下载jdk-7u71-linux-i586.tar.gz,拷贝到你想安装的目录,解压

    tar -xzvf jdk-7u71-linux-i586.tar.gz

    然后sudo vim /etc/profile,配置JAVA_HOME,CLASSPATH,PATH,在尾部添加

    JAVA_HOME=/home/xxx/Software/jdk1.7.0_71
    PATH=$JAVA_HOME/bin:$PATH
    CLASSPATH=.:$JAVA_HOME/lib
    export JAVA_HOME PATH CLASSPATH

    使用java -version进行验证,确保版本号为java version "1.7.0_71"

    4、配置SSH免登陆

    首先各台PC安装SSH,并启动服务,sudo apt-get install openssh-server,一般会默认启动

    使用“ssh 用户名@某PC的IP地址”来进行验证

    然后在你要选定Master节点(PC1)上生成密钥(私钥+公钥),然后分发公钥到各个Slave节点(PC2,PC3,PC4)

    // 若无.ssh目录,则首先mkdir .ssh
    cd ~/.ssh
    ssh-keygen -t rsa
    cp id_rsa.pub authorized_keys
    // 使用xxx代表用户名
    scp authorized_keys xxx@192.168.108.146:/home/xxx/.ssh/
    scp authorized_keys xxx@192.168.108.200:/home/xxx/.ssh/
    scp authorized_keys xxx@192.168.108.211:/home/xxx/.ssh/

    验证测试,在pc1上“ssh 用户名@某PC的IP地址”,若不用输入密码就能登录成功,则表示配置成功

    安装Hadoop2.5.1

    1、下载hadoop-2.5.0.tar.gz,解压,然后放到你的一个制定目录即可

    cp hadoop-2.5.0.tar.gz /home/xxx/Software
    cd /home/xxx/Software
    tar -xzvf hadoop-2.5.0.tar.gz

    2、配置/etc/profile中的环境变量

    HADOOP_HOME=/home/xxx/Software/hadoop-2.5.1
    PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
    export HADOOP_HOME PATH

    3、依次配置hadoop-2.5.1/etc/hadoop下的各个配置文件

    配置前说明:4台pc中,pc1为master节点,pc2、pc3、pc4为slaves节点

    slaves

    192.168.108.146
    192.168.108.200
    192.168.108.211

    core-site.xml

    <configuration>
        <property>
            <name>hadoop.tmp.dir</name>
            <value>/home/xxx/Software/hadoop_dir/tmp</value>
        </property>
        <property>
            <name>fs.default.name</name>
            <value>hdfs://192.168.108.101:9000</value>
        </property>
    </configuration>            

    hdfs-site.xml

    <configuration>
        <property>
            <name>dfs.namenode.name.dir</name>
            <value>/home/xxx/Software/hadoop_dir/dfs/name</value>
        </property>
        <property>
            <name>dfs.namenode.data.dir</name>
            <value>/home/xxx/Software/hadoop_dir/dfs/data</value>
        </property>
        <property>
            <name>dfs.replication</name>
            <value>3</value>
        </property>
        <property>
            <name>dfs.webhdfs.enabled</name>
            <value>true</value>
        </property>
    </configuration>

    cp mapred-site.xml.template mapred-site.xml,修改为如下内容:

    <configuration>
        <property>
            <name>mapreduce.framework.name</name>
            <value>yarn</value>
        </property>
    </configuration>

    yarn-site.xml,需要注意的是datanode上无需配置yarn.nodemanager.aux-services.mapreduce_shuffle.class

    <configuration>
        <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>   
        <property>
            <name>yarn.resourcemanager.address</name>
            <value>192.168.108.101:8032</value>
        </property>
        <property>
            <name>yarn.resourcemanager.scheduler.address</name>
            <value>192.168.108.101:8030</value>
        </property>
        <property>
            <name>yarn.resourcemanager.resource-tracker.address</name>
            <value>192.168.108.101:8031</value>
        </property>
        <property>
            <name>yarn.resourcemanager.admin.address</name>
            <value>192.168.108.101:8033</value>
        </property>
        <property>
            <name>yarn.resourcemanager.webapp.address</name>
            <value>192.168.108.101:8088</value>
        </property>
    </configuration>    

    修改hadoop-env.sh和yarn-env.sh中的JAVA_HOME变量为绝对路径

    export JAVA_HOME=/home/xxx/Software/jdk1.7.0_71

    4、将hadoop-2.5.1文件夹拷贝到各个slaves节点上的相同目录下

    hadoop的运行

    hadoop namenode -format
    sbin/start-dfs.sh
    sbin/start-yarn.sh

    启动之后,分别在namenode和datanode上使用jps查看是否正常启动

    32位操作系统带来的native library大坑

    这里要仔细说下,因为坑爹的32位导致了很多坑,所以在此建议如果要装hadoop2.5.1环境的,建议先把操作系统换位64位的吧

    先贴一下在32位操作系统上,用自带的64位native library会有什么问题,下面的这个警告将会伴随你的每一步hadoop操作

    WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

    首先介绍下Hadoop的native library,摘录官网上的两句话如下:

    1、Hadoop has native implementations of certain components for reasons of both performance and non-availability of Java implementations. These components are available in a single, dynamically-linked, native library. On the *nix platform it is libhadoop.so.
    2、Hadoop native library is written in ANSI C and built using the GNU autotools-chain (autoconf, autoheader, automake, autoscan, libtool). This means it should be straight-forward to build them on any platform with a standards compliant C compiler and the GNU autotools-chain.

    第一句告诉我们考虑到性能和java实现的不可用两个原因,才有了native library,其实动态链接的,也就是操作系统相关的,在*nix平台上为libhadoop.so等文件。

    第二句告诉了我们,native library是用C实现的,如果你要源码编译的话,你至少得需要这些包autoconf,autoheader,automake,autoscan,libtool。

    操作系统分为32位和64位,而hadoop默认提供的native library要么为32位要么为64位,在2.2.0之前版本均为32位,但之后有都为64位的。所以网上一搜hadoop native library错误的,大多数都是如何在64位操作系统上编译hadoop源码,而到了2.5.1,这个就又变成了在32位上编译hadoop源码了,所以操作系统选择要慎重,会省很多事。

    所以,既然当初已经选了32位操作系统,所以只能老老实实的编译hadoop2.5.1源码了。。。。。。

    Hadoop2.5.1源码编译

    1、下载hadoop-2.5.1-src.tar.gz,并解压

    2、准备包

    首先去hadoop官网上查下如何成为一名贡献者,因为你要贡献代码的话,肯定会把代码checkout下来编译的,所以文档里肯定会有。

    在文档http://wiki.apache.org/hadoop/HowToContribute里发现如下一段:

    On Linux, you need the tools to create the native libraries: LZO headers,zlib headers, gcc, OpenSSL headers, cmake, protobuf dev tools, and libtool, and the GNU autotools (automake, autoconf, etc).For Debian and Ubuntu:

    apt-get -y install maven build-essential autoconf automake libtool cmake zlib1g-dev pkg-config libssl-dev

    先执行吧,这些都是必需的,当然还不够。

    hadoop使用java写的,ant这个java build工具不能少吧,使用如下代码安装:

    apt-get install ant

    然后在编译源码的错误输出中,又发现了两个必需的包(坑了我一天的两个包),FindBugs 3.0.0 和 Protobuf 2.5.0。google一搜,去官网下即可,但是FindBugs是在sourceforge上的,没被墙,而Protobuf在code.google上,有可能被墙,所以直接搜protobuf-2.5.0.tar.gz吧,CSDN上下的也行

    FindBugs 3.0.0

    cd /home/xxx/Software/
    tar zxvf findbugs-3.0.0.tar.gz
    // /etc/profile中配置环境变量 export FINDBUGS_HOME
    =/home/xxx/Software/findbugs-3.0.0 export PATH=$FINDBUGS_HOME/bin:$PATH

    Protobuf 2.5.0

    tar zxvf protobuf-2.5.0.tar.gz
    cd protobuf-2.5.0
    ./configure --prefix=/home/xxx/Software
    make && make install
    // /etc/profile中配置环境变量
    PROTOBUF_HOME=/home/g308/Software/protobuf
    export PATH=$PROTOBUF_HOME/bin:$PATH

    注意:/home/xxx/Software该目录可自己指定

    3、编译

    tar zxvf hadoop-2.5.1-src.tar.gz
    cd hadoop-2.5.1-src
    mvn package -Pdist,native,docs -DskipTests -Dtar

    然后,就坐等1个小时后的一路SUCCESS就可以了

    填上native library的坑

    用hadoop-2.5.1-src/hadoop-dist/target/hadoop-2.5.1/lib/native下的native library替换掉hadoop安装目录下的/lib/native中的native library。重新启动hadoop,那个烦人的native library warn将永远的消失了。

    至此,32位Ubuntu12.04搭建Hadoop2.5.1完全分布式环境搭建成功。运行examples中的wordcount测试一下吧

  • 相关阅读:
    Maven错误recv failed
    eclipse集成tomcat修改字符集参数
    eclipse luna 无法安装veloeclipse问题
    TortoiseSVN忽略文件夹
    类之特性
    __new()__与__init__()
    flask中models设计
    flask读书记录
    JS中的event 对象详解
    redis 持久化 RDB
  • 原文地址:https://www.cnblogs.com/zghaobac/p/4069937.html
Copyright © 2020-2023  润新知