avatar

目录
Hadoop学习笔记(一)前期准备

Hadoop学习笔记(一)前期准备

一、前期准备介绍

Hadoop开发的时候,可能需要一些辅助的操作来减少工作量。因此这个栏目是持续更新,来进行推荐操作的总结。不影响一些操作和后续文章内容不匹配等的问题。

二、Linux操作篇

2.1 SSH

Code
生成密钥对:
$>ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
添加认证文件:
$>cat ~/.ssh/id_rsa.pub > ~/.ssh/authorized_keys
权限设置,文件和文件夹权限 除了自己之外,别人不可写:
$>chmod 700 ~/.ssh
$>chmod 644 ~/.ssh/authorized_keys

2.2 命令行提示符显示完整路径

  1. 编辑profile文件,添加环境变量PS1

    Code
    [/etc/profile]
    export PS1='[\u@\h `pwd`]\$'
  2. 更新配置

    Code
    $>source /etc/profile

2.3 创建共享文件夹

有时候需要频繁的从本地往虚拟机上传输文件,虽然有XFTP,但是创建一个共享文件夹或许更方便。

三、脚本篇

​ 当拥有一个完全分布式集群后,需要在不同的机器上分别进行操作,而有时候,这些操作命令又是一样的,因此为了避免每次都要用SSH登录到其他机器上后进行重复的操作,编写一个脚本来执行命令,往往是最佳的选择。

3.1 编写批量执行命令脚本

  1. 创建一个脚本文件

    Code
    $touch xcall.sh
    # 将脚本标记为可执行文件
    $chmod a+x xcall.sh
    # 编辑内容
    $vi xcall.sh
  2. xcall.sh添加以下内容(表示通过SSH对所有主机进行命令操作):

    shell
    #!/bin/bash

    params=$@
    i=201
    for (( i = 201 ; i <= 204 ; i = $i + 1 )) ; do
    echo ============= s$i ==============
    ssh s$i "$params"
    done
  3. 执行脚本

    Code
    $./xcall.sh + 命令

    如,在各机器上打印主机名:

    Code
    $xcall.sh hostname

    打印结果:
    ============= s201 ==============
    s201
    ============= s202 ==============
    s202
    ============= s203 ==============
    s203
    ============= s204 ==============
    s204

3.2 编写批量复制文件脚本

​ 其实复制文件的命令可以直接用 scp 来处理,但是该命令有个问题,就是不能拷贝软连接($ln -s xxx yyy),用该命令拷贝过去后,链接会变成目录。因此,我们需要一个新的软件来进行拷贝。当然在拷贝没有链接的情况下,也是可以直接用 scp 的。

  1. 安装rsync(注意:需要在拷贝与被拷贝双方机子上都安装)

    Code
    $sudo yum install rsync
    1. 创建脚本文件(xsync.sh)并编写内容
    shell
    #!/bin/bash

    if [[ $# -lt 1 ]] ; then echo no params ; exit ; fi

    p=$1
    dir=`dirname $p`
    filename=`basename $p`
    cd $dir
    fullpath=`pwd -P .`

    user=`whoami`
    for (( i = 202 ; i <= 204 ; i = $i + 1 )) ; do
    echo ============= s$i ==============
    rsync -lr $p ${user}@s$i:$fullpath
    done ;
    1. 执行命令
    Code
    [wbw@s201 /soft/hadoop]$xsync.sh etc

    这样就把etc文件夹复制到了,其余机子上的同路径下。

3.3 脚本推荐存放位置

推荐将脚本文件放置/usr/local/bin/目录下便于管理

shell
$sudo mv xcall.sh /usr/local/bin/

3.4 拥有ROOT权限的脚本

  1. 有的命令需要在root权限下操作因此,可以给root也加一个免密登录。(如果需要root权限的操作,就切换到ROOT用户下进行SSH命令操作)

    Code
    $su
    #ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
    #cd /root/.ssh/
    #cat id_rsa.pub > authorized_keys
    #ssh localhost (测试SSH本机)
    最后分发:
    1.首先切到root用户,将/root/.ssh/id_rsa.pub文件先发给s202-s204的wbw用户下
    2.s202-s204的wbw用户下,先切到root用户,然后将id_rsa.pub文件追加到authorized_keys
    cat /home/wbw/id_rsa.pub >> /root/.ssh/authorized_keys

3.5 使用脚本执行其他机器上的jps命令

如果要用上诉脚本执行xcall.sh jps查看所有机器进程(Centos7下需要进行一些操作)

Code
[wbw@s201 /usr/local]$which jps
/soft/jdk/bin/jps
[wbw@s201 /usr/local]$xcall.sh /soft/jdk/bin/jps

或者创建一个软连接,然后用xsync.sh脚本文件拷贝到其余机器上。(需要ROOT下的SSH)
1.切换到root用户
$>su root
2.创建符号连接
$>xcall.sh "ln -sfT /soft/jdk/bin/jps /usr/local/bin/jps"
3.修改jps符号连接的owner
$>xcall.sh "chown -h wbw:wbw /usr/local/bin/jps"
4.查看所有主机上的java进程
$>xcall.sh jps

四、开发篇

4.1 远程调试(JAVA+IDEA)

有时候需要在集群上调试代码,因此,先安装Hadoop,利用Hadoop进行远程调试 !

  1. 设置服务器端java vm的-agentlib:jdwp选项(这个端口可以根据自己设定,IDEA里面默认是5005)

    • windwos

      Code
      set JAVA_OPTS=%JAVA_OPTS% -agentlib:jdwp=transport=dt_socket,address=5005,server=y,suspend=n
    • linux(推荐)

      Code
      export HADOOP_CLIENT_OPTS=-agentlib:jdwp=transport=dt_socket,address=5005,server=y,suspend=y
  2. 编写测试程序打jar包,上传到服务器

    java
    package cn.wangbowen.remote;

    /**
    * Demo class
    * 这是一个用来测试远程调试功能的类
    *
    *
    * @author BoWenWang
    * @date 2020/2/18 22:18
    */
    public class Demo {
    public static void main(String[] args) {
    System.out.println("RemoteTest >> Step 1");
    System.out.println("RemoteTest >> Step 2");
    System.out.println("RemoteTest >> Step 3");
    System.out.println("RemoteTest >> Step 4");
    }
    }
  3. 在服务器端启动java程序,server会暂挂在5005端口

    Code
    [wbw@s201 /home/wbw/tmp]$hadoop jar RemoteDemo.jar cn.wangbowen.remote.Demo
    Listening for transport dt_socket at address: 5005
  4. 回到IDEA进行配置

    avatar

    avatar

    avatar

  5. 开始调试

    avatar

    在需要的地方打断点,然后点击DEBUG

    avatar

    点击单步执行

    avatar

    查看终端信息,发现打印出了内容

文章作者: IT小王
文章链接: https://wangbowen.cn/2020/02/13/Hadoop%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0%EF%BC%88%E9%9B%B6%EF%BC%89%E5%89%8D%E6%9C%9F%E5%87%86%E5%A4%87/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 IT小王

评论