Hadoop学习平台的搭建

来源:互联网 发布:权力的游戏cp知乎 编辑:程序博客网 时间:2024/06/05 01:05

伪分布式

1.安装虚拟机

2.安装CentOS6.4-i386

3.修改主机名

        # su root        # vi /etc/sysconfig/network        本主机名设置为:vitamin07

4.修改ip

   设置虚拟机的网络连接方式--参考文档:《虚拟机配置》来实现   1)Hostonly,将windos上的虚拟网卡改成与linux上的网卡在同一网段,将虚拟机上的Vmnet1   ip设置和你的虚拟机在同一个网段 ,但ip不相同。

4.1非克隆机,将以下内容更新到ifcfg-eth0中

# vi /etc/sysconfig/network-scripts/ifcfg-eth0         BOOTPROTO="static"        ......        IPADDR="192.168.8.201"        NETMASK="255.255.255.0"        GATWAY="192.168.8.1"        DNS1="8.8.8.8"        DNS2="8.8.4.4"  

4.2克隆机

So here’s how we fix it:    Remove the kernel’s networking interface rules file so that it can be regenerated        # rm -f /etc/udev/rules.d/70-persistent-net.rules    Restart the VM        # reboot    UPDATE your interface configuration file        # more  /etc/udev/rules.d/70-persistent-net.rules        # vi /etc/sysconfig/network-scripts/ifcfg-eth0     Remove the MACADDR entry or update it to the new MACADDR for the interface (listed in this file: /etc/udev/rules.d/70-persistent-net.rules).    Remove the UUID entry     Uapdate IPADDR="192.168.8.xxx"--新地址     Save and exit the file    Restart the networking service    # service network restart

5.修改主机名和ip映射关系

    # vi /etc/hosts

6.关闭防火墙–参考文档:《虚拟机配置》

查看防火墙状态    # service iptables status命令关闭防火墙(重新启动虚拟机后防火墙依然是开着的)    # service iptables stop查看在哪种状态下 防火墙会是开的  还是关的    # chkconfig iptables --list启动方式:    0---关机  6--不停重启    1---单用户模式    2--多用户模式但没有NFS    3--多用户模式    4---没有使用的    5---图形界面模式关闭防火墙:    # chkconfig iptables off查看防火墙状态    # chkconfig iptables --list

7.ssh免登录–参考文档:《设置ssh免密码登录》,其中有讲免密码登录的原理

生成一对密码    注: 若是克隆机则需要把.ssh/目录下的文件删除        root用户在 /.ssh下        非root用户 /home/model/.ssh/下
        # sudo apt-get install openssh-server        #rm authorized_keys  id_rsa id_rsa.pub known_hosts         # ssh-keygen -t rsa           四个回车后        # cd /root/.ssh     or  # cd /home/model/.ssh/        # ls        # cp id_rsa.pub authorized_keys

8.安装jdk1.7–参考文档:《安装JDK》

8.1官网获取jdk1.7

    [官网获取jdk1.7](http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html)    [官网](http://www.oracle.com/technetwork/java/javase/)

8.2解压jdk安装包

# mkdir /usr/local/java# mkdir /usr/local/java/jdk# tar -zxvf jdk安装包 -C /usr/local/java/jdk/

8.3添加环境变量,在profile中添加以下内容

# vi /etc/profile        export JAVA_HOME=/usr/local/java/jdk/jdk1.7        export PATH=$PATH:$JAVA_HOME/bin        export JAVA_HOME=/usr/lib/jvm/jdk1.7          export JRE_HOME=${JAVA_HOME}/jre           export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib           export PATH=${JAVA_HOME}/bin:$PATH         export JAVA_HOME=/home/vitamin/software/jdk1.7.0_79         export JRE_HOME=${JAVA_HOME}/jre           export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib           export PATH=${JAVA_HOME}/bin:$PATH 

8.4刷新配置

    # source /etc/profile

9.安装hadoop-2.2.0

9.1下载和解压hadoop(注意hadoop版本要和jdk匹配)

[下载链接](http://archive.apache.org/dist/hadoop/core/)新建文件夹:    # mkdir /bigdata解压文件夹:    # tar -zxvf hadoop安装包 -C   /bigdata/***若解压后的文件所属用户不是root,则要进行以下步骤--参考网址: [网址](http://blog.chinaunix.net/uid-24612962-id-3759228.html)        递归修改一个目录及其目录下所有文件的所有者:
        # chown -R 用户名 文件目录名        # chgrp -R 用户名 文件目录名
***hadoop2.2.0目录说明:        hadoop-2.2.0/bin      可执行的脚本            /include  存放本地库的头文件            /sbin     启动 停止相关的文件            /etc      hadoop配置文件            /lib      本地的一些库            /share    依赖的java            /share /hadoop/                  /hdfs                  /yarn

9.2搭建伪分布式,修改目录(/bigdata/hadoop-2.2.0/etc/hadoop)下的配置文件–注意:主机名的修改,本文档中vitamin07要改为自己的主机名或者localhost

1)修改环境变量,在hadoop-env.sh添加以下内容

    # cd /bigdata/hadoop-2.2.0/etc/hadoop    # vi hadoop-env.sh    找到 export JAVA_HOME=......那行  更新为:        export JAVA_HOME=/usr/local/java/jdk/jdk1.7    保存退出。

2)修改 core-site.xml # vi core-site.xml

