系统和软件环境要求

安装软件版本号:

Hadoop:3.2.1
Java:java version "1.8.0_251"
系统:CentOS7

本地模式安装

Java环境配置

下载Java JDK

Hadoop依赖Java环境,需要优先配置好JDK环境,由于国外下载速度一般很慢,这里选择国内镜像站华为云镜像下载JDK,如下

wget https://repo.huaweicloud.com/java/jdk/8u181-b13/jdk-8u181-linux-x64.tar.gz

部署Java JDK

解压/software/ 目录下
tar -zxvf jdk-8u181-linux-x64.tar.gz -C /software/
cd /software/
mv /software/jdk-8u181-linux-x64 java

配置Java环境变量

# 配置环境变量一般有三种,这里选择更为方便的/etc/profile.d/xxx.sh的方式,具体区别可百度
vim /etc/profile.d/java.sh
#添加如下环境变量
export JAVA_HOME=/software/java
export PATH=$PATH:$JAVA_HOME/bin

# 使配置生效
source /etc/profile

Hadoop环境配置

Hadoop安装方式与Java类似,这里选择国内镜像源清华大学镜像站

下载Hadoop

wget https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-3.2.1/hadoop-3.2.1.tar.gz

部署Hadoop

解压/software/ 目录下
tar -zxvf hadoop-3.2.1.tar.gz -C /software/
cd /software/
mv /software/hadoop-3.2.1.tar.gz hadoop

Hadoop环境变量配置

  1. 配置Hadoop环境变量,有很多环境变量,都是后续需要用到的,这里先提前添加进去
vim /etc/profile.d/hadoop.sh

export HADOOP_HOME=/software/hadoop
export HADOOP_COMMON_HOME=$HADOOP_HOME 
export HADOOP_HDFS_HOME=$HADOOP_HOME 
export HADOOP_MAPRED_HOME=$HADOOP_HOME 
export HADOOP_YARN_HOME=$HADOOP_HOME 
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop 
export PATH=$PATH::$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOOME/sbin:$HADOOP_HOME/lib
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native 
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"

# 使配置生效
source /etc/profile
  1. 配置hadoop-env.sh,添加Java环境
vim ${HADOOP_HOME}/etc/hadoop/hadoop-env.sh
export JAVA_HOME=/software/java
  1. 配置core-site.xml
vim ${HADOOP_HOME}/etc/hadoop/core-site.xml

<configuration>
<property>
    <name>fs.defaultFS</name>
    <value>hdfs://192.168.7.223:8020</value> # 这里可以用主机HostName代替,搭建集群版时应改为HostName方便区分
</property>
<property>
    <name>hadoop.tmp.dir</name>
    <value>/software/data/tmp</value> #为了安全起见,这里应更换一下已经存在的专门存放元数据的临时目录
</property>
</configuration>
  • fs.defaultFS参数配置的是HDFS的地址
  • hadoop.tmp.dir配置的是Hadoop临时目录,比如HDFS的NameNode数据默认都存放这个目录下,查看*-default.xml等默认配置文件,就可以看到很多依赖国内镜像hbase hadoop国内镜像_国内镜像hbase{user.name}`,此时有个问题就是NameNode会将HDFS的元数据存储在这个/tmp目录下,如果操作系统重启了,系统会清空/tmp目录下的东西,导致NameNode元数据丢失,是个非常严重的问题,所有我们应该修改这个路径。

配置、格式化、启动HDFS

  1. 配置hdfs-site.xml
vim ${HADOOP_HOME}/etc/hadoop/hdfs-site.xml

<property>
	<name>dfs.replication</name>
	<value>1</value>
</property>

dfs.replication配置的是HDFS存储时的备份数量,因为这里是伪分布式环境只有一个节点,所以这里设置为1。

  1. 格式化HDFS
cd /software/hadoop
bin/hdfs namenode –format
#这个命令也可以用,3.0版本可能有变化,部署时会提示,当初忘记记录了,先就这么记录着

格式化是对HDFS这个分布式文件系统中的DataNode进行分块,统计所有分块后的初始元数据的存储在NameNode中。

常见问题:

  • hadoop.tmp.dir目录的权限问题,解决方式就是把${HADOOP_HOME}/etc/hadoop/core-site.xml配置中的目录赋予hadoop用户所有者权限sudo chown -R hadoop:hadoop /software/data/tmp

查看NameNode格式化后的目录

-rw-rw-r--. 1 hadoop hadoop    3904 Aug 15 10:15 fsimage_0000000000000000346
-rw-rw-r--. 1 hadoop hadoop      62 Aug 15 10:15 fsimage_0000000000000000346.md5
-rw-rw-r--. 1 hadoop hadoop       4 Aug 15 10:36 seen_txid
-rw-rw-r--. 1 hadoop hadoop     212 Aug 12 18:09 VERSION

fsimage是NameNode元数据在内存满了后,持久化保存到的文件。

fsimage*.md5 是校验文件,用于校验fsimage的完整性。

seen_txid 是hadoop的版本

vession文件里保存:

  • namespaceID:NameNode的唯一ID。
  • clusterID:集群ID,NameNode和DataNode的集群ID应该一致,表明是一个集群。
  1. 启动NameNode
#3.0版本
hdfs --daemon start namenode
hdfs --daemon start secondarynamenode
hdfs --daemon start datanode
#2.0版本,在3.0中使用时能用,系统提示可以用新方式启动
${HADOOP_HOME}/sbin/hadoop-daemon.sh start namenode
${HADOOP_HOME}/sbin/hadoop-daemon.sh start datanode
${HADOOP_HOME}/sbin/hadoop-daemon.sh start secondarynamenode
  1. JPS命令查看是否已经启动成功
[hadoop@localhost ~]$ jps
2660 NameNode
3268 SecondaryNameNode
5672 Jps
2972 DataNode

HDFS上测试创建目录、上传、下载文件

HDFS上创建目录

bin/hadoop fs -mkdir -p /dbtaobao/dataset

HDFS上传文件

bin/hadoop fs -put /usr/local/dbtaobao/dataset/train_after.csv /dbtaobao/dataset

HDFS下载文件

bin/hadoop fs -put /dbtaobao/dataset/train_after.csv /本地目录位置 #不写默认是执行命令的目录

HDFS删除文件/文件夹

#删除文件
bin/hadoop fs -rm /dbtaobao/dataset/train_after.csv
#删除文件夹
bin/hadoop fs -rm -r /dbtaobao/dataset/train_after.csv

参考

本文只是简单记录,参考价值不高,具体详细参考: