Hadoop伪分布部署

Author:Christopher_L1n | CSDN Blog | 未经允许,禁止转载

Hadoop伪分布部署

  • 0x00 前言
  • 0x01 系统准备
  • 0x02 添加用户
  • 0x03 安装JAVA
  • 0x04 安装Hadoop
  • 0x05 安装openssh及配置免密登录
  • 0x06 配置环境变量
  • 0x07 配置Hadoop
  • 0x08 启动Hadoop
    • 格式化namenode
    • 启动守护进程
    • 关闭守护进程
  • 0x09 FAQ
    • 格式化namenode时出现异常
    • 启动HDFS出现异常
    • 无法通过systemctl启动sshd服务
    • 找不到JDK路径
  • 0x0A 写在后面

0x00 前言

面向初学者,学习这么一庞大的生态圈,我个人认为是从小处入手,先能跑起来再谈其他的事,本文中出现的hadoop配置选项很少,只是为了以最快的方式搭建起来一个伪分布部署,以便进一步的学习。本文不是去探究每一项配置、每个操作的具体意义,当然我也会尽可能说明,但有些理解不深或记忆模糊的,就请自行探索,我就不误人子弟了。本文是此前我尝试部署服务时踩坑总结出的一些经验,仅供参考。
在这里我大胆假设各位读者懂得Linux的命令和Hadoop的用途,不过多赘述。

0x01 系统准备

  • 系统:Centos 8
  • JAVA:JDK1.8
  • Hadoop:3.2.1

本文推荐使用VPS:Vultr。不在此赘述如何部署VPS。

0x02 添加用户

在部署VPS,或者搭建虚拟机后,应添加一个系统用户用于部署hadoop,此处添加一个csdn用户(在root下创建):

# 若操作更规范些,则应添加组、home路径等,此处忽略
useradd csdn
# 配置密码
passwd csdn
# 输入密码
# 由于之后的操作需要csdn用户有sudo权限,因此还需要配置sudoer
vi /etc/sudoers

在任意空行添加一行(建议添加在类似内容的行的下方):

键盘摁下ESC,再摁o,输入:

csdn ALL=(ALL) ALL

摁下ESC,再输入:wq保存。
随后切换用户:

su - csdn

此后若未显式说明,均视作在csdn用户下进行操作。

0x03 安装JAVA

安装JAVA的过程不多赘述,步骤为:

  • 登录Oracle官网,选择JDK 1.8下载;
  • 将JDK上传至服务器。或在登录后复制下载链接,在服务器使用wget下载,由于目前需要登录才能下载,每个人的认证参数不同,因此给出链接也无效,请自行探索。
    为了能够进一步学习,便安装的JDK。如果是为了生产部署,只安装JRE也是可以的。

简便安装的方法(生产不推荐,请自行找到一个合适的稳定版本下载):

sudo yum update
sudo yum install java-1.8.0-openjdk.x86_64

安装完成后,通过以下命令验证安装成功与否:

java -version
javac -version

若javac报错提示无此命令,可通过以下方式解决:

# 1 排查是否存在tools.jar,可能是安装不完全导致的,具体步骤回忆不清,自行搜索unpack tools.pack,怕误人子弟,不献丑。
# 2 比较简单的方式是直接安装java-devel
sudo yum install java-devel

0x04 安装Hadoop

本文使用hadoop当前最新版本:3.2.1(生产不推荐,请自行找到合适的稳定版本,Hadoop官网下载页)。

wget https://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-3.2.1/hadoop-3.2.1.tar.gz

下载完成后,开始安装:

tar -zxvf hadoop-3.2.1.tar.gz
# 移动到一个合适的路径
sudo mv hadoop-3.2.1 /usr/local/hadoop
# 赋予权限,此处不确定为合适的权限,请自行探索
sudo chmod -R 770 /usr/local/hadoop
# 将/usr/local/hadoop 目录及其下所有子目录、子文件的归属者都改为csdn所有
sudo chown csdn:csdn -R /usr/local/hadoop

0x05 安装openssh及配置免密登录

确认ssh是否安装:

ssh localhost
#若已安装,则会提示输入密码,若未安装,通过以下方法安装:
sudo yum install openssh-server openssh-client

确认ssh服务是否开启:

# VPS一般都开启了ssh服务
ps -e | grep ssh

若有输出至少一行的ssh服务,则说明已有ssh服务,若无输出,尝试启动sshd服务:

# 由于centos 7的某个版本systemctl存在bug,无法通过其启动sshd服务,为了避免更广大(使用centos 7)的读者踩坑,使用另一种方法启动服务
sudo /usr/sbin/sshd
# ubuntu的启动方式,回忆并不准确,自行探索。当然也可以通过systemctl开启
# /etc/init.d/ssh start

如果在启动过程中出现如下错误:

Could not load host key: /etc/ssh/ssh_host_rsa_key
Could not load host key: /etc/ssh/ssh_host_ecdsa_key
Could not load host key: /etc/ssh/ssh_host_ed25519_key
sshd: no hostkeys available – exiting.

这是因为新版的openssh添加了ed25519、ecdsa、rsa做签名验证,而系统中不存在该算法的证书,需使用ssh-keygen生成:

