Hadoop环境搭建及常见问题解决

  • 零、资源准备
  • 一、环境准备
    • 1. 安装虚拟机
    • 2. 环境准备
      • 1) 创建新用户xiaobai
      • 2) 安装ssh-server
      • 3) 上传相关资源
      • [4)] 使用putty连接服务器
      • 5)设置主机名
      • 6)检查和关闭防火墙
      • 7)设置免密登录
  • 二、安装JDK
  • 三、安装Hadoop
  • 四、配置Hadoop伪分布式
    • 1. core-site.xml
    • 2. hdfs-site.xml
    • 3. mapred-site.xml
    • 4. yarn-site.xml
    • 5. slaves
  • 五、启动与测试
    • 1. 格式化
    • 2. 启动
    • 3. 查看进程
    • 4. 通过web访问实验总结
    • 5. 测试
    • 6. Hadoop启动服务总结
      • 1)整体启动和关闭
      • 2)各个服务组件逐一启动/停止
      • 3) 各个模块分开启动/停止
  • 六、常见错误及解决办法
    • 1. 出现`command not found`错误
    • 2. 所有命令都运行不了
    • 3. 不小心多次格式化
    • 4. NameNode启动不成功
    • 5. 万能大法

学习大数据的路上,肯定少不了Hadoop的陪伴。

在学习Hadoop之初,一件"痛苦"的事情莫过于装环境,没有环境,练不了HDFS命令,写不了MapReduce程序,后续的HBase、Hive无从下手。

为了学好Hadoop,于是下决心,一定把环境装好,于是,跟着老师做,跟着网上学,别人都顺理成章、一气呵成;而轮到自己时,总在怀疑自己的眼睛、自己的手、自己的电脑、自己的…

  1. 软件或者系统版本与老师不一致
  2. 没有完全跟着老师做,比如老师用的用户名是user1, 而你总想取自己的名字zhangsan,结果在后面配置相应的目录时出错了
  3. 在安装的过程中漏掉了某些细节,比如老师随手切换了目录,而你还在原目录中,纠结为什么ls出来的内容与老师的不同…
  4. 失误导致的错,比如在格式化HDFS时,hdfs namenode -format ,而你写的是hdfs namenode-format ,一个空格,敲出了两种境界

对初学者的建议:掌握整体过程及每一步的作用,按部就班的操作,仔仔细细的核对。

本教程按如下顺序进行:

【资源准备】 => 【环境准备】 => 【JDK的安装】 => 【Hadoop的安装】 => 【伪分布式的配置】 => 【启动与测试】 => 【常见错误及解决办法】

零、资源准备

  • 虚拟机相关:

    • vmware:vmware_177981.zip
    • ubuntu18-desktop:ubuntu-18.04.5-desktop-amd64.iso
  • Hadoop相关
    • jdk1.8:jdk-8u261-linux-x64.tar.gz
    • hadoop2.7.7:hadoop-2.7.7.tar.gz
  • 辅助工具
    • putty:putty.exe
    • winscp:WinSCP-5.19.5-Portable.zip
链接:https://pan.baidu.com/s/1kjcuNNCY2FxYA5o7Z2tgkQ
提取码:nuli

除了vmware(你懂的…),以上资源均来源于官网,putty和winscp都是便捷式软件,无需安装

一、环境准备

1. 安装虚拟机

本教程使用vmware安装ubuntu18.05系统

系统设置

CPU选择2核心;内存使用2-4G; 硬盘选择50G以上,动态分配

具体步骤可参考:

https://blog.csdn.net/tangyi2008/article/details/120311293

当然你可以选用其他的虚拟机,比如使用VBox作为虚拟机软件,同样,操作系统可以选CentOS等其他Linux系统。

如果是小白,建议严格按这里的步骤

2. 环境准备

1) 创建新用户xiaobai

为了避免不必要的麻烦,这里统一用户名,创建一个新用户xiaobai

创建用户

sudo useradd -m xiaobai -s /bin/bash

使用sudo命令,需要需要输入当前用户的登录密码才能创建;密码输入后如果没任何提示,说明创建成功

