【费元星原创】一键安装Hadoo2.7.6 集群完全分布式脚本-完美解决
有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 集群完全分布式脚本-完美解决的更多相关文章
- 【费元星】crt 无法上传文件,总是显示盾牌表示-完美解决
将如下内容保存到文件中,已.bat 结尾 taskkill /f /im explorer.exeattrib -s -r -h "%userprofile%\AppData\Local\i ...
- Docker Compose 一键部署Nginx代理Tomcat集群
Docker Compose 一键部署Nginx代理Tomcat集群 目录结构 [root@localhost ~]# tree compose_nginx_tomcat/ compose_nginx ...
- 【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 ...
- Cloudera Manager安装_搭建CDH集群
2017年2月22日, 星期三 Cloudera Manager安装_搭建CDH集群 cpu 内存16G 内存12G 内存8G 默认单核单线 CDH1_node9 Server || Agent ...
- 使用kubeadm安装kubernetes高可用集群
kubeadm安装kubernetes高可用集群搭建 第一步:首先搭建etcd集群 yum install -y etcd 配置文件 /etc/etcd/etcd.confETCD_NAME=inf ...
- centos7安装redis-4.0.1集群
试验机操作系统:CentOS Linux release 7.2.1511 (Core) 本文的目的是教会大家快速搭建redis集群,完了再深入学习. 试问如果不上手试验,看的资料再多有个毛用? 下载 ...
- Linux系统下安装Redis和Redis集群配置
Linux系统下安装Redis和Redis集群配置 一. 下载.安装.配置环境: 1.1.>官网下载地址: https://redis.io/download (本人下载的是3.2.8版本:re ...
- 基于CentOS与VmwareStation10搭建Oracle11G RAC 64集群环境:3.安装Oracle RAC-3.6.集群管理命令
3.6. 集群管理命令 3.6.1. RAC的启动与关闭 oracle rac默认会开机自启动,如需维护时可使用以下命令: 关闭: crsctl stop cluster 停止本节点集群服务 crsc ...
- 完整安装sqlserver always on集群
准备工作 1. 四台已安装windows server 2008 r2 系统的虚拟机,配置如下: CPU : 1核 MEMORY : 2GB DISK : 40GB(未分区) NetAdapter ...
随机推荐
- bzoj3609 [Heoi2014]人人尽说江南好
Description 小 Z 是一个不折不扣的 ZRP(Zealot Round-game Player,回合制游戏狂热玩家),最近他 想起了小时候在江南玩过的一个游戏. 在过去,人们是要边玩 ...
- Cacti监控mysql数据库server实现过程
前言:cactiserver端安装请參考:http://blog.csdn.net/mchdba/article/details/27120605 1 先在cactiserver端安装mysql模板 ...
- 如何清理Macbook垃圾文件
如何清理Macbook垃圾文件,腾出更多硬盘空间 在Macbook使用久之后,会发现本来还富裕的硬盘,变得越来越少,尤其现在Macbook使用容量很小的固态硬盘.在此种情况下,该如何清理Macbook ...
- 【AngularJS学习笔记】封装一些简单的控件(封装成Html标签)
bootstrap有强大的指令系统,可以自定义一些属性,基本知识请移步:http://angularjs.cn/A00r http://www.cnblogs.com/lvdabao/p/33916 ...
- 利用python 传输文件
最近在学python3 发现了一个很有用的功能,该功能可以将安装python 的机器作为一台http 服务器来分享本机的文件, 具体的使用记录如下 python3 的使用方法 直接在windows 的 ...
- Java中的IO流(三)
上一篇<Java中的IO流(二)>把学习Java的字符流以及转换流作了一下记录,从本篇开始将把IO流中对文件或文件夹操作的对象File类的学习进行一下记录. 一,File类的构造函数及字段 ...
- 1. 了解HTML
HTML概念 HTML,超文本标记语言.它由一套标签组成用来描述网页,值得我们注意的是HTML并不是编程语言,它只是一种标记,我们通过HTML定义了网页的结构,然后再利用其他技术装饰这个结构,赋予这个 ...
- 全志A64 QT移植
1. 把编译工具 gcc-linaro-aarch64.tar.xz 添加到环境.bashrc 中 2. 下载 tslib-1.4.tar.gz ,libiconv-1.15.tar.gz ,qt-e ...
- Leecode刷题之旅-C语言/python-349两个数组的交集
/* * @lc app=leetcode.cn id=349 lang=c * * [349] 两个数组的交集 * * https://leetcode-cn.com/problems/inters ...
- 清华大学《C++语言程序设计基础》线上课程笔记05---vector对象,对象的复制与移动,string类
vector 对象 C++标准库中的一个类模板 封装任何类型的动态数组,自动创建和删除. 数组下标越界检查. 将动态数组封装成类的知识点中封装的ArrayOfPoints也提供了类似功能,但只适用于一 ...