Spark入门 - 1 搭建Hadoop分布式集群

安装Ubuntu系统

不论是通过虚拟机方式还是直接在物理机上安装Ubuntu系统,网上都有丰富的教程,此处不再赘述。

为了方便起见,此处设置的机器名最好与书本的设置一致:Master、Slave1和Slave2。

配置root用户登录

这里有一步与普通教程不同。在安装好系统,重启之后,完成了相关配置。可以进行这一步,设置使用root用户登录,方便以后多个服务器相互操作。如下所示。

为了简化权限问题,需要以root用户的身份登录使用Ubuntu系统。而在默认情况下,Ubuntu没有开启root用户,这里做相关配置。在命令终端输入sudo -s命令,然后根据提示输入密码,进入root用户权限模式。

如果是Ubuntu 12.04(本人机器)和书本对应的Ubuntu 12.10,或者能够找到/etc/lightdm/目录下的lightdm.conf文件,则按照下面的方法1操作;如果该文件不存在,则按照方法2操作。

方法1:

在命令终端输入vim /etc/lightdm/lightdm.conf命令(或者在root权限下直接gedit/etc/lightdm/lightdm.conf),修改lightdm.conf的内容为:

[SeatDefaults]
greeter-session=unity-greeter
user-session=ubuntu
greeter-show-manual-login=true

即添加了一行greeter-show-manual-login=true

此处可能需要安装vim,根据提示执行sudo apt-get install vim即可。

保存文件,然后退出。在命令终端输入命令passwd root,设置管理员用户密码,最好与普通用户一致。

root@box:~# passwd root
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
root@box:~# 

然后重启,之后登录界面会多一个Login选项,输入账号名root和密码,即可使用root账户登录。

到这里,这部分的配置结束。

方法2:

测试了一下最新的Ubuntu 16.04,发现上面的lightdm.conf文件不存在,然后按照网上的资料进行配置。

基本步骤完全一样:打开终端,输入命令sudo -s

到这里可以先通过passwd root配置管理员账号密码。

然后编辑配置文件:

gedit /usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf

之后操作与上面一样,新增一行greeter-show-manual-login=true

之后重启即可。

Error found when loading /root/.profile

如果登录过程中提示:

Error found when loading /root/.profile
mesg: ttyname failed: Inappropriate ioctl for device
As result the session will not be configured correctly.
You should fix the problem as soon as feasible.

则启动系统后,提取权限到root用户,然后通过#vim /root/.profile修改/root/目录下的.profile文件,将其中的mesg n替换成tty -s && mesg n。重启系统,问题解决。

重启ubuntu,问题解决

安装JDK

参照之前的博客,按步骤来即可。

搭建另外两台Ubuntu系统并配置SSH免密码登录

之前的系统安装和JDK安装都大同小异,不在赘述。VMware下可以直接复制虚拟机,会简单很多,不过稍后需要自行修改某些配置。

简单起见,系统和JDK的配置最好保持一致,如均采用root用户登录、JDK安装目录。

配置SSH免密码登录

SSH的基本操作参照另一篇博客。配置成功即可。

Hadoop的Master和Slave结点之间的通信,以及Spark的Master和Worker结点之间的通信,都是通过SSH来完成的。为了避免以后每次通信都要输入密码,此处配置几台服务器相互SSH免密码登录。

注意下面均为在sudo -s之后的操作。

后续的3步主要目的在于将各个主机的公钥互存。每个主机都在authorized_keys文件中保存自己和其他所有主机的公钥,也就是每个主机的authorized_keys文件都是一样的。

生成公钥和私钥

在终端中输入

root@master:~# ssh-keygen -t rsa -P ‘‘

命令,然后回车一次(如果不带-P参数,则连续回车三次),然后在/root/.ssh目录下已经生成公钥文件id_rsa.pub和私钥文件id_rsa。同样的在其他所有主机上进行相同的操作,生成各自的公钥、私钥文件。

追加公钥

追加本机公钥

将公钥id_rsa.pub追加到authorized_keys文件内(如果文件不存在则新建:touch authorized_keys):

root@master:~/.ssh# cat id_rsa.pub >> authorized_keys

此时authorized_keys文件内已经包含id_rsa.pub文件的内容了。

追加其他主机的公钥

首先将其他主机的公钥通过scp命令复制到本机。以slave1主机为例,主机IP为192.168.247.131:

root@slave1:~/.ssh# scp id_rsa.pub r[email protected]:/root/.ssh/id_rsa.pub.slave1

可以通过ifconfig命令查看本机IP。

然后追加公钥:

root@master:~/.ssh# cat id_rsa.pub.slave1 >> authorized_keys

