大数据完全分布式环境搭建

.ssh权限问题

1.~/.ssh/authorized_keys
    644
 2.$/.ssh
    700
  3.root

配置SSH

生成密钥对
$>ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
添加认证文件

$>cp id_rsa.pub authorized_keys
$>scp id_rsa.pub hadoop@dn1:~/.ssh/authorized_keys

权限设置,文件夹和文件除了自己以外别人不可写

$>chmod 700 ~/.ssh
$>chmod 644 ~/.ssh/authorized_keys

修改文件的用户以及用户组

sudo chown -R hadoop:hadoop /usr/

由于在设置权限的时候把/usr的权限设置成了我自己的账号,导致在我的用户下,su root的时候报错,这时候就需要进入root用户下把权限修改回来

chown root:root /bin/su
chmod 4755  /bin/su

完全分布式 (一个节点配置完成以后要分发到其他节点里面)

1.配置文件

  • core-site.xml
    fs.defaultFS=hdfs://nn1:8020/
  • hdfs-site.xml
    replication=1 //伪分布式
    replication=3 //完全分布式
  • mapred-site.xml
    mapreduce.framework.name=yarn //框架
  • yarn-site.xml
    rm.name=nn1 //不同的主机这个名字不一样
  • workers //数据节点 (hadoop3.0以前的名字是slaves)
    dn1
    dn2
    dn3
  • hadoop-env.sh
    export JAVA_HOME=/soft/jdk

2.分发文件

1.ssh

  • openssh-server //sshd
  • openssh-clients //ssh
  • openssh //ssh-keygen

2.scp/rsync

1. scp远程复制

  • scp xxx root@dn1:/soft /hadoop

2. rsync远程同步,支持符号链接

  • rsync -lr xxx xxx

3.格式化文件系统

$>hadoop namenode -format

hadoop集群在修改配置文件以后要经常重新format,为了format的时候不产生问题,需要删除/tmp以及hadoop目录下logs中的文件所以写了sh简单的shell脚本来执行
脚本写完以后要通过执行下面命令来赋予执行权限

chmod +x rmhadooplogs.sh

我创建了一个名称节点和三个数据节点
这个脚本放在名称节点的root目录下

#!/bin/sh

echo "清理开始"
cd /root
./rmNN1logs.sh
echo "nn清理完毕"
echo "dn1开始清理"
ssh root@dn1 "cd /root/;source rmDN1logs.sh"
echo "dn2开始清理"
ssh root@dn2 "cd /root/;source rmDN2logs.sh"
echo "dn3开始清理"
ssh root@dn3 "cd /root/;source rmDN3logs.sh"
echo "清理完毕"

三个数据节点的root目录下放单个的删除脚本

#!/bin/sh

cd /tmp
rm -rf *
echo "dn1中tmp目录清除完成"
cd /soft/hadoop/logs
rm -rf *
echo "soft/hadoop/logs目录清除完成"
image.png

4.启动hadoop所有进程

//start-dfs.sh + start-yarn.sh
$>start-all.sh

5.xcall.sh jps 编写简单的sh脚本来执行

xcall.sh

#!/bin/sh

params=$@
hosts=(nn1 dn1 dn2 dn3)
for host in ${hosts[@]}
do
    echo =========== $host:$params=====
    ssh $host "$params"
done

hosts中是你的主机名
param=$@ //脚本后面跟的参数 表示你要执行的命令
创建xcall.sh后,将文件拷贝到/usr/local/bin目录下,并且设置可以执行的权限,同时在/usr/local/bin目录下创建java与jps的链接


image.png

每个主机中都要这么添加链接
添加完毕以后运行命令,发现命令可以执行,就可以了

image.png

6.xsync.sh 分发文件(如果当前目录有这个文件会进行覆盖)

xsync.sh

#!/bin/sh

#1、获取输入参数的个数,如果没有参数,直接退出
params=$#
if((params==0))
then
   echo no args
   exit
fi
echo "params" ----$params
#2、获取文件名称
pl=$1  
echo "pl"----$pl
fname=$(basename $pl)
#echo fname=$fname

#3、获取上级目录的绝对路径
pdir=$(cd -P $(dirname $pl);pwd)

#4、获取当前用户名称
user=$(whoami)

#5、循环

hosts=(nn1 dn1 dn2 dn3)
for host in ${hosts[@]}
do
  echo ==========$host==========
  rsync -rvl $pdir/$fname $user@$host:$pdir
  echo -----$pdir/$fname $user@$host:$pdir------
done

同样的这个也要放到/usr/local/bin的目录下
可以通过rpm -qa|grep "rsync"来确认每个主机是否安装,
通过yum -y install rsync来进行安装,
下图是安装将文件分发到其它主机控制台打出的log

image.png

7.关闭centos的防火墙

sudo service firewalld stop // <=6.5  start/stop/status/restart
sudo systemctl stop firewalld  //7.0  

sudo systemctl disable firewalld  //关闭
sudo systemctl enable firewalld  //开启

符号链接

  1. 在/usr/local/bin创建java和jps链接的时候是root用户,现在改成了hadoop用户,想要把用户和用户组改成hadoop
    修改符号链接的owner
sudo chown -h hadoop:hadoop jps  //-h针对链接本身,而不是所指文件

可以通过这个命令来修改需要加“h”,加h修改的是符号链接本身而不是链接所指向的位置



