0


【大数据】搭建Hadoop集群(附一键部署脚本)

汝之观览,吾之幸也!本文主要讲解Hadoop运行环境的搭建(三台虚拟机),一键脚本部署,全自动化,不再需要按照文档一个一个进行配置,脚本执行后就可登录hadoop集群。

文章目录

一、最小安装CentOS

如果使用Vmware安装虚拟机请看【大数据】用VMware搭建自己的虚拟机(选择最小安装,内存4G、磁盘50G)

最小安装好虚拟机后一般使用ifconfig 查看ip,但最小安装后是没有这个命令,我们也可以使用 ip addr show查看

  1. ip addr show

二、准备jdk与hadoop包

在/opt 目录下建software、module文件夹,将压缩包放到software下

具体安装包可加公众号【纯码农(purecodefarmer)】输入“hadoop”即可获取下载链接

三、一键部署脚本分解

新建one、xsync脚本放到/bin目录下,赋权限

  1. chmod +x one
  2. chmod +x xsync
  3. mv one /bin/
  4. mv xsync /bin/

1、安装工具包

  1. expect:expect工具包,实现自动交互功能
  2. epel-release:额外的软件源,就可以安装更多的软件包
  3. psmisc:工具包
  4. nc:工具包
  5. net-tools:网络工具(ifconfig
  6. rsync:远程同步
  7. vimvim编辑器
  8. lrzsz 同步
  9. ntp:时间同步
  10. gitgit
  11. libzstdopenssl-statictree iotophadoop的标准库

脚本内容

  1. yum install -y expect
  2. yum install -y epel-release
  3. yum install -y psmisc nc net-tools rsyncvim lrzsz ntp libzstd openssl-static tree iotop git

执行脚本命令

  1. one 0

2、修改主机名

脚本内容

  1. echo"-------修改系统名称-------"
  2. hostnamectl --static set-hostname $1

执行脚本命令

  1. one 2 hdp101 101

3、修改ip

脚本内容

  1. echo"-------修改IP静态地址-------"#先检查文件是否已被修改过chk=`cat /etc/sysconfig/network-scripts/ifcfg-ens33 |grep static`if["$chk"==""];then#修改/etc/sysconfig/network-scripts/ifcfg-ens33文件中的dhcpsed -i 's/dhcp/static/' /etc/sysconfig/network-scripts/ifcfg-ens33
  2. echo"IPADDR=192.168.10.$1">> /etc/sysconfig/network-scripts/ifcfg-ens33
  3. echo"NETMASK=255.255.255.0">> /etc/sysconfig/network-scripts/ifcfg-ens33
  4. echo"GATEWAY=192.168.10.2">> /etc/sysconfig/network-scripts/ifcfg-ens33
  5. echo"DNS1=192.168.10.2">> /etc/sysconfig/network-scripts/ifcfg-ens33
  6. echo"PREFIX=24">> /etc/sysconfig/network-scripts/ifcfg-ens33
  7. systemctl restart network
  8. elsesed -i "s/IPADDR=192.168.10.101/IPADDR=192.168.10."$1"/" /etc/sysconfig/network-scripts/ifcfg-ens33
  9. systemctl restart network
  10. fi

执行脚本命令

  1. one 3 hdp101 101


备注:需要看本机的ip与网关,修改ip之后需要重新登录

4、关闭防火墙

脚本内容

  1. echo"-------关闭防火墙-------"
  2. systemctl stop firewalld
  3. systemctl disable firewalld

执行脚本命令

  1. one 4

5、创建用户

脚本内容

  1. echo"请注意,在创建用户时会先对该用户进行删除操作以确保脚本运行成功, 如已有该用户请慎重输入用户名!"read -p "继续请输入 1 ,停止请输入 2. : " IS_CONTINUE
  2. if[${IS_CONTINUE} -ne 1];thenecho"停止运行该脚本!"exitfiread -p "请输入新增用户用户名 : " username
  3. read -p "请输入新增用户密码 : " password
  4. userdel -r ${username}useradd -d /home/${username}${username}expect -c"
  5. spawn passwd ${username}
  6. expect {
  7. "*yes/no*" {send "yes\r";exp_continue}
  8. "*New password:*" {send "${password}\r";exp_continue}
  9. "*Retype new password:*" {send "${password}\r";exp_continue}
  10. }"echo"配置新增用户root权限"sed -i "93a "${username}" ALL=(ALL) NOPASSWD:ALL" /etc/sudoers
  11. echo"创建software、module文件夹"mkdir /opt/module /opt/software
  12. chown${username}:${username} /opt/module /opt/software
  13. echo"切换用户"su - ${username}

执行脚本命令

  1. one 1

6、解压jdk压缩包并配置jdk的环境变量

先建好文件夹

  1. mkdir /opt/software /opt/module

脚本内容

  1. echo"-------安装JDK并配置环境变量-------"#检查JDK是否已经安装过
  2. check_soft_folder jdk8
  3. if[$?==1];then#在opt文件夹下搜索jdk的tar.gz文件jdkName=`ls /opt/software/ |grep jdk*`#将文件解压到对应的soft文件夹下tar -zxvf /opt/software/$jdkName -C /opt/module/jdk8 --strip-components 1#配置/etc/profile文件sudotouch /etc/profile.d/my_env.sh
  4. echo"配置jdk环境变量"echo"">> /etc/profile.d/my_env.sh
  5. echo"#java environment">> /etc/profile.d/my_env.sh
  6. echo"export JAVA_HOME=/opt/module/jdk8">> /etc/profile.d/my_env.sh
  7. echo"export CLASSPATH=.:\${JAVA_HOME}/jre/lib/rt.jar:\${JAVA_HOME}/lib/dt.jar:\${JAVA_HOME}/lib/tools.jar">> /etc/profile.d/my_env.sh
  8. echo"export PATH=\$PATH:\${JAVA_HOME}/bin">> /etc/profile.d/my_env.sh
  9. fi

执行脚本命令

  1. one 5

7、解压hadoop压缩包并配置hadoop的环境变量

脚本内容

  1. echo"-------安装Hadoop并配置环境变量-------"#检查JDK是否已经安装过
  2. check_soft_folder hadoop330
  3. if[$?==1];then#在opt文件夹下搜索Hadoop的tar.gz文件hadoopName=`ls /opt/software/ |grep hadoop*`#将文件解压到对应的soft文件夹下tar -zxvf /opt/software/$hadoopName -C /opt/module/hadoop330 --strip-components 1#配置/etc/profile.d/my_env.sh文件echo"配置hadoop环境变量"echo"">> /etc/profile.d/my_env.sh
  4. echo"#hadoop environment">> /etc/profile.d/my_env.sh
  5. echo"export HADOOP_HOME=/opt/module/hadoop330">> /etc/profile.d/my_env.sh
  6. echo"export PATH=\$PATH:\${HADOOP_HOME}/bin">> /etc/profile.d/my_env.sh
  7. echo"export PATH=\$PATH:\${HADOOP_HOME}/sbin">> /etc/profile.d/my_env.sh
  8. fi

执行脚本命令

  1. one 6

备注:非root用户配置环境变量

  1. touch /etc/profile.d/my_env.sh

将下面的内容复制到my_env.sh中

  1. #JAVA_HOME
  2. export JAVA_HOME=/opt/module/jdk8
  3. export PATH=$PATH:$JAVA_HOME/bin
  4. ##HADOOP_HOME
  5. export HADOOP_HOME=/opt/module/hadoop330
  6. export PATH=$PATH:$HADOOP_HOME/bin
  7. export PATH=$PATH:$HADOOP_HOME/sbin

8、克隆虚拟机(无脚本)

9、分发脚本xsync

脚本内容

  1. # 获取输入参数个数,如果没有参数,直接退出pcount=$#if((pcount==0));thenecho no args...;exit;fi# 获取文件名称pname=$1fname=`basename $pname`echofname=$fname# 获取上级目录到绝对路径pdir=`cd -P $(dirname $pname);pwd`echopdir=$pdir# 获取当前用户名称user=`whoami`# 循环for((host=2; host<=3; host++));doecho$pdir/$fname$user@hdp10$host:$pdirecho==================hdp10$host==================rsync -rvl $pdir/$fname$user@hdp10$host:$pdirdone#Note:这里的slave对应自己主机名,需要做相应修改。另外,for循环中的host的边界值

执行脚本命令

  1. xsync /bin/one
  2. xsync /bin/xsync

备注:在101修改配置文件后可使用xsync命令将所修改的文件分发到102、103

8、免密登录

脚本内容

  1. echo"-------免密登录-------"if[! -f ~/.ssh/id_rsa ];thenecho"-------生成ssh密钥-------"
  2. ssh-keygen -t rsa
  3. expect -c"
  4. expect {
  5. "*.ssh/id_rsa*" {send "\r";exp_continue}
  6. "*empty for no passphrase:*" {send "\r";exp_continue}
  7. "*fingerprint is:*" {send "\r";exp_continue}
  8. }"echo"-------分发密钥-------"forhostin hdp101 hdp102 hdp103
  9. do
  10. ssh-copy-id $hostdoneelseecho"-------id_rsa已存在,直接分发-------"forhostin hdp101 hdp102 hdp103
  11. do
  12. ssh-copy-id $hostdonefi

执行脚本命令

  1. one 8

备注:需要在101、102都执行一次

8、配置当前的hadoop配置文件

脚本内容

  1. cd /opt/module/hadoop330/etc/hadoop
  2. # 配置hadoop-env.sh文件sed -i '25c export JAVA_HOME=/opt/module/jdk8' hadoop-env.sh
  3. echo"-------配置hadoop-env.sh文件完成------"# 配置core-site.xml文件 root是用户名,可更改sed -i '19a <property>' core-site.xml
  4. sed -i '20a <name>fs.defaultFS</name>' core-site.xml
  5. sed -i '21a <value>hdfs://hdp101:8020</value>' core-site.xml
  6. sed -i '22a </property>' core-site.xml
  7. sed -i '23a <property>' core-site.xml
  8. sed -i '24a <name>hadoop.data.dir</name>' core-site.xml
  9. sed -i '25a <value>/opt/module/hadoop330/data</value>' core-site.xml
  10. sed -i '26a </property>' core-site.xml
  11. sed -i '27a <property>' core-site.xml
  12. sed -i '28a <name>hadoop.proxyuser.root.groups</name>' core-site.xml
  13. sed -i '29a <value>*</value>' core-site.xml
  14. sed -i '30a </property>' core-site.xml
  15. sed -i '31a <property>' core-site.xml
  16. sed -i '32a <name>hadoop.proxyuser.root.hosts</name>' core-site.xml
  17. sed -i '33a <value>*</value>' core-site.xml
  18. sed -i '34a </property>' core-site.xml
  19. echo"-------配置core-site.xml文件完成-------"# 配置hdfs-site.xml文件sed -i '19a <property>' hdfs-site.xml
  20. sed -i '20a <name>dfs.namenode.secondary.http-address</name>' hdfs-site.xml
  21. sed -i '21a <value>hdp103:9868</value>' hdfs-site.xml
  22. sed -i '22a </property>' hdfs-site.xml
  23. sed -i '23a <property>' hdfs-site.xml
  24. sed -i '24a <name>dfs.namenode.name.dir</name>' hdfs-site.xml
  25. sed -i '25a <value>file://${hadoop.data.dir}/name</value>' hdfs-site.xml
  26. sed -i '26a </property>' hdfs-site.xml
  27. sed -i '27a <property>' hdfs-site.xml
  28. sed -i '28a <name>dfs.datanode.data.dir</name>' hdfs-site.xml
  29. sed -i '29a <value>file://${hadoop.data.dir}/data</value>' hdfs-site.xml
  30. sed -i '30a </property>' hdfs-site.xml
  31. sed -i '31a <property>' hdfs-site.xml
  32. sed -i '32a <name>dfs.namenode.checkpoint.dir</name>' hdfs-site.xml
  33. sed -i '33a <value>file://${hadoop.data.dir}/namesecondary</value>' hdfs-site.xml
  34. sed -i '34a </property>' hdfs-site.xml
  35. sed -i '35a <property>' hdfs-site.xml
  36. sed -i '36a <name>dfs.client.datanode-restart.timeout</name>' hdfs-site.xml
  37. sed -i '37a <value>30</value>' hdfs-site.xml
  38. sed -i '38a </property>' hdfs-site.xml
  39. sed -i '39a <property>' hdfs-site.xml
  40. sed -i '40a <name>dfs.namenode.http-address</name>' hdfs-site.xml
  41. sed -i '41a <value>hadoop101:9870</value>' hdfs-site.xml
  42. sed -i '42a </property>' hdfs-site.xml
  43. echo"-------配置hdfs-site.xml文件完成-------"# 配置yarn-site.xml文件sed -i '18a <property>' yarn-site.xml
  44. sed -i '19a <name>yarn.resourcemanager.hostname</name>' yarn-site.xml
  45. sed -i '20a <value>hdp102</value>' yarn-site.xml
  46. sed -i '21a </property>' yarn-site.xml
  47. sed -i '22a <property>' yarn-site.xml
  48. sed -i '23a <name>yarn.nodemanager.aux-services</name>' yarn-site.xml
  49. sed -i '24a <value>mapreduce_shuffle</value>' yarn-site.xml
  50. sed -i '25a </property>' yarn-site.xml
  51. sed -i '26a <property>' yarn-site.xml
  52. sed -i '27a <name>yarn.nodemanager.env-whitelist</name>' yarn-site.xml
  53. sed -i '28a <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>' yarn-site.xml
  54. sed -i '29a </property>' yarn-site.xml
  55. echo"-------配置yarn-site.xml文件完成-------"# 配置mapred-site.xmlsed -i '20a <property>' mapred-site.xml
  56. sed -i '21a <name>mapreduce.framework.name</name>' mapred-site.xml
  57. sed -i '22a <value>yarn</value>' mapred-site.xml
  58. sed -i '23a </property>' mapred-site.xml
  59. echo"-------配置mapred-site.xml文件完成-------"# 配置workerssed -i '2a hdp101' workers
  60. sed -i '3a hdp102' workers
  61. sed -i '4a hdp103' workers
  62. echo"-------配置workers文件完成-------"# 配置hadoop-env.shsed -i '26a export HDFS_NAMENODE_USER=root' hadoop-env.sh
  63. sed -i '27a export HDFS_SECONDARYNAMENODE_USER=root' hadoop-env.sh
  64. sed -i '28a export HDFS_DATANODE_USER=root' hadoop-env.sh
  65. echo"-------配置hadoop-env.sh文件完成-------"cd /opt/module/hadoop330/sbin
  66. sed -i '2a HDFS_DATANODE_USER=root' start-dfs.sh
  67. sed -i '3a HDFS_DATANODE_SECURE_USER=hdfs' start-dfs.sh
  68. sed -i '4a HDFS_NAMENODE_USER=root' start-dfs.sh
  69. sed -i '5a HDFS_SECONDARYNAMENODE_USER=root' start-dfs.sh
  70. echo"-------配置start-dfs.sh文件完成-------"sed -i '2a HDFS_DATANODE_USER=root' stop-dfs.sh
  71. sed -i '3a HDFS_DATANODE_SECURE_USER=hdfs' stop-dfs.sh
  72. sed -i '4a HDFS_NAMENODE_USER=root' stop-dfs.sh
  73. sed -i '5a HDFS_SECONDARYNAMENODE_USER=root' stop-dfs.sh
  74. echo"-------配置stop-dfs.sh文件完成-------"sed -i '2a YARN_RESOURCEMANAGER_USER=root' start-yarn.sh
  75. sed -i '3a HDFS_DATANODE_SECURE_USER=yarn' start-yarn.sh
  76. sed -i '4a YARN_NODEMANAGER_USER=root' start-yarn.sh
  77. echo"-------配置start-yarn.sh文件完成-------"sed -i '2a YARN_RESOURCEMANAGER_USER=root' stop-yarn.sh
  78. sed -i '3a HDFS_DATANODE_SECURE_USER=yarn' stop-yarn.sh
  79. sed -i '4a YARN_NODEMANAGER_USER=root' stop-yarn.sh
  80. echo"-------配置stop-yarn.sh文件完成-------"# 格式化namenode并启动hadoop
  81. hadoop namenode -format
  82. echo"-------格式化namenode完成-------"

执行脚本命令

  1. one 9

11、一键启动hadoop集群

脚本内容

  1. echo"-------hadoop集群启动-------"echo" --------------- 启动 hdfs ---------------"ssh hdp101 "/opt/module/hadoop330/sbin/start-dfs.sh"echo" --------------- 启动 yarn ---------------"ssh hdp102 "/opt/module/hadoop330/sbin/start-yarn.sh"echo" --------------- 启动 historyserver ---------------"ssh hdp102 "/opt/module/hadoop330/bin/mapred --daemon start historyserver"

执行脚本命令

  1. one 10

12、一键停止hadoop集群

脚本内容

  1. echo"-------hadoop集群停止-------"echo" --------------- 关闭 historyserver ---------------"ssh hdp102 "/opt/module/hadoop330/bin/mapred --daemon stop historyserver"echo" --------------- 关闭 yarn ---------------"ssh hdp102 "/opt/module/hadoop330/sbin/stop-yarn.sh"echo" --------------- 关闭 hdfs ---------------"ssh hdp101 "/opt/module/hadoop330/sbin/stop-dfs.sh"

执行脚本命令

  1. one 11

13、查看hadoop集群

  1. jps

四、一键部署脚本集合

脚本内容

  1. #!/bin/bash# 安装工具包install_package(){echo"-------安装工具包-------"
  2. yum install -y expect
  3. yum install -y epel-release
  4. yum install -y psmisc nc net-tools rsyncvim lrzsz ntp libzstd openssl-static tree iotop git dos2unix
  5. }# 统一配置hosts文件modify_syshosts(){echo"-------修改hosts文件-------"forhostsin101102103104105106doecho"192.168.10."$hosts" hdp"$hosts"">> /etc/hosts
  6. done}#修改系统名称 同时修改hosts文件modify_sysname(){echo"-------修改系统名称-------"
  7. hostnamectl --static set-hostname $1}#修改IP静态地址modify_staticip(){echo"-------修改IP静态地址-------"#先检查文件是否已被修改过chk=`cat /etc/sysconfig/network-scripts/ifcfg-ens33 |grep static`if["$chk"==""];then#修改/etc/sysconfig/network-scripts/ifcfg-ens33文件中的dhcpsed -i 's/dhcp/static/' /etc/sysconfig/network-scripts/ifcfg-ens33
  8. echo"IPADDR=192.168.10.$1">> /etc/sysconfig/network-scripts/ifcfg-ens33
  9. echo"NETMASK=255.255.255.0">> /etc/sysconfig/network-scripts/ifcfg-ens33
  10. echo"GATEWAY=192.168.10.2">> /etc/sysconfig/network-scripts/ifcfg-ens33
  11. echo"DNS1=192.168.10.2">> /etc/sysconfig/network-scripts/ifcfg-ens33
  12. echo"PREFIX=24">> /etc/sysconfig/network-scripts/ifcfg-ens33
  13. systemctl restart network
  14. elsesed -i "s/IPADDR=192.168.10.101/IPADDR=192.168.10."$1"/" /etc/sysconfig/network-scripts/ifcfg-ens33
  15. systemctl restart network
  16. fi}#关闭防火墙close_firewalld(){echo"-------关闭防火墙-------"
  17. systemctl stop firewalld
  18. systemctl disable firewalld
  19. }#修改yum源为阿里源modify_yumsource(){echo"-------修改yum源为阿里源-------"# 检查是否已有备份文件 如果有则说明已经做过了if[ -e /etc/yum.repos.d/CentOS-Base.repo_bak ];thenecho"don't nothing!"else#首先安装wget命令
  20. yum install -y wget#修改yumcd /etc/yum.repos.d/
  21. mv CentOS-Base.repo CentOS-Base.repo_bak
  22. wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
  23. yum clean all
  24. yum makecache
  25. ficd /
  26. }# 创建用户并切换用户add_user(){echo"请注意,在创建用户时会先对该用户进行删除操作以确保脚本运行成功, 如已有该用户请慎重输入用户名!"read -p "继续请输入 1 ,停止请输入 2. : " IS_CONTINUE
  27. if[${IS_CONTINUE} -ne 1];thenecho"停止运行该脚本!"exitfiread -p "请输入新增用户用户名 : " username
  28. read -p "请输入新增用户密码 : " password
  29. userdel -r ${username}useradd -d /home/${username}${username}expect -c"
  30. spawn passwd ${username}
  31. expect {
  32. "*yes/no*" {send "yes\r";exp_continue}
  33. "*New password:*" {send "${password}\r";exp_continue}
  34. "*Retype new password:*" {send "${password}\r";exp_continue}
  35. }"echo"配置新增用户root权限"sed -i "93a "${username}" ALL=(ALL) NOPASSWD:ALL" /etc/sudoers
  36. echo"创建software、module文件夹"mkdir /opt/module /opt/software
  37. chown${username}:${username} /opt/module /opt/software
  38. echo"切换用户"su - ${username}}#检查文件的文件夹是否存在不存在就创建1check_soft_folder(){echo"-------检查文件夹是否存在-------"if[ -e /opt/module/$1];thenecho"/opt/module/$1 folder already exists"rm -rf $1return1elsemkdir /opt/module/$1return1fi}#安装JDK 软件目录必须在/opt/software jdk目录命名为jdk8setup_jdk(){echo"-------安装JDK并配置环境变量-------"#检查JDK是否已经安装过
  39. check_soft_folder jdk8
  40. if[$?==1];then#在opt文件夹下搜索jdk的tar.gz文件jdkName=`ls /opt/software/ |grep jdk*`#将文件解压到对应的soft文件夹下tar -zxvf /opt/software/$jdkName -C /opt/module/jdk8 --strip-components 1#配置/etc/profile文件sudotouch /etc/profile.d/my_env.sh
  41. echo"配置jdk环境变量"echo"">> /etc/profile.d/my_env.sh
  42. echo"#java environment">> /etc/profile.d/my_env.sh
  43. echo"export JAVA_HOME=/opt/module/jdk8">> /etc/profile.d/my_env.sh
  44. echo"export CLASSPATH=.:\${JAVA_HOME}/jre/lib/rt.jar:\${JAVA_HOME}/lib/dt.jar:\${JAVA_HOME}/lib/tools.jar">> /etc/profile.d/my_env.sh
  45. echo"export PATH=\$PATH:\${JAVA_HOME}/bin">> /etc/profile.d/my_env.sh
  46. fi}#安装Hadoop 软件目录必须在/opt/software hadoop目录命名为hadoop330setup_hadoop(){echo"-------安装Hadoop并配置环境变量-------"#检查JDK是否已经安装过
  47. check_soft_folder hadoop330
  48. if[$?==1];then#在opt文件夹下搜索Hadoop的tar.gz文件hadoopName=`ls /opt/software/ |grep hadoop*`#将文件解压到对应的soft文件夹下tar -zxvf /opt/software/$hadoopName -C /opt/module/hadoop330 --strip-components 1#配置/etc/profile.d/my_env.sh文件echo"配置hadoop环境变量"echo"">> /etc/profile.d/my_env.sh
  49. echo"#hadoop environment">> /etc/profile.d/my_env.sh
  50. echo"export HADOOP_HOME=/opt/module/hadoop330">> /etc/profile.d/my_env.sh
  51. echo"export PATH=\$PATH:\${HADOOP_HOME}/bin">> /etc/profile.d/my_env.sh
  52. echo"export PATH=\$PATH:\${HADOOP_HOME}/sbin">> /etc/profile.d/my_env.sh
  53. fi}IP_LIST=(
  54. hdp101
  55. hdp102
  56. hdp103
  57. )# 生成ssh密钥,用于免密登录create_ssh(){echo"-------免密登录-------"if[! -f ~/.ssh/id_rsa ];thenecho"-------生成ssh密钥-------"
  58. ssh-keygen -t rsa
  59. expect -c"
  60. expect {
  61. "*.ssh/id_rsa*" {send "\r";exp_continue}
  62. "*empty for no passphrase:*" {send "\r";exp_continue}
  63. "*fingerprint is:*" {send "\r";exp_continue}
  64. }"echo"-------分发密钥-------"forhostin hdp101 hdp102 hdp103
  65. do
  66. ssh-copy-id $hostdoneelseecho"-------id_rsa已存在,直接分发-------"forhostin hdp101 hdp102 hdp103
  67. do
  68. ssh-copy-id $hostdonefi}# hadoop配置脚本hadoop_config(){cd /opt/module/hadoop330/etc/hadoop
  69. # 配置hadoop-env.sh文件sed -i '25c export JAVA_HOME=/opt/module/jdk8' hadoop-env.sh
  70. echo"-------配置hadoop-env.sh文件完成------"# 配置core-site.xml文件 root是用户名,可更改sed -i '19a <property>' core-site.xml
  71. sed -i '20a <name>fs.defaultFS</name>' core-site.xml
  72. sed -i '21a <value>hdfs://hdp101:8020</value>' core-site.xml
  73. sed -i '22a </property>' core-site.xml
  74. sed -i '23a <property>' core-site.xml
  75. sed -i '24a <name>hadoop.data.dir</name>' core-site.xml
  76. sed -i '25a <value>/opt/module/hadoop330/data</value>' core-site.xml
  77. sed -i '26a </property>' core-site.xml
  78. sed -i '27a <property>' core-site.xml
  79. sed -i '28a <name>hadoop.proxyuser.root.groups</name>' core-site.xml
  80. sed -i '29a <value>*</value>' core-site.xml
  81. sed -i '30a </property>' core-site.xml
  82. sed -i '31a <property>' core-site.xml
  83. sed -i '32a <name>hadoop.proxyuser.root.hosts</name>' core-site.xml
  84. sed -i '33a <value>*</value>' core-site.xml
  85. sed -i '34a </property>' core-site.xml
  86. echo"-------配置core-site.xml文件完成-------"# 配置hdfs-site.xml文件sed -i '19a <property>' hdfs-site.xml
  87. sed -i '20a <name>dfs.namenode.secondary.http-address</name>' hdfs-site.xml
  88. sed -i '21a <value>hdp103:9868</value>' hdfs-site.xml
  89. sed -i '22a </property>' hdfs-site.xml
  90. sed -i '23a <property>' hdfs-site.xml
  91. sed -i '24a <name>dfs.namenode.name.dir</name>' hdfs-site.xml
  92. sed -i '25a <value>file://${hadoop.data.dir}/name</value>' hdfs-site.xml
  93. sed -i '26a </property>' hdfs-site.xml
  94. sed -i '27a <property>' hdfs-site.xml
  95. sed -i '28a <name>dfs.datanode.data.dir</name>' hdfs-site.xml
  96. sed -i '29a <value>file://${hadoop.data.dir}/data</value>' hdfs-site.xml
  97. sed -i '30a </property>' hdfs-site.xml
  98. sed -i '31a <property>' hdfs-site.xml
  99. sed -i '32a <name>dfs.namenode.checkpoint.dir</name>' hdfs-site.xml
  100. sed -i '33a <value>file://${hadoop.data.dir}/namesecondary</value>' hdfs-site.xml
  101. sed -i '34a </property>' hdfs-site.xml
  102. sed -i '35a <property>' hdfs-site.xml
  103. sed -i '36a <name>dfs.client.datanode-restart.timeout</name>' hdfs-site.xml
  104. sed -i '37a <value>30</value>' hdfs-site.xml
  105. sed -i '38a </property>' hdfs-site.xml
  106. sed -i '39a <property>' hdfs-site.xml
  107. sed -i '40a <name>dfs.namenode.http-address</name>' hdfs-site.xml
  108. sed -i '41a <value>hadoop101:9870</value>' hdfs-site.xml
  109. sed -i '42a </property>' hdfs-site.xml
  110. echo"-------配置hdfs-site.xml文件完成-------"# 配置yarn-site.xml文件sed -i '18a <property>' yarn-site.xml
  111. sed -i '19a <name>yarn.resourcemanager.hostname</name>' yarn-site.xml
  112. sed -i '20a <value>hdp102</value>' yarn-site.xml
  113. sed -i '21a </property>' yarn-site.xml
  114. sed -i '22a <property>' yarn-site.xml
  115. sed -i '23a <name>yarn.nodemanager.aux-services</name>' yarn-site.xml
  116. sed -i '24a <value>mapreduce_shuffle</value>' yarn-site.xml
  117. sed -i '25a </property>' yarn-site.xml
  118. sed -i '26a <property>' yarn-site.xml
  119. sed -i '27a <name>yarn.nodemanager.env-whitelist</name>' yarn-site.xml
  120. sed -i '28a <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>' yarn-site.xml
  121. sed -i '29a </property>' yarn-site.xml
  122. echo"-------配置yarn-site.xml文件完成-------"# 配置mapred-site.xmlsed -i '20a <property>' mapred-site.xml
  123. sed -i '21a <name>mapreduce.framework.name</name>' mapred-site.xml
  124. sed -i '22a <value>yarn</value>' mapred-site.xml
  125. sed -i '23a </property>' mapred-site.xml
  126. echo"-------配置mapred-site.xml文件完成-------"# 配置workerssed -i '2a hdp101' workers
  127. sed -i '3a hdp102' workers
  128. sed -i '4a hdp103' workers
  129. echo"-------配置workers文件完成-------"# 配置hadoop-env.shsed -i '26a export HDFS_NAMENODE_USER=root' hadoop-env.sh
  130. sed -i '27a export HDFS_SECONDARYNAMENODE_USER=root' hadoop-env.sh
  131. sed -i '28a export HDFS_DATANODE_USER=root' hadoop-env.sh
  132. echo"-------配置hadoop-env.sh文件完成-------"cd /opt/module/hadoop330/sbin
  133. sed -i '2a HDFS_DATANODE_USER=root' start-dfs.sh
  134. sed -i '3a HDFS_DATANODE_SECURE_USER=hdfs' start-dfs.sh
  135. sed -i '4a HDFS_NAMENODE_USER=root' start-dfs.sh
  136. sed -i '5a HDFS_SECONDARYNAMENODE_USER=root' start-dfs.sh
  137. echo"-------配置start-dfs.sh文件完成-------"sed -i '2a HDFS_DATANODE_USER=root' stop-dfs.sh
  138. sed -i '3a HDFS_DATANODE_SECURE_USER=hdfs' stop-dfs.sh
  139. sed -i '4a HDFS_NAMENODE_USER=root' stop-dfs.sh
  140. sed -i '5a HDFS_SECONDARYNAMENODE_USER=root' stop-dfs.sh
  141. echo"-------配置stop-dfs.sh文件完成-------"sed -i '2a YARN_RESOURCEMANAGER_USER=root' start-yarn.sh
  142. sed -i '3a HDFS_DATANODE_SECURE_USER=yarn' start-yarn.sh
  143. sed -i '4a YARN_NODEMANAGER_USER=root' start-yarn.sh
  144. echo"-------配置start-yarn.sh文件完成-------"sed -i '2a YARN_RESOURCEMANAGER_USER=root' stop-yarn.sh
  145. sed -i '3a HDFS_DATANODE_SECURE_USER=yarn' stop-yarn.sh
  146. sed -i '4a YARN_NODEMANAGER_USER=root' stop-yarn.sh
  147. echo"-------配置stop-yarn.sh文件完成-------"# 格式化namenode并启动hadoop
  148. hadoop namenode -format
  149. echo"-------格式化namenode完成-------"}# hadoop集群启动hadoop_start(){echo"-------hadoop集群启动-------"echo" --------------- 启动 hdfs ---------------"ssh hdp101 "/opt/module/hadoop330/sbin/start-dfs.sh"echo" --------------- 启动 yarn ---------------"ssh hdp102 "/opt/module/hadoop330/sbin/start-yarn.sh"echo" --------------- 启动 historyserver ---------------"ssh hdp102 "/opt/module/hadoop330/bin/mapred --daemon start historyserver"}# hadoop集群停止hadoop_stop(){echo"-------hadoop集群停止-------"echo" --------------- 关闭 historyserver ---------------"ssh hdp102 "/opt/module/hadoop330/bin/mapred --daemon stop historyserver"echo" --------------- 关闭 yarn ---------------"ssh hdp102 "/opt/module/hadoop330/sbin/stop-yarn.sh"echo" --------------- 关闭 hdfs ---------------"ssh hdp101 "/opt/module/hadoop330/sbin/stop-dfs.sh"}# 分发脚本xsync(){# 获取输入参数个数,如果没有参数,直接退出pcount=$#if((pcount==0));thenecho no args...;exit;fi# 获取文件名称pname=$1fname=`basename $pname`echofname=$fname# 获取上级目录到绝对路径pdir=`cd -P $(dirname $pname);pwd`echopdir=$pdir# 获取当前用户名称user=`whoami`# 循环for((host=2; host<=3; host++));doecho$pdir/$fname$user@hdp10$host:$pdirecho==================hdp10$host==================rsync -rvl $pdir/$fname$user@hdp10$host:$pdirdone#Note:这里的slave对应自己主机名,需要做相应修改。另外,for循环中的host的边界值}#安装mysql5.7setup_mysql(){#检查linux的mariadb是否卸载 如果没有说明没有安装过mysqlmdb=`rpm -qa |grep mariadb`if["$mdb"!=""];thenrpm -e --nodeps $mdbcd /opt/
  150. wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
  151. yum -y install mysql57-community-release-el7-10.noarch.rpm
  152. yum -y install mysql-community-server
  153. #修改/etc/my.cnf文件解决中文乱码sed -i '/socket/a character-set-server=utf8' /etc/my.cnf
  154. echo"[client]">> /etc/my.cnf
  155. echo"default-character-set=utf8">> /etc/my.cnf
  156. echo"[mysql]">> /etc/my.cnf
  157. echo"default-character-set=utf8">> /etc/my.cnf
  158. systemctl start mysqld.service
  159. #获取临时密码pwdinfo=`grep"password" /var/log/mysqld.log|grep -wF "temporary password"`passwd=${pwdinfo#*localhost:}passwd=$(echo $passwd)#执行修改密码语句
  160. mysql -uroot -p$passwd --connect-expired-password -e "set global validate_password_policy=0"
  161. mysql -uroot -p$passwd --connect-expired-password -e "set global validate_password_length=1"
  162. mysql -uroot -p$passwd --connect-expired-password -e "ALTER USER 'root'@'localhost' IDENTIFIED BY 'okok'"#修改远程登录
  163. mysql -uroot -pokok -e "GRANT ALL PRIVILEGES ON *.* TO root@'%' IDENTIFIED BY 'okok'"
  164. mysql -uroot -pokok -e "flush privileges"#重启服务
  165. systemctl restart mysqld.service
  166. fi}#根据用户的选择进行对应的安装custom_option(){case$1in0)
  167. install_package
  168. ;;1)
  169. add_user
  170. ;;2)
  171. modify_sysname $2$3
  172. modify_staticip $3;;3)
  173. close_firewalld
  174. ;;4)
  175. modify_yumsource
  176. ;;5)
  177. setup_jdk
  178. ;;6)
  179. setup_hadoop
  180. ;;7)
  181. setup_mysql
  182. ;;8)
  183. create_ssh
  184. ;;9)
  185. hadoop_config
  186. ;;10)
  187. hadoop_start
  188. ;;11)
  189. hadoop_stop
  190. ;;12)
  191. xsync
  192. ;;98)
  193. install_package
  194. modify_sysname $2$3
  195. modify_staticip $3
  196. modify_syshosts
  197. close_firewalld
  198. ;;99)
  199. setup_jdk
  200. setup_hadoop
  201. hadoop_config
  202. ;;
  203. *)echo"please option 1~12、98、99"esac}#规定$1用户安装软件选择[] $2用户传入必须是系统的名称(hdp101~hdp103) $3用户传入必须是IP地址(101~103)
  204. custom_option $1$2$3

执行脚本命令

  1. # 不同命令0:安装工具包
  2. 1:新增用户
  3. 2:修改主机名与ip
  4. 3:关闭防火墙
  5. 4:配置yum
  6. 5:安装jdk
  7. 6:安装hadoop
  8. 7:安装mysql
  9. 8:设置免密
  10. 9:配置hadoop文件
  11. 10:启动hadoop集群
  12. 11:关闭hadoop集群
  13. 12xsync同步文件
  14. 98:从安装工具包到关闭防火墙
  15. 99:安装jdkhadoop、配置hadoop
  16. one [0~12|98|99] hdp101~hdp103 101~103


本文转载自: https://blog.csdn.net/m0_37172770/article/details/126452824
版权归原作者 纯码农 所有, 如有侵权,请联系我们删除。

“【大数据】搭建Hadoop集群(附一键部署脚本)”的评论:

还没有评论