一、shell脚本同步集群配置说明
维护集群不可能每台机器都通过win上传文件,通过写脚本,以第一台为标准进行配置,下发到所有机器,除非有些参数需要动态去修改
1、需要的shell脚本,给脚本一个x的权限
链接:https://pan.baidu.com/s/1_GsD–aJtQjSsjKINzBfRA
提取码:l2i7
2、使用scp适用于机器少的情况
使用scp的情况适用于机器少的时候,如果集群有1000或者更多的话,写scp要写1000行不现实,可以写一个for循环去处理,只要机器命名的命名规则是一样的,后面的001/002/003都是可以进行递增的
另外:维护一个txt,txt文档里面维护了ruozedata001/002/003机器名称的列表,写for循环的时候可以直接获取每一行每一个机器名字
[hadoop@ruozedata001 hadoop]$ cat sync_hadoop.sh
#!/bin/bash -x
HADOOP_CONF=/home/hadoop/app/hadoop/etc/hadoop/
cd $HADOOP_CONF
scp hadoop-env.sh core-site.xml hdfs-site.xml mapred-site.xml yarn-site.xml ruozedata002:$HADOOP_CONF
scp hadoop-env.sh core-site.xml hdfs-site.xml mapred-site.xml yarn-site.xml ruozedata003:$HADOOP_CONF
exit 0
1、./sync_hadoop.sh
以第一台机器为版本同步xml文件和env.sh脚本到其他机器
[hadoop@ruozedata001 hadoop]$ ./sync_hadoop.sh
+ HADOOP_CONF=/home/hadoop/app/hadoop/etc/hadoop/
+ cd /home/hadoop/app/hadoop/etc/hadoop/
+ scp hadoop-env.sh core-site.xml hdfs-site.xml mapred-site.xml yarn-site.xml ruozedata002:/home/hadoop/app/hadoop/etc/hadoop/
hadoop-env.sh 100% 4233 4.1KB/s 00:00
core-site.xml 100% 2360 2.3KB/s 00:00
hdfs-site.xml 100% 4544 4.4KB/s 00:00
mapred-site.xml 100% 1063 1.0KB/s 00:00
yarn-site.xml 100% 5334 5.2KB/s 00:00
+ scp hadoop-env.sh core-site.xml hdfs-site.xml mapred-site.xml yarn-site.xml ruozedata003:/home/hadoop/app/hadoop/etc/hadoop/
hadoop-env.sh 100% 4233 4.1KB/s 00:00
core-site.xml 100% 2360 2.3KB/s 00:00
hdfs-site.xml 100% 4544 4.4KB/s 00:00
mapred-site.xml 100% 1063 1.0KB/s 00:00
yarn-site.xml 100% 5334 5.2KB/s 00:00
+ exit 0
2、jps.sh
执行jps.sh,只有jps本身进程启动
[hadoop@ruozedata001 hadoop]$ ./jps.sh
+ echo '----------ruozedata001 process------------'
----------ruozedata001 process------------
+ ssh ruozedata001 /usr/java/jdk1.8.0_45/bin/jps
2743 Jps
+ echo ' '
+ echo '----------ruozedata002 process------------'
----------ruozedata002 process------------
+ ssh ruozedata002 /usr/java/jdk1.8.0_45/bin/jps
2229 Jps
+ echo ' '
+ echo '----------ruozedata003 process------------'
----------ruozedata003 process------------
+ ssh ruozedata003 /usr/java/jdk1.8.0_45/bin/jps
2231 Jps
+ echo '
3、start_cluster.sh
3.1 ./start_cluster.sh 执行启动集群的脚本, ./jps.sh查看启动的进程
[hadoop@ruozedata001 hadoop]$ ./jps.sh
+ echo '----------ruozedata001 process------------'
----------ruozedata001 process------------
+ ssh ruozedata001 /usr/java/jdk1.8.0_45/bin/jps
3216 JournalNode
3796 Jps
2920 NameNode
3740 JobHistoryServer
3023 DataNode
3583 NodeManager
zookeeper的进程没有启动
[hadoop@ruozedata001 hadoop]$ ps -ef | grep zookeeper
hadoop 3850 2711 0 16:47 pts/0 00:00:00 grep --color=auto zookeeper
3.2 找zk log
[hadoop@ruozedata001 ~]$ cd app/zookeeper
log日志一般在配置文件里面
[hadoop@ruozedata001 zookeeper]$ cd conf
一般是在cfg里面
[hadoop@ruozedata001 conf]$ cat zoo.cfg
可以看到data的路径,没有问题
dataDir=/home/hadoop/data/zookeeper
查看log4j.properties
[hadoop@ruozedata001 conf]$ more log4j.properties
# Define some default values that can be overridden by system properties
zookeeper.root.logger=INFO, CONSOLE
zookeeper.console.threshold=INFO
zookeeper.log.dir=. .代表的是当前路径
zookeeper.log.file=zookeeper.log 找到log日志文件是zookeeper.log
3.3找不到zookeeper.log
查找zookeeper.log日志文件位置,找不到zookeeper.log
[hadoop@ruozedata001 conf]$ find /home/hadoop -name 'zookeeper.log'
[hadoop@ruozedata001 conf]$ exit
logout
[root@ruozedata001 ~]# find / -name 'zookeeper.log'
3.4 zkServer.sh 启动源头
zkServer.sh start|stop|status
[hadoop@ruozedata001 bin]$ vi zkServer.sh
case $1 in
start)
echo -n "Starting zookeeper ... "
if [ -f "$ZOOPIDFILE" ]; then
if kill -0 `cat "$ZOOPIDFILE"` > /dev/null 2>&1; then
echo $command already running as process `cat "$ZOOPIDFILE"`.
exit 0
fi
fi
nohup "$JAVA" "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}" \
-cp "$CLASSPATH" $JVMFLAGS $ZOOMAIN "$ZOOCFG" > "$_ZOO_DAEMON_OUT" 2>&1 < /dev/null &
if [ $? -eq 0 ]
then
#nohup ----& 这个是标准的后台执行的一个shell脚本的程序
#nohup xxx > xxx.log | 2>&1 &
#搜索:/ZOO_LOG_DIR= 不存在
if [ ! -w "$ZOO_LOG_DIR" ] ; then
mkdir -p "$ZOO_LOG_DIR"
fi
_ZOO_DAEMON_OUT="$ZOO_LOG_DIR/zookeeper.out"
找到log文件的名字输出是zookeeper.out
3.5 找到log文件的名字输出是zookeeper.out
[root@ruozedata001 hadoop]# cat zookeeper.out
nohup: failed to run command ‘java’: No such file or directory
[root@ruozedata001 hadoop]#
[root@ruozedata002 ~]# which java
/usr/java/jdk1.8.0_45/bin/java
3.6 分析错误:
nohup: failed to run command ‘java’: No such file or directory
既然存在,可以先cat start_cluster.sh 可以看到启动的是ssh zuozedata001 …
远程执行ssh ruozedata001 “which java”
[hadoop@ruozedata001 hadoop]$ ssh ruozedata001 "which java"
which: no java in (/usr/local/bin:/usr/bin)
[hadoop@ruozedata001 hadoop]$ ssh ruozedata001 "echo $JAVA_HOME"
/usr/java/jdk1.8.0_45
[hadoop@ruozedata001 hadoop]$ ssh ruozedata001 "echo $PATH"
/home/hadoop/app/hadoop/bin:/home/hadoop/app/hadoop/sbin:/home/hadoop/app/zookeeper/bin:/usr/java/jdk1.8.0_45/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin
[hadoop@ruozedata001 hadoop]$
只执行which Java
[hadoop@ruozedata001 hadoop]$ which java
/usr/java/jdk1.8.0_45/bin/java
3.7找到 zkEnv.sh
一般写shell脚本时,一般会把公共的配置的脚本抽离出来单独写一个.sh的文件
可以定位到zkEnv.sh的一个shell脚本
目的是看启动的时候,Java它的赋值在哪
if [ -e "$ZOOBIN/../libexec/zkEnv.sh" ]; then
. "$ZOOBINDIR/../libexec/zkEnv.sh"
else
. "$ZOOBINDIR/zkEnv.sh" .表示执行这个shell脚本
fi
[hadoop@ruozedata001 bin]$ vi zkEnv.sh
if [ "$JAVA_HOME" != "" ]; then
JAVA="$JAVA_HOME/bin/java"
else
JAVA=java
fi
3.8检查 $JAVA_HOME
echo "--------ruoze: $JAVA_HOME----------"
if [ "$JAVA_HOME" != "" ]; then
JAVA="$JAVA_HOME/bin/java"
else
JAVA=java
fi
尝试执行启动
有打印结果说明JAVA_HOME它的值拿的是空的,那么JAVA赋的值是Java,在shell脚本执行的时候
不能找到Java真正执行的命令在哪里
3.8.1 写死路径
if [ "$JAVA_HOME" != "" ]; then
JAVA="$JAVA_HOME/bin/java"
else
JAVA=/usr/java/jdk1.8.0_45/bin/java
fi
启动成功
[hadoop@ruozedata001 hadoop]$ ssh ruozedata001 "$ZOOKEEPER_HOME/bin/zkServer.sh start"
JMX enabled by default
-------------------ruoze: ------
Using config: /home/hadoop/app/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[hadoop@ruozedata001 hadoop]$ ps -ef|grep zookeeper
hadoop 5190 1 1 18:32 ? 00:00:00 /usr/java/jdk1.8.0_45/bin/java -Dzookeeper.log.dir=. -Dzookeeper.root.logger=INFO,CONSOLE -cp /home/hadoop/app/zookeeper/bin/../build/classes:/home/hadoop/app/zookeeper/bin/../build/lib/*.jar:/home/hadoop/app/zookeeper/bin/../lib/slf4j-log4j12-1.6.1.jar:/home/hadoop/app/zookeeper/bin/../lib/slf4j-api-1.6.1.jar:/home/hadoop/app/zookeeper/bin/../lib/netty-3.7.0.Final.jar:/home/hadoop/app/zookeeper/bin/../lib/log4j-1.2.16.jar:/home/hadoop/app/zookeeper/bin/../lib/jline-0.9.94.jar:/home/hadoop/app/zookeeper/bin/../zookeeper-3.4.6.jar:/home/hadoop/app/zookeeper/bin/../src/java/lib/*.jar:/home/hadoop/app/zookeeper/bin/../conf: -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.local.only=false org.apache.zookeeper.server.quorum.QuorumPeerMain /home/hadoop/app/zookeeper/bin/../conf/zoo.cfg
hadoop 5211 2711 0 18:33 pts/0 00:00:00 grep --color=auto zookeeper
3.8.2 ssh执行远程命令和脚本
bash模式: 加载环境变量配置文件: 个人.bashrc
全局 /etc/profile
个人 ~/.bash_profile .bashrc
[hadoop@ruozedata001 hadoop]$ vi ~/.bashrc
环境变量配置添加
export JAVA_HOME=/usr/java/jdk1.8.0_45
export PATH=$JAVA_HOME/bin:$PATH
[hadoop@ruozedata001 hadoop]$ ssh ruozedata001 "which java"
/usr/java/jdk1.8.0_45/bin/java
[hadoop@ruozedata001 hadoop]$
启动成功
[hadoop@ruozedata001 hadoop]$ kill -9 5190
[hadoop@ruozedata001 hadoop]$ ssh ruozedata001 "$ZOOKEEPER_HOME/bin/zkServer.sh start"
JMX enabled by default
-------------------ruoze: /usr/java/jdk1.8.0_45------
Using config: /home/hadoop/app/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[hadoop@ruozedata001 hadoop]$ ps -ef|grep zookeeper
hadoop 5368 1 2 18:42 ? 00:00:00 /usr/java/jdk1.8.0_45/bin/java -Dzookeeper.log.dir=. -Dzookeeper.root.logger=INFO,CONSOLE -cp /home/hadoop/app/zookeeper/bin/../build/classes:/home/hadoop/app/zookeeper/bin/../build/lib/*.jar:/home/hadoop/app/zookeeper/bin/../lib/slf4j-log4j12-1.6.1.jar:/home/hadoop/app/zookeeper/bin/../lib/slf4j-api-1.6.1.jar:/home/hadoop/app/zookeeper/bin/../lib/netty-3.7.0.Final.jar:/home/hadoop/app/zookeeper/bin/../lib/log4j-1.2.16.jar:/home/hadoop/app/zookeeper/bin/../lib/jline-0.9.94.jar:/home/hadoop/app/zookeeper/bin/../zookeeper-3.4.6.jar:/home/hadoop/app/zookeeper/bin/../src/java/lib/*.jar:/home/hadoop/app/zookeeper/bin/../conf: -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.local.only=false org.apache.zookeeper.server.quorum.QuorumPeerMain /home/hadoop/app/zookeeper/bin/../conf/zoo.cfg
hadoop 5389 2711 0 18:43 pts/0 00:00:00 grep --color=auto zookeeper
[hadoop@ruozedata001 ~]$ scp .bashrc ruozedata002:/home/hadoop/
.bashrc 100% 307 0.3KB/s 00:00
[hadoop@ruozedata001 ~]$ scp .bashrc ruozedata003:/home/hadoop/
.bashrc 100% 307 0.3KB/s 00:00
[hadoop@ruozedata001 ~]$ cd script/hodoop/
[hadoop@ruozedata001 hadoop]$ ./stop_cluster.sh
[hadoop@ruozedata001 hadoop]$ ./start_cluster.sh
[hadoop@ruozedata001 hadoop]$ ./jps.sh
+ echo '----------ruozedata001 process------------'
----------ruozedata001 process------------
+ ssh ruozedata001 /usr/java/jdk1.8.0_45/bin/jps
7249 JobHistoryServer
6707 DFSZKFailoverController
6899 NodeManager
6231 NameNode
6088 QuorumPeerMain
6793 ResourceManager
7322 Jps
6334 DataNode
6527 JournalNode
全部启动成功