Author:Christopher_L1n | CSDN Blog | 未经容许,禁止转载html
面向初学者,学习这么一庞大的生态圈,我我的认为是从小处入手,先能跑起来再谈其余的事,本文中出现的hadoop配置选项不多,只是为了以最快的方式搭建起来一个伪分布部署,以便进一步的学习。本文不是去探究每一项配置、每一个操做的具体意义,固然我也会尽量说明,但有些理解不深或记忆模糊的,就请自行探索,我就不误人子弟了。本文是此前我尝试部署服务时踩坑总结出的一些经验,仅供参考。
在这里我大胆假设各位读者懂得Linux的命令和Hadoop的用途,不过多赘述。java
本文推荐使用VPS:Vultr。不在此赘述如何部署VPS。node
在部署VPS,或者搭建虚拟机后,应添加一个系统用户用于部署hadoop,此处添加一个csdn用户(在root下建立):web
# 若操做更规范些,则应添加组、home路径等,此处忽略 useradd csdn # 配置密码 passwd csdn # 输入密码 # 因为以后的操做须要csdn用户有sudo权限,所以还须要配置sudoer vi /etc/sudoers
在任意空行添加一行(建议添加在相似内容的行的下方):算法
键盘摁下ESC,再摁o,输入:shell
csdn ALL=(ALL) ALLapache
摁下ESC,再输入:wq保存。
随后切换用户:ubuntu
su - csdn
此后若未显式说明,均视做在csdn用户下进行操做。centos
安装JAVA的过程很少赘述,步骤为:bash
简便安装的方法(生产不推荐,请自行找到一个合适的稳定版本下载):
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
本文使用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
确认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添加了ed2551九、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
在上面,咱们安装了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
须要配置core-site.xml、hdfs.xml、mapred-site.xml、yarn-site.xml,它们在/usr/local/hadoop/etc/hadoop路径下:
<!-- core-site.xml --> <configuration> <property> <!-- 配置HDFS路径 --> <name>fs.defaultFS</name> <value>hdfs://localhost/</value> </property> </configuration> <!-- hdfs-site.xml --> <configuration> <property> <!-- 此处值为1,而很是见配置中的3,是由于本文采用伪分布模式,只有一个datanode,副本设置多了会提示WARNING,不必 --> <name>dfs.replication</name> <value>1</value> </property> </configuration> <!-- mapred-site.xml --> <configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration> <!-- yarn-site.xml --> <configuration> <property> <name>yarn.resourcemanager.hostname</name> <value>localhost</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> </configuration>
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
…$ 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。
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及配置免密登陆
ANS:Centos 7的某个版本的bug,经过另一种方式启动便可:启动sshd服务。
ANS:参考配置环境变量。
部署过程总会出现各类问题,总归是本身对Linux的掌握不深,但有些问题的提示十分奇怪,好比ssh免密登陆按步骤操做仍失败,搜索半个多小时文档才知道是权限配置的问题。部分教程给的操做属实变形,按步骤输入,通篇错到尾。此次部署虽然有不少前辈的经验,但整体仍是摸着石头过河,总归菜就是原罪。为了可以帮到更多人,总结了此次部署中遇到的各类问题。其中FAQ中的多数问题都零散分布到了各节,因此就只在这里体现了部分问题。