sudo ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key
sudo ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key
sudo ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key

配置免密登录:

# 生成公钥
ssh-keygen -t -P '' -f ~/.ssh/id_rsa
# 免密配置,注意输出重定向为>>,而不是>,二者区别自行探索
cat ~/.ssh/id_rsa >> ~/.ssh/authorized_keys

配置免密后,可通过以下方式验证:

ssh localhost

若不提示输入密码,则说明成功配置;若确认是按以上操作方式实践,却仍提示需要输入密码,采用以下方式解决:

# 分配权限,此处未必是最低权限,请自行探索
sudo chmod 700 ~/.ssh
sudo chmod 644 ~/.ssh/authorized_keys

0x06 配置环境变量

在上面,我们安装了JDK,Hadoop,但仍需配置一些环境变量才能让Hadoop正常运转。由于需要配置$JAVA_HOME,若不清楚JDK究竟安装到哪里了,可以通过以下方式找到:

which java
# 复制输出的路径
ls -lrt 上述路径
# 反复ls -lrt 找到JDK所在路径
# =========================
# 如下(为了更好地展示输出,将登录信息也打出来了,以便区分):
[csdn@csdn ~]$ which java
/usr/bin/java
[csdn@csdn ~]$ ls -lrt /usr/bin/java
lrwxrwxrwx. 1 root root 22 Oct 29 12:28 /usr/bin/java -> /etc/alternatives/java
[csdn@csdn ~]$ ls -lrt /etc/alternatives/java
lrwxrwxrwx. 1 root root 73 Oct 29 12:28 /etc/alternatives/java -> /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.232.b09-0.el8_0.x86_64/jre/bin/java
[csdn@csdn ~]$ ls -lrt /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.232.b09-0.el8_0.x86_64/jre/bin/java
# 不再是link文件,故得知$JAVA_HOME应为/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.232.b09-0.el8_0.x86_64

编辑环境变量:

vi ~/.bashrc

输入方法不再赘述,应有如下内容:

# User specific aliases and functions
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.232.b09-0.el8_0.x86_64/
# export JRE_HOME=$JAVA_HOME/jre
export HADOOP_HOME=/home/csdn/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

保存退出编辑,应使其立即生效:

source ~/.bashrc

0x07 配置Hadoop

需要配置core-site.xml、hdfs.xml、mapred-site.xml、yarn-site.xml,它们在/usr/local/hadoop/etc/hadoop路径下:


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


<configuration>
        <property>
                
                <name>dfs.replicationname>
                <value>1value>
        property>
configuration>


<configuration>
        <property>
                <name>mapreduce.framework.namename>
                <value>yarnvalue>
        property>
configuration>


<configuration>
        <property>
                <name>yarn.resourcemanager.hostnamename>
                <value>localhostvalue>
        property>
        <property>
                <name>yarn.nodemanager.aux-servicesname>
                <value>mapreduce_shufflevalue>
        property>
configuration>

0x08 启动Hadoop

格式化namenode

hadoop namenode -format

启动守护进程

start-dfs.sh
start-yarn.sh
mr-jobhistory-daemon.sh start historyserver

部署过程到这里就结束了。

关闭守护进程

# 按启动守护进程的逆序来关闭
mr-jobhistory-daemon.sh stop historyserver
stop-yarn.sh
stop-dfs.sh

0x09 FAQ

格式化namenode时出现异常

…$ hadoop namenode -format
DEPRECATED: Use of this script to execute hdfs command is deprecated.
Instead use the hdfs command for it.
/usr/local/hadoop/bin/hdfs: line 276: /lib/jvm/java-1.8.0-openjdk-1.8.0.222.b10-1.el7_7.x86_64/bin/java: No such file or directory

ANS:环境变量$JAVA_HOME配置错误,请通过配置环境变量介绍的方法找到JDK的路径,再检查~/.bashrc、Hadoop-env.sh中配置的JAVA_HOME。

启动HDFS出现异常

Starting namenodes on [localhost]
localhost: ssh: connect to host localhost port 22: Connection refused
localhost: ssh: connect to host localhost port 22: Connection refused
Starting secondary namenodes [0.0.0.0]
0.0.0.0: ssh: connect to host 0.0.0.0 port 22: Connection refused

ANS:参考安装openssh及配置免密登录

无法通过systemctl启动sshd服务

ANS:Centos 7的某个版本的bug,通过另外一种方式启动即可:启动sshd服务。

找不到JDK路径

ANS:参考配置环境变量。

0x0A 写在后面

部署过程总会出现各种问题,总归是自己对Linux的掌握不深,但有些问题的提示十分奇怪,比如ssh免密登录按步骤操作仍失败,搜索半个多小时文档才知道是权限配置的问题。部分教程给的操作属实变形,按步骤输入,通篇错到尾。这次部署虽然有很多前辈的经验,但总体还是摸着石头过河,总归菜就是原罪。为了能够帮到更多人,总结了这次部署中遇到的各种问题。其中FAQ中的多数问题都零散分布到了各节,所以就只在这里体现了部分问题。

你可能感兴趣的:(Hadoop)