【费元星原创】一键安装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 ...
随机推荐
- tensorflow的一些函数
1.tf.constant(value,dtype=None,shape=None,name='Const') 注意这个函数创造的是一个常数tensor,而不是一个具体的常数 value:即可以是li ...
- SSH框架——(二)四层结构:DAO,Service,Controller,View层
1. DAO层: 主要任务:做数据持久层的工作,负责与数据库进行联络的一些任务都封装在此. DAO层的设计:首先是设计DAO层的接口,然后再Spring的配置文件中定义此接口的实现类,然后就可以在模块 ...
- 报错Caused by: org.hibernate.AnnotationException: No identifier specified for entity:
Caused by: org.hibernate.AnnotationException: No identifier specified for entity:. 原因: 1.没有给实体类ID 解决 ...
- diogo谈框,仿prompt()方法布局
展示效果: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...
- OC中对象的description方法
周所周知,我们在做项目时, 可以在类的.m文件中重写该类的对象的描述description方法: 示例: -(NSString *)description{ NSString *str = [N ...
- Entity Framework code first设置不在数据库中生成外键
你现在用的EF是什么版本?我用EF6,你可以重写SqlServerMigrationSqlGenerator的生成外键和更新外键的方法,把不需要的表都过滤掉不就ok了? public class Ex ...
- JAVA正则表达式判断元音
/* * 判断字符串”qaq”中间的字符是否是元音 * * aeiou * AEIOU * */ (1)正则表达式 (2) (3)
- Matlab 编程入门(一):编程基础
上学期学了一些matlab的知识,这学期再用时竟然发现已经忘得差不多了(┬_┬) 于是决定重新开始并将它们记录下来,也方便自己以后查漏补缺! M文件编程 脚本文件 matlab有自己的命令行窗口,对于 ...
- #leetcode刷题之路35-搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引.如果目标值不存在于数组中,返回它将会被按顺序插入的位置.你可以假设数组中无重复元素. 示例 1:输入: [1,3,5,6], 5输出: ...
- 19-3-4 Python进制转换;bool str int三者之间的转换;字符串的索引,切片;for循环的使用
进制转换: 二进制转十进制: 0010 1111 = 1*2**0+1*2**1+1*2**2+1*2**3+1*2**5 十进制转换二进制: 用十进制数除2逆序取余 --->101010 布 ...