如果提示useradd: user 'xiaobai' already exists, 表明这个用户名已经存在

设置密码

sudo passwd xiaobai

密码尽量使用简单易记的,比如123456,毕竟我们只是在学习,没有多少机密文件值得你设置自己都记不清的密码。

设置密码的时候,光标不会跳(千万不要以为键盘坏了☺

当你看到password updated successfully,表示密码设置成功

为xiaobai增加管理员权限

为了方便部署,避免一些对新手来说比较棘手的权限问题,这里为xiaobai增加管理员权限

sudo adduser xiaobai sudo

当然也可以修改文件/etc/sudoers(对于新手无需理会)

切换到用户xiaobai

su - xiaobai

su命令加参数-的目的是切换用户的同时,会切换到相应用户的Home目录

这里输入的密码是刚刚为xiaobai用户设置的密码

2) 安装ssh-server

sudo apt install openssh-client openssh-server

这里使用了sudo命令,输入的密码是xiaobai用户的密码

3) 上传相关资源

在Home目录下创建soft目录,使用winscp上传jdk和hadoop到soft目录

cd
mkdir soft

查看虚拟机ip

ip a

具体的ip地址以你命令输出为准。

创建连接

解压WinSCP-5.19.5-Portable.zip,打开WinSCP.exe,设置相应的连接参数,然后点Login进行连接。

上传文件

将本地目录(左边)需要上传的文件拖入虚机机相应目录。

[4)] 使用putty连接服务器

这一步不是必须的操作,使用putty主要是通过ssh连接虚拟机,进行远程操作而不需要进入虚拟机,相应的替代品有Xshell、secureCRT等

打开putty.exe,设置相应的连接。

5)设置主机名

修改主机名为node1

sudo hostname node1

如果提示[sudo] password for xiaobai: ,表示要执行sudo命令,需要输入xiaobai的登录密码,后面出现类似情况不再介绍

上面命令修改的主机名是临时生效,当虚拟机重启会恢复成原来的主机名,这里修改配置文件使用其永久修改。打开hostname文件, 配置hostname为node1。

sudo vi /etc/hostname

注意,对于小白,如果不想用vi命令,可以使用sudo gedit /etc/hostname打开类似windows上的记事本进行文件的编辑,后面类似情况自行处理。

简单使用方式:进入文件后,输入字母i进入插入模式 => 修改文件内容为node1 => 按Esc键进入命令行模式 => 输入:进入底行模式 => 输入x或者wq保存推出。

如果文件修改后不想保存,进行底行模式后输入q!进行不保存退出。

打开hosts文件配置hosts

sudo vi /etc/hosts

6)检查和关闭防火墙

打开终端,安装防火墙管理工具。命令:

sudo apt install ufw

查看防火墙状态。命令:

sudo ufw status

可以看出默认为关闭

若未关闭,使用下面的命令进行防火墙关闭

sudo ufw disable

7)设置免密登录

生成密钥对

ssh-keygen -t rsa

拷贝公钥到主机

ssh-copy-id -i ~/.ssh/id_rsa.pub  node1

测试免密登录是否成功,

如果没有提示输入密码,则免密登录成功

ssh node1

二、安装JDK

注意:在Home目录(可以使用~表示Home目录)下面,创建opt目录,所有要安装的软件都放在这个目录

将jdk上传到~/soft目录,确保文件已经上传,输入命令ls ~/soft进入验证

接下来解压文件

mkdir ~/opt
tar -xvf ~/soft/jdk-8u261-linux-x64.tar.gz  -C ~/opt

设置软连接

cd ~/opt
ln -s jdk1.8.0_261/ jdk

配置环境变量,打开bash配置文件

cd
vi .bashrc

i进入插入模式,在末尾添加如下代码,然后按esc退出编辑,输入:x保存

export JAVA_HOME=/home/xiaobai/opt/jdk
export PATH=$PATH:$JAVA_HOME/bin

输入以下命令使修改生效,可用java命令验证配置是否成功

source .bashrc
java

三、安装Hadoop

