hadoop集群搭建——轻松版

/*
此脚本为搭建hadoop集群的脚本,可以在一台机器上完成。
需要注意以下几点:
1、使用这个脚本的前提为
{
拥有且开启samba服务(可有可无);
samba的共享路名为/home/samba ;
/home/samba中拥有hadoop软件包和java软件包;
hadoop的配置文件需要在conf目录中(由于版本不同,配置文件的位置也许会不同);
已经挂载了linux系统的镜像光盘;

            };
            2、在使用脚本的时候需要根据要求更改变量名;
            3、当集群中的几点不是 3 个时:
            {
                需要添加变量名(比如 slave3_ip, slave_name3 等等);
                需要更改hdfs-site.xml中dfs.replication的值;
                /etc/hosts 中的内容需要添加或更改;
                scp 命令时,需要添加或更改;
                ssh 命令时,需要添加或更改;
            };
            4、此脚本结束后,一定要严格按照脚本提示语操作(比如:必须在 为hadoop所创建的用户下执行 ssh-copy-id.sh  );
            5、ssh.sh 和 3.1.sh 和 3.2.sh 需要用root用户运行,1.sh 和 2.sh 需要用hadoop用户运行;
            6、

*/

首先编写 ssh 脚本,然后去每台机器上执行 1.sh 2.sh

注意:在每台机器上执行完相同脚本号的脚本之后才可以执行下一个脚本。

相同脚本好的脚本可以同时运行。

vi /home/hadoop/ssh.sh

#!/bin/bash
group_name=hadoop
user_name=hadoop
user_passwd=hadoop

master_ip=192.168.18.17
slave1_ip=192.168.18.18
slave2_ip=192.168.18.16
master_name=h1  
slave_name1=h2
slave_name2=h3
#定义变量

echo "请注意:"
echo "完成此脚本之后,请用hadoop用户在每台机器上按照脚本编号的大小依次执行脚本"
echo "######################################################"
echo "注意:在每台机器上执行完相同脚本号的脚本之后才可以执行下一个脚本。"
echo "######################################################"

cat <<EOF >/home/$user_name/3.sh 
group_name=hadoop
user_name=hadoop
user_passwd=hadoop

master_ip=192.168.18.17
slave1_ip=192.168.18.18
slave2_ip=192.168.18.16
master_name=h1  
slave_name1=h2
slave_name2=h3
#定义变量

echo "$master_ip	$master_name" >> /etc/hosts
echo "$slave1_ip	$slave_name1" >> /etc/hosts
echo "$slave2_ip 	$slave_name2" >> /etc/hosts
#修改hosts文件

ssh-keygen -t rsa -f ~/.ssh/id_rsa -P ''
#创建密钥

EOF

cat <<EOF >/home/$user_name/4.sh
ssh-copy-id -i /home/$user_name/.ssh/id_rsa.pub $user_name@$master_ip
ssh-copy-id -i /home/$user_name/.ssh/id_rsa.pub $user_name@$slave1_ip
ssh-copy-id -i /home/$user_name/.ssh/id_rsa.pub $user_name@$slave2_ip
EOF


cat <<EOF >/home/$user_name/1.sh
echo "请确认您现在的操作用户为root...."
ssh-keygen -t rsa -f ~/.ssh/id_rsa -P ''
ssh-copy-id -i /root/.ssh/id_rsa.pub root@$slave1_ip
ssh-copy-id -i /root/.ssh/id_rsa.pub root@$slave2_ip
EOF

scp /home/$user_name/3.sh $user_name@$slave1_ip:/home/$user_name/
scp /home/$user_name/3.sh $user_name@$slave2_ip:/home/$user_name/
scp /home/$user_name/4.sh $user_name@$slave1_ip:/home/$user_name/
scp /home/$user_name/4.sh $user_name@$slave2_ip:/home/$user_name/

之后编写 hadoop 集群脚本 2.sh

vi /home/hadoop/2.sh

#!/bin/bash
group_name=hadoop
user_name=hadoop
user_passwd=hadoop

master_ip=192.168.18.17
slave1_ip=192.168.18.18
slave2_ip=192.168.18.16
master_name=h1  
slave_name1=h2
slave_name2=h3

package_name_hadoop=hadoop-0.20.2-cdh3u5.tar.gz
dirc_haoop=${package_name_hadoop%%.tar*}

HADOOP_HOME=/home/$user_name/app/hadoop
HADOOP_PREFIX=$HADOOP_HOME/$dirc_haoop
conf_hadoop=$HADOOP_PREFIX/conf
#groupadd $group_name 
#useradd -g $group_name $user_name
#echo "$user_passwd" | passwd $user_name --stdin

#安装java

package_name_java=jdk-7u25-linux-i586.tar.gz
pre_pwd=`dirname $HADOOP_HOME`
JAVA_PREHOME=$pre_pwd/java 

mount -o loop /dev/cdrom  /mnt

