当前位置:  开发笔记 > 编程语言 > 正文

shell自动化配置hadoop配置文件示例

shell自动化配置hadoop配置文件示例[plain]#!/bin/bashread-p'Pleaseinputthedirectoryofhadoop,ex:/usr/hadoop:'hadoop_dirif[-d$hadoop_dir];thenecho
shell自动化配置hadoop配置文件示例
 
[plain] 
#!/bin/bash  
read -p 'Please input the directory of hadoop , ex: /usr/hadoop :' hadoop_dir  
if [ -d $hadoop_dir ] ; then  
   echo 'Yes , this directory exist.'  
else   
   echo 'Error , this directory not exist.'  
   exit 1  
fi  
  
if [ -f $hadoop_dir/conf/core-site.xml ];then  
   echo "Now config the $hadoop_dir/conf/core-site.xml file."  
   read -p 'Please input the ip value of fs.default.name , i.e. hdfs://ip:port :' ip  
   i=1  
   while [ -z $ip ]  
   do  
      read -p 'Please input the ip value of fs.default.name , i.e. hdfs://ip:port :' ip  
      let i++   
      echo $i  
      if [ $i -gt 2 ];then  
         echo 'You have input three time , done , exit.'  
         exit 1  
      fi  
   done  
   if [ $ip = '' ];then   
      echo 'The value of ip can not null , exit.'  
      exit 1  
   fi   
   read -p "Please input the port value of fs.default.name , i.e. hafs://$ip:port :" port  
   if [ $port = '' ];then   
      echo 'The value of port can not null , exit.'  
      exit 1  
   fi  
   read -p 'Please input the dir value of hadoop.tmp.dir :' hadoop_tmp_dir  
   if [ $hadoop_tmp_dir = '' ];then  
      echo 'The value of hadoop.tmp.dir can not null , exit.'  
      exit 1  
   else  
      if [ ! -d $hadoop_tmp_dir ];then  
         echo 'The directory you have input is not exist , we will make it.'  
         mkdir -p $hadoop_tmp_dir  
      fi  
   fi  
   tmp_dir=$(echo $hadoop_tmp_dir|sed 's:/:\\/:g')  
        
   sed -i "s/ip/$ip/g" $hadoop_dir/conf/core-site.xml  
   sed -i "s/port/$port/g" $hadoop_dir/conf/core-site.xml   
   sed -i "s/tmp_dir/$tmp_dir/g" $hadoop_dir/conf/core-site.xml  
else   
   echo "The file $hadoop_dir/core-site.xml doen't exist."  
   exit 1  
fi  
cat $hadoop_dir/conf/core-site.xml  
echo 'Config the core-site.xml success !'  
echo   
关键部分分析:
        1.   tmp_dir=$(echo $hadoop_tmp_dir|sed 's:/:\\/:g')
              我们输入的$hadoop_tmp_dir是类似:/usr/hadoop/tmp这样的,如果直接写在sed里:sed -i "s/tmp_dir/$hadoop_tmp_dir/g" $hadoop_dir/conf/core-site.xml ,这样会出现错误。因为它解析进去会是:sed -i "s/tmp_dir//usr/hadoop/tmp/g" $hadoop_dir/conf/core-site.xml这样的,显然不能满足,这里解决的方式是:想办法将/usr/hadoop/tmp的输入转换为:\ /usr\ /hadoop\/tmp的形式,即加入转义字符。sed ' s:/:\\/:g ' 这样就可以了,然后通过$(),取值赋给变量。
        2. sed -i " s/ip/$ip/g " $hadoop_dir/conf/core-site.xml    
             这里就是所谓的对文件中字符串的替换,示例文件为:            
[plain] 
root@ubuntu:/home/houqd/hadoop/conf# cat -n core-site.xml   
     1    
     2    
     3    
     4    
     5    
     6    
     7        
     8          fs.default.name  
     9          hdfs://ip:port  
    10        
    11        
    12          hadoop.tmp.dir  
    13          tmp_dir  
    14        
    15    
         3. 注意其它语法:   if [ ] ; then   else  fi          while [] do  ..done         i=0   let i++
推荐阅读
农大军乐团_697
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有