修改的时候显示hadoop不在sudoers中,需要在/etc/sudoers中root 下添加hadoop用户就可以了


image.png
  1. 修改符号链接
ln -sfT index.html index //覆盖原有的链接

chown -h hadoop:hadoop /usr/local/bin/jps  //修改链接文件的用户以及用户组 -h 表示只针对当前的链接不针对所链接的文件

hadoop的端口(hadoop3以上的端口发生了改变)

  • 50070 namenode的http port -> 9870

  • 50075 datanode的http port ->9864

  • 50090 2namenode http port ->9868

  • 8020 namenode rps port 远程通信端口 ->9820

  • 50010 datanode rps port ->9866

hadoop的四个模块

  • common
  • hdfs // 存储 分布式文件系统模块 namenode + datanode + secondarynamenode
  • mapreduce //MR,编程模型
  • yarn // 资源调度 框架 resourcemanager + nodemanager

进程-启动脚本

1.start-all.sh //启动所有进程
2.stop-all.sh //关闭所有进程
3.start-dfs.sh

  • Namenode NN
  • Datanode DN
  • SecondaryNamenode2NN

4.start-yarn.sh

  • ResourceManager RM
  • NodeManager NM

脚本分析

hdfs --workers --daemon start datanode  //在名称节点中开启所有的数据节点
hdfs --daemon start namenode //开启名称节点
  • sbin/start-all.sh

1.libexec/hadoop-config.sh
2.sbin/start-dfs.sh
3.sbin/start-yarn.sh

hdfs --daemon start namenode //开启名称节点
hdfs --workers --daemon start datanode  //开启数据节点
hdfs --daemon start datanode //开启所在主机的名称节点

hdfs --daemon stop namenode
hdfs --workers --daemon stop datanode  //在stop-all.sh中添加这条语句可以关闭数据节点,防止在stop-all.sh执行中报数据节点出错不能关闭
  • sbin/start-dfs.sh

1.libexec/hdfs-config.sh
2.bin/hdfs namenode --workers --config .. --daemon .. --hostname start namenode ...
3.bin/hdfs datanode --workers --config .. --daemon .. --hostname start datanode ...
4.bin/hdfs secondarynamecode --workers --config .. --daemon .. --hostname start secondarynamecode ...
5.bin/hdfs zkfc --workers --config .. --daemon .. --hostname start zkfc ... //容灾

  • sbin/start-yarn.sh

1.libexec/yarn-config.sh
2.bin/yarn resourcemanager --workers --config .. --daemon .. --hostname start resourcemanager ...
3.bin/yarn nodemanager --workers --config .. --daemon .. start nodemanager ...
4.bin/yarn proxyserver --workers --config .. --daemon .. --hostname start proxyserver ...

  • bin/hadoop

  • hadoop version //版本

  • hadoop fs //文件系统客户端

  • hadoop jar //运行jar包

  • hadoop classpath //查看类路径(每一个命令都对应着一个java类,当选择命令后,都会去找对应的java类文件来进行执行)

  • hadoop checknative //检查本地库(压缩和解压缩会用到)

  • hdfs常用命令


  • hdfs dfs -mkdir /user/centos/hadoop //在节点中创建目录
  • hdfs dfs -ls -r /user/centos/hadoop
  • hdfs dfs -lsr /user/centos/hadoop
  • hdfs dfs -put index.html /user/centos/hadoop
  • hdfs dfs -get /user/centos/hadoop/index.html a.html
  • hdfs dfs -rm -r -f /user/centos/hadoop

hdfs hadoop文件系统

1.hadoop将文件进行了切割分成了128M每块,原因是要让磁盘的寻址时间占用读取时间的1%,寻址时间是10ms,磁盘速率是100M/s,那么在1s内所能读取的内容为100M左右,所以切割的大小为128M
2.hadoop在名称节点下面只存放目录,存放fsimage文件是镜像,在数据节点下面存放的是数据,如果存放的数据被切割,可以通过cat 后一部分 >> 前一部分来合成原来的文件,这个切割是没有添加标记头的。

3.名称节点在启动的时候会初始化内存中的文件系统结构,metainfo,名称节点只存放块的信息,不存放节点的信息,数据节点启动以后会向名称节点报告,报告自己的块列表。这样会造成节点id与块的映射。

HA:


high availablity //高可用性,通常用个5个9来衡量99.999%

SPOF:


single point of failure,单点故障 (配置两个名称节点)

secondarynamenode


辅助名称节点,备份,定期从名称节点抓取数据并且送回去,只是用来备份的并不是高可用

配置hadoop的临时目录

1.配置core-site.xml文件
hadoop.tmp.dir=/home/hadoop/hadoop
以下路径中地址都由上面的这个配置来决定,下面参数在hdfs-site.xml中修改

dfs.namenode.name.dir=file:///${hadoop.tmp.dir}/dfs/name
dfs.datanode.data.dir=file:///${hadoop.tmp.dir}/dfs/data
dfs.namenode.checkpoint.dir=file:///${hadoop.tmp.dir}/dfs/namesecondary

2.分发core-site.xml文件
xsync.sh core-site.xml
3.格式化文件系统
hdfs namenode -format
4.启动hadoop
start-dfs.sh

你可能感兴趣的:(大数据完全分布式环境搭建)