Hadoop学习笔记(一):ubuntu虚拟机下的hadoop伪分布式集群搭建
hadoop百度百科:https://baike.baidu.com/item/Hadoop/3526507?fr=aladdin
hadoop官网:http://hadoop.apache.org/
本文结构如下:
- 安装hadoop前的准备工作
 
1.1 创建新用户
1.2 更新APT
1.3 安装SSH
1.4 安装Java环境
2.安装和配置hadoop
2.1 hadoop下载
2.2 hadoop为分布式模式配置
3.问题总结
1.安装hadoop前的准备工作
1.1创建hadoop用户
为了方便以后的实验进行,推荐创建一个新的hadoop用户,所有实验内容都登陆该用户进行,具体的shell代码和注释如下:
sudo useradd -m hadoop -s /bin/bash #创建用户hadoop,并使用/bin/bash作为Shell
sudo passwd hadoop #设置hadoop的密码
sudo adduser hadoop sudo #为hadoop增加管理员权限
1.2更新APT
APT是一款软件管理工具,Linux采用APT来安装和管理各种软件,安装成功LInux系统以后,需要及时更新APT软件,否则后续的一些软件可能无法正常安装,更新APT使用以下命令:
sudo apt-get update
1.3安装SSH
SSH是Secure Shell的缩写.....
为什么要安装Hasoop之前要配置SSH呢? 这是因为Hadoop名称节点(NameNode)需要启用集群中所有机器的Hadoop守护进程,这个过程需要通过SSH登陆来实现。Hadoop并没有提供SSH输入密码登陆的形式,因此,为了能够顺利登陆集群中的每台机器,需要将所有机器配置为“名称节点可以无密码登陆它们”
Ubuntu默认已经安装了SSH客户端,因此,只需要安装SSH服务端,在终端中执行以下命令:
sudo apt-get install openssh-server
然后可以使用如下命令登陆本机(因为是伪分布式集群,只有一台机器,同时作为名称节点和普通节点),如果提示输入密码,则表示安装成功了:
ssh localhost
由于这样登陆需要每次输入密码,所以,有必要配置SSH为无密码登陆,这样在Hadoop集群中,名称节点(NameNode)要登陆某台机器就不需要人工输入密码了(实际上也不可能每次都人工输入密码),SSH免密登陆配置方法如下:
cd ~/.ssh/ #,切换目录,若没有该目录,请先执行一次ssh localhost
ssh-keygen -t rsa #会有提示,按enter即可(即不设置密码),这条语句生成公钥和私钥两个文件,补充ssh-keygen的基本用法:https://blog.csdn.net/qq_38570571/article/details/79268426
cat ./id_rsa.pub >> ./authorized_keys #加入授权,cat file1 >> file2 的含义是将file1的内容写入到file2的尾部
然后再执行ssh localhost命令,无需输入密码就可以直接登陆了,如图:
  