<configuration>        <!--指定hdfs的namenode地址-->            <property>                <name>fs.defaultFS</name>                 <value>hdfs://vitamin07:9000</value>                <description>the adress of namenode</description>            </property>        <!--指定hadoop运行时产生文件的存放目录(linux上具体某个目录)-->            <property>                <name>hadoop.tmp.dir</name>                <value>/bigdata/hadoop-2.2.0/tmp</value>                <description>the filespace where the producing file will be store </description>            </property>    </configuration>

3)修改 hdfs-site.xml # vi hdfs-site.xml

<configuration>        <!--指定hdfs的存储文件的副本数-->        <property>            <name>dfs.replication</name>             <value>1</value>            <description></description>        </property>    </configuration>

4)修改 mapred-site.xml.example 为:mapred-site.xml # mv mapred-site.xml.template mapred-site.xml

   # vi mapred-site.xml    <configuration>        <!--设置hadoop的MapReduce运行在yarn上 -->        <property>            <name>mapreduce.framework.name</name>             <value>yarn</value>            <description>mapreduce will run in yarn</description>        </property>    </configuration>

5)修改 yarn-site.xml # vi yarn-site.xml

<configuration>        <!-- 指定nameManager获取数据的方式是shuflle方式 -->        <property>            <name>yarn.nodemanager.aux-services</name>             <value>mapreduce_shuffle</value>            <description></description>        </property>        <!-- 指定yarn的管着者resourceManager的地址 -->        <property>            <name>yarn.resourcemanager.hostname</name>            <value>vitamin07</value>            <description></description>        </property>    </configuration>    

6)添加hadoop环境变量,在profile中更新以下内容

    # vi /etc/profile             export JAVA_HOME=/usr/local/java/jdk目录             export HADOOP_HOME=/bigdata/hadoop-2.2.0             export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin    # source   /etc/profile

7)格式化文件系统

    # Hdfs  namenode -format 格式化文件系统

8)启动hdfs和yarn

   sbin目录下:    # ./start-dfs.sh    # ./start-yarn.sh

9.2测试hdfs

             首先向hdfs上传一个文件
    # hadoop fs -put /etc/profile /profile    # hadoop fs -ls /

9.3测试MapReduce

    # hadoop jar /bigdata/hadoop-2.2.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jar wordcount /profile /out

多节点集群

hadoop2.0已经发布了稳定版本了,增加了很多特性,比如HDFS HA、YARN等。

/**********本次所用软件为:hadoop-2.2.0、CentOS6.4-i386、zookeeper-3.4.5、jdk-7u79-linux-i586***************************/

注意:apache提供的hadoop-2.2.0的安装包是在32位操作系统编译的,因为hadoop依赖一些C++的本地库,
所以如果在64位的操作上安装hadoop-2.2.0就需要重新在64操作系统上重新编译

1.修改Linux主机名

2.修改IP

3.修改主机名和IP的映射关系

######注意######如果你们公司是租用的服务器或是使用的云主机(如华为用主机、阿里云主机等)/etc/hosts里面要配置的是内网IP地址和主机名的映射关系    

4.关闭防火墙

5.ssh免登陆 (可先不做此步)

6.安装JDK,配置环境变量等

