02-安装JDK和Hadoop集群

2、安装 JDK 和 Hadoop

2.1 安装 JDK

2.1.1 卸载 JDK

  • 查看 linux 是否已经安装 JDK
# -i ignore 忽略大小写
rpm -qa | grep -i java
  • 如果上个命令执行后有输出,则卸载
sudo rpm -qa | grep -i java | xargs -n1 sudo rpm -e --nodeps

2.1.2 安装 JDK

  • 上传本地压缩包到 /opt/software/ 目录下
  • 解压缩到 /opt/module 目录下
tar zxvf jdk-8u311-linux-x64.tar.gz  -C  /opt/module/
# 命令解释
# -x is for Extraction of Files
# -v is for Verbose display of files extraction/compression on the console when u apply for command
# verbose 中文:唠叨的;冗长的,此处译为会将命令过程输出在 console
# -f is for File
# 不用加 -,如 -zxvf
# zxvf 中的 z 是 gzipped 压缩意思,表明文件存在压缩,需要使用压缩(解压缩或者打包后再压缩),如果目标包只是打包并不存在压缩,则不需要使用z参数,如 tar xvf xxxx.tar
#  -c  Creates a new .tar archive file,若是需要打包文件则用: tar cvf modules.tar /opt/module
# 若是 打包文件时还需要压缩内容,则用:tar cvzf modules.tar.gz /opt/module

2.1.3 配置 JDK 环境变量

# 新建 my_env.sh 文件,我们个人定义的所有环境变量都放到这个文件中
sudo vim /etc/profile.d/my_env.sh
# 重新载入 环境变量文件
source /etc/profile.d/my_env.sh
# 测试是否生效
java -version

2.2 安装 Hadoop

集群部署规划

注意:NameNode 和 SecondaryNameNode 不要安装在同一台服务器。

注意:ResourceManager 也很消耗内存,不要和 NameNode、SecondaryNameNode 配置在同一台机器上。

2.2.1 上传 Hadoop 压缩包到 /opt/software 目录

采用版本 hadoop-3.1.3.tar.gz

2.2.2 解压 Hadoop

tar zxvf hadoop-3.1.3.tar.gz  -C  /opt/module/

2.2.3. 配置 Hadoop 环境变量

sudo vim /etc/profile.d/my_env.sh
# 配置完后,生效一下 
source /etc/profile.d/my_env.sh

添加如下内容:

# HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin

2.2.4 配置 Hadoop Yarn 式集群

一定要先进入目录:cd $HADOOP_HOME/etc/hadoop 才可进行如下操作。

2.2.4.1 核心配置文件

配置 core-site.xml

# 进入到当前 hadoop 安装目录下的配置目录
cd $HADOOP_HOME/etc/hadoop
# 配置 core-site.xml
vim core-site.xml

可以直接清空该文件,然后添加如下内容:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
    <!-- 指定 NameNode 的地址 -->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://bigdata101:8020</value>
    </property>

    <!-- 指定 hadoop 数据的存储目录 -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/module/hadoop-3.1.3/data</value>
    </property>

    <!-- 配置 HDFS 网页登录使用的静态用户为 bigdata -->
    <property>
        <name>hadoop.http.staticuser.user</name>
        <value>bigdata</value>
    </property>

    <!-- 配置该 bigdata(superUser)允许通过代理访问的主机节点 -->
    <property>
        <name>hadoop.proxyuser.bigdata.hosts</name>
        <value>*</value>
    </property>

    <!-- 配置该 bigdata(superUser) 允许通过代理用户所属组 -->
    <property>
        <name>hadoop.proxyuser.bigdata.groups</name>
        <value>*</value>
    </property>

    <!-- 配置该 bigdata(superUser) 允许通过代理的用户-->
    <property>
        <name>hadoop.proxyuser.bigdata.users</name>
        <value>*</value>
    </property>
    
</configuration>

2.2.4.2 HDFS 配置文件

配置 hdfs-site.xml

vim hdfs-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
    <!-- nn web 端访问地址-->
    <property>
        <name>dfs.namenode.http-address</name>
        <value>bigdata101:9870</value>
    </property>

    <!-- 2nn web 端访问地址-->
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>bigdata103:9868</value>
    </property>

    <!-- 测试环境指定 HDFS 副本的数量 1 -->
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>
</configuration>

