Hadoop集群安装

概述

集群

cluster,将很多任务进程分布到多台计算机上;通过联合使用多台计算机的存储、计算能力完成更庞大的任务。为了实现无限量的存储和计算能力,在生产环境中必须使用集群来满足需求。

总体步骤

基本步骤

1) 安装JDK,配置JDK环境变量

2) 安装Hadoop,配置Hadoop环境变量,配置Hadoop

3) 组织并在集群中分发文件

注意:如果使用克隆方案,克隆后需修改主机名及IP,修改方法参考文后附录。

其它要求

1) 集群中的计算机在时间上要同步,系统时间不能差太多(秒级),如果设置时间后重启时间又不准确了(主板电池老化),可以启用NTP(Network Time Protocol网络时间协议)服务解决。

2) 集群中的计算机在网络上能够相互访问

i. 虚拟机的网络使用桥接模式(如果在同一台物理机内的虚拟机间搭集群可以用NAT模式)

ii. 固定IP,要规划好IP地址和主机名

iii. 全部关闭防火墙

iv. 全部实现Hosts解析

v. 全部实现免密码SSH访问(可以统一密钥对)

网络规划

规划namenode主机名与ip

规划datanode主机名与ip

安装Linux

安装最小化版本(略)

注意网络选择桥接模式(但如果集群节点都在同一台物理机上选NAT更方便)

注意设置网络(安装过程中设置主机名、IP等)

注意设置时间(安装过程中设置网络时间同步)

关闭防火墙

关闭防火墙

systemctl stop firewalld

禁止防火墙开机启动

systemctl disable firewalld

查看防火墙状态

firewall-cmd --state

安装JDK(参考上一篇的内容)

略,注意在/etc/hadoop中设置环境变量,用source命令更新环境变量并检查

安装Hadoop

略,注意在/etc/hadoop中设置环境变量,用source命令更新环境变量

打开hadoop-evn.sh指定JDK位置

# The java implementation to use.

export JAVA_HOME=JDK位置

打开core-site.xml指定NameNode

<property>

<name>fs.defaultFS</name>

<value>hdfs://master:9000</value>

</property>

打开hdfs-site.xml指定SecondaryNameNode

<property>

<name>dfs.namenode.secondary.http-address</name>

<value>hdfs://master:50090</value>

</property>

注:以上只配置了HDFS,MapReduce等配置项随后使用时再添加

组织并在集群中分发以下文件

下面列出的文件需要组织好内容并分发到各个节点上。

使用scp命令可以跨节点复制文件!

${HADOOP_HOME}/etc/hadoop/slaves

Slaves文件的作用是当使用start-dfs.sh启动HDFS时,会自动将各个datanode节点自动启动起来。

不配Slaves也可以;但每个datanode需要手动启动。如果集群比较大,单独启动一些节点很正常。

单独启动datanode的命令是在指定的datanode节点上运行:

hadoop-daemon.sh stop datanode  #关闭当前节点上的datanode

hadoop-daemon.sh start datanode#启动当前节点上的datanode

Slaves文件如:

master #让master同时成为datanode,生产环境通常不需要!

slave1

slave2

在NameNode上整理好slaves文件,分发给每个datanode

scp slaves root@slaveXX: ${HADOOP_HOME}/etc/hadoop/

注意:此命令需在${HADOOP_HOME}/etc/hadoop目录中执行

${HADOOP_HOME}指Hadoop的安装目录

/etc/hosts

Hosts的作用是可以在网络使用名字替换IP地址,文件内容如下:

192.168.13.10 master

192.168.13.21 slaves1

可以NameNode上整理好,然后分发到各个节点

scp
/etc/hosts root@slaveXX
:/etc/hosts

~/.ssh/authorized_keys

Authorized_keys的作用是可以免密码地使用SSH跨节点相互访问

生成密钥

在NameNode上使用ssh-keygen命令生成密钥对

ssh       #先运行一下ssh命令

ssh-keygen     #生成密钥对(如果已经有了,直接使用现有的)

生成的密钥对在~/.ssh中,分别是:

id_rsa #私钥

id_rsa.pub #公钥~

授权公钥

在NameNode上使用cat命令将公钥放入授权文件,授权后可以免密码访问

cat xxx.pub >> authorized_keys~

将~/.ssh目录复制到任意一个DataNode

scp -r ~/.ssh root@slave1:~/

生成known_hosts文件

在NameNode上使用ssh slave1访问DataNode,输入yes

成功后使用ssh
master
访问NameNode,输入yes

