在编写脚本的时候我们可能会遇到一些各种各样的小问题,比如放置位置,以及使用权限等。
文件脚本编写好以后可以直接放置到 /usr/local/sbin 目录下面,这样就可以不用去申请环境变量了,使用起来也就比较方便了。
chmod a+x [文件名] 付给权限
Slave的时候需要注意的一些问题
扩展的时候可以先直接按照Hadoop集群安装配置教程先进行。 这里需要更改 /usr/local/hadoop/etc/hadoop 路径下的 slave文件中的参数,需要把添加的节点加进去。
并且在Master里面的 /etc/hosts 中添加新加节点的IP和节点的命名。(如果想用节点的命名来连接任意一台节点计算机的话,我们需要把这个操作在每台节点计算机上进行) 如果存在改变节点名字的操作,在文件scp传输的时候可能会有错误,但是在警告中下面的语句有提示让移除之前命名和IP的对应关系,复制下来直接操作就可以了,然后在接着使用scp进行文件传输就没有什么问题了。
该脚本主要时对第一次使用集群的时候进行一个初始化。
#!/bin/bash hdfs namenode -format start-all.sh
或者
start-dfs.sh start-yarn.sh
./bin/hdfs dfs -mkdir -p /user/hadoop
hadoop fs –ls -R /
该脚本旨在重新配置hadoop的时候我们需要清理一下集群中的东西,比如记录等。
#!/bin/bash stop-all.sh xrm.sh /tmp/hadoop xrm.sh /hadoop/logs echo "clean done!" (主要为了清除tmp下面的文件hadoop还有logs)
该脚本用于一次查看所有集群节点相同位置下的文件,类似于手动在每个节点上输入ls指令进行查看。
#!/bin/bash if [ $# -lt 1 ] ; then echo no args exit; fi #get first argument arg1=$1; cuser=`whoami` fname=`basename $arg1` dir=`dirname $arg1` if [ $dir == "." ] ; then dir=`pwd` # echo $dir fi for (( i=200;i<=500;i=i+100)) ; do echo ---------------ls $arg1 from s$i -------------; ssh s$i ls $dir/$fname | xargs echo done
该脚本旨在往每个节点拷贝数据,之前我们的拷贝是需要自己一个节点一个节点链接然后拷贝,但是如果我们每个节点都拷贝同样的数据时,这样做显然很麻烦,如果节点多的话还很浪费时间,这样我们就可以通过该脚本自己循环拷贝。
#!/bin/bash if [ $# -lt 1 ] ; then echo no args exit; fi #get first argument arg1=$1; cuser=`whoami` fname=`basename $arg1` dir=`dirname $arg1` if [ $dir == "." ] ; then dir=`pwd` # echo $dir fi for (( i=200;i<=500;i=i+100)) ; do echo -----------coping $arg1 to $i------------------; if [ -d $arg1 ] ; then scp -r $arg1 $cuser@s$i:$dir else scp $arg1 $cuser@s$i:$dir fi echo done
该脚本旨在删除所有节点上相同的东西,比如hadoop的重新配置等,还有删除hadoop的log等文件,都比较方便。
#!/bin/bash if [ $# -lt 1 ] ; then echo no args exit; fi #get first argument arg1=$1; cuser=`whoami` fname=`basename $arg1` dir=`dirname $arg1` if [ $dir == "." ] ; then dir=`pwd` # echo $dir fi echo -----------------rming $arg1 from localhost-------------; rm -rf $arg1 echo for (( i=200;i<=500;i=i+100)) ; do echo ---------------rming $arg1 from s$i -------------; ssh s$i rm -rf $dir/$fname echo done
该脚本旨在对每个节点都执行同一个指令,这样就不用每次都shell到每个子节点上去执行了,较为方便。
#!/bin/bash if [ $# -lt 1 ] ; then echo no args exit; fi echo -----------------xcall $arg1 from localhost----------------- $@ echo #get first argument for (( i=0;i<=3;i=i+1)); do echo --------------------xcall $arg1 from Slave$i ------------------; ssh Slave$i $@ echo done