shell自动化配置Hadoop配置文件示例#!/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 fiif [ -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这里就是所谓的对文件中字符串的替换,示例文件为:root@Ubuntu:/home/houqd/hadoop/conf# cat -n core-site.xml<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?><!-- Put site-specific property overrides in this file. --><configuration> <property> <name>fs.default.name</name> <value>hdfs://ip:port</value> </property> <property> <name>hadoop.tmp.dir</name> <value>tmp_dir</value> </property> </configuration>3. 注意其它语法: if [ ] ; then else fi while [] do ..done i=0 let i++更多Hadoop相关信息见Hadoop 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=13