【环境搭建】hadoop分布式计算开发环境搭建

安装前准备(各服务器环境保持一致)

  1. 硬件环境
    hadoop只能安装在linux或unix服务器之上。
    3台或以上linux服务器(h1,h2,h3)。如果使用windows服务器,则需要安装cygwin,在cygwin中部署hadoop
  2. java环境
    jdk 1.6及以上
  3. 在每台服务器上创建hadoop用户用于安装hadoop
    useradd hadoop
  4. 在每台服务器上配置3台机器别名
    vi /etc/hosts
    增加内容
    192.168.1.1 h1
    192.168.1.2 h2
    192.168.1.3 h3
  5. 配置ssh
    hadoop在运行时读取dfs中文件,机器之间需要互相无密码ssh,这时就需要配置机器之间的dsa/rsa。配置方式可参考如下:
    rm -rf ~/.ssh
    mkdir ~/.ssh
    chmod 700 ~/.ssh
    /usr/bin/ssh-keygen -t rsa
    /usr/bin/ssh-keygen -t dsa
    touch ~/.ssh/authorized_keys
    cd ~/.ssh
    ssh hadoop@h1 cat /home/hadoop/.ssh/id_rsa.pub >> authorized_keys
    ssh hadoop@h1 cat /home/hadoop/.ssh/id_dsa.pub >> authorized_keys
    ssh hadoop@h2 cat /home/hadoop/.ssh/id_rsa.pub >> authorized_keys
    ssh hadoop@h2 cat /home/hadoop/.ssh/id_dsa.pub >> authorized_keys
    ssh hadoop@h3 cat /home/hadoop/.ssh/id_rsa.pub >> authorized_keys
    ssh hadoop@h3 cat /home/hadoop/.ssh/id_dsa.pub >> authorized_keys
    chmod 600 ~/.ssh/authorized_keys
    

    完成后可使用ssh命令验证如:ssh h1,来确认

  6. 下载hadoop
    使用版本为0.20.2.0
    解压hadoop
    tar -xzvf  hadoop-0.20.2.0.tar
    ln -s hadoop-0.20.2.0/ hadoop

    现在每台服务器上hadoop路径为/home/hadoop/hadoop

开始安装(主要在h1机器上进行)

  1. 配置master内容如下
    cat /home/hadoop/hadoop/conf/masters
    h1
  2. 配置slaves内容如下
    cat /home/hadoop/hadoop/conf/slaves
    h2
    h3
  3. 在每台机器上创建相同的目录结构用于存放数据文件
    mkdir -p ~/data/tmp
    mkdir -p ~/data/data
    mkdir -p ~/data/name
  4. 配置hadoop环境变量文件
    vi $HADOOP_HOME/conf/hadoop-env.sh
    增加内容
    export JAVA_HOME=/usr/java
    export HADOOP_HOME=/home/hadoop/hadoop
  5. 配置conf/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>hadoop.tmp.dir</name>
                    <value>/home/hadoop/data/temp</value>
                    <description>A base for other temporary directories.</description>
            </property>
            <property>
                    <name>fs.default.name</name>
                    <value>hdfs://h1:9000</value>
                    <description>The name of the default file system.  A URI whose
                            scheme and authority determine the FileSystem implementation.  The
                            uri scheme determines the config property (fs.SCHEME.impl) naming
                            the FileSystem implementation class.  The uri authority is used to
                            determine the host, port, etc. for a filesystem.</description>
            </property>
    </configuration>
  6. 配置conf/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>h1:8021</value>
                    <description>The host and port that the MapReduce job tracker runs
                            at.  If 'ocal' then jobs are run in-process as a single map
                            and reduce task.
                    </description>
            </property>
    </configuration>
  7. 配置conf/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>1</value>
            </property>
            <property>
                    <name>dfs.data.dir</name>
                    <value>/home/hadoop/data/data</value>
            </property>
            <property>
                    <name>dfs.name.dir</name>
                    <value>/home/hadoop/data/name</value>
            </property>
    </configuration>
  8. 修改conf/hadoop-env.sh文件将日志放到统一位置
    export HADOOP_LOG_DIR=/home/hadoop/0.20.2/log/hadoop
  9. 将master上配置好的配置文件复制到slave上去
    scp conf/*.* h2:/home/hadoop/hadoop/conf/
    scp conf/*.* h3:/home/hadoop/hadoop/conf/
  10. 启动hadoop
    格式化namenode
    bin/hadoop namenode -format
    启动hadoop守护进程
    bin/start-all.sh

查看结果

  1. html管理链接
    可以使用两个默认链接来查看job运行情况和空间使用情况
    NameNode - http://h1:50070/
    JobTracker - http://h1:50030/
  2. 执行一个分布式计算
    将输入文件拷贝到分布式文件系统:
    $ bin/hadoop fs -put conf input
    运行发行版提供的示例程序:
    $ bin/hadoop jar hadoop-examples-0.20.2.0.jar grep input output 'dfs[a-z.]+'
    将输出文件从分布式文件系统拷贝到本地文件系统查看:
    $ bin/hadoop fs -get output output
    $ cat output/*
    直接在分布式文件系统上查看输出文件:
    $ bin/hadoop fs -cat output/*
  3. 集群调整
    datanode或者tasktracker crash,或者需要向集群中增加新的机器时又不能重启集群。
    把新机器的增加到conf/slaves文件中(datanode或者tasktracker crash则可跳过)
    在新机器上进入hadoop目录,启动守护进程
    $bin/hadoop-daemon.sh start datanode
    $bin/hadoop-daemon.sh start tasktracker
    在namenode上
    $bin/hadoop balancer

错误列表

启动Datanode是报Incompatible namespaceIDs错误
在某次重新执行sh hadoop namenode -format后,启动Datanode时出现Incompatible namespaceIDs错误。
原因:每次namenode format会重新创建一个namenodeId,而tmp/dfs/data下包含了上次format下的id,namenode format清空了namenode下的数据,但是没有晴空datanode下的数据,导致启动时失败
解决方法:
  1. 方法1
    1. 停止集群
    2. 删除有问题节点的数据:conf/hdfs-site.xml里配置的dfs.data.dir目录
    3. 重新执行namenode format
    4. 启动集群
  2. 方法2
    1. 停止数据节点
    2. 编辑<dfs.data.dir>/current/VERSION的值,使其等于namenode的当前值
    3. 重启datanode

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值