您现在的位置是:首页 >技术杂谈 >Hadoop-3.2.3集群搭建网站首页技术杂谈

Hadoop-3.2.3集群搭建

高龄码农创业 2024-07-01 11:59:42
简介Hadoop-3.2.3集群搭建

Hadoop-3.2.3集群搭建

一、准备工作

准备三台最小化安装的Linux服务器:(单节点伪集群一台虚拟机即可,hdfs配置副本数设置为1,worker只有一个。)

ipaddresshostname
192.168.116.10hadoop1
192.168.116.20hadoop2
192.168.116.30hadoop3

所有节点推荐最小化安装Centos7.9或Ubuntu2004LTS。(单主机内存需>=4G)
1、配置网络连通性,每台机器配置固定IP地址和DNS等网络信息
2、主机名hostname设置和主机名解析
3、配置时区和时间服务器,确保集群时间同步
4、系统优化,关闭不需要的服务并进行文件系统基本优化
5、添加hadoop用户(使用root用户可跳过,ubuntu下注意adduser和useradd区别,使用adduser)

# adduser hadoop
# su - hadoop

6、配置用户免密钥登录
7、下载Oracle Java8包,解压并配置环境变量

链接:https://pan.baidu.com/s/182pYEdrnETntMDbPsg4rLw?pwd=02aw 
提取码:02aw 

设置Java8环境变量(可将如下内容添加到~/.bashrc里)

export JAVA_HOME=~/jdk1.8.0_321
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/jre/lib:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar
export HADOOP_CLASSPATH=$JAVA_HOME/lib/tools.jar

验证java

$ java -version
java version "1.8.0_321"
Java(TM) SE Runtime Environment (build 1.8.0_321-b07)
Java HotSpot(TM) 64-Bit Server VM (build 25.321-b07, mixed mode)

二、Hadoop配置

1、下载hadoop

链接:https://pan.baidu.com/s/1gIyKxOjfVsxEpxgTIpa8aA?pwd=er4m 
提取码:er4m 

2、解压

 $ tar -zxvf hadoop-3.2.3.tar.gz

3、查看文件属主是否是当前用户

 $ ls -l

如果和当前用户属主不一致修改为当前用户
4、设置Hadoop环境变量(可将如下内容添加到~/.bashrc里),确保路径和用户和实际一致。

export HADOOP_HOME=~/hadoop-3.2.3
export HADOOP_MAPRED_HOME=~/hadoop-3.2.3
export HADOOP_YARN_HOME=~/hadoop-3.2.3
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export HDFS_NAMENODE_USER=hadoop
export HDFS_DATANODE_USER=hadoop
export HDFS_SECONDARYNAMENODE_USER=hadoop
export YARN_RESOURCEMANAGER_USER=hadoop
export YARN_NODEMANAGER_USER=hadoop

使环境变量生效后验证

$ source ~/.bashrc
$ hadoop version

Haoop配置文件都在~/hadoop-3.2.3/etc/hadoop/目录下

$ cd ~/hadoop-3.2.3/etc/hadoop/

几个主要配置文件包括hadoop-env.sh、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml和workers
1、hadoop-env.sh中需要配置一些基础环境变量路径,查看环境变量后填入正确的路径

$ echo $JAVA_HOME
$ echo $HADOOP_HOME
$ vi hadoop-env.sh
export HADOOP_HOME=
export JAVA_HOME=

2、core-site.xml中主要指定了文件系统默认访问地址和端口,以及hdfs文件系统默认目录

<configuration>
<!--hdfs服务地址和端口 -->
<property>
        <name>fs.defaultFS</name>
         <value>hdfs://hadoop1:9000</value>
</property>
<!--hadoop文件系统目录,namenode、secondarynamenode和data默认都在此目录下,默认为/tmp/hadoop-${user.name}-->
<property>
        <name>hadoop.tmp.dir</name>
        <value>/home/hadoop/hadoop-3.2.3</value>
</property>
</configuration>

