Hadoop学习笔记(一)前期准备
一、前期准备介绍
Hadoop开发的时候,可能需要一些辅助的操作来减少工作量。因此这个栏目是持续更新,来进行推荐操作的总结。不影响一些操作和后续文章内容不匹配等的问题。
二、Linux操作篇
2.1 SSH
生成密钥对: |
2.2 命令行提示符显示完整路径
编辑profile文件,添加环境变量PS1
Code[/etc/profile]
export PS1='[\u@\h `pwd`]\$'更新配置
Code$>source /etc/profile
2.3 创建共享文件夹
有时候需要频繁的从本地往虚拟机上传输文件,虽然有XFTP,但是创建一个共享文件夹或许更方便。
三、脚本篇
当拥有一个完全分布式集群后,需要在不同的机器上分别进行操作,而有时候,这些操作命令又是一样的,因此为了避免每次都要用SSH登录到其他机器上后进行重复的操作,编写一个脚本来执行命令,往往是最佳的选择。
3.1 编写批量执行命令脚本
创建一个脚本文件
Code$touch xcall.sh
# 将脚本标记为可执行文件
$chmod a+x xcall.sh
# 编辑内容
$vi xcall.shxcall.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执行脚本
Code$./xcall.sh + 命令
如,在各机器上打印主机名:
Code$xcall.sh hostname
打印结果:
============= s201 ==============
s201
============= s202 ==============
s202
============= s203 ==============
s203
============= s204 ==============
s204
3.2 编写批量复制文件脚本
其实复制文件的命令可以直接用 scp 来处理,但是该命令有个问题,就是不能拷贝软连接($ln -s xxx yyy),用该命令拷贝过去后,链接会变成目录。因此,我们需要一个新的软件来进行拷贝。当然在拷贝没有链接的情况下,也是可以直接用 scp 的。
安装rsync(注意:需要在拷贝与被拷贝双方机子上都安装)
Code$sudo yum install rsync
- 创建脚本文件(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 ;- 执行命令
Code[wbw@s201 /soft/hadoop]$xsync.sh etc
这样就把etc文件夹复制到了,其余机子上的同路径下。
3.3 脚本推荐存放位置
推荐将脚本文件放置/usr/local/bin/目录下便于管理
sudo mv xcall.sh /usr/local/bin/ |
3.4 拥有ROOT权限的脚本
有的命令需要在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下需要进行一些操作)
[wbw@s201 /usr/local]$which jps |
四、开发篇
4.1 远程调试(JAVA+IDEA)
有时候需要在集群上调试代码,因此,先安装Hadoop,利用Hadoop进行远程调试 !
设置服务器端java vm的-agentlib:jdwp选项(这个端口可以根据自己设定,IDEA里面默认是5005)
windwos
Codeset JAVA_OPTS=%JAVA_OPTS% -agentlib:jdwp=transport=dt_socket,address=5005,server=y,suspend=n
linux(推荐)
Codeexport HADOOP_CLIENT_OPTS=-agentlib:jdwp=transport=dt_socket,address=5005,server=y,suspend=y
编写测试程序打jar包,上传到服务器
javapackage 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");
}
}在服务器端启动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回到IDEA进行配置
开始调试
在需要的地方打断点,然后点击DEBUG
点击单步执行
查看终端信息,发现打印出了内容