环境

  • Ubuntu 18.04 x64
  • hadoop 3.2.1

创建运行 hadoop 的用户

这里创建一个hadoop3用户

sudo useradd -m hadoop3 -s /bin/bash

这里指定创建的用户的主目录为 hadoop3,登录 shell 使用 /bin/bash

设置密码,可以设置地简单点,方便后面操作。

sudo passwd hadoop3

hadoop3 用户增加管理员权限,同样也是为了操作简便。

sudo adduser hadoop3 sudo

最后,注销切换到新创建的hadoop3用户,更新源

sudo apt-get update

设置 ssh 免密登录

若没有 ssh 则先安装:

sudo apt-get install openssh-server

使用 ssh-keygen~/.ssh 目录下生成密钥,若没有该目录则新建:

cd ~/.ssh
ssh-keygen -t rsa	# 直接回车,设置空密码
cat id_rsa.pub >> authorized_keys

然后使用如下命令就可以免密登录了:

ssh localhost

ssh localhost

安装 java 环境并配置环境变量

安装 java

sudo apt-get install openjdk-8-jdk

设置环境变量

~/.bashrc 文件为当前用户的环境变量配置文件,我们在该文件最后添加如下内容:

export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64

然后执行 source ~/.bshrc 使环境变量生效。

最后执行如下两条命令验证是否成功:

java -version
$JAVA_HOME/bin/java -version

这两条命令会输出 java 的版本信息,若输出相同,则安装成功。

java版本信息

安装 Hadoop

本文使用的是 hadoop3.2.1,可以从其中的一个镜像站点下载。

将 hadoop 安装到 /usr/local 目录中:

sudo tar -zxf ~/下载/hadoop-3.2.1.tar.gz -C /usr/local/
cd /usr/local/
sudo mv hadoop-3.2.1/ hadoop
sudo chown -R hadoop3 ./hadoop/		# 修改文件权限

检查 hadoop 是否可用:

cd /usr/local/hadoop
./bin/hadoop version

hadoop版本信息

也可以把 Hadoop 添加到环境变量中,编辑 ~/.bashrc,添加下面几行:

export HADOOP_HOME=/usr/local/hadoop	# 导入该变量是为了后面配置hadoop-env.sh的需要
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export PATH=$PATH:/usr/local/hadoop/bin:/usr/local/hadoop/sbin

然后使用 source ~/.bashrc 使改动生效,输入 hadoop version 验证是否成功:

hadoop version

Hadoop 伪分布式配置

修改配置文件

进入到 hadoop 安装目录下

cd /usr/local/hadoop

修改下面几个配置文件

hadoop-env.sh

编辑 etc/hadoop/hadoop-env.sh,修改如下几处地方:

# Technically, the only required environment variable is JAVA_HOME.
# All others are optional.  However, the defaults are probably not
# preferred.  Many sites configure these options outside of Hadoop,
# such as in /etc/profile.d

# The java implementation to use. By default, this environment
# variable is REQUIRED on ALL platforms except OS X!
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64

# Extra Java runtime options for all Hadoop commands. We don't support
# IPv6 yet/still, so by default the preference is set to IPv4.
# export HADOOP_OPTS="-Djava.net.preferIPv4Stack=true"
# For Kerberos debugging, an extended option set logs more information
# export HADOOP_OPTS="-Djava.net.preferIPv4Stack=true -Dsun.security.krb5.debug=true -Dsun.security.spnego.debug"
export HADOOP_OPTS="-Djava.library.path=${HADOOP_HOME}/lib/native"	# 这里用到上面导入的$HADOOP_HOME

core-site.xml

编辑 etc/hadoop/core-site.xml

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9000/</value>
    </property>
</configuration>

hdfs-site.xml

编辑 etc/hadoop/hdfs-site.xml

<configuration>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:/usr/local/hadoop/namenode</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:/usr/local/hadoop/datanode</value>
    </property>
    <property>
        <name>dfs.replication</name>
        <value>2</value>
    </property>
</configuration>

mapred-site.xml

编辑 etc/hadoop/mapred-site.xml

<configuration>
    <!-- 指定mapreduce运行在yarn框架上-->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <!-- 输入目录支持遍历子目录-->
    <property>
        <name>mapreduce.input.fileinputformat.input.dir.recursive</name>
        <value>true</value>
    </property>
    <property>
        <name>mapreduce.application.classpath</name>
        <value>/usr/local/hadoop/share/hadoop/mapreduce/*, /usr/local/hadoop/share/hadoop/mapreduce/lib/*</value>
    </property>
</configuration>

这里的 mapreduce.application.classpathvalue 需要根据自己的 hadoop 的安装路径进行更改,我这里是 /usr/local,所以填 /usr/local/hadoop/share/hadoop/mapreduce/*, /usr/local/hadoop/share/hadoop/mapreduce/lib/*

yarn-site.xml

<configuration>
    <!--nomenodeManager获取数据的方式是shuffle-->
    <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>
    <!--指定Yarn的ResourceManager的地址-->
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>localhost</value>
    </property>
</configuration>

namenode格式化

cd /usr/local/hadoop
./bin/hdfs namenode -format

开启 namenode 和 datanode 守护进程

cd /usr/local/hadoop
./sbin/start-dfs.sh

开启namenode和datanode守护进程

使用jps命令来检查是否成功启动:

jps

可以通过浏览器 localhost:9870 查看 namenode 和 datanode 等其他信息,注意:在 hadoop2 中默认端口是 50070,在 hadoop3 中则为9870

localhost:9870

开启 Yarn

cd /usr/local/hadoop
./sbin/start-yarn.sh

在浏览器中输入 localhost:8088 中即可通过 yarn 查看作业信息。

打开浏览器,在8088端口查看

参考