zoukankan      html  css  js  c++  java
  • Hadoop 0.20.2 安装配置说明【转】

    Hadoop 0.20.2 安装配置说明

    作者:独孤酒间                         编辑日期:2012820

    关键字:hadoop 0.20.2 集群配置 ubuntu

    描述:本人参考了书籍《Hadoop 实战》及网络上一些资源,经过多次尝试搭建成功后编写的此文档。文档中使用 Ubuntu Server 12.04 x64 + JDK 1.7.0 u5 + Hadoop 0.20.2 及 5 台虚拟机做为演示测试环境。希望能对大家带来帮助。本文档适合初学者,指引初学者或初次接触 Hadoop 的人成功安装 Hadoop ,使用代码执行简单的 HDFS 操作,并利用 MapReduce 执行分布式计算示例代码。其中 MapReduce 示例代码为 Hadoop 官方带的 hadoop-0.20.2-examples.jar 。

    一、     环境说明

    1.1、运行环境

    虚拟机 × 5:

    系统:Ubuntu Server 12.04 x64

    JAVA:JDK 1.7.0 u5 linux x64

    ssh:OpenSSH_5.9p1

    Hadoop:Hadoop 0.20.2

    1.2、网络环境配置

    主机名

    IP 地址

    Hadoop 角色

    ubuntu00

    192.168.1.130

    NameNode

    ubuntu01

    192.168.1.131

    SecondaryNameNode

    ubuntu02

    192.168.1.132

    DataNode

    ubuntu03

    192.168.1.133

    DataNode

    ubuntu04

    192.168.1.134

    DataNode

    1.2.1、配置主机名

    sudo vi /etc/hostname

    将里面内容改为你的主机名即可。如下图,我其中一台机器的主机名叫ubuntu01

     

    1.2.2、配置网络

    sudo vi /etc/network/interfaces

    文件内容如下:

    # This file describes the network interfaces available on your system

    # and how to actiate them. For more information. see interfaces(5).

    # The loopback network interface

    auto lo

    iface lo inet loopback

    # The primary network interface

    auto eth0 # eth0 是网卡设备名称

    iface eth0 inet static # 设置 IP 为静态

    address 192.168.1.130 # 你的 IP 地址

    netmask 255.255.255.0 # 你的子网掩码

    network 192.168.1.0 # 此行可省略删除

    broadcast 192.168.1.255 # 此行可省略删除

    gateway 192.168.1.1 # 网关

    dns-nameservers 202.97.224.68 202.97.224.69 # DNS服务器,以空格分隔

    dns-search fireteam.org # 此行和省略删除

    # 以上红字部分为需要根据你的网络环境更改。

     

    1.2.3、配置 IP 与主机名的映射

    sudo vi /etc/hosts

    1、注释 127.0.1.1 所在行,否则DataNode连不上。

    2、将你的集群机器ip   主机名对应方式加上。如192.168.1.130 ubuntu00,每机器一行,本机也要写上。

     

    二、     软件安装

    2.1、JDK

    2.1.1、安装 JDK

    tar -zxvf /ftp/jdk-7u5-linux-x64.tar.gz -C /tools/

    其中“/ftp/jdk-7u5-linux-x64.tar.gz”是你的安装包完整路径,-C(-C必须大写)后面的“/tools/”是你要解压到的路径。

    2.1.2、配置环境变量

    sudo vi /etc/profile

    在文件结尾处添加如下内容:

    # Set JVM 1.7.0_05

    export JAVA_HOME="/tools/jdk1.7.0_05" # 红字部分需要改为你的 JDK 安装路径。

    export JRE_HOME="${JAVA_HOME}/jre"

    export CLASSPATH=".:${JAVA_HOME}/lib:${JRE_HOME}/lib"

    # Set Path

    export PATH="${JAVA_HOME}/bin:${JRE_HOME}/bin:${PATH}

     

    配置完成后执行 sudo source /etc/profile ,使环境变量设置生效。

    2.1.3、测试 JDK

    java -version

    显示 java version "1.7.0_05" 即为成功。

    javac -version

    显示 javac 1.7.0_05 即为成功。

    2.2、SSH

    2.2.1、安装 SSH

    sudo apt-get install openssh-server openssh-client

    2.2.2、查看 SSH 状态

    service ssh status

    显示 ssh start/running, process 810 即为成功,其中810为进程 ID 。

    2.2.3、启动或重启 SSH

    sudo service ssh start

    或者

    sudo /etc/init.d/ssh restart

    2.2.4、配置 SSH 免密码登录

    1) 为每台机器生成公钥和加密文件

    在每台机器上执行命令 ssh-keygen -t rsa 之后一路回车。

    2) 把每台机器的公钥文件复制到其它所有机器

    scp ~/.ssh/id_rsa.pub 192.168.1.131:~/id_rsa_130.pub

    scp ~/.ssh/id_rsa.pub 192.168.1.132:~/id_rsa_130.pub

    以上两句中的 ~/.ssh/id_rsa.pub 是你执行 1) 后生成的公钥文件路径,192.168.1.131 和 192.168.1.132 是其它机器的 IP 地址,IP 后面的 ~/id_rsa_130.pub 是目标路径及文件名,这里我为了区分各机器的公钥文件,执行了重命名,将每台机器的 id_rsa.pub 拷贝至目标机器的 id_rsa_130.pub (其中 130 为所属机器的 IP )。然后输入yes,最后输入slave机器的密码

    3) 确保 ssh 配置文件中存在如下内容

    执行命令:sudo vi /etc/ssh/sshd_config

    RSAAuthentication yes

    PubkeyAuthentication yes

    AuthorizedKeysFile    .ssh/authorized_keys

    如需修改,则在修改后参照2.2.3执行重启SSH服务使其生效。

    4) 将 id_rsa_*.pub 追加到授权的 key 里面

    追加本机的授权: cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

    追加其它机的授权: cat ~/id_rsa_130.pub >> ~/.ssh/authorized_keys

    其中 id_rsa_130.pub 要替换为你的其他机公钥文件名,有几个就替换并执行几遍。

    在每台机器上重复执行 4) 内容。

    5) 验证 SSH

    在每台机器中执行 ssh 192.168.1.130 (替换为你的目标机器的 IP 地址),然后输入 yes (首次连接确认)。如果主机名由本机名变成目标主机名即为成功。每台机器都要执行一遍对所有机器的连接。

    6) 移除公钥文件

    删除所有机器上刚生成的 .pub 文件

    rm ~/.ssh/id_rsa.pub

    rm ~/id_rsa*.pub

    2.3、Hadoop

    2.3.1、安装 Hadoop

    tar -zxvf /ftp/hadoop-0.20.2.tar.gz -C /tools/

    其中“/ftp/hadoop-0.20.2.tar.gz”是你的安装包完整路径,-C(-C必须大写)后面的“/tools/”是你要解压到的路径。

    2.3.2、配置环境变量

    sudo vi /etc/profile

    在文件结尾处添加如下内容:

    # Set Hadoop 0.20.2

    export HADOOP_HOME="/tools/hadoop-0.20.2" # 红字部分需要改为你的 Hadoop 安装路径。

    export HADOOP_DEV_HOME="${HADOOP_HOME}"

    export HADOOP_CONF_DIR="${HADOOP_HOME}/conf"

    # Set Path

    export PATH="${JAVA_HOME}/bin:${JRE_HOME}/bin:${HADOOP_HOME}/bin:${PATH}

    # 在 2.1.2 JDK 环境变量的配置基础上加上红字部分。

     

    配置完成后执行 sudo source /etc/profile ,使环境变量设置生效。

    三、     Hadoop 配置

    3.1、默认端口信息

    50030 mapred.job.tracker.http.address

    描述:JobTracker administrative web GUI JOBTRACKER的HTTP 服务器和端口

    50070 dfs.http.address

    描述:NameNode administrative web GUI NAMENODE的HTTP服务器和端口

    50010 dfs.datanode.address

    描述:DataNode control port (each DataNode listens on this port and registers it with the NameNode on startup) DATANODE控制端口,主要用于DATANODE初始化时向NAMENODE提出注册和应答请求

    50020 dfs.datanode.ipc.address

    描述:DataNode IPC port, used for block transfer DATANODE的RPC服务器地址和端口

    50060 mapred.task.tracker.http.address

    描述:Per TaskTracker web interface TASKTRACKER的HTTP服务器和端口

    50075 dfs.datanode.http.address

    描述:Per   DataNode web interface DATANODE的HTTP服务器和端口

    50090 dfs.secondary.http.address

    描述:Per secondary NameNode web interface 辅助DATANODE的HTTP服务器和端口

    3.2、建立相关文件夹

    我的 Hadoop 根目录:/tools/hadoop/workspace/

    mkdir /tools/hadoop/workspace/temp

    mkdir /tools/hadoop/workspace/dfs

    mkdir /tools/hadoop/workspace/dfs/name

    mkdir /tools/hadoop/workspace/dfs/data

    mkdir /tools/hadoop/workspace/mapred

    mkdir /tools/hadoop/workspace/mapred/local

    mkdir /tools/hadoop/workspace/mapred/system

    java 程序使用的文件夹:

    mkdir /tools/hadoop/workspace/java

    3.3、修改配置文件

    3.3.1、hadoop-env.sh

    cd /tools/hadoop/hadoop-0.20.2/conf

    vi hadoop-env.sh

    最后一行加入:export JAVA_HOME=/tools/jdk1.7.0_05

    # 红字部分替换为你的jdk安装路径。

    3.3.2、core-site.xml

     

    <?xml version="1.0"?>

    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

    <!-- Put site-specific property overrides in this file. -->

    <configuration>

       <property>

          <name>fs.default.name</name>

          <value>hdfs://ubuntu00:9000</value>

          <description>NameNode 的主机名:端口号。</description>

       </property>

       <property>

          <name>hadoop.tmp.dir</name>

          <value>/tools/hadoop/workspace/temp</value>

       </property>

       <property>

          <name>dfs.name.dir</name>

          <value>/tools/hadoop/workspace/dfs/name</value>

       </property>

       <property>

          <name>dfs.data.dir</name>

          <value>/tools/hadoop/workspace/dfs/data</value>

       </property>

    </configuration>

     

    3.3.3、hdfs-site.xml

     

    <?xml version="1.0"?>

    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

    <!-- Put site-specific property overrides in this file. -->

    <configuration>

       <property>

          <name>dfs.replication</name>

          <value>2</value>

       </property>

       <property>

          <name>dfs.http.address</name>

          <value>ubuntu00:50070</value>

       </property>

    </configuration>

     

    3.3.4、mapred-site.xml

     

    <?xml version="1.0"?>

    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

    <!-- Put site-specific property overrides in this file. -->

    <configuration>

       <property>

          <name>mapred.job.tracker</name>

          <value>ubuntu00:9001</value>

       </property>

       <property>

          <name>mapred.job.tracker.http.address</name>

          <value>ubuntu00:50030</value>

       </property>

       <property>

          <name>mapred.local.dir</name>

          <value>/tools/hadoop/workspace/mapred/local</value>

       </property>

       <property>

          <name>mapred.system.dir</name>

          <value>/tools/hadoop/workspace/mapred/system</value>

       </property>

    </configuration>

     

    3.4、运行及测试页面

    start-all.sh:启动所有的Hadoop 守护进程,包括NameNode、DataNode、SecondaryNameNode、JobTracker和Tasktrack。

    start-dfs.sh:启动Hadoop DFS守护进程,包括NameNode、DataNode和SecondaryNameNode。

    start-mapred.sh:启动Hadoop Map/Reduce守护进程,包括JobTracker和Tasktrack。

    Hadoop 开启后,先查看安全模式的状态:

    hadoop dfsadmin -safemode get

    如果是开启状态则执行下面命令关闭:

    hadoop dfsadmin -safemode leave

    或等待自动关闭也可以。

    打开 Hadoop http 页面,查看 Hadoop 运行状态。

    http://IP 地址:端口,在 hdfs-site.xml 配置文件中dfs.http.address 的值,如果直接用主机名,请确保你的访问机能 ping 通 dfs 主机名(ubuntu00 等)。

    如:http://192.168.1.130:50070

     

    http://IP 地址:端口,在 mapred-site.xml 配置文件中 mapred.job.tracker.http.address 的值。

    如:http://192.168.1.130:50030

     

    可能一开始打开会很慢,或者 Nodes、Live Nodes 显示为 0 ,稍等一会(10分钟之内),如果还是为 0,则查看对应的日志,在 ${HADOOP_HOME}/logs 下。

    四、     Hadoop-HDFS 测试

    本节介绍使用 Java 代码测试 Hadoop HDFS 。

    4.1 创建测试用的 Hadoop 目录

    hadoop dfs -mkdir /test

    hadoop dfs -mkdir /input

    4.2 创建两个(或多个)任意内容的文件

    vi /tools/hadoop/workspace/1.txt

    vi /tools/hadoop/workspace/2.txt

    4.3 拷贝文件到 Hadoop 中:

    hadoop dfs -copyFromLocal /tools/hadoop/workspace/1.txt /input/

    hadoop dfs -copyFromLocal /tools/hadoop/workspace/2.txt /test/

    4.4 查看在 Hadoop 中的这两个文件:

    hadoop dfs -cat /input/1.txt

    hadoop dfs -cat /test/2.txt

    4.5 编写 Java 类

    我这里类名叫 "DirStatus" ,文件名叫 " DirStatus.java"。

    vi DirStatus.java

    文件内容如下:

    import java.util.*;

    import java.net.URI;

    import org.apache.hadoop.fs.FSDataInputStream;

    import org.apache.hadoop.fs.FileStatus;

    import org.apache.hadoop.fs.FileUtil;

    import org.apache.hadoop.fs.Path;

    import org.apache.hadoop.fs.FileSystem;

    import org.apache.hadoop.conf.Configuration;

    public class DirStatus {

       public static void main (String[] args) throws Exception {

          String uri = args[0];

          Configuration conf = new Configuration();

          FileSystem fs = FileSystem.get(URI.create(uri), conf);

          Path[] paths = new Path[args.length];

          for (int i = 0, length = paths.length; i < length; i++) {

            paths[i] = new Path(args[i]);

            System.out.println("Directory argument[" + i + "]='" + args[i] + "'");

          }

          FileStatus[] status = fs.listStatus(paths);

          Path[] listedPaths = FileUtil.stat2Paths(status);

          for (Path p : listedPaths) {

            System.out.println(p);

          }

       }

    }

     

    4.6 编译 Java 类

    javac -classpath ${HADOOP_HOME}/hadoop-0.20.2-core.jar:${HADOOP_HOME}/lib/commons-logging-1.0.4.jar DirStatus.java

    4.7 执行 Java 程序

    java -classpath ${HADOOP_HOME}/hadoop-0.20.2-core.jar:${HADOOP_HOME}/lib/commons-logging-1.0.4.jar: DirStatus "hdfs://ubuntu00:9000/input" "hdfs://ubuntu00:9000/test" "hdfs://ubuntu00:9000/"

    注:-classpath 命令选项值最后的:不能省略,否则报 "Error: Could not find or load main class DirStatus" 异常。

    执行结果如下:

     

    五、     Hadoop-MapReduce 测试

    本节介绍使用 hadoop 自带的例子 hadoop-0.20.2-examples.jar 测试MapReduce 。

    5.1 创建 hadoop 输入目录

    hadoop dfs -mkdir /input

    5.2 创建计算时需要的文件

    1) 编辑 file1.txt

    vi file1.txt

    文件内容如下:

    hello world

    hello hadoop

     

    2) 编辑 file2.txt

    vi file2.txt

    文件内容如下:

    hello mapreduce

    hadoop world

    hadoop is running

    The world is ours

     

    5.3 上传文件到 Hadoop 输入目录

    hadoop dfs -put file1.txt file2.txt /input

    5.4 执行 jar

    hadoop jar ${HADOOP_HOME}/hadoop-0.20.2-examples.jar wordcount /input /output

    注:输出目录 "/output" 必须不存在,否则会报错。

    显示以下内容即为成功:

     

    在 http://192.168.1.130:50030 中的 " Running Jobs" 下显示正在执行的任务。

    如果执行成功,在 http://192.168.1.130:50030 中的 "Completed Jobs" 下显示已执行的任务表格,点击 "Jobid" 列中的值可以查看任务的详细信息。

    "http://192.168.1.130:50030" 需要根据你的配置更改。

    5.5 查看结果

    hadoop dfs -cat /output/part-r-00000

    或先查看 "/output" 目录下存在哪些文件

    hadoop dfs -ls /output

    注:"/output" 是 5.4 中输入的最后一个参数:输出目录。

    结果内容如下:

     

    六、     Java 的操作

    6.1 编译 Java 文件

    javac -classpath ${HADOOP_HOME}/hadoop-0.20.2-core.jar:${HADOOP_HOME}/lib/commons-cli-1.2.jar -d wordcount WordCount.java

    其中:"-classpath" 命令选项后面的值是你的类所需要的包;"-d" 命令选项后面的值是编译后的文件存放路径,路径必须存在。

    6.2 归档成 jar 文件

    jar -cvf wordcount.jar -C wordcount/ .

    注:"/ ." 不能删改!

    6.3 Hadoop 执行 jar 归档文件

    hadoop jar ${HADOOP_HOME}/hadoop-0.20.2-examples.jar wordcount /input /output

    其中:"${HADOOP_HOME}/hadoop-0.20.2-examples.jar "为要执行的 jar 归档文件;"worcount" 为要执行的主函数所在类的类名;"/input" 、"/output" 为类的参数,分别代表输入路径及输出路径。

  • 相关阅读:
    UVA 11925 Generating Permutations 生成排列 (序列)
    UVA 1611 Crane 起重机 (子问题)
    UVA 11572 Unique snowflakes (滑窗)
    UVA 177 PaperFolding 折纸痕 (分形,递归)
    UVA 11491 Erasing and Winning 奖品的价值 (贪心)
    UVA1610 PartyGame 聚会游戏(细节题)
    UVA 1149 Bin Packing 装箱(贪心)
    topcpder SRM 664 div2 A,B,C BearCheats , BearPlays equalPiles , BearSorts (映射)
    UVA 1442 Cave 洞穴 (贪心+扫描)
    UVA 1609 Foul Play 不公平竞赛 (构(luan)造(gao)+递归)
  • 原文地址:https://www.cnblogs.com/94julia/p/2951195.html
Copyright © 2011-2022 走看看