known_hosts文件记录了用户已经yes或no过的公钥指纹,以后不用再反复yes了

分发.ssh

将NameNode上的~/.ssh复制到所有DataNode上,让整个集群使用同一对密钥

并且已经授权

scp -r ~/.ssh root@slaveXX:~/

注意事项

SSH相关的文件对权限比较敏感,其它用户不能有写权限

如果遇到总是需要密码才能登录的问题可以按下面检查并更改权限:

~         #权限700

~/.ssh    #权限700

~/.ssh/id_rsa      #权限600

~/.ssh/id_rsa.pub      #权限600

~/.ssh/known_hosts      #权限600

~/.ssh/authorized_keys      #权限600

设置权限

chmod 600
~/.ssh/authorized_keys

启动

格式化

在namenode上运行

hdfs namenode -format

启动

在namenode上运行

start-dfs.sh

检查启动结果

【1】用JPS查看Java进程

NameNode #NameNode启动了,NameNode上要有此进程

DataNode #DataNode启动了,DataNode上要有此进程

SecondaryNameNode #SecondaryNameNode启动了

#这个是NameNode上的辅助进程

【2】用master:50070查看Hadoop站点,检查各个节点是否启动

【3】用命令测试,检查HDFS是否工作正常

hdfs dfs -mkdir /abc

hdfs dfs -ls /

常见问题:

遇到问题时查看日志对解决问题非常有帮助

日志在${HADOOP_HOME}/logs中

NameNode有问题就查看NameNode相关的日志

DataNode有问题查看DataNode相关的日志

 

1) NameNode启动失败

如果配置没错的话,删除namenode中的${hadoop.tmp.dir}/dfs,然后重新格式化(数据会丢失)

2) DataNode启动失败

如果查看日志,发现集群ID不同,可以修改集群ID,在下面的文件中

${hadoop.tmp.dir}/dfs/data/current/VERSION

clusterID=CID-xxx

或者删除 ${hadoop.tmp.dir}/dfs/data

重新启动

hadoop-daemon.sh stop datanode

hadoop-daemon.sh start datanode

3) 某些节点启动失败

a) 检查防火墙是否关闭(包括windows系统中的360等)

b) 检查SSH免密码访问,双向互跳都检查一下

c) 检查etc/hosts设置,主机名是否都已经加入

d) 检查${HADOOP_HOME}/slaves

e) 检查Hadoop其它配置文件

f) 检查系统时间是否正确(不正确可以安装NTP,并开启网络时间同步)

附录

查看及修改主机名

查看主机名

hostname

设置主机名

vi /etc/hostname

s1

查看及修改IP

vi /etc/sysconfig/network-scripts/ifcfg-ens33

 

BOOTPROTO=static

IPADDR=192.168.1.11

NETMASK=255.255.255.0

NETWORK=192.168.1.0

ONBOOT=yes

DNS1=223.5.5.5

DNS2=223.6.6.6

重启网络服务

systemctl restart network

service network restart

网络时间同步

网络时间协议

Network Time Protocol

查看ntp是否安装

rpm -q ntp

安装和设置ntp服务

yum -y install ntp

systemctl start ntpd

systemctl enable ntpd

查看NTP服务器

ntpq -p

查看同步状态

ntpstat

使用国内yum源加速

cd /etc/yum.repos.d

wget http://mirrors.163.com/.help/CentOS7-Base-163.repo

mv CentOS-Base.repo CentOS-Base.repo.bk

mv CentOS7-Base-163.repo CentOS-Base.repo

 

yum makecache

阿里云yum源

http://mirrors.aliyun.com/repo/Centos-7.repo