1.4 安装Java环境
Hadoop是基于Java语言开发的,同时Java语言也可以用来编写Hadoop应用程序,在Linux系统中安装Java环境有两种方式:Oracle的JDK或OpenJDK,本文采用第二中方式:
sudo apt-get install default-jre default-jdk
#使用apt安装jre和jdk
安装完成后,编辑~/.bashrc,添加JAVA_HOME环境变量:
vim ~/.bashrc
#编辑~/.bashrc
在.bashrc中添加如下单独一行:
export JAVA_HOME=/usr/lib/jvm/defult-java
然后执行如下代码,使环境变量立即生效:
source ~/.bashrc #使环境变量设置生效
检验一下是否设置正确:
echo $JAVA_HOME #打印$JAVA_HOME
java --version #查看java版本
Java安装成功后,就可以进行Hadoop的安装了
2.安装和配置Hadoop
2.1 Hadoop下载和安装
Hadoop官网:http://hadoop.apache.org/,选择合适的版本(本文采用Hadoop2.7.7)下载(可以在windows系统中下载后,用ftp软件如filezilla上传到ubuntu虚拟机,也可以在ubuntu中直接下载),本文使用filezilla上传hadoop压缩包到ubuntu的~/Downloads/目录下,然后解压缩到/usr/local/并重命名文件夹为hadoop,由于我们当前的用户为hadoop,没有usr/local的文件权限,所以还需要修改文件权限,执行命令如下:
sudo tar -zxf ~/Downloads/hadoop-2.7.7.tar.gz -C /usr/local #解压缩
cd /usr/local/
sudo mv ./hadoop-2.7.7 ./hadoop #重命名文件
sudo chown -R hadoop ./hadoop #修改文件权限,即将./hadoop目录下所有的文件的属组都改成hadoop,也可以使用sudo chmod 777 ./hadoop
解压成功后,就可以使用如下命令查看Hadoop的版本信息:
cd /usr/local/hadoop
./bin/hadoop version
2.2Hadoop模式配置
Hadoop的默认模式为本地模式(即单机模式),无须其他配置就可以运行,值得注意的是,Hadoop的模式变更(单机模式、伪分布式、分布式)完全是通过修改配置文件实现的,本文想要将Hadoop配置为伪分布式模式,即只有一个节点(一台机器),这个节点既作为名称节点(NameNode),也作为数据节点(DataNode),伪分布式模式配置涉及两个配置文件:hadoop目录/etc/hadoop/下的core-site.xml和hdfs-site.xml,首先在core-site.xml文件中新增如下属性:
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/tmp</value> #指定临时目录,如果不指定,会默认使用临时目录/tmp/hadoo-hadoop,这个文件在Hadoop重启时可能被清除
<description>Abase for other trmporary directories</description>
</property>
<property>
<name>fs.defaultFS</name> #指定HDFS的访问地址
<value>hdfs://localhost:9000</value>
</property>
然后在hdfs-site.xml中新增如下属性:
<property>
<name>dfs.replication</name> #指定副本数量
<value>1</value>
</property> <property>
<name>dfs.namenode.name.dir</name> #name节点的存储位置
<value>file:/usr/local/hadoop/tmp/dfs/name</value>
</property> <property>
<name>dfs.datanode.data.dir</name> #data节点的存储位置
<value>file:/usr/local/hadoop/tmp/dfs/data</value>
</property>
上面两个文件内涉及的属性名称和值得含义可以在Hadoop官网中查看:
http://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/core-default.xml
和http://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml
完成了配置文件的修改后,就可以执行名称节点格式化(NameNode Format)了:
cd /usr/local/hadoop
./bin/hdfs namenode -format
如果格式化成功,会看到Exiting with status 0的提示

然后执行以下命令启动Hadoop
cd /usr/local/hadoop
./sbin/start-dfs.sh
在终端中执行jps(查看所有java进程pid)判断hadoop是否启动成功:
jps
如果执行成功,就可以看到如下几个进程:

至此,Hadoop伪分布式环境搭建成功
3.问题总结
1.DataNode没有启动
通过查阅资料https://blog.csdn.net/islotus/article/details/78357857,原因是:
当我们使用hadoop namenode -format格式化namenode时,会在namenode数据文件夹(这个文件夹为自己配置文件中dfs.name.dir的路径)中保存一个current/VERSION文件,记录clusterID,datanode中保存的current/VERSION文件中的clustreID的值是上一次格式化保存的clusterID,这样就导致了datanode和namenode之间的ID不一致。
解决方法有两种,一是删除dfs文件(如果没有重要数据),二是在dfs/name目录下找到一个current/VERSION文件,记录clusterID并复制。然后dfs/data目录下找到一个current/VERSION文件,将其中clustreID的值替换成刚刚复制的clusterID的值即可
应该在每一次运行结束Hadoop后,都关闭Hadoop
2.一定要关注权限问题
因为Linux下对用户权限有着严格的约束,用户A只有权访问/home/A/下的文件,用户B只有权访问/home/B/下的文件,如果A想要访问B的文件fileB,那么就要赋权给A,具体的方法有很多种,本文在刚开始执行名称节点格式化的过程中老是出错,就是因为没有注意权限问题。
Hadoop学习笔记(一):ubuntu虚拟机下的hadoop伪分布式集群搭建的更多相关文章
- hadoop伪分布式集群搭建与安装(ubuntu系统)
		
1:Vmware虚拟软件里面安装好Ubuntu操作系统之后使用ifconfig命令查看一下ip; 2:使用Xsheel软件远程链接自己的虚拟机,方便操作.输入自己ubuntu操作系统的账号密码之后就链 ...
 - Hadoop单机/伪分布式集群搭建(新手向)
		
此文已由作者朱笑笑授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 本文主要参照官网的安装步骤实现了Hadoop伪分布式集群的搭建,希望能够为初识Hadoop的小伙伴带来借鉴意 ...
 - 基于Hadoop伪分布式集群搭建Spark
		