请确保前面已经将hadoop的压缩包上传到了~/soft目录,使用命令ls ~/soft

解压文件

tar -xvf ~/soft/hadoop-2.7.7.tar.gz -C ~/opt

设置软连接

cd ~/opt
ln -s hadoop-2.7.7/ hadoop

配置环境变量

使用命令vi ~/.bashrc打开配置文件,添加以下代码到文件末尾,步骤与配置JDK环境变量相同

export HADOOP_HOME=/home/xiaobai/opt/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

Hadoop目录介绍

ls ~/opt/hadoop

Hadoop目录简介:

  • bin: 存放对Hadoop相关服务进行操作的脚本,包括 hadoop, hdfs, …
  • sbin: 存放启动和停止Hadoop相关服务的脚本,比如start-dfs.sh, start-yarn.sh, hadoop-daemon.sh, …
  • etc: 配置文件的目录
  • share: 存放Hadoop的依赖jar包、文档、和官方案例
  • lib: 存放Hadoop的本地库(对数据进行压缩解压缩功能)

修改配置文件hadoop-env.sh

将JAVA_HOME的值改为jdk的绝对路径/home/xiaobai/opt/jdk

vi ~/opt/hadoop/etc/hadoop/hadoop-env.sh

保存修改

验证Hadoop是否安装成功

hadoop

四、配置Hadoop伪分布式

Hadoop主要有三种模式,一般在学习过程中使用伪分布模式基本就可以了

模式 概念 特点 用途
单机模式 Hadoop默认模式 1.没有分布式文件系统HDFS 2.MapReduce处理的是本地Linux的文件数据 一般仅用于本地MapReduce程序的调试
伪分布模式 是在单机上,模拟一个分布式的环境 具备Hadoop的主要功能 常用于调试程序
完全分布式模式 也叫集群模式,是将Hadoop运行在机器上,各个机器按照相关配置运行相应的hadoop守护进程 在多台机器上运行,是真正的分布式环境 常用于生产

主要的配置文件

配置文件 配置内容
hadoop-env.sh 配置与环境相关的参数,比如JAVA_HOME目录
core-site.xml 配置Hadoop集群相关参数
hdfs-site.xml 配置HDFS相关参数
mapred-site.xml 配置MapReduce相关参数
yarn-site.xml 配置YARN相关参数
slaves 配置从节点

在安装的过程中,已经配置了 hadoop-env.sh中的JAVA_HOME参数,接下来分别配置其他5个配置文件

切换到配置文件目录

cd ~/opt/hadoop/etc/hadoop

1. core-site.xml

配置项 说明
fs.defaultFS hdfs://<hostname>:9000 配置默认的文件系统,这里配置NameNode地址,9000是RPC通信端口
hadoop.tmp.dir /home/<用户名>/opt/hadoop/tmp 其他临时目录的父目录

打开core-site.xml文件

vi core-site.xml

在configuration标签中加入以下代码,保存

    <property><name>fs.defaultFS</name><value>hdfs://node1:9000</value></property><property><name>hadoop.tmp.dir</name><value>/home/xiaobai/opt/hadoop/tmp</value></property>

注意:

  • 上面的配置项要配置到<configuration>标签中,后面的配置项类似

  • hadoop.tmp.dir配置的目录一定要是当前用户有控制权限的目录

更多参数请参考官网:https://hadoop.apache.org/docs/r2.7.7/hadoop-project-dist/hadoop-common/core-default.xml

2. hdfs-site.xml

配置项 默认值 说明
dfs.replication 3 数据副本个数,伪分布时设为1
dfs.namenode.name.dir file://${hadoop.tmp.dir}/dfs/name namenode存着数据存放的本地目录
dfs.datanode.data.dir file://${hadoop.tmp.dir}/dfs/data datanode相关数据存放的本地目录

打开hdfs-site.xml文件

vi hdfs-site.xml

往configuration加入设置,保存

    <property><name>dfs.replication</name><value>1</value></property><property><name>dfs.namenode.name.dir</name><value>/home/xiaobai/opt/hadoop/tmp/dfs/name</value></property><property><name>dfs.datanode.data.dir</name><value>/home/xiaobai/opt/hadoop/tmp/dfs/data</value></property>