集群规划:
主机名 IP 安装的软件 运行的进程
vitamin01 192.168.1.201 jdk、hadoop NameNode、DFSZKFailoverController
vitamin02 192.168.1.202 jdk、hadoop NameNode、DFSZKFailoverController
vitamin03 192.168.1.203 jdk、hadoop ResourceManager
vitamin04 192.168.1.204 jdk、hadoop、zookeeper DataNode、NodeManager、JournalNode、QuorumPeerMain
vitamin05 192.168.1.205 jdk、hadoop、zookeeper DataNode、NodeManager、JournalNode、QuorumPeerMain
vitamin06 192.168.1.206 jdk、hadoop、zookeeper DataNode、NodeManager、JournalNode、QuorumPeerMain

说明:
在hadoop2.0中通常由两个NameNode组成,一个处于active状态,另一个处于standby状态。Active NameNode对外提供服务,而Standby NameNode则不对外提供服务,仅同步active namenode的状态,以便能够在它失败时快速进行切换。
hadoop2.0官方提供了两种HDFS HA的解决方案,一种是NFS,另一种是QJM。这里我们使用简单的QJM。在该方案中,主备NameNode之间通过一组JournalNode同步元数据信息,一条数据只要成功写入多数JournalNode即认为写入成功。通常配置奇数个JournalNode
这里还配置了一个zookeeper集群,用于ZKFC(DFSZKFailoverController)故障转移,当Active NameNode挂掉了,会自动切换Standby NameNode为standby状态

7.集群安装步骤:

1.安装配置zooekeeper集群

1.1解压

            mkdir /bigdata        tar -zxvf zookeeper-3.4.5.tar.gz -C /bigdata/

1.2修改配置

        cd /bigdata/zookeeper-3.4.5/conf/        cp zoo_sample.cfg zoo.cfg        vim zoo.cfg             ***修改:dataDir=/bigdata/zookeeper-3.4.5/tmp        在最后添加:        server.1=vitamin04:2888:3888        server.2=vitamin05:2888:3888        server.3=vitamin06:2888:3888        保存退出        然后创建一个tmp文件夹        mkdir /bigdata/zookeeper-3.4.5/tmp        再创建一个空文件        touch /bigdata/zookeeper-3.4.5/tmp/myid        最后向该文件写入ID        echo 1 > /bigdata/zookeeper-3.4.5/tmp/myid

1.3将配置好的zookeeper拷贝到其他节点(首先分别在vitamin05、vitamin06根目录下创建一个bigdata目录:mkdir /bigdata)

        scp -r /bigdata/zookeeper-3.4.5/ vitamin05:/bigdata/        scp -r /bigdata/zookeeper-3.4.5/ vitamin06:/bigdata/        注意:修改vitamin05、vitamin06对应/bigdata/zookeeper-3.4.5/tmp/myid内容        vitamin05:            echo 2 > /bigdata/zookeeper-3.4.5/tmp/myid        vitamin06:            echo 3 > /bigdata/zookeeper-3.4.5/tmp/myid

2.安装配置hadoop集群

2.1解压

            mkdir /bigdata        tar -zxvf hadoop-2.2.0.tar.gz -C /bigdata/

2.2配置HDFS(hadoop2.0所有的配置文件都在$HADOOP_HOME/etc/hadoop目录下)

        #将hadoop添加到环境变量中        vim /etc/profile        export JAVA_HOME=/usr/java/jdk1.7.0_55        export HADOOP_HOME=/bigdata/hadoop-2.2.0        export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin        #hadoop2.0的配置文件全部在$HADOOP_HOME/etc/hadoop下        cd /bigdata/hadoop-2.2.0/etc/hadoop
2.2.1修改hadood-env.sh # vi hadoop-env.sh
            export JAVA_HOME=/usr/local/java/jdk/jdk1.7
2.2.2修改core-site.xml # vi core-site.xml
            <configuration>                <!-- 指定hdfs的nameservice为ns1 -->                <property>                    <name>fs.defaultFS</name>                    <value>hdfs://ns1</value>                </property>                <!-- 指定hadoop临时目录 -->                <property>                    <name>hadoop.tmp.dir</name>                    <value>/bigdata/hadoop-2.2.0/tmp</value>                </property>                <!-- 指定zookeeper地址 -->                <property>                    <name>ha.zookeeper.quorum</name>                    <value>vitamin04:2181,vitamin05:2181,vitamin06:2181</value>                </property>            </configuration>