一.前置安装 1)JDK 2)Hadoop伪分布式集群 二.Scala安装 1)解压Scala安装包 2)环境变量 SCALA_HOME = C:\ProgramData\scala-2.10.6 P ...
 - Hadoop框架:单服务下伪分布式集群搭建
		
本文源码:GitHub·点这里 || GitEE·点这里 一.基础环境 1.环境版本 环境:centos7 hadoop版本:2.7.2 jdk版本:1.8 2.Hadoop目录结构 bin目录:存放 ...
 - Hadoop的HDFS和MapReduce的安装(三台伪分布式集群)
		
一.创建虚拟机 1.从网上下载一个Centos6.X的镜像(http://vault.centos.org/) 2.安装一台虚拟机配置如下:cpu1个.内存1G.磁盘分配20G(看个人配置和需求,本人 ...
 - Hadoop伪分布式集群搭建
		
声明:作者原创,转载注明出处. 作者:帅气陈吃苹果 1.下载Hadoop压缩包 wget http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop- ...
 - hadoop伪分布式集群的搭建
		
集群配置: jdk1.8.0_161 hadoop-2.6.1 linux系统环境:Centos6.5 创建普通用户 dummy 设置静态IP地址 Hadoop伪分布式集群搭建: 为普通用户添加su ...
 - hadoop学习笔记(五)hadoop伪分布式集群的搭建
		
本文原创,如需转载,请注明作者和原文链接 1.集群搭建的前期准备 见 搭建分布式hadoop环境的前期准备---需要检查的几个点 2.解压tar.gz包 [root@node01 ~]# ...
 - Hadoop学习---CentOS中hadoop伪分布式集群安装
		
注意:此次搭建是在ssh无密码配置.jdk环境已经配置好的情况下进行的 可以参考: Hadoop完全分布式安装教程 CentOS环境下搭建hadoop伪分布式集群 1.更改主机名 执行命令:vi / ...
 
随机推荐
- 为什么 max() 应该写成 b < a ? a : b 呢?
			
在 < C++ Templates 2nd Edition >Chapter 1 中,作者将 max() 模板定义如下: template <typename T> T max ...
 - AltiumDesigner20画图不求人10 | 提高AD20启动速度的方法六取消加入产品改善计划 | 视频教程 | 你问我答
			
教程内容:AltiumDesigner20画图不求人系列,是电子芯原创的AltiumDesigner绘图技巧视频教程,每一个技巧只需要不到3分钟的时间就可以完成学习.前期经过AD19的画图不求人,帮助 ...
 - PHP 日期与时间函数详解
			
在开发过程中,我们经常碰到日期与时间戳相关的功能,今天趁此机会做个详细笔记. date_default_timezone_set('PRC'); /*把时间调到北京时间,php5默认为格林威治标准时间 ...
 - 文件属性及find命令总结
			
第1章 文件属性 1.1 文件的属性 1.1.1 查看文件的详细属性 PS:ls查看的文件或目录默认的是按照名字的第一个字母进行正序排序 ls 参数选项: -t ...
 - 双击Back退出应用  android中弹出吐司
			
第一种方法: public void onBackPressed() { if (isState) { //isState初始值为true isState = false; Toast.makeTex ...
 - C#委托链
			
使用Delegate.Combine时,注意两点: 1. 不可以将不同签名的两个委托相互Combine. 2.如果将有返回值的两个委托A 和 B Combine,那么返回值是最后一个委托的的返回值,也 ...
 - Cython编译独立的可执行文件
			
cython --embed -o hello.c hello.pygcc hello.c -o hello -I /Library/Frameworks/Python.framework/Versi ...
 - Python基本
			
Python基本规则 1.面向对象的跨平台的编程语言 2.文件类型是.py, 3.一个文件是一个模块module,运行整个文件 4.不支持非英文字符,区分大小写 5.一行是一条语句,多条语句写一行用; ...
 - 搭建lnmp环境,nginx的配置文件/etc/nginx/nginx.conf
			
#user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #erro ...
 - UEFI、BIOS、GPT、MBR等概念的辨析
			
(本文转移自本人的旧博客) 从各个地方包括知乎,Wiki,CSDN搜索到的一些整理,这些概念极易混淆. 先说互相的关系 BIOS和UEFI是两种固件接口标准 MBR和GPT是两种分区表 Legacy模 ...