2.2..4.3 YARN 配置文件

vim yarn-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
    <!-- 指定 MR 走 shuffle -->
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>

    <!-- 指定 ResourceManager 的地址-->
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>bigdata102</value>
    </property>

    <!-- 环境变量的继承 -->
    <property>
        <name>yarn.nodemanager.env-whitelist</name>
        <value>
            JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME
        </value>
    </property>

    <!-- yarn 容器允许分配的最小内存 -->
    <property>
        <name>yarn.scheduler.minimum-allocation-mb</name>
        <value>512</value>
    </property>

    <!-- yarn 容器允许分配的最大内存 -->
    <property>
        <name>yarn.scheduler.maximum-allocation-mb</name>
        <value>4096</value>
    </property>

    <!-- yarn 容器允许管理的物理内存大小 -->
    <property>
        <name>yarn.nodemanager.resource.memory-mb</name>
        <value>4096</value>
    </property>

    <!-- 关闭 yarn 对物理内存和虚拟内存的限制检查 -->
    <property>
        <name>yarn.nodemanager.pmem-check-enabled</name>
        <value>false</value>
    </property>
    <property>
        <name>yarn.nodemanager.vmem-check-enabled</name>
        <value>false</value>
    </property>
</configuration>

2.2.4.4 MapReduce 配置文件

vim mapred-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
    <!-- 指定 MapReduce 程序运行在 Yarn 上 -->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>

2.2.4.5 配置 workers

vim workers

直接删除掉里面默认的 localhost,然后写入如下内容,注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行

bigdata101
bigdata102
bigdata103

2.2.4.6 配置历史服务器

为了查看程序的历史运行情况,需要配置一下历史服务器。具体配置步骤如下:

配置 mapred-site.xml,在该文件里面增加如下配置:

vim mapred-site.xml

	<!-- 历史服务器端地址 -->
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>bigdata101:10020</value>
    </property>

    <!-- 历史服务器web端地址 -->
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>bigdata101:19888</value>
    </property>
    
    <!-- 解决报错 -->
    <property>
        <name>yarn.app.mapreduce.am.env</name>
	<value>HADOOP_MAPRED_HOME=/opt/module/hadoop-3.1.3</value>
    </property>
	
    <!-- 解决报错 -->
    <property>
      <name>mapreduce.map.env</name>
      <value>HADOOP_MAPRED_HOME=/opt/module/hadoop-3.1.3</value>
    </property>
	
    <!-- 解决报错 -->
    <property>
      <name>mapreduce.reduce.env</name>
      <value>HADOOP_MAPRED_HOME=/opt/module/hadoop-3.1.3</value>
    </property>

2.2.4.7 配置日志的聚集

日志聚集概念:应用运行完成以后,将程序运行日志信息上传到HDFS系统上。日志聚集功能好处:可以方便的查看到程序运行详情,方便开发调试。

注意:开启日志聚集功能,需要重新启动 NodeManager 、ResourceManager 和 HistoryManager。

开启日志聚集功能具体步骤如下:

配置 vim yarn-site.xml, 在该文件里面增加如下配置:

	<!-- 开启日志聚集功能 -->
    <property>
        <name>yarn.log-aggregation-enable</name>
        <value>true</value>
    </property>

    <!-- 设置日志聚集服务器地址 -->
    <property>
        <name>yarn.log.server.url</name>
        <value>http://bigdata101:19888/jobhistory/logs</value>
    </property>

    <!-- 设置日志保留时间为 7 天 -->
    <property>
        <name>yarn.log-aggregation.retain-seconds</name>
        <value>604800</value>
    </property>

2.2.4.8 编写 Hadoop 群起脚本

# 先进入 /home/bigdata/bin 目录
cd /home/bigdata/bin/
# 新建 群里脚本文件,写入如下内容
vim myhadoop.sh
#!/bin/bash

