最近在系统性学习大数据相关知识,看了一些教学视频,因为教学视频录的比较早了,中间也踩了一些坑,这里记录一下hadoop3.3.0的整个安装过程。

1. java安装

我这边使用的是centos,所以使用下面的命令安装即可:

yum install java-1.8.0-openjdk-devel

安装完后,修改/etc/profile,添加JAVA_HOME变量

export JAVA_HOME=/usr/lib/jvm/java

2. hadoop的下载和安装

首先,在阿里云镜像网站下载hadoop的安装包hadoop-3.3.0.tar.gz。下载完成后,将其解压tar -zxvf hadoop-3.3.0.tar.gz,解压完成后,会出现一个hadoop-3.3.0的文件夹,将这个文件夹移动到/usr/local下并重命名为hadoop,mv hadoop-3.3.0 /usr/local/hadoop

挪动好hadoop文件后,修改/etc/profile,增加hadoop相关变量

export HADOOP_HOME=/usr/local/hadoop
export PATH=.:$HADOOP_HOME/bin::$PATH


export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"

修改后,使profile生效source /etc/profile

此时,命令行输入hadoop version,如果出现下面的信息,则表示相关配置已经生效。

Hadoop 3.3.0
Source code repository https://gitbox.apache.org/repos/asf/hadoop.git -r aa96f1871bfd858f9bac59cf2a81ec470da649af
Compiled by brahma on 2020-07-06T18:44Z
Compiled with protoc 3.7.1
From source with checksum 5dc29b802d6ccd77b262ef9d04d19c4
This command was run using /usr/local/hadoop/share/hadoop/common/hadoop-common-3.3.0.jar

注意将/usr/local/hadoop文件夹权限赋予给hadoop:chown -R hadoop:hadoop /usr/local/hadoop

3. hadoop配置

此时hadoop已经是可以以单机方式运行,为了将hadoop配置成伪分布式,需要进行以下配置。

3.1 域名配置

首先配置一个域名,在/etc/hosts中添加一条记录192.168.10.103 hadoop1,前面的IP是当前机器的IP。

3.2 用户配置

然后生成一个专门用于hadoop相关账号,这里我参照网上的教程,创建一个hadoop用户。

# 添加用户
adduser hadoop

# 将用户增加到root组
usermod -g root hadoop

# 登陆到hadoop账户
su hadoop

接下来,使用ssh-keygen命令创建公钥-私钥对,然后将公钥放到authorized_keys中。

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

之后尝试免密登陆,第一次免密登陆有一个交互提示,之后就不会有交互提示了。

3.3 hadoop环境配置

/usr/local/hadoop/etc/hadoop/hadoop-env.sh找到export JAVA_HOME,将JAVA_HOME变量配置成真实的jdk目录。

例如:

export JAVA_HOME=/usr/lib/jvm/java

3.4 hadoop core-site文件设置

vim /usr/local/hadoop/etc/hadoop/core-site.xml
<configuration>
    <property>
        <!--hadoop的临时目录设置-->
        <name>hadoop.tmp.dir</name>
        <value>file:/usr/local/hadoop/tmp</value>
        <description>Abase for other temporary directories.</description>
    </property>
    <property>
        <!--dfs的服务端口号,由于本机装了php占用了9000端口,所以修改成8999-->
        <name>fs.defaultFS</name>
        <value>hdfs://hadoop1:8999</value>
    </property>
</configuration>

3.5 hadoop hdfs-site配置

vim /usr/local/hadoop/etc/hadoop/hdfs-site.xml
<configuration>
    <property>
        <!--指定副本数为1-->
        <name>dfs.replication</name>
        <value>1</value>
    </property>
    <property>
        <!--dfs名称地址-->
        <name>dfs.namenode.name.dir</name>
        <value>file:/usr/local/hadoop/tmp/dfs/name</value>
    </property>
    <property>
        <!--dfs数据地址-->
        <name>dfs.datanode.data.dir</name>
        <value>file:/usr/local/hadoop/tmp/dfs/data</value>
    </property>
    <property>
        <!--dfs主节点端口-->
        <name>dfs.http.address</name>
        <value>hadoop1:50070</value>
    </property>
</configuration>

3.6 hadoop yarn-site配置

vim /usr/local/hadoop/etc/hadoop/yarn-site.xml
<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>
    <property>
        <name>yarn.resourcemanager.address</name>
        <value>hadoop1:8032</value>
    </property>
    <property>
        <name>yarn.resourcemanager.scheduler.address</name>
        <value>hadoop1:8030</value>
    </property>
    <property>
        <name>yarn.resourcemanager.resource-tracker.address</name>
        <value>hadoop1:8035</value>
    </property>
    <property>
        <name>yarn.resourcemanager.admin.address</name>
        <value>hadoop1:8033</value>
    </property>
    <property>
        <name>yarn.resourcemanager.webapp.address</name>
        <value>hadoop1:8088</value>
    </property>
</configuration>

3.7 hadoop yarn-site配置

vim /usr/local/hadoop/etc/hadoop/mapred-site.xml
<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>master:10020</value>
    </property>
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>master:19888</value>
    </property>
</configuration>

3.8 格式化namenode

hdfs namenode -format

3.9 启动所有组件

# 进入sbin目录
cd /usr/local/hadoop/sbin
# 执行启动文件
./start-all.sh

当启动完成后,使用jps命令,查看在运行的jvm,其中应当包含以下程序。

7460 SecondaryNameNode
8564 Jps
7269 DataNode
7818 NodeManager
7693 ResourceManager
7119 NameNode

如果其中的组件没有成功启动,可以查看/usr/local/hadoop/logs目录下对应组件的日志,可能遇到的问题是组件所用的端口被占用。

4. 小结

以上安装完成后,接下来就可以在ide中写代码,向dfs中写入或读取数据了。

enjoy~

标签: java, hadoop, hdfs

添加新评论