← 返回首页
Hadoop基础教程(九)
发表时间:2023-06-17 16:26:16
hadoop-3.1.3 shell脚本自动安装

本脚本实现了hadoop软件的下载、关闭防火墙、自动解压缩、自动配置相关配置文件以及允许root登录hadoop,启动HDFS后,查看进程。

1.脚本如下:

#!/bin/bash

#默认已经将hadoop-3.1.3.tar.gz下载后放到/root/tools目录下
cd /root/tools
#关闭防火墙
systemctl stop firewalld.service
firewall-cmd --state
systemctl disable firewalld.service

#解压缩安装包
tar -zxvf hadoop-3.1.3.tar.gz -C /usr/local
mv /usr/local/hadoop-3.1.3/ /usr/local/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 #实训平台不需要 本地需要

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

#修改hadood的配置文件
cd /usr/local/hadoop3.1/etc/hadoop/
echo 'export JAVA_HOME=/usr/local/jdk/jdk1.8.0_271' >>hadoop-env.sh
echo 'export JAVA_HOME=/usr/local/jdk/jdk1.8.0_271' >>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.defaultFS</name>
         <!--集群配置是这里要配置主节点的主机别名,要在/etc/hosts文件中记录别名和ip地址之间的关系-->
        <value>hdfs://hadoop-master:9000</value>
     </property>
     <property>  
        <name>fs.default.name</name>  
        <value>hdfs://hadoop-master:9000</value>  
        <description>HDFS的URI,文件系统://namenode标识:端口号</description>  
    </property>  
    <property>  
        <name>hadoop.tmp.dir</name>  
        <value>/usr/hadoop/tmp</value>  
        <description>namenode上本地的hadoop临时文件夹</description>  
    </property>
    <!--设置代理用户root访问的主机和组-->
    <property>
        <name>hadoop.proxyuser.root.hosts</name>
        <value>*</value>
    </property>
    <property>
        <name>hadoop.proxyuser.root.groups</name>
        <value>*</value>
    </property>
    <property>
        <name>hadoop.proxyuser.root.users</name>
        <value>*</value>
    </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>
    <!--修改hdfs-webui使用默认的50070端口-->
    <property>
       <name>dfs.namenode.http-address</name>
       <value>0.0.0.0:50070</value>
    </property>  
    <property>  
        <name>dfs.data.dir</name>  
        <value>/usr/hadoop/hdfs/data</value>  
        <description>datanode上数据块的物理存储位置</description>  
    </property>  
    <property>  
        <name>dfs.replication</name>  
        <value>3</value>  
    </property>
    <!--关闭权限校验机制-->
    <property>  
      <name>dfs.permissions.enabled</name>  
      <value>false</value>  
    </property>  
</configuration> 
EOF


cat >>mapred-site.xml <<EOF
<configuration>
   <property>
      <name>mapreduce.framework.name</name>
     <value>yarn</value>
   </property>
   <property>
      <name>mapreduce.application.classpath</name>
<value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*</value>
    </property>
    <property>
       <name>mapreduce.jobhistory.address</name>
       <value>hadoop-master:10020</value>
   </property>
   <property>
      <name>mapreduce.jobhistory.webapp.address</name>
      <value>hadoop-master:19888</value>
    </property>
    <property>
      <name>yarn.app.mapreduce.am.env</name>
      <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
    </property>
    <property>
      <name>mapreduce.map.env</name>
      <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
    </property>
    <property>
      <name>mapreduce.reduce.env</name>
      <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</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>  
            <!--服务器ip地址根据个人情况修改-->
            <value>192.168.3.177:8099</value>  
            <description>这个地址是mr管理界面的</description>  
    </property>
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>hadoop-master</value>
    </property>
    <property>
        <!--解决内存不足问题因为yarn的虚拟内存检查模式太过于霸道-->
        <name>yarn.nodemanager.vmem-check-enabled</name>
        <value>false</value>
    </property>
    <property>
       <name>yarn.nodemanager.vmem-pmem-ratio</name>
       <value>15.5</value>
    </property>  
</configuration>  
EOF

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


#格式化节点
hadoop namenode -format

cd /usr/local/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

测试HDFS页面

http://192.168.3.177:9870/

测试YARN页面

http://192.168.3.177:8099/

2.修改默认端口号

Hadoop2.x的namenode界面访问端口默认是:50070 Hadoop3.x的namenode界面访问端口默认是:9870

我们可以通过修改hdfs-site.xml中dfs.namenode.http-address参数来修改hadoop3.x的默认端口号:

<property>
   <name>dfs.namenode.http-address</name>
   <value>0.0.0.0:50070</value>
</property>