shell自动化部署hadoop伪分布式环境

shell-hadood-

本项目的gitbub地址(个人):https://github.com/miku-lxc/shell-hadood-

主要目录

一、思维框架
二、代码说明
三、项目体会
四、不足之处
五、改进与展望

特点:使用educode在线平台,安装hadoop对相关命令进行研究,实现独立自主的shell脚本的制作,反复测试脚本的可用性以及后续需要改进的方面。

注意事项!!!! 本次使用的hadoop安装包均是以平台提供的,安装包的版本是hadoop-3.1.0.tar.gz,本次项目部署主要以学习脚本编写为主,后续没有添加对应变量,以及条件语句,需要用户自行更改脚本中的安装包名称 或者使用脚本中的安装包进行部署。

本次使用的在线平台:https://www.educoder.net 图片

一、思维框架

1.开发环境准备

配置开发环境是我们学习一门IT技术的第一步,Hadoop是基于Java开发的,所以我们学习Hadoop之前需要在Linux系统中配置Java的开发环境 下载JDK 前往Oracle的官网下载JDK: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 本次在平台上,已有配置相关jdk包,后续本地安装,用户可以使用wget进行下载安装到执行路径,下述同上!!!!

2.hadoop安装

下载Hadoop 官网下载:http://hadoop.apache.org/ 本次平台上已经帮下载(在/opt目录下)。在miku-hadoop脚本中有对应wget下载事例。

二、代码说明

代码主要分为2部分,jdk安装部分和hadoop安装部分

1.miku_jdk:实现了jdk的自动化安装和配置相关环境变量,为hadoop提供必要环境

#!/bin/bash
#       PATH='$JAVA_HOME/bin:$PATH' #注意不能使用cat配EOF追加 会让全局变量PATH生效 有全局变量都不能用
#自动创建jdk
mkdir /app
tar -xvf /opt/jdk-8u171-linux-x64.tar.gz -C /app/ 
cd /app
#上述命令可自行修改 仅作为educode平台的要求目录
ls -l

cat >>/etc/profile <<EOF
JAVA_HOME=/app/jdk1.8.0_171
EOF
path1='CLASSPATH=.:$JAVA_HOME/lib/tools.jar'
path2='PATH=$JAVA_HOME/bin:$PATH' #使用单引号让命令生效
printf "%s\n%s\n" $path1 $path2 >>/etc/profile
echo 'export JAVA_HOME CLASSPATH PATH' >>/etc/profile
# 上面的顺序一定要对

source /etc/profile
java -version



#mkdir -p ~/usr/hadoop
#mkdir -p ~/usr/hadoop/{tmp,hdfs,hdfs/{data,name}}

2.miku-hadoop:实现了hadoop软件的下载、自动解压缩、自动配置相关配置文件以及允许root登录hadoop,最后本次实现进行验证。

#!/bin/bash

#wget -cP /opt http://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-2.7.7/hadoop-2.7.7.tar.gz

cd /opt/
tar -xvf hadoop-3.1.0.tar.gz -C /app
mv /app/hadoop-3.1.0/ /app/hadoop3.1  #这里的文件名一定要注意 在这里踩了很多坑
#设置免密登录
ssh-keygen -t rsa -P ''
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

cat >>/etc/ssh/sshd_config <<EOF
RSAAuthentication yes # 启用 RSA 认证
PubkeyAuthentication yes # 启用公钥私钥配对认证方式
AuthorizedKeysFile %h/.ssh/authorized_keys # 公钥文件路径
EOF

#service ssh restari #实训平台不需要 本地需要

#修改hadood的配置文件
cd /app/hadoop3.1/etc/hadoop/
echo 'export JAVA_HOME=/app/jdk1.8.0_171' >>hadoop-env.sh
echo 'export JAVA_HOME=/app/jdk1.8.0_171' >>yarn-env.sh

#核心配置组建 包括格式和字段的说明 主要添加三个默认的字段name和value 以及description
#以下字段均不能留默认的,在默认后面追加,直接优先去掉 选择用sed按范围去除
#使用nl -ba 文件 来查看编号去定删除范 sed使用如下 -ie.bak 做个备份也可以的 '15,$d'$ 代表结束

#去默认范围
sed -ie '16,$d' core-site.xml
sed -ie '16,$d' hdfs-site.xml
sed -ie '16,$d' mapred-site.xml
sed -ie '15,$d' yarn-site.xml

#进行追加输入
cat >>core-site.xml <<EOF
<configuration>  
     <property>  
        <name>fs.default.name</name>  
        <value>hdfs://localhost:9000</value>  
        <description>HDFS的URI,文件系统://namenode标识:端口号</description>  
    </property>  
    <property>  
        <name>hadoop.tmp.dir</name>  
        <value>/usr/hadoop/tmp</value>  
        <description>namenode上本地的hadoop临时文件夹</description>  
    </property>  
</configuration>  
EOF