3、hdfs-site.xml配置主要指定namenode、secondarynamenode节点和服务端口,以及副本数和安全检查。

<configuration>
<!--hdfs namenode的http地址,默认为0.0.0.0:9870 -->
<property>
        <name>dfs.namenode.http-address</name>
         <value>hadoop1:9870</value>
</property>
<!--hdfs secondarynamenode的http地址,默认为0.0.0.0:9868,如需将secondarynamenode放在其他节点,修改主机名即可 -->
<property>
        <name>dfs.namenode.secondary.http-address</name>
         <value>hadoop1:9868</value>
</property>
<!-- HDFS副本数,默认为3,单节点伪集群需设置为1 -->
<property>
        <name>dfs.replication</name>
         <value>3</value>
</property>
<!-- 文件分块大小,默认128MB -->
<property>
 <name>dfs.blocksize</name>
 <value>128m</value>
</property>
<!-- 是否启用hdfs权限检查 ,默认为true开启的,设置为false关闭 -->
<property>
        <name>dfs.permissions.enabled</name>
         <value>false</value>
</property>
</configuration>

4、mapred-site.xml配置主要指定了MR框架以及一些环境变量

<configuration>
<property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
</property>
<property>
        <name>mapreduce.admin.user.env</name>
        <value>HADOOP_MAPRED_HOME=/home/hadoop/hadoop-3.2.3</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>yarn.app.mapreduce.am.env</name>
        <value>HADOOP_MAPRED_HOME=/home/hadoop/hadoop-3.2.3</value>
</property>
</configuration>

5、yarn-site.xml

<configuration>
<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>
<property>
        <name>yarn.resourcemanager.hostname</name>
                <value>hadoop1</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>
<property>
        <name>yarn.nodemanager.vmem-check-enabled</name>
        <value>false</value>
</property>
</configuration>

6、worker配置是所有集群节点,使用主机名或IP地址
$ vi workers

hadoop1
hadoop2
hadoop3

单节点伪集群副本数设置为1,worker只有一个即可。

将hadoop整个目录拷贝到其他节点。

$ scp -r ~/hadoop-3.2.3 hadoop02:~/
$ scp -r ~/hadoop-3.2.3 hadoop03:~/

将配置好的.bashrc文件也拷贝过去。
首先,格式化文件系统
格式化文件系统:

$ hdfs namenode -format

启动HDFS

$ start-dfs.sh

查看服务是否运行

$ jps

正常情况hadoop1节点会看到NameNode、SecondaryNameNode和DataNode,其他两个节点只有DataNode。
hadoop日志输出到$HADOOP_LOG_DIR目录(默认为HADOOP_HOME/logs,可通过配置修改)

NameNode节点web访问地址:http://hadoop1:9870/ (客户端可添加解析直接访问)

创建HDFS文件系统当前用户目录:

$ hdfs dfs -mkdir /user
$ hdfs dfs -mkdir /user/hadoop/
$ hdfs dfs -ls /

测试:

 输入文件拷贝到分布式文件系统:
 创建input文件夹
 $ hdfs dfs -mkdir input