更多参数请参考官网:https://hadoop.apache.org/docs/r2.7.7/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml

3. mapred-site.xml

配置项 默认值 说明
mapreduce.framework.name local MapReduce的执行模式,默认是本地模式,另外可以设置成classic(采用MapReduce1.0模式运行) 或 yarn(基于YARN框架运行).
mapreduce.job.ubertask.enable false 是否允许开启uber模式,当开启后,小作业会在一个JVM上顺序运行,而不需要额外申请资源

默认情况下没有这个配置文件,可以根据样本文件mapred-site.xml.template复制一份。

cp mapred-site.xml.template mapred-site.xml
vi mapred-site.xml

往configuration加入设置,保存

    <property><name>mapreduce.framework.name</name><value>yarn</value></property><property><name>mapreduce.job.ubertask.enable</name><value>true</value></property>

更多参数请参考官网:https://hadoop.apache.org/docs/r2.7.7/hadoop-mapreduce-client/hadoop-mapreduce-client-core/mapred-default.xml

4. yarn-site.xml

配置项 默认值 说明
yarn.resourcemanager.hostname 0.0.0.0 ResourceManager的主机名
yarn.nodemanager.aux-services NodeManager上运行的附属服务
yarn.nodemanager.pmem-check-enabled true 是否将对容器强制执行物理内存限制
yarn.nodemanager.vmem-check-enabled true 是否将对容器强制执行虚拟内存限制

打开yarn-site.xml文件

vi yarn-site.xml

往configuration加入设置,保存

    <property><name>yarn.resourcemanager.hostname</name><value>node1</value></property><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property><property><name>yarn.nodemanager.pmem-check-enabled</name><value>false</value></property><property><name>yarn.nodemanager.vmem-check-enabled</name><value>false</value></property>

更多参数请参考官网:https://hadoop.apache.org/docs/r2.7.7/hadoop-yarn/hadoop-yarn-common/yarn-default.xml

5. slaves

该文件配置从服务器的地址,一个服务器地址占一行。

打开slaves

vi slaves

将默认的localhost修改成node1

node1

五、启动与测试

1. 格式化

在第一次启动Hadoop时,一定要记得对HDFS进行格式化

hdfs namenode -format

2. 启动

start-all.sh

3. 查看进程

jps

jps(Java Virtual Machine Process Status Tool)是java提供的一个显示当前所有java进程pid的命令,适合在linux/unix平台上简单察看当前java进程的一些简单情况。jps命令类似于unix系统里的ps命令(主要是用来显示当前系统的进程情况,有哪些进程以及进程id),它的作用是显示当前系统的java进程情况及进程id。

4. 通过web访问实验总结

在虚拟机中,使用浏览器打开如下两个网址,可以查看HDFS的NameNode和YARN的ResourceManager相关信息

node1:50070
node1:8088

5. 测试

使用hdfs命令上传一个文件到HDFS文件系统

#切换到Home目录
cd#编辑一个本地文件,比如输入:a b c a a a b
vi test.txt#上传到HDFS根目录
hdfs dfs -put test.txt /

运行mapreduce示例代码,进行词频统计

hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount /test.txt  /output

查看运行结果

#查看输出目录
hdfs dfs -ls /output#查看输出内容
hdfs dfs -cat /output/part*

至此,表明你的Hadoop伪分布式搭建完成!!!

如果有错误,可以查看第六部分内容:常见问题及解决方案

6. Hadoop启动服务总结

在第2步中,我们启动Hadoop时使用的start-all.sh, 在下面的提示信息中显示 This script is Deprecated,也就是说这个启动脚本是被弃用的状态,并且建议我们Instead use start-dfs.sh and start-yarn.sh

下面就Hadoop的服务启动进行简单的总结:

1)整体启动和关闭

start-all.sh
stop-all.sh

2)各个服务组件逐一启动/停止

(1)分别启动/停止HDFS组件