Linux下搭建Hadoop集群(Centos7.0)的更多相关文章

  1. Linux下搭建Hadoop集群

    本文地址: 1.前言 本文描述的是如何使用3台Hadoop节点搭建一个集群.本文中,使用的是三个Ubuntu虚拟机,并没有使用三台物理机.在使用物理机搭建Hadoop集群的时候,也可以参考本文.首先这 ...

  2. Linux上安装Hadoop集群(CentOS7+hadoop-2.8.0)--------hadoop环境的搭建

    Linux上安装Hadoop集群(CentOS7+hadoop-2.8.0)------https://blog.csdn.net/pucao_cug/article/details/71698903 ...

  3. Linux下搭建tomcat集群全记录(转)

    本文将讲述如何在Linux下搭建tomcat集群,以及搭建过程中可能的遇到的问题和解决方法.为简单起见,本文演示搭建的集群只有两个tomact节点外加一个apache组成,三者将安装在同一机器上:ap ...

  4. Linux下搭建tomcat集群全记录

    (转) Linux下搭建tomcat集群全记录 2011-10-12 10:23 6133人阅读 评论(1) 收藏 举报 tomcatlinuxapacheinterceptorsession集群 1 ...

  5. Linux上搭建Hadoop集群

    本文将为初学者的搭建简单的伪分布式集群,将搭建一台虚拟机,用于学习Hadoop 工具:vm虚拟机,centOS7,jdk-8,Hadoop2.7,xftp,xshell 用户:在虚拟机中创建一个had ...

  6. Linux上安装Hadoop集群(CentOS7+hadoop-2.8.0)

    1下载hadoop 2安装3个虚拟机并实现ssh免密码登录 2.1安装3个机器 2.2检查机器名称 2.3修改/etc/hosts文件 2.4 给3个机器生成秘钥文件 2.5 在hserver1上创建 ...

  7. CDH搭建Hadoop集群(Centos7)

    一.说明 节点(CentOS7.5) Server  || Agent CPU node11 Server  || Agent 4G node12 Agent 2G node13 Agent 2G 二 ...

  8. 170711、Linux下搭建MySQL集群

    一.MySQL集群简介 1.什么是MySQL集群 MySQL集群是一个无共享的(shared-nothing).分布式节点架构的存储方案,其目的是提供容错性和高性能. 数据更新使用读已提交隔离级别(r ...

  9. Linux系统搭建Hadoop集群

    一.环境说明 IP地址 主机名 备注 操作系统 192.168.92.11 hserver1 namenode Ubuntu 16.04 192.168.92.12 hserver2 datanode ...

随机推荐

  1. GridFS实现原理

    GridFS在数据库中,默认使用fs.chunks和fs.files来存储文件. 其中fs.files集合存放文件的信息,fs.chunks存放文件数据. 一个fs.files集合中的一条记录内容如下 ...

  2. C++ 关键字——friend【转载】

    转载自: http://www.cnblogs.com/CBDoctor/archive/2012/02/04/2337733.html 友元是指: 采用类的机制后实现了数据的隐藏与封装,类的数据成员 ...

  3. Java把数字格式化为货币字符串

    数字可以标志货币.百分比.积分和电话号码等,就货币而言,在不同的国家会以不同的格式来定义,本实例将接收用户输入的数字,然后在控制台中输出其货币格式,其中使用了不同国家的货币格式. 思路如下:使用Num ...

  4. Java -- 异常的捕获及处理 -- 目录

    7 异常的捕获及处理 7.1 异常的基本概念 7.1.1 为什么需要异常处理 7.1.2 在程序中使用异常处理 7.1.3 异常类的继承结构 7.1.4 Java的异常处理机制 7.2 throws与 ...

  5. Linux Redis安装,Linux如何安装Redis,Linux Redis自动启动,Redis开机启动

    Linux Redis安装,Linux如何安装Redis,Linux Redis自动启动,Redis开机启动 >>>>>>>>>>>& ...

  6. 【译】Kafka最佳实践 / Kafka Best Practices

    本文来自于DataWorks Summit/Hadoop Summit上的<Apache Kafka最佳实践>分享,里面给出了很多关于Kafka的使用心得,非常值得一看,今推荐给大家. 硬 ...

  7. 目前学习.net时间让我摸不着头脑的事情

    呜呜,不太喜欢做笔记,只喜欢把自己不懂的和预习时间有麻烦的简单记下,所以这里也是能可以让我写下我们的学习点滴··· 今天学习了<1>.变量的作用域,在想是不是之前听过的局部变量和全局变量? ...

  8. iOS - 系统权限(关键时刻很有用的)

    iOS开发中权限问题: APP开发避免不开系统权限的问题,如何在APP以更加友好的方式向用户展示系统权限,似乎也是开发过程中值得深思的一件事: 那如何提高APP获取iOS系统权限的通过率呢?有以下几种 ...

  9. Android学习之Gallery

    在Android中,画廊控件Gallery用来显示图片列表,可以用手指直接拖动图片左右移动.Gallery只能水平显示一行,且Gallery列表中的图片会根据不同的拖动情况向左或向右移动,直到显示到最 ...

  10. 使用JDBC插入数据到ORACLE,使用标识列自增列

    不同于SQL Server的是,Oracle中插入数据的时候,没有自增列或者是标识列,但是,我们又不想显式的进行主键的插入,这里,必须在Oracle数据库中指定一个标识列,或者说是一个序列.具体方法如 ...