有Bug 欢迎反馈,我不烦:feiyuanxing@gmail.com

  1 #!/bin/bash
#@author:feiyuanxing 【既然笨到家,就要努力到家】
#@date:2017-01-05
#@E-Mail:feiyuanxing@gmail.com
#@TARGET:一键安装hadoop 2.7.6 centos 64位
#@CopyRight:本脚本遵守 未来星开源协议(http://feiyuanxing.com/kaiyuanxieyi/kaiyuanxieyi.html) #讲解:
#0.前提条件:
# 0.1 已经配置好JAVA环境变量
# 0.2 已经配置免密登录环境
#1.请使用root用户执行,软件默认安装在work用户,通常会在linux的/home 挂载一个大型磁盘
#2.软件安装在/home/work/local/hadoop/hadoop 有人问为什么这么深
# 2.1 work目录下local包含所有软件 hadoop安装大数据生态圈其他软件
# 2.2 hadoop的数据安装在 /home/work/data ,此目录由于数量较大,可以单独挂载一个磁盘
#
####################################################################################
# 个性化设置
# Hadoop 生态目录
INSTALL_HOME=/home/work/local/hadoop #data 目录
DATA_HOME=/home/work/data
# Hadoop目录
ROOT_HOME=${INSTALL_HOME}/hadoop_tmp #name 通常为主机(本机),缺省配置为master
NAMENODE=master
#name 通常为第一台从机,缺省配置为slave01
SECONDARYNAMENODE=slave01
#hadoop 版本
HADOOP_VERSION=hadoop-2.7.6.tar.gz
####################################################################################
# Hadoop 生态数据路径
hadoop_logs=${DATA_HOME}/hadoop_logs
hadoop_tmp=${DATA_HOME}/hadoop_tmp
hadoop_data=${DATA_HOME}/hadoop_data
hadoop_name=${DATA_HOME}/hadoop_name
#当前脚本的位置
SCRIPT_HOME=$(cd `dirname $0`; pwd) mkdir -p ${INSTALL_HOME} && cd ${INSTALL_HOME}
mkdir -p ${ROOT_HOME} && mkdir -p ${hadoop_logs} && mkdir -p ${hadoop_tmp}&& mkdir -p ${hadoop_data}&& mkdir -p ${hadoop_name} #chown -R work:work /home/work/data/hadoop #集群机器信息
INSTALL_IP_ARRAY=()
INSTALL_HOSTNAME_ARRAY=() # 需要判断用户是否存在
function add_work_user(){
adduer work -d /home/work
passwd work } #需要判断jdk是否存在
function install_jdk(){
# 有jdk
echo $JAVA_HOME } #下载hadoop
function download_hodoop(){
echo "(2-1/6)正在获取安装包:${INSTALL_HOME}/hadoop-2.7.6.tar.gz"
if [ ! -f ${INSTALL_HOME}/hadoop-2.7.6.tar.gz ] ;then
echo "开始下载"
wget https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-2.7.6/${HADOOP_VERSION}
fi
echo "(2-2/6)获取安装包完成:${INSTALL_HOME}/hadoop-2.7.6.tar.gz" } function configuration_ssh(){
#设置本机免密码登录
(echo -e "\n"
sleep 1
echo -e "\n"
sleep 1
echo -e "\n")|ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
} function readFileToArra(){
echo "(1/6)正在读取配置文件:${SCRIPT_HOME}/hostip_hadoop.txt"
if [ ! -f "${SCRIPT_HOME}"/hostip_hadoop.txt ];then
echo "请在本目录下的【hostip_hadoop.txt】文件中添加Hadoop集群机器信息"
echo "#USENAME@IP:PORT,PASSWD(第一个必须配置为主,通常为本机)
root@191.168.1.1:22,123456
root@191.168.1.2:22,123456" > ${SCRIPT_HOME}/hostip_hadoop.txt
exit;
else
INSTALL_IP_ARRAY=($(cat "${SCRIPT_HOME}"/hostip_hadoop.txt| grep -v "^#"))
INSTALL_HOSTNAME_ARRAY=($(cat "${SCRIPT_HOME}"/hostip_hadoop.txt| grep -v "^#"|awk -F '@' '{print $2}'|awk -F ':' '{print $1}'))
fi #for(( i=0 ; i<${#INSTALL_IP_ARRAY[@]} ; i++)) do
# echo "打印数组:${INSTALL_IP_ARRAY[i]}"
#done;
} #readFileToArra function configure_hadoop(){ echo "(3-1/6)正在解压安装包:"
#最终生成的文件名为install_hadoop.bin而我们的all.tar.gz被>>到该文件后面
#tail -c $size install_hadoop.bin >all.tar.gz
rm -rf hadoop hadoop_tmp
tar -zxf ${HADOOP_VERSION}
#pwd
mv hadoop-2.7.6 hadoop_tmp && cd hadoop_tmp echo "(3-2/6)正在配置Hadoop环境变量:"
#设置环境变量
hadoop_home_before=`cat /etc/profile| grep "HADOOP_HOME"` if [ -z "${hadoop_home_before}" ] ;then
echo "hadoop 环境变量已存在..."
sed -i '/HADOOP_HOME/d' /etc/profile
echo "export HADOOP_HOME=${INSTALL_HOME}" >> /etc/profile
echo 'export PATH=$PATH:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin' >> /etc/profile
#使得环境变量生效
source /etc/profile
sleep 1;
source /etc/profile fi echo "(4/6)正在配置Hadoop基本配置:"
#通过强大的sed命令来修改hadoop的配置文件
jdk_home=`echo $JAVA_HOME`
if [ -z ${jdk_home} ] ;then
#安装JDK
echo "程序已退出,请先配置JDK"
exit
fi #echo "开始配置hadoop"
# 1.配置hadoop-env.sh
sed -i "s!\${JAVA_HOME}!$(echo ${jdk_home})!g" ${ROOT_HOME}/etc/hadoop/hadoop-env.sh
# 2.配置core-site.xml
sed -i "/<configuration>/a\\\t\<property\>\n\\t\\t\<name\>fs.defaultFS\<\/name\>\n\\t\\t\<value\>hdfs://${NAMENODE}:9000\<\/value\>\n\\t\<\/property\>\n\\t\<property\>\n\\t\\t\<name\>hadoop.tmp.dir\<\/name\>\n\\t\\t\<value\>file:$(echo ${hadoop_tmp})\<\/value\>\n\\t\</property\>" ${ROOT_HOME}/etc/hadoop/core-site.xml
sed -i "/<configuration>/a\\\t\<property\>\n\\t\\t\<name\>io.file.buffer.size\</name\>\n\\t\\t\<value\>131072\</value\>\n\\t\</property\>" ${ROOT_HOME}/etc/hadoop/core-site.xml
# 3.配置hdfs-site.xml
sed -i "/<configuration>/a\\\t\<property\>\n\\t\\t\<name\>dfs.webhdfs.enabled\</name\>\n\\t\\t\<value\>true\</value\>\n\\t\</property\>" ${ROOT_HOME}/etc/hadoop/hdfs-site.xml
sed -i "/<configuration>/a\\\t\<property\>\n\\t\\t\<name\>dfs.replication\</name\>\n\\t\\t\<value\>2\</value\>\n\\t\</property\>" ${ROOT_HOME}/etc/hadoop/hdfs-site.xml
sed -i "/<configuration>/a\\\t\<property\>\n\\t\\t\<name\>dfs.datanode.data.dir\</name\>\n\\t\\t\<value\>file:${hadoop_name}\</value\>\n\\t\</property\>" ${ROOT_HOME}/etc/hadoop/hdfs-site.xml
sed -i "/<configuration>/a\\\t\<property\>\n\\t\\t\<name\>dfs.namenode.name.dir\</name\>\n\\t\\t\<value\>file:${hadoop_data}\</value\>\n\\t\</property\>" ${ROOT_HOME}/etc/hadoop/hdfs-site.xml
sed -i "/<configuration>/a\\\t\<property\>\n\\t\\t\<name\>dfs.namenode.secondary.http-address\</name\>\n\\t\\t\<value\>master:9001\</value\>\n\\t\</property\>" ${ROOT_HOME}/etc/hadoop/hdfs-site.xml
# 4.配置mapred-site.xml
cp ${ROOT_HOME}/etc/hadoop/mapred-site.xml.template ${ROOT_HOME}/etc/hadoop/mapred-site.xml
sed -i "/<configuration>/a\\\t\<property\>\n\\t\\t\<name\>mapreduce.jobhistory.webapp.address\</name\>\n\\t\\t\<value\>master:19888\</value\>\n\\t\</property\>" ${ROOT_HOME}/etc/hadoop/mapred-site.xml
sed -i "/<configuration>/a\\\t\<property\>\n\\t\\t\<name\>mapreduce.jobhistory.address\</name\>\n\\t\\t\<value\>master:10020\</value\>\n\\t\</property\>" ${ROOT_HOME}/etc/hadoop/mapred-site.xml
sed -i "/<configuration>/a\\\t\<property\>\n\\t\\t\<name\>mapreduce.framework.name\</name\>\n\\t\\t\<value\>yarn\</value\>\n\\t\</property\>" ${ROOT_HOME}/etc/hadoop/mapred-site.xml
# 5.配置yarn-site.xml
sed -i "/<configuration>/a\\\t\<property\>\n\\t\\t\<name\>yarn.resourcemanager.webapp.address\</name\>\n\\t\\t\<value\>master:8088\</value\>\n\\t\</property\>" ${ROOT_HOME}/etc/hadoop/yarn-site.xml
sed -i "/<configuration>/a\\\t\<property\>\n\\t\\t\<name\>yarn.resourcemanager.admin.address\</name\>\n\\t\\t\<value\>master:8033\</value\>\n\\t\</property\>" ${ROOT_HOME}/etc/hadoop/yarn-site.xml
sed -i "/<configuration>/a\\\t\<property\>\n\\t\\t\<name\>yarn.resourcemanager.resource-tracker.address\</name\>\n\\t\\t\<value\>master:8031\</value\>\n\\t\</property\>" ${ROOT_HOME}/etc/hadoop/yarn-site.xml
sed -i "/<configuration>/a\\\t\<property\>\n\\t\\t\<name\>yarn.resourcemanager.scheduler.address\</name\>\n\\t\\t\<value\>master:8030\</value\>\n\\t\</property\>" ${ROOT_HOME}/etc/hadoop/yarn-site.xml
sed -i "/<configuration>/a\\\t\<property\>\n\\t\\t\<name\>yarn.resourcemanager.address\</name\>\n\\t\\t\<value\>master:8032\</value\>\n\\t\</property\>" ${ROOT_HOME}/etc/hadoop/yarn-site.xml
sed -i "/<configuration>/a\\\t\<property\>\n\\t\\t\<name\>yarn.nodemanager.aux-services.mapreduce.shuffle.class\</name\>\n\\t\\t\<value\>org.apache.hadoop.mapred.ShuffleHandler\</value\>\n\\t\</property\>" ${ROOT_HOME}/etc/hadoop/yarn-site.xml
sed -i "/<configuration>/a\\\t\<property\>\n\\t\\t\<name\>yarn.nodemanager.aux-services\</name\>\n\\t\\t\<value\>mapreduce_shuffle\</value\>\n\\t\</property\>" ${ROOT_HOME}/etc/hadoop/yarn-site.xml
# 6.配置slaves文件
echo "" > ${ROOT_HOME}/etc/hadoop/slaves
for(( i=0 ; i<${#INSTALL_HOSTNAME_ARRAY[@]} ; i++)) do
echo "${INSTALL_HOSTNAME_ARRAY[i]}" >> ${ROOT_HOME}/etc/hadoop/slaves
done; echo "(5/6)正在发送hadoop到其他机器"
for line in ${INSTALL_IP_ARRAY[@]}
do
user=`echo ${line}| awk -F "@" '{print $1}'`
ip=`echo ${line}| cut -d "@" -f 2| cut -d ":" -f 1`
port=`echo ${line}| cut -d "@" -f 2| cut -d ":" -f 2|cut -d "," -f 1`
echo ${user} - ${ip} - ${port} - ${passwd}
ssh -p ${port} -o StrictHostKeyChecking=no "${user}@${ip}" "rm -rf ${DATA_HOME}/hadoop_*;rm -rf ${INSTALL_HOME}/hadoop;mkdir -p ${INSTALL_HOME}/hadoop;mkdir -p ${hadoop_logs} && mkdir -p ${hadoop_tmp}&& mkdir -p ${hadoop_data}&& mkdir -p ${hadoop_name}"
#echo "scp -P ${port} -o StrictHostKeyChecking=no -rpq ${ROOT_HOME} \"${user}\"@\"${ip}\":${INSTALL_HOME}"
scp -P ${port} -o StrictHostKeyChecking=no -rpq ${ROOT_HOME}/* "${user}"@"${ip}":${INSTALL_HOME}/hadoop
ssh -p ${port} -o StrictHostKeyChecking=no "${user}@${ip}" "chown -R work:work ${INSTALL_HOME}"
done echo "(6/6)Hadoop配置成功" } #配置Hadoop启动服务
function start_hadoop(){
#格式化hadoop
hdfs namenode -format
echo "格式化完成..开始运行"
#先启动HDFS
start-dfs.sh
#再启动YARN
start-yarn.sh #检查是否启动成功
jps }
#动态读取配置文件
readFileToArra
#add_work_user
download_hodoop;
#configuration_ssh
configure_hadoop
#start_hadoop

【费元星原创】一键安装Hadoo2.7.6 集群完全分布式脚本-完美解决的更多相关文章

  1. 【费元星】crt 无法上传文件,总是显示盾牌表示-完美解决

    将如下内容保存到文件中,已.bat 结尾 taskkill /f /im explorer.exeattrib -s -r -h "%userprofile%\AppData\Local\i ...

  2. Docker Compose 一键部署Nginx代理Tomcat集群

    Docker Compose 一键部署Nginx代理Tomcat集群 目录结构 [root@localhost ~]# tree compose_nginx_tomcat/ compose_nginx ...

  3. 【Nutch2.3基础教程】集成Nutch/Hadoop/Hbase/Solr构建搜索引擎:安装及运行【集群环境】

    1.下载相关软件,并解压 版本号如下: (1)apache-nutch-2.3 (2) hadoop-1.2.1 (3)hbase-0.92.1 (4)solr-4.9.0 并解压至/opt/jedi ...

  4. Cloudera Manager安装_搭建CDH集群

    2017年2月22日, 星期三 Cloudera Manager安装_搭建CDH集群 cpu   内存16G 内存12G 内存8G 默认单核单线 CDH1_node9 Server  || Agent ...

  5. 使用kubeadm安装kubernetes高可用集群

    kubeadm安装kubernetes高可用集群搭建  第一步:首先搭建etcd集群 yum install -y etcd 配置文件 /etc/etcd/etcd.confETCD_NAME=inf ...

  6. centos7安装redis-4.0.1集群

    试验机操作系统:CentOS Linux release 7.2.1511 (Core) 本文的目的是教会大家快速搭建redis集群,完了再深入学习. 试问如果不上手试验,看的资料再多有个毛用? 下载 ...

  7. Linux系统下安装Redis和Redis集群配置

    Linux系统下安装Redis和Redis集群配置 一. 下载.安装.配置环境: 1.1.>官网下载地址: https://redis.io/download (本人下载的是3.2.8版本:re ...

  8. 基于CentOS与VmwareStation10搭建Oracle11G RAC 64集群环境:3.安装Oracle RAC-3.6.集群管理命令

    3.6. 集群管理命令 3.6.1. RAC的启动与关闭 oracle rac默认会开机自启动,如需维护时可使用以下命令: 关闭: crsctl stop cluster 停止本节点集群服务 crsc ...

  9. 完整安装sqlserver always on集群

    准备工作 1.  四台已安装windows server 2008 r2 系统的虚拟机,配置如下: CPU : 1核 MEMORY : 2GB DISK : 40GB(未分区) NetAdapter ...

随机推荐

  1. Unix shell输入输出重定向

    敲代码的时候,适当地打印出一些进度或者日志信息经常能帮助我们跟踪程序的执行结果.可是,这些结果或者日志打印信息到屏幕上并不能作为以后检查问题的根据.这就是重定向的作用,敲代码的时候,我们能够方便的将相 ...

  2. es6之类与对象

    一.类的定义 class Parent{ constructor(name="mukewang"){ this.name=name; } } let v_parant=new Pa ...

  3. 说说DBA职责和目标

    数据库管理员(Database Administrator,简称DBA),是从事管理和维护数据库管理系统(DBMS)的相关工作人员的统称,他属于运维工程师的一个分支,主要负责业务数据库从设计.测试到部 ...

  4. iPhone 耳机在PC电脑上使用方法

    把主声道(Master)从正中间调整到最左或者最右就行了

  5. C++中rapidxml用法及例子(源码)

    rapidxml是一个快速的xml库,比tinyxml快了50-100倍.本文给出创建.读取.写入xml的源码.      由于新浪博客不支持文本文件上传,在使用下面代码需要先下载 rapidxml, ...

  6. 树莓派图形界面启动chromium并全屏

    方法1. 随便一搜都是这种方法 创建文件:  /home/pi/.config/autostart/my.desktop    文件名随意, 后缀必须.desktop 文件内容: ​[Desktop ...

  7. 通过Field (反射)给私有字段赋值

    public class Person { public String name; public char sex; private int age; public String getName() ...

  8. 在spring添加注解时,第一行package报错configure build path

    练习spring的ioc的注解的时候写上注解就会在第一行package报错configure build path. 用的spring4.2.4的jar包.经过上网查阅资料,可能是jar包冲突,解决办 ...

  9. Lua库-table

    1 获取以及设置大小 a={} print(table.getn(a)) --> table.setn(a,) print(table.getn(a)) --> 2 插入删除 a={} f ...

  10. private、protected、public和internal的区别

    private是完全私有的,只有在类自己里面可以调用,在类的外部和子类都不能调用,子类也不能继承父类的private的属性和方法. protected虽然可以被外界看到,但外界却不能调用,只有自己及自 ...