2.2.3修改hdfs-site.xml # vi hdfs-site.xml
            <configuration>                <!--指定hdfs的nameservice为ns1,需要和core-site.xml中的保持一致 -->                <property>                    <name>dfs.nameservices</name>                    <value>ns1</value>                </property>                <!-- ns1下面有两个NameNode,分别是nn1,nn2 -->                <property>                    <name>dfs.ha.namenodes.ns1</name>                    <value>nn1,nn2</value>                </property>                <!-- nn1的RPC通信地址 -->                <property>                    <name>dfs.namenode.rpc-address.ns1.nn1</name>                    <value>vitamin01:9000</value>                </property>                <!-- nn1的http通信地址 -->                <property>                    <name>dfs.namenode.http-address.ns1.nn1</name>                    <value>vitamin01:50070</value>                </property>                <!-- nn2的RPC通信地址 -->                <property>                    <name>dfs.namenode.rpc-address.ns1.nn2</name>                    <value>vitamin02:9000</value>                </property>                <!-- nn2的http通信地址 -->                <property>                    <name>dfs.namenode.http-address.ns1.nn2</name>                    <value>vitamin02:50070</value>                </property>                <!-- 指定NameNode的元数据在JournalNode上的存放位置 -->                <property>                    <name>dfs.namenode.shared.edits.dir</name>                    <value>qjournal://vitamin04:8485;vitamin05:8485;vitamin06:8485/ns1</value>                </property>                <!-- 指定JournalNode在本地磁盘存放数据的位置 -->                <property>                    <name>dfs.journalnode.edits.dir</name>                    <value>/bigdata/hadoop-2.2.0/journal</value>                </property>                <!-- 开启NameNode失败自动切换 -->                <property>                    <name>dfs.ha.automatic-failover.enabled</name>                    <value>true</value>                </property>                <!-- 配置失败自动切换实现方式 -->                <property>                    <name>dfs.client.failover.proxy.provider.ns1</name>                    <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>                </property>                <!-- 配置隔离机制方法,多个机制用换行分割,即每个机制占用一行-->                <property>                    <name>dfs.ha.fencing.methods</name>                    <value>                        sshfence                        shell(/bin/true)                    </value>                </property>                <!-- 使用sshfence隔离机制时需要ssh免登陆 -->                <property>                    <name>dfs.ha.fencing.ssh.private-key-files</name>                    <value>/root/.ssh/id_rsa</value>                </property>                <!-- 配置sshfence隔离机制超时时间 -->                <property>                    <name>dfs.ha.fencing.ssh.connect-timeout</name>                    <value>30000</value>                </property>            </configuration>
2.2.4修改mapred-site.xml # cp mapred-site.xml.template mapred-site.xml # vi mapred-site.xml
            <configuration>                <!-- 指定mr框架为yarn方式 -->                <property>                    <name>mapreduce.framework.name</name>                    <value>yarn</value>                </property>            </configuration>    
2.2.5修改yarn-site.xml # vi yarn-site.xml
            <configuration>                <!-- 指定resourcemanager地址 -->                <property>                    <name>yarn.resourcemanager.hostname</name>                    <value>vitamin03</value>                </property>                <!-- 指定nodemanager启动时加载server的方式为shuffle server -->                <property>                    <name>yarn.nodemanager.aux-services</name>                    <value>mapreduce_shuffle</value>                </property>            </configuration>
2.2.6修改slaves(slaves是指定子节点的位置,因为要在vitamin01上启动HDFS、在vitamin03启动yarn,所以vitamin01上的slaves文件指定的是datanode的位置,vitamin03上的slaves文件指定的是nodemanager的位置)
            # cd /bigdata/hadoop-2.2.0/etc/hadoop            vitamin04            vitamin05            vitamin06