rm -rf /etc/yum.repos.d/*

cat <<EOF > /etc/yum.repos.d/base.repo
[Base]
name=base
baseurl=file:///mnt/Server
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
EOF
yum -y remove java


mkdir -p $JAVA_PREHOME

cp /home/samba/$package_name_java $JAVA_PREHOME
cd $JAVA_PREHOME
tar zxpf $JAVA_PREHOME/$package_name_java
rm -rf $package_name_java
JAVA_NAME=`ls ${JAVA_PREHOME}`


echo "export JAVA_HOME=$JAVA_PREHOME/$JAVA_NAME" >> /etc/profile
echo "export CLASSPATH=.:\$JAVA_HOME/jre/lib/rt.jar:\$JAVA_HOME/lib/dt.jar:\$JAVA_HOME/lib/tools.jar" >> /etc/profile
echo "export PATH=\$PATH:\$JAVA_HOME/bin" >> /etc/profile

chown -R root:root $JAVA_PREHOME/$JAVA_NAME
chmod 755 -R $JAVA_PREHOME/$JAVA_NAME
source /etc/profile



#此时开始搭建hadoop



mkdir -p $HADOOP_HOME
cp /home/samba/$package_name_hadoop $HADOOP_HOME
cd $HADOOP_HOME
tar zxpf $package_name_hadoop
rm -rf $package_name_hadoop
cd $conf_hadoop


sed -i '/<configuration>/a<property>' core-site.xml
sed -i '/<property>/a<name>fs.default.name</name>' core-site.xml
sed -i '/<name>fs.default.name/a<value>hdfs://'${master_name}':9000</value>' core-site.xml
sed -i '/hdfs:\/\/'${master_name}':9000/a</property>' core-site.xml

sed -i '/<configuration>/a<property>' hdfs-site.xml
sed -i '/<property>/a<name>dfs.replication</name>' hdfs-site.xml
sed -i '/<name>dfs.replication/a<value>2</value>' hdfs-site.xml
sed -i '/<value>2/a</property>' hdfs-site.xml

sed -i '/<configuration>/a<property>' mapred-site.xml
sed -i '/<property>/a<name>mapred.job.tracker</name>' mapred-site.xml
sed -i '/<name>mapred.job.tracker/a<value>'${master_name}':9001</value>' mapred-site.xml
sed -i '/<value>'${master_name}':9001/a</property>' mapred-site.xml

sed -i '/export JAVA_HOME/aexport JAVA_HOME='${JAVA_PREHOME}'\/'${JAVA_NAME}'' hadoop-env.sh 

echo ${master_name} > masters
echo ${slave_name1} > slaves
echo ${slave_name2} >> slaves

chown -R $user_name:$group_name /home/$user_name

echo "$master_ip	$master_name" >> /etc/hosts
echo "$slave1_ip	$slave_name1" >> /etc/hosts
echo "$slave2_ip 	$slave_name2" >> /etc/hosts

echo "##############################"
echo "请注意:"
echo "在接下来的过程中将会向其他节点传输文件........."
echo "##############################"

ssh -t root@$slave1_ip <<EOF 
mkdir -p $HADOOP_HOME
mkdir -p $JAVA_PREHOME
exit
EOF
echo "######################################"
echo "此时将要向节点 $slave1_ip 中传输文件......."
echo "######################################"
echo "此时将要传输hadoop文件......."
scp -r $HADOOP_PREFIX root@$slave1_ip:$HADOOP_HOME
echo "hadoop文件传输完毕,即将传输java...... "
scp -r $JAVA_PREHOME/* root@$slave1_ip:$JAVA_PREHOME
echo "java文件传输完毕,即将替换 /etc/profile 文件.... "
scp -r /etc/profile root@$slave1_ip:/etc/profile
echo "文件传输完毕,接下来将要对 $slave_name1 中的文件进行修改 "
ssh -t root@$slave1_ip <<EOF
echo "$master_ip	$master_name" >> /etc/hosts
echo "$slave1_ip	$slave_name1" >> /etc/hosts
echo "$slave2_ip 	$slave_name2" >> /etc/hosts

chown -R $user_name:$group_name /home/$user_name
chmod 755 -R $JAVA_PREHOME/$JAVA_NAME
source /etc/profile
exit
EOF

ssh -t root@$slave2_ip <<EOF
mkdir -p $HADOOP_HOME
mkdir -p $JAVA_PREHOME
exit
EOF

echo "######################################"
echo "此时将要向节点 $slave2_ip 中传输文件"
echo "######################################"
echo "此时将要传输hadoop文件"
scp -r $HADOOP_PREFIX root@$slave2_ip:$HADOOP_HOME
echo "hadoop文件传输完毕,即将传输java "
scp -r $JAVA_PREHOME/* root@$slave2_ip:$JAVA_PREHOME
echo "java文件传输完毕,即将替换 /etc/profile 文件  "
scp -r /etc/profile root@$slave2_ip:/etc/profile
echo "文件传输完毕,接下来将要对 $slave_name2 中的文件进行修改 "
ssh -t root@$slave2_ip <<EOF 
echo "$master_ip	$master_name" >> /etc/hosts
echo "$slave1_ip	$slave_name1" >> /etc/hosts
echo "$slave2_ip 	$slave_name2" >> /etc/hosts

chown -R $user_name:$group_name /home/$user_name
chmod 755 -R $JAVA_PREHOME/$JAVA_NAME
source /etc/profile
exit
EOF


#此时,hadoop集群已经搭建完毕。

echo "#########################################"
echo "请注意:"
echo "此时,hadoop集群已经搭建完毕.请继续退回到hadoop用户中操作..."
echo "#########################################"

第一次写博客有点小激动,不管效果是怎样的我打算对文字格式不做任何更改了。
分享知识是世界上最快乐的事情。。。
请大家多多指教。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值