hadoop-daemon.sh start / stop namenode / datanode / secondarynamenode

(2)启动/停止YARN

yarn-daemon.sh start / stop resourcemanager / nodemanager

3) 各个模块分开启动/停止

(1)整体启动/停止HDFS

start-dfs.sh
stop-dfs.sh

(2)整体启动/停止YARN

 start-yarn.sh stop-yarn.sh

六、常见错误及解决办法

1. 出现command not found错误

1)检查~/.bashrc文件中是否配置了正确的PATH

2)如果~/.bashrc设置正确,是否没有执行source ~/.bashrc 使环境变量生效

2. 所有命令都运行不了

如果你发现不止安装的程序命令,就连原系统的内置命令都使用不了(比如lsvicat等),很明显,你在修改.bashrc时,将PATH路径设置错了。最常见的是错误就是在设置PATH时,PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin,把$PATH:漏掉了,这就相当于现在的PATH路径只有两个值$HADOOP_HOME/bin$HADOOP_HOME/sbin

解决办法:

1)恢复默认的PATH路径:

export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

2)修改~/.bashrc文件,检查设置PATH的地方是否漏掉了$PATH:

3. 不小心多次格式化

多次格式化导致DataNode 与 NameNode namespaceID不一致,导致启动HDFS失败,这里告诉最直接暴力的解决办法, 清空$hadoop.tmp.dir这个目录,以本文为例:

stop-all.sh
#本教程配置的hadoop.tmp.dir目录为/home/xiaobai/opt/hadoop/tmp
rm -fr /home/xiaobai/opt/hadoop/tmp

4. NameNode启动不成功

1) NameNode没有格式化

2) 环境变量配置错误

3) Ip和hostname绑定失败,需要通过ip a查看ip地址,重新配置/etc/hosts文件,设置正确的ip和hostname

4)hostname含有特殊符号如.(符号点),会被误解析

5. 万能大法

一切的错误,最好的解决办法是查看日志

Hadoop的默认日志文件目录在$HADOOP_HOME/logs, 比如在本教程中,在~/opt/hadoop/logs

这里列举两个示例:

1)提示Content is not allowed in prolog错误

这个错误比较明显,显示在core-site.xml文件的第18行第1列有一个字符不认识,使用命令vi查看相应配置,修改即可。注意,这里不建议使用gedit打开文件查看,因为如果有不可见字符,gedit也看不见,难以查错。

2)jps时查看进程少启动了部分服务,比如下面示例中发现没有启动NodeManager

这种错误最好最直接的方式是查看日志文件,而不是去Baidu,去Google,因为各自的问题都不尽一致,必须找准备病因,才能药到病除。

进入日志目录

cd ~/opt/hadoop/logs
ls

NodeManager属于YARN组件的服务,在ls的结果中可以迅速找到相应的日志文件yarn-xiaobai-nodemanager-node1.log

使用tail命令查看最后50行日志内容:

tail -n 50 yarn-xiaobai-nodemanager-node1.log

错误原因为:The ServiceName: mapreduce-shuffle set in yarn.nodemanager.aux-services is invalid.The valid service name should only contain a-zA-Z0-9_ and can not start with numbers。

意思是说服务名无效,只能由 a-zA-Z0-9_ 组成并且不能以数字开始,错误很明显了,错误原因是yarn-site.xml这个配置文件中配置了无效的服务名,打开该配置文件,检查并修改相应配置项即可。

