zoukankan      html  css  js  c++  java
  • Hadoop从0开始 (安装配置:转) (一)

    之前一直在找安装教程 都是0.20版本的 弄了好久没有弄出来..我下载的是0.23.11

    后来发现是新版跟旧版有很大的不同.官方文档都不更新简直是丧心病狂..

    今天终于找到新版的安装配置方法.多次失败后自己理解并修改了一些步骤添加了一些细节说明。分享出来.

    安装环境:

    1. 系统:Ubuntu 14   64bit
    2. hadoop:0.23.11  
    3. jdk:1.8.0_11

    安装步骤:

    一.安装JDK

    安装 jdk,并且配置环境以及设置成默认

    检查jdk是否正确安装和配置

    在主目录下执行java -version

    如果出现下面类似结果则ok

    hadoop@hanson-ThinkPad-Edge:/opt/hadoop$ java  -version
    java version "1.8.0_11"
    Java(TM) SE Runtime Environment (build 1.8.0_11-b12)
    Java HotSpot(TM) 64-Bit Server VM (build 25.11-b03, mixed mode)

     记得系统中java_home也要设置好

    二.安装hadoop

    1.下载:

    http://mirror.bit.edu.cn/apache/hadoop/common/

    选择你要的版本。我选择的是最新的 0.23.11

    hadoop是32位的如果是64位系统最好使用源码安装

    不然之后也要重新编译64位库 很麻烦

    2.安装

    ubuntu下解压然后改名为hadoop方便敲命令

    再移动到 /opt/下  用sudo mv

     现在hadoop的目录即  /opt/hadoop

    以后的命令我都是按这个位置来。

     三.安装ssh server

     这个是ssh的服务

    sudo apt-get install openssh-server

     四.添加hadoop用户

    为了方便hadoop的管理,最好添加一个单独的用户来管理hadoop,例如添加hadoop用户

    执行以下命令

    sudo adduser hadoop

    然后会提示输入密码,设置好密码就可以了

    这时候只要执行

    su hadoop

    输入密码后就可以切换到hadoop用户下

    注:

    为了使hadoop帐号下能够sudo,在 /etc/sudousers 里

    sudo    ALL=(ALL:ALL) ALL的后面添加
    hadoop   ALL=(ALL:ALL) ALL

     五.配置本机ssh无密码登录

    hadoop@hanson-ThinkPad-Edge:~$ ssh-keygen -t rsa 
    ssh-keygen -t rsa命令会在当前目录下产生一个隐藏.ssh文件夹,以参数 rsa (或者 dsa) 方式在里面产生公钥和密钥,名称为  id_rsa.pub 和id_rsa ,可以把公钥给别的计算机来无密码登录你电脑,相当于通行证。

    hadoop@hanson-ThinkPad-Edge:~$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

    authorized_keys便是存放别人的公钥的地方。这个命令就是复制到里面。

    测试:

    hadoop@hanson-ThinkPad-Edge:~$ ssh localhost
    Welcome to Ubuntu 14.04.1 LTS (GNU/Linux 3.13.0-32-generic x86_64)

     * Documentation:  https://help.ubuntu.com/

    Last login: Wed Aug 13 11:25:32 2014 from localhost

     六.配置Hadoop

    chmod -R 777 /opt/hadoop

    改变hadoop的权限,使所有人可读可写。

    su hadoop

    切换到hadoop用户

    1. 配置jdk及hadoop环境变量

    在~/.bashrc文件里追加(只有当前用户可以使用的配置,切记切换到hadoop)

    下面所有因安装而异的配置在我会用粗体标注。

    export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_11
    export JRE_HOME=${JAVA_HOME}/jre
    export HADOOP_HOME=/opt/hadoop
    export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
    export PATH=${JAVA_HOME}/bin:$HADOOP_HOME/bin:$PATH
    export HADOOP_COMMON_HOME=$HADOOP_HOME
    export HADOOP_HDFS_HOME=$HADOOP_HOME
    export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
    export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop

    2. Hadoop文件配置

    hadoop@hanson-ThinkPad-Edge:~$ cd /opt/hadoop/etc/hadoop/

    hadoop@hanson-ThinkPad-Edge:/opt/hadoop/etc/hadoop$ vi yarn-env.sh

    追加以下配置 (下面所有因安装而异的配置在我会用粗体标注。)

    export HADOOP_FREFIX=/opt/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

    下面在 /opt/hadoop/etc/hadoop/ 目录下进行一系列配置(这些文件的模板都在template里面,学到深入的时候再分享。我后面遇到的问题也与此有关。)

    vi core-site.xml

    <configuration>
    <property> 
      
        <name>fs.defaultFS</name> 
      
        <value>hdfs://localhost:9000</value> 
      
      </property>
      
      <property>  
      
        <name>hadoop.tmp.dir</name> 
      
        <value>/opt/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>

     注意下面配置中的地址,也与安装路径有关。

    vi hdfs-site.xml

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    <configuration>
     <property>
      
        <name>dfs.namenode.name.dir</name>
      
        <value>file:/opt/hadoop/data/dfs/name</value>
      
        <final>true</final>
      
        </property>
      
        <property>
      
        <name>dfs.namenode.data.dir</name>
      
        <value>file:/opt/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>

    vi mapred-site.xml 这个是新文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    <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:/opt/hadoop/data/mapred/system</value>
      
        </property>
      
        <property>
      
        <name>mapreduce.local.dir</name>
      
        <value>file:/opt/hadoop/data/mapred/local</value>
      
        <final>true</final>
      
        </property>
    </configuration>

     vi yarn-site.xml

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    <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>

     配置完成.

    七.启动并运行wordcount程序

    1. 格式化namenode. 进入 /opt/hadoop/

    键入 bin/hadoop namenode -format 

    切记若多次格式化,请先清空hdfs-site.xml中dfs.namenode.*.dir设置的文件路径里的文件。不然会冲突。不要把文件夹删了。

    2. 启动

    于/opt/hadoop/sbin

    $ ./start-dfs.sh 

    $../start-yarn.sh

     4.检查启动是否成功

    hadoop@hanson-ThinkPad-Edge:/opt/hadoop/sbin$ jps 

    5036 DataNode 

    5246 SecondaryNameNode 

    5543 NodeManager 

    5369 ResourceManager 

    4852 NameNode 

    5816 Jps 

     全部存在就成功了。

     5.试着运行wordcount

    1)构造输入数据

    新建一个文本文件

    比如在 ~ 目录下的test.txt中输入一系列字母

    hadoop@hanson-ThinkPad-Edge:/opt/hadoop$ cat ~/test.txt
    a c b a b d f f e b a c c d g i s a b c d e a b f g e i k m m n a b d g h i j a k j e

    记得打空格。这个示例是用来统计单词数量的,不打空格它就只统计一个了。

     2)上传到hdfs

    hadoop@hanson-ThinkPad-Edge:/opt/hadoop$  hadoop fs -mkdir /test  (在hdfs中创建一个新文件夹)
    hadoop@hanson-ThinkPad-Edge:/opt/hadoop$  hadoop fs -copyFromLocal ~/test.txt /test   (这个指令就是从本地复制到hdfs中)
    hadoop@hanson-ThinkPad-Edge:/opt/hadoop$ hadoop fs -ls  /test (查看test中的文件)
    Found 1 items
    -rw-r--r--   1 hadoop supergroup         86 2013-04-18 07:47 /test/test.txt


    3)执行程序

    注意版本号。

    hadoop@hanson-ThinkPad-Edge:/opt/hadoop$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-0.23.11.jar wordcount /test/test.txt /test/out                

    #其中/test/out 为输出目录

    4)查看结果

    hadoop@hanson-ThinkPad-Edge:/opt/hadoop$ hadoop fs -ls /test
    Found 2 items
    drwxr-xr-x   - hadoop supergroup          0 2014-08-13 11:42 /test/out
    -rw-r--r--   1 hadoop supergroup         86 2014-08-13 13:50 /test/test.txt


    hadoop@ubuntu:/opt/hadoop$ hadoop fs -ls /test/out
    Found 2 items
    -rw-r--r--   1 hadoop supergroup          0 2014-08-13 13:53 /test/out/_SUCCESS
    -rw-r--r--   1 hadoop supergroup         76 2014-08-13 13:53 /test/out/part-r-00000


    hadoop@ubuntu:/opt/hadoop$ hadoop fs -cat /test/out/part-r-00000
    14/08/13 13:55:24 INFO util.NativeCodeLoader: Loaded the native-hadoop library
    a    7
    b    6
    c    4
    d    4
    e    4
    f    3
    g    3
    h    1
    i    3
    j    2
    k    2
    m    2
    n    1
    s    1

     最后记得

    $ ./stop-dfs.sh

    $ ./stop-yarn.sh

    --------------------

    下面说一下我所遇到的问题

    1.第一个错误是碰到说找不到加载类namenode

    解决过程: 经过查找发现是xml配置文件写错了 多了一个符号 删去后好了

    2.第二个碰到的问题就是datanode始终无法启动

    解决过程:经过查找logs目录下的datanode启动的记录

    发现抛出 IOException ,大概是 Incompatible clusterIDs  。也就是clusterIDs 有矛盾。最后找到原因是由于总是配置不好,我进行了多次的格式化。所以才会冲突

    切记若多次格式化,请先清空hdfs-site.xml中dfs.namenode.*.dir设置的文件路径里的文件。不然会冲突。不要把文件夹删了。

    于是有了上面这句忠告。

    3.第三个碰到的问题是在最后一步查看输出文档时。结果之前提示如下。

    Java HotSpot(TM) 64-Bit Server VM warning: You have loaded library /opt/hadoop/lib/native/libhadoop.so.1.0.0 which might have disabled stack guard. The VM will try to fix the stack guard now.
    It's highly recommended that you fix the library with 'execstack -c <libfile>', or link it with '-z noexecstack'.
    14/08/13 13:55:24 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
    大概就是说我本地库无法加载。

    解决方法:查找到原因是因为hadoop用的是32位的库而系统是64位的。

    想消除这个warning需要编译一个64位的库。或者一开始就用源码安装。心累。于是去官网下载了 src  (http://mirror.bit.edu.cn/apache/hadoop/common/

    另外还需要安装 maven 和 CMake 还有protobuf (过程略)

    最后进入源码目录 敲下 mvn package -Pdist,native -DskipTests 编译

    结果出现了另外的问题,报出Error提示不准使用自关闭元素  <p/> 于是我去源码里把所有的<p/>删除了 (不知道是标准改变的原因还是什么)

    之后还出现了各种各样的问题。。一般是缺少某个项目造成的 比如  protobuf  这个也得下 过程略。

    4.使用hadoop dfsadmin -report 类似的操作时 提示:

    DEPRECATED: Use of this script to execute hdfs command is deprecated.
    Instead use the hdfs command for it.

    解释:新版这样的命令已经由hadoop变成了hdfs

     ----------------------------------------

    其他经验:

    1.hadoop 命令设置(原始命令过长使用别名简化命令):在~/.bashrc 中添加如下:
    #alias for hadoop
    alias hls='hadoop fs -ls'
    alias hlsr='hadoop fs -lsr'
    alias hcp='hadoop fs -cp '
    alias hmv='hadoop fs -mv'
    alias hget='hadoop fs -get'
    alias hput='hadoop fs -put'
    alias hrm='hadoop fs -rm'
    alias hmkdir='hadoop fs -mkdir'
    alias hcat='hadoop fs -cat'
    alias hrmr='hadoop fs -rmr'
    alias hstat='hadoop fs -stat'
    alias htest='hadoop fs -test'
    alias htext='hadoop fs -text'
    alias htouchz='hadoop fs -touchz'
    alias hdu='hadoop fs -du'
    alias hdus='hadoop fs -dus'
    alias hchmod='hadoop fs -chmod'
    alias hchgrp='hadoop fs -chgrp'
    alias hchown='hadoop fs -chown'
    alias htail='hadoop fs -tail'
    alias hjar='hadoop jar'

    以后就可以使用这些简化命令来代替了。

  • 相关阅读:
    Jenkins持续集成
    爬豆瓣保存到sqlite3
    爬豆瓣保存到Excel
    sqlite3数据库的增删查改
    用pandas和matplotlib对用户消费行为分析
    TCP请求
    fastjson
    断言
    将结果写入文件
    加解密
  • 原文地址:https://www.cnblogs.com/ainubis/p/3990233.html
Copyright © 2011-2022 走看看