cat >>hdfs-site.xml <<EOF
<configuration>  
    <property>  
        <name>dfs.name.dir</name>  
        <value>/usr/hadoop/hdfs/name</value>  
        <description>namenode上存储hdfs名字空间元数据 </description>   
    </property>  
    <property>  
        <name>dfs.data.dir</name>  
        <value>/usr/hadoop/hdfs/data</value>  
        <description>datanode上数据块的物理存储位置</description>  
    </property>  
    <property>  
        <name>dfs.replication</name>  
        <value>1</value>  
    </property>  
</configuration> 
EOF


cat >>mapred-site.xml <<EOF
<configuration>
        <property>
            <name>mapreduce.framework.name</name>
            <value>yarn</value>
        </property>
</configuration>
EOF



cat >>yarn-site.xml <<EOF
<configuration>  
    <property>  
            <name>yarn.nodemanager.aux-services</name>  
            <value>mapreduce_shuffle</value>  
    </property>  
    <property>  
            <name>yarn.resourcemanager.webapp.address</name>  
            <value>192.168.2.10:8099</value>  
            <description>这个地址是mr管理界面的</description>  
    </property>  
</configuration>  
EOF

mkdir -p /usr/hadoop/{tmp,hdfs,hdfs/{data,name}}

#添加变量
echo 'export HADOOP_HOME=/app/hadoop3.1' >>/etc/profile
echo 'PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin' >>/etc/profile
source /etc/profile

hadoop namenode -format

cd /app/hadoop3.1/sbin
# 以下四个文件还应该手动添加# 必须将其全部放到首部位 到顶部 这里暂时没想到追加到文件顶部的方法 
#采用sed 方法进行分段追加 使用sed 1a 在第一行进行追加同时备份
#因为root用户不能启动hadoop要用haddop用户 太过于麻烦直接输入以下指令
sed -ie.bak '1a HDFS_DATANODE_USER=root\nHADOOP_SECURE_DN_USER=hdfs\nHDFS_NAMENODE_USER=root\nHDFS_SECONDARYNAMENODE_USER=root' start-dfs.sh
sed -ie.bak '1a HDFS_DATANODE_USER=root\nHADOOP_SECURE_DN_USER=hdfs\nHDFS_NAMENODE_USER=root\nHDFS_SECONDARYNAMENODE_USER=root' stop-dfs.sh
sed -ie.bak '1a YARN_RESOURCEMANAGER_USER=root\nHADOOP_SECURE_DN_USER=yarn\nYARN_NODEMANAGER_USER=root' start-yarn.sh
sed -ie.bak '1a YARN_RESOURCEMANAGER_USER=root\nHADOOP_SECURE_DN_USER=yarn\nYARN_NODEMANAGER_USER=root' stop-yarn.sh


#cat >>start-dfs.sh <<EOF
#HDFS_DATANODE_USER=root
#HADOOP_SECURE_DN_USER=hdfs
#HDFS_NAMENODE_USER=root
#HDFS_SECONDARYNAMENODE_USER=root
#EOF

#cat >>stop-dfs.sh <<EOF
#HDFS_DATANODE_USER=root
#HADOOP_SECURE_DN_USER=hdfs
#HDFS_NAMENODE_USER=root
#HDFS_SECONDARYNAMENODE_USER=root
#EOF


#cat >>start-yarn.sh <<EOF
#YARN_RESOURCEMANAGER_USER=root
#HADOOP_SECURE_DN_USER=yarn
#YARN_NODEMANAGER_USER=root
#EOF

#cat >>stop-yarn.sh <<EOF
#YARN_RESOURCEMANAGER_USER=root
#HADOOP_SECURE_DN_USER=yarn
#YARN_NODEMANAGER_USER=root
#EOF

# 启动start-dfs 输入jps进行验证
start-dfs.sh
#start-dfs.sh 
jps

三、项目体会

1.实践hadoop的项目部署,并根据hadoop的整个安装,独自实现shell代码的相关构建,为后续的批量部署做必要支持,本次脚本仅为初次版本。

2.对sed文件有了深刻的认知,在脚本的晚上过程中逐步寻找可以实现的脚本,并实践了sed的相关选项以及应用场景。sed -i支持修改文件,其余只是显示作用,并且-i会自创后带e文件,相当于备份。

3.对整个项目实现了构建和测试以及实践,并在本地上测试成功,证明本次项目代码的可用性。

4.通过本次项目实对hadoop有了更加深刻的认知,增加了hadoop的实战能力,独立自主的解决问题的能力量

四、不足之处

没有考虑实现一些用户的交互以及逻辑的判断,只能实现初次安装,不能实现再次复用,没有用相关变量代替本次实验的可变量。

五、改进与展望

应增加必要的逻辑处理,用户交互,让一些可变化的量,实现人工交互的输入,比如自动循环设置ip地址替换等。实现批量部署,自动管控等。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值