Hadoop环境搭建及常见问题解决(保姆级教程)相关推荐

  1. Android开发环境搭建及常见问题解决方法

    Android开发环境搭建及常见问题解决方法 参考文章: (1)Android开发环境搭建及常见问题解决方法 (2)https://www.cnblogs.com/rwxwsblog/p/476978 ...

  2. 使用Hexo搭建个人博客-保姆级教程

    使用Hexo搭建个人博客-保姆级教材 首先我们看一下最终效果,按照以下步骤最后就可以完成和我一样的博客 https://chen-mingxuan.gitee.io/blog-test/ PS:CSD ...

  3. 【菜鸟窝】Hadoop生态系统、Hadoop虚拟机环境准备、Hadoop环境搭建(含安装包和教程)

    hadoop环境搭建视频:https://www.cniao5.com/course/lessons/10244 1.1Hadoop简介 1.1.1Hadoop的诞生 Hadoop是由Apache L ...

  4. springmvc环境搭建以及常见问题解决

    1.新建maven工程 a)  打开eclipse,file->new->project->Maven->Maven Project b)  下一步 c)   选择创建的工程为 ...

  5. python运行环境搭建以及常见问题解决

    前言 背景: 因业务需要,可能会涉及Python开发,因此基于现有工程代码学习,本篇博客大概总结自己在搭建运行环境所遇到的问题,比较简单,适用于初学Python的开发人员 环境:win10,flash ...

  6. 如何使用移动云搭建个人网站(保姆级教程)

    移动云轻量应用服务器环境搭建-Centos 8搭建个人网站 免费云主机体验_免费云存储_免费云数据库_免费云服务器_免费云产品服务-移动云官网 云主机可以通过移动云最近的活动免费 一. 1.1基础配置 ...

  7. 快速搭建个人博客——保姆级教程

    文章目录 序言 本地网站 开发工具 WebStorm Vscode 框架 Hexo(强烈推荐) WordPress 本地环境 git node.js Hexo 安装 初始化 主题 样式 Butterf ...

  8. 【游戏开发建模】教你使用Unity ProBuilder制作基础模型,搭建场景原型( 保姆级教程 | Unity 2021最新版)

    文章目录 一.前言 二.安装插件 三.基础操作 1.切换编辑器模式 1.1.Open as Floating Window 1.2.Open as Dockable Window 1.3.Use Te ...

  9. 猿创征文|给妈妈做个相册——在服务器上搭建Lychee相册的保姆级教程

    最近妈妈总问我,照片太多存在哪里比较好?今天试试在网上搭建一个专属的相册保存相片吧

最新文章

  1. python把数据写入excel_Python向excel中写入数据的方法
  2. 【HDU - 4217 】Data Structure? (线段树求第k小数)
  3. z变换判断稳定性和因果性_数字信号处理(王娜)-中国大学mooc-题库零氪
  4. IE9 Platform Preview 3昨天发布
  5. java 正则表达式-忽略大小写与多行匹配
  6. 新站结合熊掌号的实际操作 实现当天收录
  7. MFC_选择目录对话框_选择文件对话框_指定目录遍历文件
  8. 菜鸟打印助手接口_打印快递单,这4件事儿你非做不可
  9. python的图导入origin_利用Origin软件做X射线倒易空间图(RSM)的办法
  10. 多多客api_蚂蚁星球(原好京客)(haojingke.com)- 做大京客,享大数据营销 - 拼多多API接口...
  11. PyQt5-UI界面控件布局实战-界面水平,竖直、网格混合布局(三)
  12. 国内景色最震撼的9座雪山
  13. 从零开始创建自己的博客
  14. 联接(CROSS JOIN、JOIN、OUTER JOIN)
  15. Vue2响应式实现原理和解析
  16. 计算机网络之物理层-频带传输
  17. 查找java最耗费CPU线程的命令
  18. 微信小程序视图控件与bindtap之间的问题的解决
  19. win8服务器防火墙配置文件,Win8自带防火墙吗,Win8防火墙在哪里(适用于Win8.1)?
  20. 1台电脑安装2个网卡(无线、有线)同时使用

热门文章

  1. 【Android】 Gson的引用 / 插件GsonFormat / 使用 / GsonFormat解析Json的方法和使用
  2. DBCP连接池耗尽问题
  3. 爱心代码JavaScript
  4. 互联网产品经理常用软件及工作平台
  5. 本科生学习GNSS算法 中级教程(四)- rtklib多系统多频单点定位算法 - rtklib日志解析以及算法调试
  6. echart动态切换图表类型
  7. Vulnhub项目:Aragog
  8. Spark中使用c3p0连接池
  9. 童诗白模电--波形的发生和转换
  10. Python数据分析——基础数据结构