其余主机操作类似。

共享authorized_keys文件

此时主机master的authorized_keys文件已经包含了所有主机的公钥信息,也包括自己的。然后我们将master主机的authorized_keys文件复制到其余所有主机,相当于其他主机也都自己保存了所有主机的公钥。

root@master:~/.ssh# scp authorized_keys [email protected]:192.168.247.131:/root/.ssh/authorized_keys

更换IP即可复制到其他主机。

测试SSH登录

root@master:~# ssh 192.168.247.131

安装Hadoop和搭建Hadoop分布式集群

前面的算是准备工作,这里才真正涉及到Hadoop相关配置及操作。

下面的主要任务是配置Hadoop的文件和系统的相关文件两个方面。可以单独对各台主机进行配置,内容都一样;也可以直接将master主机的配置文件通过scp命令复制到其他主机;另外,书本提到,配置服务器集群的时候,可以使用PSSH简化配置。

安装Hadoop

1、下载Hadoop

在官网下载Hadoop,选择bin版本的压缩包,如hadoop-2.7.2.tar.gz,解压后将文件夹放在/usr/local/hadoop/目录下,最终效果为:/usr/local/hadoop/hadoop-2.7.2

2、 配置hadoop-env.sh

在目录/usr/local/hadoop/hadoop-2.7.2/etc/hadoop下的文件hadoop-env.sh内配置JDK的安装信息。

显式的配置成下面这样:

# The java implementation to use.
export JAVA_HOME=/usr/lib/java/jdk1.8.0_91

3、 配置.bashrc

为了方便之后开机启动系统后可以立即使用Hadoop的bin目录下的命令,可以把Hadoop的bin目录配置到~/.bashrc文件中,修改后的配置如下:

#    . /etc/bash_completion
#fi
export JAVA_HOME=/usr/lib/java/jdk1.8.0_91
export PATH=$JAVA_HOME/bin:/usr/local/hadoop/hadoop-2.7.2/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JRE_HOME=${JAVA_HOME}/jre

export HADOOP_HOME=/usr/local/hadoop/hadoop-2.7.2

主要为HADOOP_HOME和PATH的配置。

保存并退出。

使用source ~/.bashrc命令使配置信息生效。

使用hadoop version验证是否配置成功。

配置Hadoop分布式集群

配置主机名及IP地址

以master主机的操作为例。

1、 修改主机名。

/etc/hostname文件内只有一行,修改为想要的主机名即可。此处是为了配置Spark集群,因此命名风格规范化。此处修改成master。

root@master:~# cat /etc/hostname
master
root@master:~#

2、 主机名和IP的对应关系

修改/etc/hosts文件,在文件内添加三台主机的名字和IP地址。最终效果如下:

root@master:~# cat /etc/hosts
127.0.0.1   localhost
127.0.1.1   Tbox
192.168.247.130 master
192.168.247.131 worker1
192.168.247.132 worker2

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
root@master:~#

关键在于4~6行的配置。其中IP地址可以通过在终端中输入ifconfig命令查看。

如果修改后,主机名没有生效的话,重启系统再开机的时候会发现主机名已经改变。

3、 其余主机

其余两台主机的配置类似。可以手动配置,可也以复制过去。PSSH用法不熟悉,暂不介绍。

hostname文件内容不同,单独配置;hosts文件内容相同,可以直接复制。(由于上面的hosts文件内已经配置了主机名和IP的对应关系,此时可以直接以[email protected]的方式复制)

root@master:/etc# scp hosts root@worker1:/etc/

Hadoop配置

1、创建namenode和datanode目录

/usr/local/hadoop/hadoop-2.7.2目录下新建四个目录:tmp、hdfs、hdfs/data、hdfs/name。

[email protected]:/usr/local/hadoop/hadoop-2.7.2# mkdir tmp
//最终效果如下
.
├── bin
│   ├── ...
├── etc
│   └── hadoop
├── hdfs
│   ├── data
│   └── name
├── ...
└── tmp

2、 修改master的配置文件

下面主要修改/etc/hadoop下的core-site.xmlmapred-site.xmlhdfs-site.xml。如果没有该文件则新建。

需要配置的内容为<configuration>标签内的属性。

core-site.xml:

[email protected]:/usr/local/hadoop/hadoop-2.7.2# cat etc/hadoop/core-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--xxx-->

<!-- Put site-specific property overrides in this file. -->

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://SparkMaster:9000</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/usr/local/hadoop/hadoop-2.7.2/tmp</value>
    </property>
</configuration>
[email protected]:/usr/local/hadoop/hadoop-2.7.2#

mapred-site.xml:

[email protected]:/usr/local/hadoop/hadoop-2.7.2# cat etc/hadoop/mapred-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<!-- Put site-specific property overrides in this file. -->

<configuration>
    <property>
        <name>mapred.job.tracker</name>
        <value>SparkMaster:9001</value>
    </property>
</configuration>
[email protected]:/usr/local/hadoop/hadoop-2.7.2#

hdfs-site.xml:

[email protected]:/usr/local/hadoop/hadoop-2.7.2# cat etc/hadoop/hdfs-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<!-- Put site-specific property overrides in this file. -->

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>2</value>
    </property>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>/usr/local/hadoop/hadoop-2.7.2/hdfs/name</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>/usr/local/hadoop/hadoop-2.7.2/hdfs/data</value>
    </property>
</configuration>
[email protected]:/usr/local/hadoop/hadoop-2.7.2#

3、 masters和slaves文件

masters:

root@master:/usr/local/hadoop/hadoop-2.7.2# cat etc/hadoop/masters
SparkMaster
root@master:/usr/local/hadoop/hadoop-2.7.2#

slaves:

root@master:/usr/local/hadoop/hadoop-2.7.2# cat etc/hadoop/slaves
worker1
worker2
root@master:/usr/local/hadoop/hadoop-2.7.2#

配置其他主机

这部分的主要内容是重复上面的两步。

第一步的主机名和IP已经配置过了。可以按照之前的介绍独立配置或者复制过去。

第二步的Hadoop配置都是在hadoop-2.7.2目录下,因此可以考虑通过scp命令直接将整个文件夹复制到worker1和worker2。

root@master:/usr/local/hadoop# scp -r hadoop-2.7.2/ root@worker1:/usr/local/hadoop/
root@master:/usr/local/hadoop# scp -r hadoop-2.7.2/ root@worker2:/usr/local/hadoop/

最后,配置其余主机的.bashrc文件,将Hadoop目录写进.bashrc文件。也可以将master文件直接复制过去。然后source .bashrc使配置文件生效。

测试Hadoop分布式集群

1、 在master结点格式化集群的文件系统,在命令终端输入:

root@master:/usr/local/hadoop/hadoop-2.7.2# hadoop namenode -format

2、 启动Hadoop集群

进入Hadoop的sbin目录,在终端输入命令(保证其他的主机已经开启):

 root@master:/usr/local/hadoop/hadoop-2.7.2/sbin# ./start-all.sh 

3、 通过JPS命令分别查看一下三台主机的进程信息:

master:

root@master:/usr/local/hadoop/hadoop-2.7.2/sbin# jps
4358 ResourceManager
4430 Jps
root@master:/usr/local/hadoop/hadoop-2.7.2/sbin#

worker1:

root@worker1:~# jps
3268 DataNode
3485 NodeManager
3631 Jps
root@worker1:~#

woker2:

root@worker2:~# jps
3600 Jps
3425 NodeManager
3189 DataNode
root@worker2:~#

至此Hadoop句群构建完毕。

4、 停止Hadoop集群

 root@master:/usr/local/hadoop/hadoop-2.7.2/sbin# ./stop-all.sh 

错误提示

在开启Hadoop集群的时候,如果提示error等问题,需要停下来,根据错误提示排除问题。比如可能要手动修改上面的hadoop-env.sh文件export HADOOP_CONF_DIR=/usr/local/hadoop/hadoop-2.7.2/etc/hadoop来排除

...
Error: Cannot find configuration directory: /etc/hadoop
Error: Cannot find configuration directory: /etc/hadoop
...

错误。

其余错误问题根据具体提示查找资料排除即可。

以上,Spark搭建的前期部分已经解决。

参考文章:

时间: 2024-10-30 01:16:55

Spark入门 - 1 搭建Hadoop分布式集群的相关文章

使用Docker在本地搭建Hadoop分布式集群

学习Hadoop集群环境搭建是Hadoop入门必经之路.搭建分布式集群通常有两个办法: 要么找多台机器来部署(常常找不到机器) 或者在本地开多个虚拟机(开销很大,对宿主机器性能要求高,光是安装多个虚拟机系统就得搞半天……). 那么,问题来了! 有没有更有可行性的办法? 提到虚拟化,Docker最近很是火热!不妨拿来在本地做虚拟化,搭建Hadoop的伪分布式集群环境.虽然有点大材小用,但是学习学习,练练手也是极好的. 文章比较长,建议先倒杯水,听我慢慢到来…… 先说一下我的思路吧: 先使用Dock

CDH搭建Hadoop分布式集群(超级小白)

