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>
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 页面
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 程序,发现成功了:
本文来自博客园,作者:LoremMoon,转载请注明原文链接:https://www.cnblogs.com/hello-cnblogs/p/16271951.html