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地址替换等。实现批量部署,自动管控等。