我正在参加「掘金·启航计划」
介绍一下:
本文主要内容是,在 centos 系统上,安装 jdk 和 hadoop,以动手实践为主要内容。
背景知识
CentOS
CentOS是免费的、开源的、可以重新分发的开源操作系统 ,CentOS(Community Enterprise Operating System,中文意思是社区企业操作系统)是Linux发行版之一。
JDK
JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。
Apache Hadoop软件库是一个框架,该框架允许使用简单的编程模型跨计算机集群对大型数据集进行分布式处理。它旨在从单个服务器扩展到数千台机器,每台机器都提供本地计算和存储。Hadoop软件库并不是依靠硬件来提供高可用性,而是通过检测和处理应用程序层的故障,从而在容易出现故障的计算机集群的顶部提供高可用性的服务。
一、环境装备
-
ssh 远程登入服务器
简单说,SSH是一种网络协议,用于计算机之间的加密登录。
SSH主要用于远程登录。假定你要以用户名root,登录远程主机host,只要一条简单命令就可以了。
ssh root@host
-
修改主机名称为master
hostnamectl set-hostname master
-
断开连接再重连,查看配置是否生效
hostname
-
配置SSH免密登录
a. 执行以下命令,创建公钥和私钥。
ssh-keygen -t rsa
b. 执行以下命令,将公钥添加到authorized_keys文件中。
cd ~/.ssh cat id_rsa.pub >> authorized_keys
-
创建并进入,用来存放软件和安装包的目录
mkdir -p /usr/local/software && cd /usr/local/software
二、安装JDK
-
执行以下命令,下载JDK1.8安装包。
wget https://download.java.net/openjdk/jdk8u41/ri/openjdk-8u41-b04-linux-x64-14_jan_2020.tar.gz
-
执行以下命令,解压下载的JDK1.8安装包。
tar -zxvf openjdk-8u41-b04-linux-x64-14_jan_2020.tar.gz
-
执行以下命令,配置Java环境变量。
echo 'export JAVA_HOME=/usr/local/software/java-se-8u41-ri' >> /etc/profile echo 'export PATH=$PATH:$JAVA_HOME/bin' >> /etc/profile source /etc/profile
-
执行以下命令,查看Java是否成功安装。
java -version
如果返回以下信息,则表示安装成功。
openjdk version "1.8.0_41" OpenJDK Runtime Environment (build 1.8.0_41-b04) OpenJDK 64-Bit Server VM (build 25.40-b25, mixed mode)
三、安装单机 Hadoop
Hadoop 默认模式为非分布式模式(本地模式),无需进行其他配置即可运行。非分布式即单 Java 进程,方便进行调试。
-
执行以下命令,下载Hadoop安装包。
这里使用的是北京外国语大学开源软件镜像站
wget --no-check-certificate https://mirrors.bfsu.edu.cn/apache/hadoop/common/hadoop-3.2.3/hadoop-3.2.3.tar.gz
-
执行以下命令,解压Hadoop安装包至/usr/local/software/。
tar -zxvf hadoop-3.2.3.tar.gz -C /usr/local/software/
-
执行以下命令,配置Hadoop环境变量。
echo 'export HADOOP_HOME=/usr/local/software/hadoop-3.2.3/' >> /etc/profile echo 'export PATH=$PATH:$HADOOP_HOME/bin' >> /etc/profile echo 'export PATH=$PATH:$HADOOP_HOME/sbin' >> /etc/profile source /etc/profile
-
执行以下命令,修改配置文件yarn-env.sh和hadoop-env.sh。
echo "export JAVA_HOME=/usr/local/software/java-se-8u41-ri" >> /usr/local/software/hadoop-3.2.3/etc/hadoop/yarn-env.sh echo "export JAVA_HOME=/usr/local/software/java-se-8u41-ri" >> /usr/local/software/hadoop-3.2.3/etc/hadoop/hadoop-env.sh
-
执行以下命令,测试Hadoop是否安装成功。
hadoop version
如果返回以下信息,则表示安装成功。
Hadoop 3.2.3 Source code repository https://github.com/apache/hadoop -r abe5358143720085498613d399be3bbf01e0f131 Compiled by ubuntu on 2022-03-20T01:18Z Compiled with protoc 2.5.0 From source with checksum 39bb14faec14b3aa25388a6d7c345fe8 This command was run using /usr/software/hadoop-3.2.3/share/hadoop/common/hadoop-common-3.2.3.jar
至此安装单机 Hadoop 已完成
Hadoop 自带了一些测试例子,运行 Grep 实例检测 Haoop 是否安装成功
-
进入 Hadoop 安装目录,创建 input 用来存放数据
cd /usr/local/software/hadoop-3.2.3 mkdir input
-
复制配置文件
cp ./etc/hadoop/*.xml ./input
-
运行 Grep 实例测
hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.3.jar grep ./input ./output 'config[a-z.]+'
output 输出目录 (不要自己创建、hadoop源码中会判断这个文件是否存在、存在的话会报异常)
'config[a-z.]+'正则表达式 表示以 config 开头所有匹配项,可无限累加
-
查看运行结果
cat ./output/*
结果如下:
19 configuration 4 configuration.xsl 3 configured 2 configuration.
四、 Hadoop 伪分布式安装
Hadoop 可以在单节点上以伪分布式的方式运行,Hadoop 进程以分离的 Java 进程来运行,节点既作为 NameNode 也作为 DataNode,同时,读取的是 HDFS 中的文件。
Hadoop 伪分布式配置
- 修改Hadoop配置文件 core-site.xml。
vi /usr/local/software/hadoop-3.2.3/etc/hadoop/core-site.xml
- 在节点内插入如下内容。
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/software/hadoop-3.2.3/tmp</value>
<description>location to store temporary files</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
- 修改Hadoop配置文件 hdfs-site.xml。
vi /usr/local/software/hadoop-3.2.3/etc/hadoop/hdfs-site.xml
- 在节点内插入如下内容。
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/software/hadoop-3.2.3/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/software/hadoop-3.2.3/tmp/dfs/data</value>
</property>
vi 操作: 输入 i 进入编辑模式, 按 Esc 键退出编辑模式,同时按住 shift + : ,输入 :wq 保存退出。
启动Hadoop
- 执行以下命令,初始化 namenode 。
hadoop namenode -format
- 执行以下命令,启动Hadoop。
start-all.sh
此时会报错,报错信息
```
Starting namenodes on [localhost]
ERROR: Attempting to operate on hdfs namenode as root
ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting operation.
Starting datanodes
ERROR: Attempting to operate on hdfs datanode as root
ERROR: but there is no HDFS_DATANODE_USER defined. Aborting operation.
Starting secondary namenodes [iZuf6275hb357kxnfxi97aZ]
ERROR: Attempting to operate on hdfs secondarynamenode as root
ERROR: but there is no HDFS_SECONDARYNAMENODE_USER defined. Aborting operation.
Starting resourcemanager
ERROR: Attempting to operate on yarn resourcemanager as root
ERROR: but there is no YARN_RESOURCEMANAGER_USER defined. Aborting operation.
Starting nodemanagers
ERROR: Attempting to operate on yarn nodemanager as root
ERROR: but there is no YARN_NODEMANAGER_USER defined. Aborting operation.
```
以上报错是因为缺少用户定义造成的,所以分别编辑开始和关闭脚本
-
在 start-dfs.sh,stop-dfs.sh 两个文件顶部添加以下参数
vi /usr/local/software/hadoop-3.2.3/sbin/start-dfs.sh vi /usr/local/software/hadoop-3.2.3/sbin/stop-dfs.sh
添加下列内容
HDFS_DATANODE_USER=root HADOOP_SECURE_DN_USER=hdfs HDFS_NAMENODE_USER=root HDFS_SECONDARYNAMENODE_USER=root
-
start-yarn.sh,stop-yarn.sh 顶部也需添加以下内容
vi /usr/local/software/hadoop-3.2.3/sbin/start-yarn.sh vi /usr/local/software/hadoop-3.2.3/sbin/stop-yarn.sh
添加下列内容
YARN_RESOURCEMANAGER_USER=root HADOOP_SECURE_DN_USER=yarn YARN_NODEMANAGER_USER=root
-
启动Hadoop
start-all.sh
-
启动成功后,执行以下命令,查看已成功启动的进程。
jps
进程如下
22471 NodeManager 22344 ResourceManager 22826 Jps 21740 NameNode 21868 DataNode 22092 SecondaryNameNode
-
打开浏览器访问
http://localhost:8088/
和http://localhost:9870
,显示如下界面则表示Hadoop伪分布式环境搭建完成。