2.2.7配置免密码登陆
            #首先要配置vitamin01到vitamin02、vitamin03、vitamin04、vitamin05、vitamin06的免密码登陆            #在vitamin01上生产一对钥匙            ssh-keygen -t rsa            #将公钥拷贝到其他节点,包括自己            ssh-coyp-id vitamin01  # /usr/bin/ssh-copy-id -i ~/.ssh/id_rsa.pub  root@vitamin01            ssh-coyp-id vitamin02  # /usr/bin/ssh-copy-id -i ~/.ssh/id_rsa.pub  root@vitamin02            ssh-coyp-id vitamin03  # /usr/bin/ssh-copy-id -i ~/.ssh/id_rsa.pub  root@vitamin03            ssh-coyp-id vitamin04  # /usr/bin/ssh-copy-id -i ~/.ssh/id_rsa.pub  root@vitamin04            ssh-coyp-id vitamin05  # /usr/bin/ssh-copy-id -i ~/.ssh/id_rsa.pub  root@vitamin05            ssh-coyp-id vitamin06  # /usr/bin/ssh-copy-id -i ~/.ssh/id_rsa.pub  root@vitamin06            非root用户 ssh-coyp-id vitamin12   # /usr/bin/ssh-copy-id -i ~/.ssh/id_rsa.pub  model@vitamin12            #配置vitamin03到vitamin04、vitamin05、vitamin06的免密码登陆            #在vitamin03上生产一对钥匙            ssh-keygen -t rsa            #将公钥拷贝到其他节点              ssh-coyp-id vitamin03  # /usr/bin/ssh-copy-id -i ~/.ssh/id_rsa.pub  root@vitamin03            ssh-coyp-id vitamin04  # /usr/bin/ssh-copy-id -i ~/.ssh/id_rsa.pub  root@vitamin04            ssh-coyp-id vitamin05  # /usr/bin/ssh-copy-id -i ~/.ssh/id_rsa.pub  root@vitamin05            ssh-coyp-id vitamin06  # /usr/bin/ssh-copy-id -i ~/.ssh/id_rsa.pub  root@vitamin06            #注意:两个namenode之间要配置ssh免密码登陆,别忘了配置vitamin02到vitamin01的免登陆            在vitamin02上生产一对钥匙            ssh-keygen -t rsa            ssh-coyp-id -i vitamin01   # /usr/bin/ssh-copy-id -i ~/.ssh/id_rsa.pub  root@vitamin01             

2.4将配置好的hadoop拷贝到其他节点

        scp -r /bigdata/ vitamin02:/        scp -r /bigdata/ vitamin03:/        scp -r /bigdata/hadoop-2.2.0/ root@vitamin04:/bigdata/        scp -r /bigdata/hadoop-2.2.0/ root@vitamin05:/bigdata/        scp -r /bigdata/hadoop-2.2.0/ root@vitamin06:/bigdata/    ###注意:严格按照下面的步骤

2.5启动zookeeper集群(分别在vitamin04、vitamin05、vitamin06上启动zk)

        cd /bigdata/zookeeper-3.4.5/bin/        ./zkServer.sh start        #查看状态:一个leader,两个follower        ./zkServer.sh status

2.6启动journalnode(在vitamin01上启动所有journalnode,注意:是调用的hadoop-daemons.sh这个脚本,注意是复数s的那个脚本)

        cd /bigdata/hadoop-2.2.0        sbin/hadoop-daemons.sh start journalnode        #运行jps命令检验,vitamin04、vitamin05、vitamin06上多了JournalNode进程

2.7格式化HDFS

        #在vitamin01上执行命令:        hdfs namenode -format        #格式化后会在根据core-site.xml中的hadoop.tmp.dir配置生成个文件,这里我配置的是/bigdata/hadoop-2.2.0/tmp,然后将/bigdata/hadoop-2.2.0/tmp拷贝到vitamin02的/bigdata/hadoop-2.2.0/下。        scp -r tmp/ vitamin02:/bigdata/hadoop-2.2.0/

2.8格式化ZK(在vitamin01上执行即可)

        hdfs zkfc -formatZK

2.9启动HDFS(在vitamin01上执行)

        sbin/start-dfs.sh

2.10启动YARN(#####注意#####:是在vitamin03上执行start-yarn.sh,把namenode和resourcemanager分开是因为性能问题,因为他们都要占用大量资源,所以把他们分开了,他们分开了就要分别在不同的机器上启动)

        sbin/start-yarn.sh到此,hadoop2.2.0配置完毕,可以统计浏览器访问:    http://192.168.8.201:50070    NameNode 'vitamin01:9000' (active)    http://192.168.8.202:50070    NameNode 'vitamin02:9000' (standby)验证HDFS HA    首先向hdfs上传一个文件    hadoop fs -put /etc/profile /profile    hadoop fs -ls /    然后再kill掉active的NameNode    kill -9 <pid of NN>    通过浏览器访问:http://192.168.8.202:50070    NameNode 'vitamin02:9000' (active)    这个时候vitamin02上的NameNode变成了active    在执行命令:    hadoop fs -ls /    -rw-r--r--   3 root supergroup       1926 2014-02-06 15:36 /profile    刚才上传的文件依然存在!!!    手动启动那个挂掉的NameNode    sbin/hadoop-daemon.sh start namenode    通过浏览器访问:http://192.168.8.201:50070    NameNode 'vitamin01:9000' (standby)验证YARN:    运行一下hadoop提供的demo中的WordCount程序:    hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jar wordcount /profile /outOK,大功告成!!!Secondary NameNode
原创粉丝点击