1首先对于一个java还白的小白,先理解CDH与Hadoop的关系 一.Hadoop版本选择. Hadoop大致可分为Apache Hadoop和第三方发行第三方发行版Hadoop,考虑到Hadoop集群部署的高效,集群的稳定性, 以及后期集中的配置管理,业界多使用Cloudera公司的发行版,简称为CDH. 下面是转载的Hadoop社区版本与第三方发行版本的比较: Apache社区版本 优点: 完全开源免费.社区活跃文档.资料详实 缺点: 因为很活跃所以版本对应关系,各个版本层出不穷,让使用者

大数据系列之Hadoop分布式集群部署

本节目的:搭建Hadoop分布式集群环境 环境准备 LZ用OS X系统 ,安装两台Linux虚拟机,Linux系统用的是CentOS6.5:Master Ip:10.211.55.3 ,Slave Ip:10.211.55.4 各虚拟机环境配置好Jdk1.8(1.7+即可) 资料准备 hadoop-2.7.3.tar.gz 虚拟机配置步骤 以下操作都在两台虚拟机 root用户下操作,切换至root用户命令 配置Master hostname 为Master ; vi /etc/sysconfi

Hadoop分布式集群环境搭建

分布式环境搭建之环境介绍 之前我们已经介绍了如何在单机上搭建伪分布式的Hadoop环境,而在实际情况中,肯定都是多机器多节点的分布式集群环境,所以本文将简单介绍一下如何在多台机器上搭建Hadoop的分布式环境. 我这里准备了三台机器,IP地址如下: 192.168.77.128 192.168.77.130 192.168.77.134 首先在这三台机器上编辑/etc/hosts配置文件,修改主机名以及配置其他机器的主机名 [[email protected] ~]# vim /etc/host

Hadoop分布式集群搭建完全详细教程

Hadoop分布式集群环境搭建步骤如下 实验环境: 系统:win7 内存:8G(因要开虚拟机,内存建议不低于8G) 硬盘:建议固态 虚拟机:VMware 12 Linux:Centos 7 jdk1.7.0_67 hadoop-2.5.0.tar.gz 1.安装VMware虚拟机环境2.安装Centos操作系统3.修改主机名配置网络4.配置ssh无密码登录5.上传jdk配置环境变量6.上传hadoop配置环境变量7.修改hadoop配置文件8.格式化namenode9.启动hadoop并测试1安

Hadoop 分布式集群搭建 &amp; 配置

一. 安装Java Java下载 官网下载合适的jdk,本人使用的是jdk-7u79-linux-x64.tar.gz,接下来就以该版本的jdk为例,进行Java环境变量配置 创建Java目录 在/usr/local目录下创建java目录,用于存放解压的jdk cd /usr/local mkdir java 解压jdk 进入java目录 cd java tar zxvf jdk-7u79-linux-x64.tar.gz 配置环境变量 编辑profile文件 cd /etc vim profi

在 Ubuntu 上搭建 Eadoop 分布式集群 Eclipse 开发环境

一直在忙Android FrameWork,终于闲了一点,利用空余时间研究了一下Hadoop,并且在自己和同事的电脑上搭建了分布式集群,现在更新一下blog,分享自己的成果. 一 .环境 1.操作系统:Ubuntu 12.04 LTS 64位 2.Java版本:openjdk-7-jdk 3.Hadoop版本:2.6.0 4.结点信息: 机器名 IP hostname 作用 master 10.13.14.83 rdcdz140395 NameNode and JobTracker slave-

基于HBase Hadoop 分布式集群环境下的MapReduce程序开发

HBase分布式集群环境搭建成功后,连续4.5天实验客户端Map/Reduce程序开发,这方面的代码网上多得是,写个测试代码非常容易,可是真正运行起来可说是历经挫折.下面就是我最终调通并让程序在集群上运行起来的一些经验教训. 一.首先说一下我的环境: 1,集群的环境配置请见这篇博文. 2,开发客户机环境:操作系统是CentOS6.5,JDK版本是1.7.0-60,开发工具是Eclipse(原始安装是从google的ADT网站下载的ADT专用开发环境,后来加装了Java企业开发的工具,启动Flas

centos7搭建伪分布式集群

centos7搭建伪分布式集群 需要 centos7虚拟机一台: jdk-linux安装包一个 hadoop-2.x安装包1个(推荐2.7.x) 一.设置虚拟机网络为静态IP(最好设成静态,为之后编程提供方便,不设置静态ip也可以) 1.进入网络配置查看ip 2.选择NAT模式链连接 3.点击NAT设置,记住网关IP,后面要用到 4.进入终端,输入命令: cd  /etc/sysconfig/network-scripts,然后 vim ./ifcfg-eth0,(有的虚拟机是文件是:ifcfg