导航

【转】Hadoop手动安装

Posted on 2014-04-30 11:05  十三只熊  阅读(276)  评论(0编辑  收藏  举报

原文地址:http://www.cnblogs.com/xia520pi/archive/2012/05/16/2503949.html

说明:本文是对以上原文的简化,便于快速阅读。感谢原文作者!
 
----------一、准备工作----------
1. Hadoop介绍

  Hadoop是Apache软件基金会旗下的一个开源分布式计算平台。以Hadoop分布式文件系统(HDFS,Hadoop Distributed Filesystem)和MapReduce(Google MapReduce的开源实现)为核心的Hadoop为用户提供了系统底层细节透明的分布式基础架构。

  对于Hadoop的集群来讲,可以分成两大类角色:Master和Salve。一个HDFS集群是由一个NameNode和若干个DataNode组成的。其中NameNode作为主服务器,管理文件系统的命名空间和客户端对文件系统的访问操作;集群中的DataNode管理存储的数据。MapReduce框 架是由一个单独运行在主节点上的JobTracker和运行在每个集群从节点的TaskTracker共同组成的。主节点负责调度构成一个作业的所有任 务,这些任务分布在不同的从节点上。主节点监控它们的执行情况,并且重新执行之前的失败任务;从节点仅负责由主节点指派的任务。当一个Job被提交 时,JobTracker接收到提交作业和配置信息之后,就会将配置信息等分发给从节点,同时调度任务并监控TaskTracker的执行。

  从上面的介绍可以看出,HDFS和MapReduce共同组成了Hadoop分布式系统体系结构的核心。HDFS在集群上实现分布式文件系统,MapReduce在集群上实现了分布式计算和任务处理。HDFS在MapReduce任务处理过程中提供了文件操作和存储等支持,MapReduce在HDFS的基础上实现了任务的分发、跟踪、执行等工作,并收集结果,二者相互作用,完成了Hadoop分布式集群的主要任务。

 
2. 节点分布
集群中包括3个节点:1个Master,2个Salve,节点之间局域网连接,可以相互ping通。
主机名 IP
zcmaster.hadoop 192.168.1.144
zcslave1.hadoop 192.168.1.145
zcslave2.hadoop 192.168.1.146
 
3. 安装包
需要下载 jdk 和 hadoop 的安装包并上传到每一个节点机子上:
    jdk-7u51-linux-x64.tar.gz
    hadoop-1.2.1.tar.gz
 
4. 修改 master 和 salve 的主机名(需要重启OS):
    vi /etc/sysconfig/network
master的:
    HOSTNAME=zcmaster.hadoop
salve1的:
    HOSTNAME=zcslave1.hadoop
salve2的:
    HOSTNAME=zcslave2.hadoop
 
5. 关闭 master 和 slave 的防火墙(需要重启OS):
    chkconfig --level 2345 iptables off
 
6. 修改 master 和 salve 的 /etc/hosts 文件:
    192.168.1.144    zcmaster.hadoop    zcmaster
    192.168.1.145    zcslave1.hadoop    zcslave1
    192.168.1.146    zcslave2.hadoop    zcslave2
 
7. 在 master 和 salve 上创建 hadoop 用户:
添加用户:
    useradd -d /home/hadoop hadoop
设置密码:
    passwd hadoop
注:密码可以统一为hadoop
 
 
----------二、master 无密码 ssh 访问 master、slave----------
1. 在 master 创建秘钥,并授权自己的公钥。然后拷贝公钥到 slave 机子上:
    su - hadoop
    cd ~/.ssh
    ssh-keygen -t rsa -P ''
    cat id_rsa.pub >> authorized_keys
    chmod 600 authorized_keys
    scp ~/.ssh/id_rsa.pub hadoop@zcslave1.hadoop:~/.ssh/zcmaster_rsa.pub
    scp ~/.ssh/id_rsa.pub hadoop@zcslave2.hadoop:~/.ssh/zcmaster_rsa.pub
 
2. 到两个 slave 机子授权 master 的公钥:
    su - hadoop
    cd ~/.ssh
    cat zcmaster_rsa.pub >> authorized_keys
    chmod 600 authorized_keys
 
3. 测试在 master 机子上能无密码访问 master、两个 slave 机子
    su - hadoop
    ssh zcmaster.hadoop
    ssh zcslave1.hadoop
    ssh zcslave2.hadoop
 
注:运行三个 ssh 命令是会提示如下信息,输入 yes 即可(然后生成信息到 .ssh/konw_hosts文件)。首次会这样,以后就不会有这个提示了!
The authenticity of host 'zcslave1.hadoop (192.168.1.145)' can't be established.
RSA key fingerprint is 7c:18:7d:8e:95:77:59:03:5b:b3:5d:c3:bd:1d:12:83.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'zcslave1.hadoop,192.168.1.145' (RSA) to the list of known hosts.
Last login: Fri Feb 28 11:08:49 2014 from zcmaster.hadoop
 
----------三、安装配置Java环境----------
1. 安装(master、slave都要装)
    su - root
    cd /zc/hadoop    #jdk 安装包已上传到这里
    tar xzvf jdk-7u51-linux-x64.tar.gz
    mkdir /usr/java
    mv  /usr/java
    mv jdk1.7.0_51/ /usr/java
 
2. 配置 JAVA 环境变量(master、slave都要配置)
    su - root
    vi /etc/profile
在最后添加如下内容:
    #set java environment
    export JAVA_HOME=/usr/java/jdk1.7.0_51
    export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
    export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
 
3. 验证配置
    su - hadoop
    java -version
输入如下:
    java version "1.7.0_51"
    Java(TM) SE Runtime Environment (build 1.7.0_51-b13)
    Java HotSpot(TM) 64-Bit Server VM (build 24.51-b03, mixed mode)
 
----------四、安装配置Hadoop----------
1. 安装 hadoop(master、slave都要装)
    su - root
    cd /zc/hadoop    #hadoop 安装包已上传到这里
    tar xcvf hadoop-1.2.1.tar.gz
    mv hadoop-1.2.1 hadoop
    mv hadoop /usr
    cd /usr
    mkdir /usr/hadoop/tmp    #这一步很重要,之后的配置会用到
    chown -R hadoop:hadoop hadoop
 
2. 配置 hadoop 环境变量(master、slave都要配)
    su - root
    vi /etc/profile
在最后添加如下内容:
    #set hadoop path
    export HADOOP_HOME=/usr/hadoop
    export PATH=$PATH:$HADOOP_HOME/bin
    export HADOOP_HOME_WARN_SUPPRESS=1
验证配置:
    su - hadoop
    echo $HADOOP_HOME
输出如下:
    /usr/hadoop
 
 
3. 配置 hadoop(master、slave都要配)
    su - hadoop
    cd /usr/hadoop/conf
 
3.1 配置 hadoop-env.sh 文件(master、slave都要配)
    vi hadoop-env.sh
添加 JAVA_HOME 如下:
    #set java environment
    export JAVA_HOME=/usr/java/jdk1.7.0_51
 
3.2 配置 core-site.xml 文件(master、slave都要配)
    vi core-site.xml
在 configuration 标签内添加如下内容:
    <!-- temp folder properties -->
    <property>
            <name>hadoop.tmp.dir</name>
            <value>/usr/hadoop/tmp</value>
            <description>A base for other temporary directories.</description>
    </property>
    <!-- file system properties -->
    <property>
            <name>fs.default.name</name>
            <value>hdfs://192.168.1.144:9000</value>
    </property>
注:如没有配置hadoop.tmp.dir参数,此时系统默认的临时目录为:/tmp/hadoo-hadoop。而这个目录在每次重启后都会被干掉,必须重新执行format才行,否则会出错。
 
3.3 配置 hdfs-site.xml 文件(master、slave都要配)
    vi hdfs-site.xml
在 configuration 标签内添加如下内容:
  <property>
      <name>dfs.replication</name>
      <value>1</value>
  </property>
注:replication 是数据副本数量,默认为3,salve少于3台就会报错
 
3.4 配置 mapred-site.xml 文件(master、slave都要配):
    vi mapred-site.xml
在 configuration 标签内添加如下内容:
    <property>
        <name>mapred.job.tracker</name>
        <value>http://192.168.1.144:9001</value>
    </property>
注:修改Hadoop中MapReduce的配置文件,配置的是JobTracker的地址和端口
 
3.5 配置 masters 文件(master、slave都要配)
    vi masters
修改内容如下:
    zcmaster.hadoop
 
3.6 配置 slaves 文件(master主机特有):
    vi slaves
修改内容如下:
    zcslave1.hadoop
    zcslave2.hadoop
 
4. 验证安装配置
4.1 格式化 HDFS 文件系统(在 master 主机上):
    su - hadoop
    hadoop namenode -format
运行结果如下:
14/02/28 15:33:43 INFO namenode.NameNode: STARTUP_MSG: 
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG:   host = zcmaster.hadoop/192.168.1.144
STARTUP_MSG:   args = [-format]
STARTUP_MSG:   version = 1.2.1
STARTUP_MSG:   build = https://svn.apache.org/repos/asf/hadoop/common/branches/branch-1.2 -r 1503152; compiled by 'mattf' on Mon Jul 22 15:23:09 PDT 2013
STARTUP_MSG:   java = 1.7.0_51
************************************************************/
14/02/28 15:33:44 INFO util.GSet: Computing capacity for map BlocksMap
14/02/28 15:33:44 INFO util.GSet: VM type       = 64-bit
14/02/28 15:33:44 INFO util.GSet: 2.0% max memory = 1013645312
14/02/28 15:33:44 INFO util.GSet: capacity      = 2^21 = 2097152 entries
14/02/28 15:33:44 INFO util.GSet: recommended=2097152, actual=2097152
14/02/28 15:33:45 INFO namenode.FSNamesystem: fsOwner=hadoop
14/02/28 15:33:45 INFO namenode.FSNamesystem: supergroup=supergroup
14/02/28 15:33:45 INFO namenode.FSNamesystem: isPermissionEnabled=true
14/02/28 15:33:45 INFO namenode.FSNamesystem: dfs.block.invalidate.limit=100
14/02/28 15:33:45 INFO namenode.FSNamesystem: isAccessTokenEnabled=false accessKeyUpdateInterval=0 min(s), accessTokenLifetime=0 min(s)
14/02/28 15:33:45 INFO namenode.FSEditLog: dfs.namenode.edits.toleration.length = 0
14/02/28 15:33:45 INFO namenode.NameNode: Caching file names occuring more than 10 times 
14/02/28 15:33:46 INFO common.Storage: Image file /usr/hadoop/tmp/dfs/name/current/fsimage of size 112 bytes saved in 0 seconds.
14/02/28 15:33:47 INFO namenode.FSEditLog: closing edit log: position=4, editlog=/usr/hadoop/tmp/dfs/name/current/edits
14/02/28 15:33:47 INFO namenode.FSEditLog: close success: truncate to 4, editlog=/usr/hadoop/tmp/dfs/name/current/edits
14/02/28 15:33:47 INFO common.Storage: Storage directory /usr/hadoop/tmp/dfs/name has been successfully formatted.
14/02/28 15:33:47 INFO namenode.NameNode: SHUTDOWN_MSG: 
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at zcmaster.hadoop/192.168.1.144
************************************************************/
 
4.2 启动 hadoop:
在启动前关闭集群中所有机器的防火墙,不然会出现datanode开后又自动关闭。
    service iptables stop
    或
    chkconfig --level 2345 iptables    #重启 OS 生效
启动 hadoop:
    start-all.sh
运行结果如下:
starting namenode, logging to /usr/hadoop/libexec/../logs/hadoop-hadoop-namenode-zcmaster.hadoop.out
zcslave2.hadoop: starting datanode, logging to /usr/hadoop/libexec/../logs/hadoop-hadoop-datanode-zcslave2.hadoop.out
zcslave1.hadoop: starting datanode, logging to /usr/hadoop/libexec/../logs/hadoop-hadoop-datanode-zcslave1.hadoop.out
zcmaster.hadoop: starting secondarynamenode, logging to /usr/hadoop/libexec/../logs/hadoop-hadoop-secondarynamenode-zcmaster.hadoop.out
starting jobtracker, logging to /usr/hadoop/libexec/../logs/hadoop-hadoop-jobtracker-zcmaster.hadoop.out
zcslave1.hadoop: starting tasktracker, logging to /usr/hadoop/libexec/../logs/hadoop-hadoop-tasktracker-zcslave1.hadoop.out
zcslave2.hadoop: starting tasktracker, logging to /usr/hadoop/libexec/../logs/hadoop-hadoop-tasktracker-zcslave2.hadoop.out
 
4.3 验证 hadoop
方法1:用 jps 命令验证 hadoop
    jps
master 上运行结果如下:
    4692 Jps
    4432 SecondaryNameNode
    4515 JobTracker
    4279 NameNode
slave 上运行结果如下:
    3316 Jps
    3197 TaskTracker
    3108 DataNode
 
方法2:用 hadoop dfsadmin -report 命令验证 hadoop
    hadoop dfsadmin -report
运行结果如下:
Configured Capacity: 23880851456 (22.24 GB)
Present Capacity: 20455534592 (19.05 GB)
DFS Remaining: 20455464960 (19.05 GB)
DFS Used: 69632 (68 KB)
DFS Used%: 0%
Under replicated blocks: 0
Blocks with corrupt replicas: 0
Missing blocks: 0
 
-------------------------------------------------
Datanodes available: 2 (2 total, 0 dead)
 
Name: 192.168.1.145:50010
Decommission Status : Normal
Configured Capacity: 11940425728 (11.12 GB)
DFS Used: 28672 (28 KB)
Non DFS Used: 1712656384 (1.6 GB)
DFS Remaining: 10227740672(9.53 GB)
DFS Used%: 0%
DFS Remaining%: 85.66%
Last contact: Fri Feb 28 15:59:45 HKT 2014
 
 
Name: 192.168.1.146:50010
Decommission Status : Normal
Configured Capacity: 11940425728 (11.12 GB)
DFS Used: 40960 (40 KB)
Non DFS Used: 1712660480 (1.6 GB)
DFS Remaining: 10227724288(9.53 GB)
DFS Used%: 0%
DFS Remaining%: 85.66%
Last contact: Fri Feb 28 15:59:45 HKT 2014
 
4.4 网页查看集群
 
 
 
 
4.5 停止 hadoop
停止 hadop:
    stop-all.sh
运行结果如下:
stopping jobtracker
zcslave2.hadoop: stopping tasktracker
zcslave1.hadoop: stopping tasktracker
stopping namenode
zcslave1.hadoop: stopping datanode
zcslave2.hadoop: stopping datanode
zcmaster.hadoop: stopping secondarynamenode