HADOOP 环境 搭建

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

  1. 硬件环境
    hadoop只能安装在linux或unix服务器之上。
    3台或以上linux服务器(10.20.143.12,10.20.149.83,10.20.149.84)。若是使用windows服务器,则须要安装cygwin,在cygwin中部署hadoop
  2. java环境
    jdk 1.6及以上
  3. 配置3台机器别名
    vi /etc/hosts
    增长内容

    10.249.200.157 h1
    10.249.196.166 h2 
    10.249.196.3 h3
  4. 建立hadoop用户用于安装hadoop

    useradd hadoop
  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@10.20.149.83 cat /home/hadoop/.ssh/id_rsa.pub >> authorized_keys
    ssh hadoop@10.20.149.83 cat /home/hadoop/.ssh/id_dsa.pub >> authorized_keys
      
    ssh hadoop@10.20.149.84 cat /home/hadoop/.ssh/id_rsa.pub >> authorized_keys
    ssh hadoop@10.20.149.84 cat /home/hadoop/.ssh/id_dsa.pub >> authorized_keys
      
    ssh hadoop@10.20.143.12 cat /home/hadoop/.ssh/id_rsa.pub >> authorized_keys
    ssh hadoop@10.20.143.12 cat /home/hadoop/.ssh/id_dsa.pub >> authorized_keys
      
    ssh本机也须要无密码
      
    cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
      
    chmod 600 ~/.ssh/authorized_keys

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

  6. 下载hadoop
    使用版本为0.20.2.0
    解压hadoop

    tar -xzvf  hadoop-0.20.2.0.tar

    如今hadoop路径为/home/hadoop/hadoop-0.20.2.0 java

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

  1. 配置master内容以下

    cat /home/hadoop/hadoop-0.20.2.0/conf/masters
    10.20.143.12
  2. 配置slaves内容以下

    cat /root/hadoop/hadoop-0.20.2.0/conf/slaves
    10.20.149.83
    10.20.149.84
  3. 在每台机器上建立相同的目录结构用于存放数据文件

    mkdir -p data/tmp
    mkdir -p data/data
    mkdir -p data/name
  4. 配置hadoop环境变量文件

    vi $HADOOP_HOME/conf/hadoop-env.sh

    增长内容 node


    export JAVA_HOME=/usr/alibaba/java
    export HADOOP_HOME=/home/hadoop/hadoop-0.20.2.0
  5. 配置conf/core-site.xml文件

    more 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

    more 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-0.20.2.0/conf/
    scp conf/*.* h3:/home/hadoop/hadoop-0.20.2.0/conf/
  10. 启动hadoop
    格式化namenode

    bin/hadoop namenode -format

    启动hadoop守护进程 linux


    bin/start-all.sh

查看结果

  1. html管理连接
    可使用两个默认连接来查看job运行状况和空间使用状况
    NameNode - http://h1:50070/
    JobTracker - http://h1:50030/
  2. 执行一个分布式计算
    将输入文件拷贝到分布式文件系统:

    $ bin/hadoop fs -put conf input

    运行发行版提供的示例程序: apache


    $ bin/hadoop jar hadoop-examples-0.20.2.0.jar grep input output 'dfs[a-z.]+'

    查看输出文件:
    将输出文件从分布式文件系统拷贝到本地文件系统查看: windows


    $ bin/hadoop fs -get output output
    $ cat output/*

    在分布式文件系统上查看输出文件: 安全

    $ bin/hadoop fs -cat output/*
  3. 集群调整
    datanode或者tasktracker crash,或者须要向集群中增长新的机器时又不能重启集群。
    1. 把新机器的增长到conf/slaves文件中(datanode或者tasktracker crash则可跳过)
    2. 在新机器上进入hadoop目录,启动守护进程

      $bin/hadoop-daemon.sh start datanode
      $bin/hadoop-daemon.sh start tasktracker
    3. 在namenode上

      $bin/hadoop balancer

错误列表

  1. 启动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
  1. 搭建好的h1 h2 h3是:

    10.249.200.157 h1
    10.249.196.166 h2
    10.249.196.3   h3 服务器

    ssh打通失败看这里:

    1. 机器上执行ssh-keygen -t rsa生成密钥,碰倒提示直接回车。
    2. 将每台机器/$home/.ssh目录下的id_rsa.pub拷贝到/$home/.ssh/authorized_keys文件中。
    3. 可是发现始终仍是须要验证密码才能ssh跳转。原来目录的权限设置有关系,好比hadoop用户,$home/hadoop 目录设置为700,authorized_keys设置为400,由于linux处于安全考虑。另外:authorized_keys文件中两个不一样的条目最好换行空开。

    为了debug因此在linux上搭建一个单机的hadoop

    参考下面几篇文章: eclipse

    咱们使用的hadoop是0.20.2 ssh

    下载地址:http://labs.renren.com/apache-mirror/hadoop/core/hadoop-0.20.2/hadoop-0.20.2.tar.gz

    http://www.51testing.com/?uid-159438-action-viewspace-itemid-211599

    http://hadoop.apache.org/common/docs/r0.20.2/cn/quickstart.html#Local

    http://hi.baidu.com/yuweiming/blog/item/6bf4242db074c420359bf744.html

    core-site.xml mapred-site.xml hdfs-site.xml 这三个文件的配置就参考这篇文章,h1换成本身的ip

    datax若是没有的话,能够手工把hdfs文件拷贝过去。

    bin/hadoop fs  -mkdir -p /datax/noah/dev

    bin/hadoop fs  -chmod -R 777 /datax/noah

     
    先从h1 上把datax经过的文件下载的本地磁盘,好比c:\hadoopTmp
    而后在上传到本身开发环境的单机hadoop上。

    hadoop-debug的方法

    http://code.google.com/p/hadoop-clusternet/wiki/DebuggingJobsUsingEclipse

    hadoop debug时只能使用本地文件,不能使用hdfs

    1.准备一个本地配置文件 hadoop-local.xml

    <?xml version="1.0" ?> <configuration> <property> <name>fs.default.name</name> <value>file:///</value> </property> <property> <name>mapred.job.tracker</name> <value>local</value> </property> </configuration>
    2.$HADOOP_HOME/bin/hadoop最后一行加入以下启动参数:
    exec "$JAVA" -Xdebug -Xrunjdwp:transport=dt_socket,address=7777,server=y,suspend=y $JAVA_HEAP_MAX $HADOOP_OPTS -classpath "$CLASSPATH" $CLASS "$@"

    3.打包运行时使用以下:
    hadoop-debug jar distReport.jar -conf hadoop-local.xml  -distReportInputPath input  -distReportOutputPath result

    4.eclipse链接远程debug

    命令集合:
    1.解决权限问题hdfs权限问题    hadoop fs  -chmod -R 777 /datax/noah
    2.linux下建立hdfs文件夹: hadoop fs  -mkdir -p /datax/noah/dev
    3.复制文件命令:hadoop fsf -cp /data/file1 /data/file2
    4.添加文件hadoop fs -put localfile hdfs://nn.example.com/hadoop/hadoopfile
    5.hadoop fs -copyFromLocal input/docs/tt.txt /user/tom/tt.txt
    6.hadoop fs -copyToLocal tt.txt tt.coy.txt
相关文章
相关标签/搜索