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" 为类的参数,分别代表输入路径及输出路径。

  • 相关阅读:
    Angular2新人常犯的5个错误
    好爱情,坏爱情
    关于css中a标签的样式
    移动端rem布局实践
    我们这一代人的困惑
    原创ui.router源码解析
    Web客户端数据存储学习笔记——Cookie
    喝汤了——如何用一年时间获得十年的能力和经验
    Petya勒索木马
    推荐几个精致的web UI框架
  • 原文地址:https://www.cnblogs.com/94julia/p/2951195.html
Copyright © 2011-2022 走看看