超详细!CentOS 7 + Hadoop3.0.0 搭建伪分布式集群

ps:本文的步骤已自实现过一遍,在正文部分避开了旧版教程在新版使用导致出错的内容,因此版本一致的情况下照搬执行基本不会有大错误。如果按本文步骤进行的时候出事了,可以鼠标选中博客页面右侧的目录导航看看最后一部分的意外出事的坑点解决方案。

准备linux主机环境

一、安装虚拟机

下载地址:

VMware workstation 14 Pro (附:许可证秘钥

系统iso:CentOS7 Minimal

基本上就是下一步下一步这种简单的默认安装就好了。除了在安装过程中配置分区的时候可能需要手动分区,然后选择标准分区即可。

装好后,修改内存,因为不需要图形界面,所以只给个512M内存也没问题。并更改网络适配器为VMnet8(NAT)。

附上NAT方式的工作原理



(CentOS和Windows这两台机子通过虚拟网关互联,虚拟网关由VMware workstation生成,在Windows上会生成一个虚拟网卡VMnet8,这个网卡地址和本机的物理网卡没有关系)

二、网络配置

在VMware workstation的菜单 编辑 -> 虚拟网络编辑器 可以查看和修改虚拟网关地址。

然后打开控制面板的网络连接查看VMnet8的IP地址

如图,在我这台机子上:

虚拟网关地址 192.168.216.1

VMnet8 IP地址 192.168.216.2

运行虚拟机,进行网络配置:

1.输入 ip addr 看到我的网卡叫做ens33

2.输入 ls /etc/sysconfig/network-scripts/ 看到网卡ip信息的配置文件名叫做ifcfg-ens33



3.输入 cat /etc/sysconfig/network-scripts/ifcfg-ens33 查看,可以发现虽然BOOTPROTO=dhcp,但是ONBOOT=no

(下面4-6步纯属实验性质可忽视,直接开始第7步)

4.输入 vi /etc/sysconfig/network-scripts/ifcfg-ens33 将ONBOOT=no修改为yes,在此之前要先进入root模式chmod 777 文件名把文件改为可写状态。修改完毕后,cat一下看看

5.输入 shutdown -r now 重启系统

6.重启完成后,ip addr 看到分配到的地址是192.168.216.128

下面开始进行固定ip的设置。

7.输入vi /etc/sysconfig/network-scripts/ifcfg-ens33,用#将BOOTPROTO=dhcp注释,并输入以下参数,把ip地址固定写为192.168.216.100

IPADDR0=192.168.216.100
PREFIX0=24
GATEWAY0=192.168.216.1
DNS1=192.168.216.1



(后来看到有BOOTPROTO=dhcp这行不注释而是改为BOOTPROTO=static,以及多配置一行NETMASK=255.255.255.0而没有DNS那行的,似乎也可以)

8.输入 service network restart 重启网络服务

9.输入 ip addr 确认配置成功

10.PING 一波试试。

现在用windows主机ping一下刚配置好的虚拟机试试看能否ping通,行的话这步就已经完成了。

三、修改主机名

下载安装终端软件 Mobaxterm。点击 sessions -> New sessions -> SSH,输入虚拟机的IP地址和用户名。现在就可以把刚建好的虚拟机假装是远程终端一样的用了。

然后修改主机名方便集群间的访问

sudo vi /etc/sysconfig/network ,假设我给它起名字叫node01,则输入

NETWORKING=yes
HOSTNAME=node01

改好后需要重启。若不想重启可以输入 sudo hostname node01 然后exit登出,重新登录终端,就可以看到已经生效了。



(可以看到原本是localhost的地方变为了node01)

修改域名解析映射文件使得后续可以直接通过主机名访问,sudo vi /etc/hosts,添加一行 IP地址 主机名

PING一波试试是否已生效

到此为止linux主机环境已完成。

安装jdk

一、下载解压

在主目录~下新建一个文件夹来放之后要装的所有文件比如叫做app mkdir app

从官网下载jdk包,我下载的是 jdk-8u161-linux-x64.tar.gz

打开 Mobaxterm。点击 sessions -> New sessions -> SFTP,注意要使用root登录。然后打开相应目录直接把本地文件拖拽到那一大块空白处即可。

把刚刚的压缩包解压到这个目录下 tar -zxvf jdk-8u161-linux-x64.tar.gz -C ~/app/ (后面那个参数是由于我拖拽的时候把原压缩包放到/usr/java文件夹了所以用 -C 把它解压到指定文件夹下)

进入 app/jdk1.8.0_161/bin 目录下,./java -version 看是否成功安装

二、配置环境变量PATH

sudo vi /etc/profile

在最末尾处添加两行

export JAVA_HOME=/home/thousfeet/app/jdk1.8.0_161
export PATH=$PATH:$JAVA_HOME/bin

(JAVA_HOME变量的值可能因人而异,查看方式可以是在 mobaxterm 的左侧这个 session 的图标上右击->duplicate session 复制出一个新 session ,然后进入之前jdk文件夹下输入pwd,然后选中这串东西贴过来)

配置好了之后我们想要使它立刻生效,输入 source /etc/profile,然后输入 java -version看到能够使用。这样就已经配置好了。

安装Hadoop

下载 hadoop 3.0.0 压缩包。

打开 Mobaxterm 刚刚那个 SFTP ,老样子拖拽上传解压到/app。

进入解压目录 cd /app/hadoop-3.0.0/etc/hadoop

一、配置 hadoop-env.sh

vi hadoop-env.sh,修改 JAVA_HOME 为之前那个参数

二、配置 core-site.xml

vi core-site.xml,在configuration中添加各配置项

1.配置默认采用的文件系统。

(由于存储层和运算层松耦合,要为它们指定使用hadoop原生的分布式文件系统hdfs。value填入的是uri,参数是 分布式集群中主节点的地址 : 指定端口号

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

2.配置hadoop的公共目录

(指定hadoop进程运行中产生的数据存放的工作目录,NameNode、DataNode等就在本地工作目录下建子目录存放数据。但事实上在生产系统里,NameNode、DataNode等进程都应单独配置目录,而且配置的应该是磁盘挂载点,以方便挂载更多的磁盘扩展容量)

<property>
<name>hadoop.tmp.dir</name>
<value>/home/thousfeet/app/hadoop-3.0.0/data/</value>
</property>

(value的参数仍与之前一样可以进入解压目录输入pwd查看)

三、配置 hdfs-site.xml

vi hdfs-site.xml,配置hdfs的副本数

(客户端将文件存到hdfs的时候,会存放在多个副本。value一般指定3,但因为搭建的是伪分布式就只有一台机器,所以只能写1。)

<property>
<name>dfs.replication</name>
<value>1</value>
</property>

四、配置 mapred-site.xml

vi mapred-site.xml,指定MapReduce程序应该放在哪个资源调度集群上运行。若不指定为yarn,那么MapReduce程序就只会在本地运行而非在整个集群中运行。

<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>

五、配置 yarn-site.xml

vi yarn-site.xml,要配置的参数有2个:

1.指定yarn集群中的老大(就是本机)

<property>
<name>yarn.resourcemanager.hostname</name>
<value>node01</value>
</property>

2.配置yarn集群中的重节点,指定map产生的中间结果传递给reduce采用的机制是shuffle

<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>

六、配置环境变量PATH

输入 sudo vi /etc/profile

加入一行 export HADOOP_HOME=/home/thousfeet/app/hadoop-3.0.0

以及修改PATH,追加参数 export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

然后记得 source /etc/profile

现在就可以在任意地方使用hadoop指令了。

关掉防火墙

由于hadoop中的程序都是网络服务,需要监听端口,这些端口默认会被linux防火墙挡住。因此要把hadoop中的端口一个个打开,或者把防火墙关掉。由于都是内网,所以关掉就好了。

sudo firewall-cmd --state 查看防火墙状态

sudo systemctl stop firewalld.service 关闭防火墙

再次查看状态,看到已经关闭了。但在下一次开机时还会自启动,因此 sudo systemctl disable firewalld.service 禁止开机时防火墙自启。

实现SSH免密码远程登录

SSH机制解析图(假如有一台叫做weekend110的终端要远程登录叫做spark01的终端)

我们要做的只是黑色箭头的步骤,绿色的是SSH机制的内部实现。

一、创建公钥/私钥

ssh-keygen -t rsa,然后yes加一路回车

二、创建authorized_keys文件并修改权限为600

cd .ssh
touch authorized_keys
chmod 600 authorized_keys

三、将公钥追加到authorized_keys文件中去

cat id_rsa.pub >> authorized_keys

ssh node01 试试看能否成功免密登录



(因为是伪分布式集群,其实就是自己登录自己)

启动Hadoop

一、初始化(格式化)

输入 hadoop namenode -format

二、启动

start-dfs.sh

start-yarn.sh

然后输入jps 查看已成功启动的进程

若出现这六个都没少则说明已全部成功启动了。


几个坑点

出事点1:can't open file for writing

在网络配置第4步的时候,遇到了can't open file for writing,然而试图chmod也并没有成功,查了半天得知可能需要删除在/var/tmp路径下的.swp隐藏文件(来自http://blog.csdn.net/luoluoguo/article/details/11557291)。然后chmod,发现root状态下vi这个文件看到里面内容是空的(?)于是切换回普通用户vi修改保存后退出就成功了。

出事点2:不在sudoers文件中

第一次使用sudo命令的时候失败提示“不在sudoers文件中”



因此要切换到root修改一下sudoers文件:vi /etc/sudoers,在如下图的位置加上一行自己的用户名

出事点3:wget下载JDK后解压不了

安装jdk的时候试图用wget直接从官网下载,高高兴兴的一波操作

sudo wget http://download.Oracle.com/otn-pub/java/jdk/8u121-b13/e9e7ea248e2c4826b92b3f075a80e441/jdk-8u121-linux-x64.tar.gz
tar -xf jdk-8u121-linux-x64.tar.gz

发现GG了,怎么都解压不了,查了下发现非要手动下载再传,迷得不行orz(来自http://blog.csdn.net/jdjdndhj/article/details/73649419#/)

出事点4:Found a swap file by the name "/etc/.profile.swp"

环境变量配置到一半的时候电脑突然死机了(T T 渣机是真的难受),重启后再次进入编译/etc/profile的时候出现如下错误提示

E325: ATTENTION

Found a swap file by the name "/etc/.profile.swp"

owned by: root dated: Wed Jul 14 10:01:10 2010

file name: /etc/profile

modified: YES

user name: root host name: zhaoyang-laptop

process ID: 1934

While opening file "/etc/profile"

dated: Thu Apr 29 20:18:30 2010

解决方法是:q!退出vi编辑器,在终端输入sudo rm -f /etc/.profile.swp

出事点5:启动hadoop后jps查看进程只有一个

在配置完成后我直接启动了hadoop并jps查看,发现只有JPS一个进程,开始没注意启动过程提示一直在检查配置错误,除去上文的配置又补做了如下操作:(事实上下面的做不做都并不需要,但为了避免最终操作和文中不符所以还是列出来)

修改了hadoop-env.sh配置了hadoop_home变量

把core-site.xml的9000后多余的/去掉

mapred-site.xml加上了

<property>
<name>mapreduce.admin.user.env</name>
<value>HADOOP_MAPRED_HOME=$HADOOP_COMMON_HOME</value>
</property>
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=$HADOOP_COMMON_HOME</value>
</property>

后来恍然意识到是没有输入密码,启动过程中也不会给输入密码的提示步骤,所以一定要先配置SSH免密登录。

出事点6:启动hadoop后jps查看进程没有datanode

这个坑点是重复格式化造成的。

当我们执行文件系统格式化时,会在namenode数据文件夹(即配置文件中dfs.name.dir在本地系统的路径)中保存一个current/VERSION文件,记录namespaceID,标识了所格式化的 namenode的版本。如果我们频繁的格式化namenode,那么datanode中保存(即配置文件中dfs.data.dir在本地系统的路径)的current/VERSION文件只是你第一次格式化时保存的namenode的ID,因此就会造成datanode与namenode之间的id不一致。

我们之前配置的时候是一起放在一个data文件夹下,所以先进到那个路径下去查看:cd /home/thousfeet/app/hadoop-3.0.0/data/dfs,会看到一个data文件夹和一个name文件夹。

cd cd name/current/,然后cat VERSION,把namenode的clusterID复制下来。

然后回到data文件夹下的current文件夹,vi VERSION,果然datanode这里的clusterID和namenode里的不一致,就把这串替换成刚复制过来的就好了。

这时候stop-all.sh,然后重新启动就好了。

出事点5:启动hadoop后无法访问50070端口

jps查看一切正常,防火墙也已经关闭。查看监听的端口发现8088都有,就是没有50070。

解决方案:

在 hdfs-site.xml 添加如下:

<property>
<name>dfs.http.address</name>
<value>192.168.216.100:50070</value>
</property>

然后重新格式化namenode,启动hadoop。

(来自https://blog.csdn.net/Neone__u/article/details/53741786)


附:vi命令的使用

首先使用命令 vi filename 打开一个文件,这个时候进入到的是命令模式

接下来按 i 进入insert模式,然后键盘随便输入写内容。

然后按ESC重新进入到命令模式。

在命令模式的情况下,按 : ,进入到了末行模式。

输入wq!,然后回车,强行保存退出。

下次再打开对应文件(可用less filename命令打开),即可看到内容已经更改。

补充:

(1)末行模式下:q! 【强制退出不保存】 q【退出不保存】 wq【退出并保存后面也可以加个!】

(2)如果你不想保存直接退出有可以在命令模式下使用“ctrl+z”快捷键或者按住“shift”键,输入两个z即可退出。


参考资料

CentOS 7 网络配置详解

CentOS中防火墙相关的命令(CentOS7中演示)

VMware安装Centos7超详细过程(图文)

超详细!CentOS 7 + Hadoop3.0.0 搭建伪分布式集群的更多相关文章

  1. hadoop搭建伪分布式集群(centos7+hadoop-3.1.0/2.7.7)

    目录: Hadoop三种安装模式 搭建伪分布式集群准备条件 第一部分 安装前部署 1.查看虚拟机版本2.查看IP地址3.修改主机名为hadoop4.修改 /etc/hosts5.关闭防火墙6.关闭SE ...

  2. 超详细从零记录Hadoop2.7.3完全分布式集群部署过程

    超详细从零记录Ubuntu16.04.1 3台服务器上Hadoop2.7.3完全分布式集群部署过程.包含,Ubuntu服务器创建.远程工具连接配置.Ubuntu服务器配置.Hadoop文件配置.Had ...

  3. hadoop(二)搭建伪分布式集群

    前言 前面只是大概介绍了一下Hadoop,现在就开始搭建集群了.我们下尝试一下搭建一个最简单的集群.之后为什么要这样搭建会慢慢的分享,先要看一下效果吧! 一.Hadoop的三种运行模式(启动模式) 1 ...

  4. centos7搭建伪分布式集群

    centos7搭建伪分布式集群 需要 centos7虚拟机一台: jdk-linux安装包一个 hadoop-2.x安装包1个(推荐2.7.x) 一.设置虚拟机网络为静态IP(最好设成静态,为之后编程 ...

  5. Redis集群搭建,伪分布式集群,即一台服务器6个redis节点

    Redis集群搭建,伪分布式集群,即一台服务器6个redis节点 一.Redis Cluster(Redis集群)简介 集群搭建需要的环境 二.搭建集群 2.1Redis的安装 2.2搭建6台redi ...

  6. 超快速使用docker在本地搭建hadoop分布式集群

    超快速使用docker在本地搭建hadoop分布式集群 超快速使用docker在本地搭建hadoop分布式集群 学习hadoop集群环境搭建是hadoop入门的必经之路.搭建分布式集群通常有两个办法: ...

  7. CentOS中搭建Redis伪分布式集群【转】

    解压redis 先到官网https://redis.io/下载redis安装包,然后在CentOS操作系统中解压该安装包: tar -zxvf redis-3.2.9.tar.gz 编译redis c ...

  8. 摘要: CentOS 6.5搭建Redis3.2.8伪分布式集群

    from https://my.oschina.net/ososchina/blog/856678     摘要: CentOS 6.5搭建Redis3.2.8伪分布式集群 前言 最近在服务器上搭建了 ...

  9. Linux单机环境下HDFS伪分布式集群安装操作步骤v1.0

    公司平台的分布式文件系统基于Hadoop HDFS技术构建,为开发人员学习及后续项目中Hadoop HDFS相关操作提供技术参考特编写此文档.本文档描述了Linux单机环境下Hadoop HDFS伪分 ...

随机推荐

  1. spring mvc 映射器和适配器

    映射器和适配器 1.非注解的映射器和适配器 a. 入门程序中的单个映射 BeanNameUrlHandlerMapping SimpleControllerHandlerAdapter b.另一种ma ...

  2. 【转】楼天城楼教主的acm心路历程(作为励志用)

    利用假期空闲之时,将这几年GCJ,ACM,TopCoder 参加的一些重要比赛作个回顾.昨天是GCJ2006 的回忆,今天时间上更早一些吧,我现在还清晰记得3 年前,我刚刚参加ACM 时参加北京赛区2 ...

  3. 【转】关于BeanUtils.copyProperties的用法和优缺点

    一.简介:  BeanUtils提供对Java反射和自省API的包装.其主要目的是利用反射机制对JavaBean的属性进行处理.我们知道,一个JavaBean通常包含了大量的属性,很多情况下,对Jav ...

  4. 学习 java 编程语言两个月来的感受

    今天是我接触java编程的第81天, 现在的感受是觉得非常快乐, 每次看着自己的写的代码能成功运行的时候那种喜悦是无法言表的, 最初接触电脑还是在小学, 后来到了初中觉得电脑无非就是点点鼠标, 按按键 ...

  5. nginx部署(普通用户)

    1. Install Nginx software prerequisites : $ sudo yum install pcre pcre-devel openssl-devel perl gcc ...

  6. 在Spring使用junit注解进行单元测试

    在Spring中可以使用junit配合注解进行单元测试 一.常用注解 1.@RunWith(SpringJUnit4ClassRunner.class),让测试运行于spring测试环境2.@Cont ...

  7. Golang之匿名函数和闭包

    Go语言支持匿名函数,即函数可以像普通变量一样被传递或使用. 使用方法如下: main.go package main import ( "fmt" ) func main() { ...

  8. string.match(RegExp) 与 RegExp.exec(string) 深入详解

    string.match(RegExp) 与 RegExp.exec(string) 相同点与不同点对比解析: 1. 这两个方法,如果匹配成功,返回一个数组,匹配失败,返回null. 2. 当RegE ...

  9. DART: a fast and accurate RNA-seq mapper with a partitioning strategy DART:使用分区策略的快速准确的RNA-seq映射器

    DART: a fast and accurate RNA-seq mapper with a partitioning strategyDART:使用分区策略的快速准确的RNA-seq映射器 Abs ...

  10. 关于流程图设计,你需要Get的几点必备知识

    流程图(Flow Chart)这个概念对很多人来说并不陌生,但如果让你定义或者举例说明什么是产品流程图,恐怕还是有难度的.或许诸如“用户体验”.“交互设计”.“逻辑关系”等词会像走马灯般闪现在你的脑海 ...