zoukankan      html  css  js  c++  java
  • hadoop-0.23.9安装以及第一个mapreduce测试程序

         hadoop是一个能够对大量数据进行分布式处理的软件框架。它实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有着高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上。而且它提供高传输率(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。

        这里是一些公司使用hadoop的情况,POwerByWIki  :http://wiki.apache.org/hadoop/PoweredBy,可以看到目前hadoop在世界范围内的的使用情况。

        对这个东西的介绍也就不再多说,并且关于他的一个架构大家可以google去查询(主从关系Master-Slaves),我更多的是想通过hadoop这个并行框架学习如何去写mapreduce,所以就今天这里只说说一开始如何安装并配置hadoop,并且最后利用《hadoop实战》上的一个简单的wordcount来测试我们的hadoop是否搭建成功。(当然hadoop本身适用于集群的数据处理工作,但是这里我只是学习下简单的mapreduce,所以可以将它配置为一个伪分布式的模式,只在本机上运行就ok!)

       [环境说明]:

       Ubuntu12.10 +hadoop-0.23.9+openjdk1.7.0

       [Start]:

       首先我们需要一个hadoop的releases版本,可以从这个链接下载:http://mirrors.cnnic.cn/apache/hadoop/common/

        然后 

    tar -xzf hadoop-0.23.9.tar.gz
         sudo mv hadoop-0.23.9 /usr/local/      (目录自己设定,后面的配置文件目录要保持一致)
    cd /usr/local/
         sudo ln -s hadoop-0.23.9/  hadoop
    

       完成后需要安装我们的java jdk了,可以直接sudo apt-get install openjdk-7-jre

       安装完后可以看看java的版本 : java -version

       [Step 2]:

      安装ssh-server,ubuntu默认只会安装ssh的client,你的机子如果每安装过ssl-server端,别人是没办法ssh你的机子。

       sudo apt-get install openssh-server或是 sudo apt-get install ssh

      然后配置本机无密钥登录,

      ssh-keygen -t rsa -""

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

      可以检测下是否成功,即登录自己的自己,with command : ssh localhost  

      [Step 3]:

      当然我么需要为hadoop自己建立一个用户组,这样是为了以后的事物处理,在这个用户组下在建立一个hadoop用户,当然master管辖 下的一个slave,在集群上,就会有许多的用户了,相当于Mul-slave。 

        创建hadoop用户组:   

        sudo addgroup hadoop

        创建hadoop用户:

        sudo adduser -ingroup hadoop hadoop

        给hadoop这个用户设置权限,编辑/etc/sudoers文件,给hadoop用户赋予root用户同样的权限,

         在root   ALL=(ALL:ALL)   ALL下添加 hadoop   ALL=(ALL:ALL)  ALL,

      [Step 4]:

         在这一步,我们就开始配置我们的hadoop的配置:

        chown  -R hadoop:hadoop /usr/local/hadoop
        chown  -R hadoop:hadoop /usr/local/hadoop-0.23.9

        切换用户:su hadoop

        1. 配置jdk及hadoop环境变量

      编辑 sudo vim /etc/profile ,添加以下配置信息:

    #java environment
    export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-i386/
    export JRE_HOME=${JAVA_HOME}/jre
    export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib 
    export PATH=${JAVA_HOME}/bin:$PATH
    #hadoop environment
    export HADOOP_PREFIX=/usr/local/hadoop-0.23.9
    export PATH=$PATH:$HADOOP_PREFIX/bin
    export PATH=$PATH:$HADOOP_PREFIX/sbin
    export HADOOP_MAPRED_HOME=${HADOOP_PREFIX}
    export HADOOP_COMMON_HOME=${HADOOP_PREFIX}
    export HADOOP_HDFS_HOME=${HADOOP_PREFIX}
    export YARN_HOME=${HADOOP_PREFIX}
    export HADOOP_CONF_DIR=${HADOOP_PREFIX}/etc/hadoop
    export YARN_CONF_DIR=${HADOOP_PREFIX}/etc/hadoop

    2.hadoop 文件配置

     hadoop@szm-Lenovo:~$ cd /usr/local/hadoop/etc/hadoop/

    hadoop@szm-Lenovo:/usr/local/hadoop/etc/hadoop$ vim yarn-env.sh 

    添加配置信息:

    export HADOOP_FREFIX=/usr/local/hadoop
    export HADOOP_COMMON_HOME=${HADOOP_FREFIX}
    export HADOOP_HDFS_HOME=${HADOOP_FREFIX}
    export PATH=$PATH:$HADOOP_FREFIX/bin
    export PATH=$PATH:$HADOOP_FREFIX/sbin
    export HADOOP_MAPRED_HOME=${HADOOP_FREFIX}
    export YARN_HOME=${HADOOP_FREFIX}
    export HADOOP_CONF_HOME=${HADOOP_FREFIX}/etc/hadoop
    export YARN_CONF_DIR=${HADOOP_FREFIX}/etc/hadoop

    之后就需要配置hadoop的运行配置文件:
     hadoop@szm-Lenovo:/usr/local/hadoop/etc/hadoop$ vim core-site.xml

     配置为:

    <configuration>
    <property> 
    
        <name>fs.defaultFS</name> 
    
        <value>hdfs://localhost:12200</value> 
    
      </property>
    
      <property>  
    
        <name>hadoop.tmp.dir</name> 
    
        <value>/usr/local/hadoop/hadoop-root</value> 
    
      </property> 
    
    <property>
    
      <name>fs.arionfs.impl</name>
    
      <value>org.apache.hadoop.fs.pvfs2.Pvfs2FileSystem</value>
    
      <description>The FileSystem for arionfs.</description>
    
    </property> 
    </configuration>
    

    hadoop@szm-Lenovo:/usr/local/hadoop/etc/hadoop$ vim hdfs-site.xml 

    <configuration>
     <property>
    
        <name>dfs.namenode.name.dir</name>
    
        <value>file:/usr/local/hadoop/data/dfs/name</value>
    
        <final>true</final>
    
        </property>
    
        <property>
    
        <name>dfs.namenode.data.dir</name>
    
        <value>file:/usr/local/hadoop/data/dfs/data</value>
    
        <final>true</final>
    
        </property>
    
        <property>  
    
        <name>dfs.replication</name>
    
        <value>1</value>
    
        </property>
    
        <property>
    
        <name>dfs.permission</name>
    
        <value>false</value>
    
        </property>
    </configuration>
    

    hadoop@szm-Lenovo:/usr/local/hadoop/etc/hadoop$ vim mapred-site.xml  (原来存在的是有后缀为.template的文件,改掉)

    <configuration>
    <property>
    
        <name>mapreduce.framework.name</name>
    
        <value>yarn</value>
    
        </property>
    
        <property>
    
        <name>mapreduce.job.tracker</name>
    
        <value>hdfs://localhost:9001</value>
    
        <final>true</final>
    
        </property>
    
        <property>
    
        <name>mapreduce.map.memory.mb</name>
    
        <value>1536</value>
    
        </property>
    
        <property>
    
        <name>mapreduce.map.java.opts</name>
    
        <value>-Xmx1024M</value>
    
        </property>
    
        <property>
    
        <name>mapreduce.reduce.memory.mb</name>
    
        <value>3072</value>
    
        </property>
    
        <property>
    
        <name>mapreduce.reduce.java.opts</name>
    
        <value>-Xmx2560M</value>
    
        </property>
    
        <property>
    
        <name>mapreduce.task.io.sort.mb</name>
    
        <value>512</value>
    
        </property>
     <property>
    
        <name>mapreduce.task.io.sort.factor</name>
    
        <value>100</value>
    
        </property>    
    
        <property>
    
        <name>mapreduce.reduce.shuffle.parallelcopies</name>
    
        <value>50</value>
    
        </property>
    
        <property>
    
        <name>mapreduce.system.dir</name>
    
        <value>file:/usr/local/hadoop/data/mapred/system</value>
    
        </property>
    
        <property>
    
        <name>mapreduce.local.dir</name>
    
        <value>file:/usr/local/hadoop/data/mapred/local</value>
    
        <final>true</final>
    
        </property>
    </configuration>
    


    hadoop@szm-Lenovo:/usr/local/hadoop/etc/hadoop$ vim yarn-site.xml

    <configuration>
    
    <!-- Site specific YARN configuration properties -->
    <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>mapreduce.framework.name</name> 
    
        <value>yarn</value> 
    
      </property> 
    
      <property> 
    
        <name>user.name</name> 
    
        <value>hadoop</value> 
    
      </property> 
    
      <property> 
    
        <name>yarn.resourcemanager.address</name> 
    
        <value>localhost:54311</value> 
    
      </property> 
    
      <property> 
    
        <name>yarn.resourcemanager.scheduler.address</name> 
    
        <value>localhost:54312</value> 
    
      </property> 
    <property> 
    
        <name>yarn.resourcemanager.webapp.address</name> 
    
        <value>localhost:54313</value> 
    
      </property> 
    
      <property> 
    
        <name>yarn.resourcemanager.resource-tracker.address</name> 
    
        <value>localhost:54314</value> 
    
      </property> 
    
      <property> 
    
        <name>yarn.web-proxy.address</name> 
    
        <value>localhost:54315</value> 
    
      </property> 
    
      <property> 
    
        <name>mapred.job.tracker</name> 
    
        <value>localhost</value> 
    
      </property>
    </configuration>
    

    编辑完成后就差不多将hadoop的配置信息改完了,其中的localhost因为是运行在本机的伪分布式,当然可以根据实际的集群关系该为该宿主机的信息

    [Step 5]:

    测试我们的hadoop是否运行,

    hadoop@szm-Lenovo:~$ cd /usr/local/hadoop/sbin/

    hadoop@szm-Lenovo:/usr/local/hadoop/sbin$ ./start-dfs.sh 

    Starting namenodes on [localhost]
    localhost: starting namenode, logging to /usr/local/hadoop-0.23.9/logs/hadoop-hadoop-namenode-szm-Lenovo.out
    localhost: starting datanode, logging to /usr/local/hadoop-0.23.9/logs/hadoop-hadoop-datanode-szm-Lenovo.out
    Starting secondary namenodes [3dns-2.adobe.com]
    3dns-2.adobe.com: starting secondarynamenode, logging to /usr/local/hadoop-0.23.9/logs/hadoop-hadoop-secondarynamenode-szm-Lenovo.out

    hadoop@szm-Lenovo:/usr/local/hadoop/sbin$ ./start-yarn.sh

    hadoop@szm-Lenovo:/usr/local/hadoop/sbin$ ./start-yarn.sh 
    starting yarn daemons
    starting resourcemanager, logging to /usr/local/hadoop-0.23.9/logs/yarn-hadoop-resourcemanager-szm-Lenovo.out
    localhost: starting nodemanager, logging to /usr/local/hadoop-0.23.9/logs/yarn-hadoop-nodemanager-szm-Lenovo.out

    可以用java的Jps命令查看hadoop是否成功运行:

    hadoop@szm-Lenovo:/usr/local/hadoop/sbin$ jps
    1200 Jps
    27288 NameNode
    32150 ResourceManager
    28138 SecondaryNameNode
    32375 NodeManager
    27668 DataNode

    如果显示为上面的信息,则证明hadoop正常运行,上面的几个进程namenode是集群上的宿主节点信息,然后还有mapreduce对应的任务检测进程,可以查看集群节点的任务提交情况,然后处理。(我也是刚开始看,架构还不是很懂)

    [STep 6 ]:

    成功后我们就可以测试下第一个mapreduce程序,利用它自带的一个wordcount例子来运行下,

    在一个目录下建立文件:hadoop@szm-Lenovo:~/jkl$ touch test.txt

    编辑文件内容为:hadoop@szm-Lenovo:~/jkl$ cat test.txt 
    a s d f g h j k l p o i u y t r e w q z x c v b n m s d f a g h y t c v g f d s

    在hadoop的hdfs文件系统建立一个文件夹

    hadoop@szm-Lenovo:~/jkl$ hadoop fs -mkdir /test

    提交test.txt 

    hadoop@szm-Lenovo:~/jkl$ hadoop fs -copyFromLocal test.txt /test

    产看提交信息:

    hadoop@szm-Lenovo:~/jkl$ hadoop fs -ls /test

    Found 1 items
    -rw-r--r--   1 hadoop supergroup         80 2013-10-10 16:29 /test/test.txt

    然后运行wordcount:

    hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-0.23.9.jar wordcount /test/test.txt  /test/out

    查看结果信息:

    hadoop@szm-Lenovo:~/jkl$ hadoop fs -ls /test/out
    Found 2 items
    -rw-r--r--   1 hadoop supergroup          0 2013-10-10 16:32 /test/out/_SUCCESS
    -rw-r--r--   1 hadoop supergroup        104 2013-10-10 16:32 /test/out/part-r-00000

    查看单词统计结果:

    hadoop@szm-Lenovo:~/jkl$ hadoop fs -cat /test/out/part-r-00000

    a       2
    b       1
    c       2
    d       3
    e       1
    f       3
    g       3
    h       2
    i       1
    j       1
    k       1
    l       1
    m       1
    n       1
    o       1
    p       1
    q       1
    r       1
    s       3
    t       2
    u       1
    v       2
    w       1
    x       1
    y       2
    z       1
    

    运行结果就是上面的样子,一个整体的体验流程就是这样,然后我们需要现在单机上学习如何写我们的mapreduce程序。若是想拓展当然可以搞一个真正的集群,可惜,现在没有硬件设备。就是自己的PC。好了,就到这里,手酸了。

  • 相关阅读:
    ASP.NET MVC5 视图预编译
    Task(TPL)简单的实现Winform(WPF)异步
    工作三年了,该报多少工资?
    mongo笔记 // 一字一句的写下来,工作点滴片段
    旅行的意义- 2018年许愿
    用户需求调研,万里长征第一步
    软件变更控制
    源码解析-Abp vNext丨分布式事件总线DistributedEventBus
    源码解析-Abp vNext丨LocalEventBus
    技术番外篇丨Github Action CI/CD
  • 原文地址:https://www.cnblogs.com/james1207/p/3362219.html
Copyright © 2011-2022 走看看