查看
$ hdfs dfs -ls /user/hadoop
上传文件测试
$ hdfs dfs -put ~/hadoop-3.2.3/etc/hadoop/*.xml input
查看
$ hdfs dfs -ls /user/lzu_cg/input
查看块状态报告:
$ hdfs dfsadmin -report

启动ResourceManager和NodeManager服务进程:

$ start-yarn.sh
查看
$ jps

hadoop1节点会多出ResourceManager和NodeManager进程,其他工作节点会多出NodeManager
浏览器访问地址:http://hadoop1:8088/
启动MapReduce JobHistory Server历史服务器和timelineserver时间线服务器:

$ mapred --daemon start historyserver
$ yarn --daemon start timelineserver
web访问地址 - http://hadoop1:19888/

测试运行pi程序:
先进入到程序示例.jar包所在的目录,然后运行MR程序:

$ cd ~/hadoop-3.2.3/share/hadoop/mapreduce/
$ hadoop jar hadoop-mapreduce-examples-3.2.3.jar pi 10 20

运行成功即可。

关闭集群服务:

$ stop-yarn.sh
$ stop-dfs.sh
$ mapred --daemon stop historyserver
$ yarn --daemon stop timelineserver

如需启动集群,先启动dfs,再启动yarn

$ start-dfs.sh
$ start-yarn.sh

停止时先停止yarn再停止dfs

$ stop-yarn.sh
$ stop-dfs.sh

HDFS 常用 shell 命令

1. 显示当前目录结构

# 显示当前目录结构
hadoop fs -ls  <path>
# 递归显示当前目录结构
hadoop fs -ls  -R  <path>
# 显示根目录下内容
hadoop fs -ls  /

2. 创建目录

# 创建目录
hadoop fs -mkdir  <path> 
# 递归创建目录
hadoop fs -mkdir -p  <path>  

3. 删除操作

# 删除文件
hadoop fs -rm  <path>
# 递归删除目录和文件
hadoop fs -rm -R  <path> 

4. 从本地加载文件到 HDFS

# 二选一执行即可
hadoop fs -put  [localsrc] [dst] 
hadoop fs - copyFromLocal [localsrc] [dst] 

5. 从 HDFS 导出文件到本地

# 二选一执行即可
hadoop fs -get  [dst] [localsrc] 
hadoop fs -copyToLocal [dst] [localsrc] 

6. 查看文件内容

# 二选一执行即可
hadoop fs -text  <path> 
hadoop fs -cat  <path>  

7. 显示文件的最后一千字节

hadoop fs -tail  <path> 
# 和Linux下一样,会持续监听文件内容变化 并显示文件的最后一千字节
hadoop fs -tail -f  <path> 

8. 拷贝文件

hadoop fs -cp [src] [dst]

9. 移动文件

hadoop fs -mv [src] [dst] 

10. 统计当前目录下各文件大小

  • 默认单位字节
  • -s : 显示所有文件大小总和,
  • -h : 将以更友好的方式显示文件大小(例如 64.0m 而不是 67108864)
hadoop fs -du  <path>  

11. 合并下载多个文件

  • -nl 在每个文件的末尾添加换行符(LF)
  • -skip-empty-file 跳过空文件
hadoop fs -getmerge
# 示例 将HDFS上的hbase-policy.xml和hbase-site.xml文件合并后下载到本地的/usr/test.xml
hadoop fs -getmerge -nl  /test/hbase-policy.xml /test/hbase-site.xml /usr/test.xml

12. 统计文件系统的可用空间信息

hadoop fs -df -h /

13. 更改文件复制因子

hadoop fs -setrep [-R] [-w] <numReplicas> <path>
  • 更改文件的复制因子。如果 path 是目录,则更改其下所有文件的复制因子
  • -w : 请求命令是否等待复制完成
# 示例
hadoop fs -setrep -w 3 /user/hadoop/dir1

14. 权限控制

# 权限控制和Linux上使用方式一致
# 变更文件或目录的所属群组。 用户必须是文件的所有者或超级用户。
hadoop fs -chgrp [-R] GROUP URI [URI ...]
# 修改文件或目录的访问权限  用户必须是文件的所有者或超级用户。
hadoop fs -chmod [-R] <MODE[,MODE]... | OCTALMODE> URI [URI ...]
# 修改文件的拥有者  用户必须是超级用户。
hadoop fs -chown [-R] [OWNER][:[GROUP]] URI [URI ]

15. 文件检测

hadoop fs -test - [defsz]  URI

可选选项:

  • -d:如果路径是目录,返回 0。
  • -e:如果路径存在,则返回 0。
  • -f:如果路径是文件,则返回 0。
  • -s:如果路径不为空,则返回 0。
  • -r:如果路径存在且授予读权限,则返回 0。
  • -w:如果路径存在且授予写入权限,则返回 0。
  • -z:如果文件长度为零,则返回 0。
# 示例
hadoop fs -test -e filename
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。