*学习过程中使用VMware进行多台服务器的搭建, 全程在一台主机上进行
一. Hadoop运行环境搭建
配置环境变量(JAVA, Hadoop)
为何需要配置环境变量?
例如JDK, 程序都集中的放置在Java安装目录下的bin目录下,那么,当你需要执行这些程序时,你需要告诉系统在哪个目录下寻找,只有你告诉系统正确的目录,系统才可以给你提供这一系列的命令供你使用。环境变量的配置就是做这么一个工作。
那么,将该目录做成一个变量放置到系统的内置变量PATH中是一个不错的选择。
配置环境变量步骤解析:
1. 在/etc/profile.d目录下新建环境变量文件mh_env.sh. 设定环境变量JAVA_HOME, 此变量的值为JDK的安装目录. 本次安装路径如下:
export JAVA_HOME=/opt/module/jdk1.8.0_212
2. 将JAVA_HOME加入到系统内置PATH变量中, 加入/bin是因为bin目录储存的是大部分的执行程序.
export PATH=$PATH:$JAVA_HOME/bin
3. 环境变量配置完成后, 需要利用source命令让新的环境变量PATH生效
[atguigu@hadoop102 ~]$ source /etc/profile
4. 配置Hadoop环境变量时, 则需要再额外添加/sbin目录, 因为Hadoop的执行程序储存在/bin目录和/sbin目录中. 配置完成后, 同样需要对/etc/profile进行source *** 作使环境变量生效
#HADOOP_HOME export HADOOP_HOME=/opt/module/hadoop-3.1.3 export PATH=$PATH:$HADOOP_HOME/bin export PATH=$PATH:$HADOOP_HOME/sbin
二. Hadoop运行模式
Hadoop运行模式包括本地模式, 伪分布式以及完全分布式
本地模式: 单机运行. 生产环境下不适用
伪分布式: 单机运行, 但是具备Hadoop集群的所有功能, 一台服务器模拟一个分布式的环境. 一般用于测试
完全分布式: 多台服务器组成分布式环境. 生产环境下最常使用
三. 修改主机名称, 主机名称映射IP
在根目录下/etc/hostname文件中, 可修改当前主机名称. 修改完成后, 打开/etc/hosts, 可对主机名称与IP地址建立一对一的映射关系
192.168.10.100 hadoop100 192.168.10.101 hadoop101 192.168.10.102 hadoop102 192.168.10.103 hadoop103 192.168.10.104 hadoop104
四. 集群分发脚本sxync解析
scp(secure copy)安全拷贝
scp可以实现服务器与服务器之间的数据拷贝
scp -r $pdir/$fname $user@$host:$pdir/$fname
拷贝命令 递归 拷贝文件路径/文件名 目的地用户@主机地址:目的地路径/名称
rsync 远程同步工具
rsync主要用于备份和镜像, 具有速度快, 避免复制相同内容和支持符号链接的优点. rsync和scp相比, 因为rsync只需要对比两端文件差异并进行更新, 因此速度要比scp更快.
rsync -av $pdir/$fname $user@$host:$pdir/$fname
同步命令 递归 拷贝文件路径/文件名 目的地用户@主机地址:目的地路径/名称
其中的两项参数, -a表示归档拷贝, 也即以递归方式传输文件, -v表示显示复制过程
xsync集群分发脚本
在/home/$user/bin目录下创建xsync文件
[atguigu@hadoop102 opt]$ cd /home/atguigu [atguigu@hadoop102 ~]$ mkdir bin [atguigu@hadoop102 ~]$ cd bin [atguigu@hadoop102 bin]$ vim xsync
随后将脚本复制到/bin中, 以全局调用
[atguigu@hadoop102 bin]$ sudo cp xsync /bin/
/bin目录主要储存可执行的二进制文件
#!/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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)