if [ $# -lt 1 ]; then
    echo -e "\033[33m No Args Input... \033[0m"
    exit
fi
case $1 in
"start")
    echo -e "\033[32m =================== 启动 Hadoop 集群 =================== \033[0m"

    echo -e "\033[32m --------------- 启动 HDFS --------------- \033[0m"
    ssh bigdata101 "/opt/module/hadoop-3.1.3/sbin/start-dfs.sh"
    echo -e "\033[32m --------------- 启动 Yarn --------------- \033[0m"
    ssh bigdata102 "/opt/module/hadoop-3.1.3/sbin/start-yarn.sh"
    echo -e "\033[32m --------------- 启动 HistoryServer --------------- \033[0m"
    ssh bigdata101 "/opt/module/hadoop-3.1.3/bin/mapred --daemon start historyserver"
    ;;
"stop")
    echo -e "\033[31m =================== 关闭 Hadoop 集群 =================== \033[0m"

    echo -e "\033[31m --------------- 关闭 HistoryServer --------------- \033[0m"
    ssh bigdata101 "/opt/module/hadoop-3.1.3/bin/mapred --daemon stop historyserver"
    echo -e "\033[31m --------------- 关闭 Yarn --------------- \033[0m"
    ssh bigdata102 "/opt/module/hadoop-3.1.3/sbin/stop-yarn.sh"
    echo -e "\033[31m --------------- 关闭 HDFS --------------- \033[0m"
    ssh bigdata101 "/opt/module/hadoop-3.1.3/sbin/stop-dfs.sh"
    ;;
*)
    echo -e "\033[35m Input Args Error... \033[0m"
    ;;
esac

添加执行权限

chmod +x myhadoop.sh

2.2.4.9 分发 Hadoop 到其它节点

xsync /opt/module/hadoop-3.1.3/

2.2.5 启动集群

若是第一次启动集群,则需要在配置了 NameNode 节点的机器上(此处是 bigdata101)执行格式化操作:

(注意格式化之前,一定要先停止上次启动的所有 namenode 和 datanode 进程,然后再删除 data 和 logs 数据)

# 登录 bigdata101 机器
# 进入 hadoop 目录
cd /opt/module/hadoop-3.1.3/
# 执行格式化操作
bin/hdfs namenode -format


正常启动顺序:启动 HDFS -> 启动 YARN -> 启动历史服务器等。

但此处我们使用 群起脚本来一次性启动:

# start/stop 参数
myhadoop.sh start

2.2.5.1 查看 HDFS 的 NameNode 页面

访问 http://bigdata101:9870/

2.2.5.2 查看 SecondaryNameNode

访问 http://bigdata103:9868/status.html

2.2.5.3 查看 YARN 的 ResourceManager

访问 http://bigdata102:8088/cluster

2.2.5.4 查看历史服务器 History

访问 http://bigdata101:19888/jobhistory

2.2.5.4 编写 集群 进程查看脚本

进入 /home/bigdata/bin 目录下

vim jpsall

#!/bin/bash

for host in bigdata101 bigdata102 bigdata103; do
    echo -e "\033[32m =============== $host =============== \033[0m"
    # 过滤到 jps 本身进程 -i 忽略大小写
    ssh $host jps | grep -v -i jps
done

添加执行权限:chmod +x jpsall

执行,查看进程情况:

对比我们一开始规划的 Hadoop 集群搭建架构,可以发现是符合预期的。

2.2.6 执行 WordCount 程序

测试 Hadoop 集群,执行自带的测试用例:

# 进入bigdata101主机, cd /opt/module/hadoop-3.1.3/ 目录
# HDFS 创建目录 /input
hadoop fs -mkdir /input
# 在当前目录下,创建wcinput目录,并编辑 word.txt 文件
mkdir wcinput; cd wcinput; vim word.txt;
# 上传文件到 HDFS /input
hadoop fs -put $HADOOP_HOME/wcinput/word.txt /input
# 执行 wordCount,注意:输出目录 /output 在 hdfs 上必须不存在,若已有,则必须删除
hadoop jar \
share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar \
wordcount /input/word.txt /output

执行 wordCount 任务后,报错如下:

分析其原因:百度搜索了一下原因,类似错误是因为没有配置 java 的软连接,因此你需要如下配置一下即可(注意:三台机器都需要配置):

# 注意:调整 jdk 的目录及版本
sudo ln -s /opt/module/jdk1.8.0_311/bin/java /bin/java

配置完成后,再次执行 wordcount 程序,发现成功了:

posted @ 2022-05-14 23:29  LoremMoon  阅读(65)  评论(0编辑  收藏  举报