Ubuntu22虚拟机部署Hadoop环境

环境

步骤

安装ssh

使用root权限。

1
sudo -i

更新软件包列表。

1
apt-get update

安装OpenSSH服务器,其中openssh-server是 OpenSSH 服务器的包名,它提供了 SSH 服务,允许你通过 SSH 协议远程连接到该系统。

1
apt-get install openssh-server

检查是否安装成功。执行 ps -e | grep ssh会列出所有与 SSH 相关的进程。运行结果中,sshd 是 SSH 服务守护进程,表示 OpenSSH 服务器正在运行。

1
ps -e|grep ssh
图1

安装pdsh

pdsh是一个用于并行执行命令的工具,它可以在多台机器上同时执行相同的命令,非常适合在集群或多个远程主机上执行批量操作。

1
apt-get install pdsh

修改/etc/profile:

1
2
cd /etc
vim profile

在该文件增加以下一行代码,设置SSH为pdsh远程命令的执行方式。

1
export PDSH_RCMD_TYPE=ssh
图2

配置ssh密钥

生成一对 RSA 类型的 SSH 密钥,并且设置一个空的密码短语(即不使用密码)。

1
ssh-keygen -t rsa -P ""
图3

可以看到密钥这些保存的位置在/root下面,跳转到/root目录下,输入ls -a可以看到.ssh文件

图4

进入.ssh文件夹可以看到id_rsa和id_rsa.pub两个文件,前者保存着私钥,后者保存着公钥。

在.ssh文件夹中执行以下命令,这条命令将本地的 SSH 公钥 (id_rsa.pub) 添加到远程服务器上的authorized_keys文件中,从而允许使用对应的私钥进行 SSH 无密码登录。:

1
cat id_rsa.pub >>authorized_keys
图5

测试SSH 服务是否正常工作。第一次连接会询问是否确定继续连接,输入yes就行了。

1
ssh localhost
图6

安装Java 8

1
apt-get install openjdk-8-jdk

检查安装目录,如果是在根目录下安装,那么JAVA HOME路径应该是/usr/lib/jvm/java-1.8.0-openjdk-amd64,这个后面会用得到。

1
2
cd /usr/lib/jvm/
ls

设置java环境变量。

1
2
3
4
vim ~/.bashrc
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64
export PATH=$PATH:$JAVA_HOME/bin
source ~/.bashrc

通过echo $JAVA_HOME命令来检查环境变量是否设置正确,如果设置正确将会返回路径。

下载Hadoop

以下命令下载并解压了hadoop3.3.6,并将解压后的文件夹重命名为hadoop。我下载的路径是/home/Hadoop,这个路径后面用得到。

1
2
3
4
5
cd /home
mkdir Hadoop
wget https://downloads.apache.org/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gz
tar -xzf hadoop-3.3.6.tar.gz
mv hadoop-3.3.6 hadoop

执行完以上命令后应该能在/home/Hadoop/hadoop路径下看到以下文件。

图8

配置Hadoop文件

进入/home/Hadoop/hadoop/etc/hadoop目录,对这个目录下的一些文件进行配置。具体代码含义在此不赘述。

配置hadoop-env.sh

使用vim hadoop-env.sh命令修改hadoop-env.sh文件。该文件中大部分都是注释起来的,不用管。可以直接在文件末尾增加以下内容。

1
2
3
4
5
6
JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
图9

配置core-site.xml

使用vim core-site.xml命令修改/home/Hadoop/hadoop/etc/hadoop目录下的core-site.xml文件。将文件中的configuration修改为以下内容。

1
2
3
4
5
6
7
8
9
10
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/Hadoop/hadooptest/hdata</value>
</property>
</configuration>
图10

配置hdfs-site.xml

与core-site.xml类似,在hdfs-site.xml中修改。注意只修改configuration内的内容。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<configuration>
<property>
<name>dfs.namenode.rpc-address</name>
<value>localhost:9000</value> <!-- 根据实际环境调整 -->
</property>
<property>
<name>dfs.namenode.http-address</name>
<value>localhost:50070</value> <!-- 根据实际环境调整 -->
</property>
<property>
<name>dfs.replication</name>
<value>1</value> <!-- 副本数可根据需求调整 -->
</property>
</configuration>

配置mapred-site.xml

同理。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=/home/Hadoop/hadoop</value>
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=/home/Hadoop/hadoop</value>
</property>
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=/home/Hadoop/hadoop</value>
</property>
</configuration>

配置yarn-site.xml

同理。

1
2
3
4
5
6
7
8
9
10
11
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
</configuration>

配置bash.bashrc文件

进入/etc目录,在该目录下vim bash.bashrc,在这个文件中增加以下配置:

1
2
3
4
5
6
7
export HADOOP_HOME="/home/Hadoop/hadoop"
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
export HADOOP_MAPRED_HOME=${HADOOP_HOME}
export HADOOP_COMMON_HOME=${HADOOP_HOME}
export HADOOP_HDFS_HOME=${HADOOP_HOME}
export YARN_HOME=${HADOOP_HOME}

在修改完后,运行以下代码使其生效。

1
source bash.bashrc

格式化hdfs文件系统

该命令会清空并格式化 Hadoop 的 NameNode,并创建所需的元数据文件。仅在第一次配置或重新初始化文件系统时使用。

1
hdfs namenode -format

启动HDFS

通过以下命令来启动namenode、datanode、secondarynamenode

1
2
3
$HADOOP_HOME/bin/hdfs --daemon start namenode
$HADOOP_HOME/bin/hdfs --daemon start datanode
$HADOOP_HOME/bin/hdfs --daemon start secondarynamenode

启动YARN集群。

1
$HADOOP_HOME/sbin/start-yarn.sh  

可通过http://localhost:8088访问ResourceManager Web UI

图11

可通过http://localhost:50070访问NameNode Web UI

图12

运行 MapReduce 作业

  1. 创建一个测试文件:

    1
    echo -e "hello world\nhello hadoop\nhadoop world" > input.txt

    上传到 HDFS:

    1
    2
    hdfs dfs -mkdir -p /user/ubuntu/input
    hdfs dfs -put input.txt /user/ubuntu/input
  2. 运行 Hadoop 自带的 WordCount 示例

    1
    hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar wordcount /user/ubuntu/input /user/ubuntu/output

    查看输出:

    1
    hdfs dfs -cat /user/ubuntu/output/part-r-00000
  3. 清理数据:

    1
    hdfs dfs -rm -r /user/ubuntu/output