文章目录
安装hadoop
在hadoop101上
cd /opt
mkdir module
上传 hadoop-3.1.3.tar.gz,并解压到本地
上传 jdk-8u281-linux-x64.tar.gz安装包,并解压到本地
登录时生效的环境变量配置文件
在Linux系统登录时主要生效的环境变量配置文件有以下五个:
/etc/profile
/etc/profile.d/*.sh
~/.bash_profile
~/.bashrc
/etc/bashrc
环境变量配置文件调用过程
在用户登录过程先调用/etc/profile文件,在这个环境变量配置文件中会定义这些默认环境变量:
vi /etc/profile
for i in /etc/profile.d/*.sh /etc/profile.d/sh.local ; do
if [ -r "$i" ]; then
if [ "${-#*i}" != "$-" ]; then
. "$i"
else
. "$i" >/dev/null
fi
fi
done
调用/etc/profile. d/*. sh文件,也就是调用/etc/profile. d/目录下所有以. sh结尾的文件
现在很多企业的环境变量都放在/etc/profile.d/下
cd /etc/profile.d
vi my_env.sh
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_281
export PATH=$PATH:$JAVA_HOME/bin
#HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
生效
source /etc/profile
认识常用hadoop命令
启动hadoop模式–了解
- Local (Standalone) Mode 本地模式 数据存储在Linux本地,测试玩
- Pseudo-Distributed Mode 伪分布模式 数据存储在HDFS
- Fully-Distributed Mode 数据存储在HDFS、多台服务器工作
简单测试
[root@hadoop101 module]# cd hadoop-3.1.3/
[root@hadoop101 hadoop-3.1.3]# mkdir wcinput
[root@hadoop101 hadoop-3.1.3]# cd wcinput/
[root@hadoop101 wcinput]# ll
总用量 0
[root@hadoop101 wcinput]# vi word.txt
ss ss
cls cls
banzhang
hello world
[root@hadoop101 hadoop-3.1.3]# bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount wcinput/ wcoutput/
wcinput/ 是输入路径,必须提前就有
wcoutput/ 是输出路径,必须以前没有
执行结束后,会生成wcoutput路径
[root@hadoop101 hadoop-3.1.3]# cd wcoutput/
[root@hadoop101 wcoutput]# ll
总用量 4
-rw-r--r--. 1 root root 38 9月 6 15:17 part-r-00000
-rw-r--r--. 1 root root 0 9月 6 15:17 _SUCCESS
[root@hadoop101 wcoutput]# cat part-r-00000
banzhang 1
cls 2
hello 1
ss 2
world 1
拷贝文件到其他服务节点上
scp 安全拷贝
复制文件到其他服务器上
在hadoop102 ,103,104上分别创建/opt/module
在hadoop101上复制hadoop拷贝到hadoop102上
scp -r /opt/module/hadoop-3.1.3/ root@hadoop102:/opt/module
-r
递归迭代
也可以在hadoop103上,拉取过来
ssh hadoop103 登录到103上
cd /opt/module
[root@hadoop103 ~]# scp -r root@hadoop101:/opt/module/hadoop-3.1.3 .
也可以在hadoop103上,将101上的文件拷贝到104上
[root@hadoop103 ~]# scp -r root@hadoop101:/opt/module/* root@hadoop104:/opt/module
rsync远程同步工具
rsync主要用于备份和镜像
rsync做文件的复制比scp的速度快,rsync只对差异文件做更新,而scp是把所有文件都复制过去
rsync -av 目录 目标目录
- a 归档拷贝
- v 显示复制过程
用xsync实现集群分发脚本
用yanweiling用户操作
[root@hadoop101 yanweiling]# su yanweiling
[yanweiling@hadoop101 ~]$ cd /home/yanweiling/
[yanweiling@hadoop101 ~]$ mkdir bin
[yanweiling@hadoop101 ~]$ ll
总用量 0
drwxrwxr-x. 2 yanweiling yanweiling 6 9月 6 17:48 bin
[yanweiling@hadoop101 ~]$ cd bin/
[yanweiling@hadoop101 bin]$ vi xsync
[yanweiling@hadoop101 bin]$ vi xsync
#!/bin/bash
#1. 判断参数个数
if [ $# -lt 1 ]
then
echo Not Enough Arguement!
exit;
fi
#2. 遍历集群所有机器
for host in hadoop102 hadoop103 hadoop104
do
echo ==================== $host ====================
#3. 遍历所有目录,挨个发送
for file in $@
do
#4. 判断文件是否存在
if [ -e $file ]
then
#5. 获取父目录
pdir=$(cd -P $(dirname $file); pwd)
#6. 获取当前文件的名称
fname=$(basename $file)
ssh $host "mkdir -p $pdir"
rsync -av $pdir/$fname $host:$pdir
else
echo $file does not exists!
fi
done
done
-P的作用是什么?
[root@hadoop101 module]# ln -s aaa bbb
[root@hadoop101 module]# ll
总用量 0
drwxr-xr-x. 2 root root 6 9月 6 17:16 aaa
lrwxrwxrwx. 1 root root 3 9月 6 17:16 bbb -> aaa
drwxr-xr-x. 11 1000 1000 180 9月 6 15:17 hadoop-3.1.3
drwxr-xr-x. 8 10143 10143 273 12月 9 2020 jdk1.8.0_281
[root@hadoop101 module]# cd bbb/
[root@hadoop101 bbb]# ll
总用量 0
[root@hadoop101 bbb]# cd …
[root@hadoop101 module]# cd -P bbb
[root@hadoop101 aaa]#
mkdir 文件,如果文件已经存在会报错,可以增加-p
mkdir -p 文件,文件即使存在也不会报错
此时文件是不可执行的
[yanweiling@hadoop101 bin]$ ll
总用量 4
-rw-rw-r–. 1 yanweiling yanweiling 693 9月 6 17:50 xsync
期望脚本在任何路径都能使用(脚本放在声明了全局环境变量的路径)
需要将/home/yanweiling/bin追加到环境变量$PATH中
[yanweiling@hadoop101 bin]$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/java/jdk1.8.0_131/bin:/opt/module/hadoop-3.1.3/bin:/opt/module/hadoop-3.1.3/sbin:/root/bin:/usr/java/jdk1.8.0_131/bin:/opt/module/hadoop-3.1.3/bin:/opt/module/hadoop-3.1.3/sbin:/usr/java/jdk1.8.0_131/bin:/opt/module/hadoop-3.1.3/bin:/opt/module/hadoop-3.1.3/sbin:/home/yanweiling/bin
[yanweiling@hadoop101 bin]$ xsync
Not Enough Arguement!
另外需要在每台机器上,都安装rsync
在hadoop上安装 yum -y install rsync
ssh hadoop102 ‘yum -y install rsync’
ssh hadoop103 ‘yum -y install rsync’
ssh hadoop104 ‘yum -y install rsync’
执行
[root@hadoop101 bin]# xsync /home/yanweiling/bin/
==================== hadoop102 ====================
sending incremental file list
bin/
bin/xsync
sent 842 bytes received 39 bytes 587.33 bytes/sec
total size is 693 speedup is 0.79
==================== hadoop103 ====================
sending incremental file list
bin/
bin/xsync
sent 842 bytes received 39 bytes 1,762.00 bytes/sec
total size is 693 speedup is 0.79
==================== hadoop104 ====================
sending incremental file list
bin/
bin/xsync
sent 842 bytes received 39 bytes 1,762.00 bytes/sec
total size is 693 speedup is 0.79
[root@hadoop101 bin]#
这个时候,我们发现其他服务机器上也有/home/yanweiling/bin/xsync了
使用分发脚本分发环境变量
发现用普通用户分发确不可以
, 但是普通用户分发 /home/yanweiling/bin目录确可以
[yanweiling@hadoop101 bin]$ sudo xsync /etc/profile.d/my_env.sh
sudo: xsync:找不到命令
[yanweiling@hadoop101 bin]$ su root
密码:
[root@hadoop101 bin]# xsync /etc/profile.d/my_env.sh
==================== hadoop102 ====================
sending incremental file list
my_env.sh
sent 390 bytes received 35 bytes 283.33 bytes/sec
total size is 296 speedup is 0.70
==================== hadoop103 ====================
sending incremental file list
my_env.sh
sent 390 bytes received 35 bytes 850.00 bytes/sec
total size is 296 speedup is 0.70
==================== hadoop104 ====================
sending incremental file list
my_env.sh
sent 390 bytes received 35 bytes 850.00 bytes/sec
total size is 296 speedup is 0.70
[root@hadoop101 bin]#
为什么会报
[yanweiling@hadoop101 bin]$ sudo xsync /etc/profile.d/my_env.sh
sudo: xsync:找不到命令
如果我们用普通用户操作,不加sudo,提示权限有问题;
加上sudo,却提示命令不存在
解决方案
[yanweiling@hadoop101 bin]$ sudo /home/yanweiling/bin/xsync /etc/profile.d/my_env.sh
将命令写全即可
每个服务节点环境变量生效
source /etc/profile