Spark入门 - 1 搭建Hadoop分布式集群
2016-07-21 10:58
816 查看
2016-07-25 更新:
进行到Spark安装的时候,spark-1.6.2没有对应的hadoop-2.7.2的with bin版本,因此推翻重来。
目前为hadoop-2.6.4+scala-2.10.6+spark-1.6.2-bin-hadoop2.6。
因此,如果近期搭建环境,注意三个包的版本选择搭配。官网有具体说明,请具体查阅。如果有精力,也可以使用源码等方式自行操作。
为了方便起见,此处设置的机器名最好与书本的设置一致:Master、Slave1和Slave2。
如果是
即添加了一行
此处可能需要安装
保存文件,然后退出。在命令终端输入命令
然后重启,之后登录界面会多一个
到这里,这部分的配置结束。
基本步骤完全一样:打开终端,输入命令
到这里可以先通过
然后编辑配置文件:
之后操作与上面一样,新增一行
之后重启即可。
则启动系统后,提取权限到
重启ubuntu,问题解决
简单起见,系统和JDK的配置最好保持一致,如均采用
Hadoop的Master和Slave结点之间的通信,以及Spark的Master和Worker结点之间的通信,都是通过SSH来完成的。为了避免以后每次通信都要输入密码,此处配置几台服务器相互SSH免密码登录。
注意下面均为在
后续的3步主要目的在于将各个主机的公钥互存。每个主机都在
命令,然后回车一次(如果不带
此时
可以通过
然后追加公钥:
其余主机操作类似。
更换IP即可复制到其他主机。
下面的主要任务是配置Hadoop的文件和系统的相关文件两个方面。可以单独对各台主机进行配置,内容都一样;也可以直接将master主机的配置文件通过
在官网下载Hadoop,选择bin版本的压缩包,如
2、 配置
在目录
显式的配置成下面这样:
3、 配置
为了方便之后开机启动系统后可以立即使用Hadoop的bin目录下的命令,可以把Hadoop的bin目录配置到
主要为HADOOP_HOME和PATH的配置。
保存并退出。
使用
使用
1、 修改主机名。
在
2、 主机名和IP的对应关系
修改
关键在于4~6行的配置。其中IP地址可以通过在终端中输入
如果修改后,主机名没有生效的话,重启系统再开机的时候会发现主机名已经改变。
3、 其余主机
其余两台主机的配置类似。可以手动配置,可也以复制过去。PSSH用法不熟悉,暂不介绍。
hostname文件内容不同,单独配置;hosts文件内容相同,可以直接复制。(由于上面的hosts文件内已经配置了主机名和IP的对应关系,此时可以直接以root@worker1的方式复制)
在
2、 修改master的配置文件
下面主要修改
需要配置的内容为
core-site.xml:
mapred-site.xml:
hdfs-site.xml:
3、 masters和slaves文件
masters:
slaves:
第一步的主机名和IP已经配置过了。可以按照之前的介绍独立配置或者复制过去。
第二步的Hadoop配置都是在hadoop-2.7.2目录下,因此可以考虑通过
最后,配置其余主机的
2、 启动Hadoop集群
进入Hadoop的sbin目录,在终端输入命令(保证其他的主机已经开启):
3、 通过JPS命令分别查看一下三台主机的进程信息:
master:
worker1:
woker2:
至此Hadoop句群构建完毕。
4、 查看master的Web控制台:
在master主机打开浏览器,查看Web控制台。网址为:
5、 停止Hadoop集群
目前不清楚为什么出现最后的两句提示:
如果在执行
出现该错误的原因是因为每次使用
master主机和多个worker主机的上述文件夹内容都要清空。
重新格式化并重新启动集群,即可解决问题。
2、运行start-all.sh错误
在开启Hadoop集群的时候,如果提示error等问题,需要停下来,根据错误提示排除问题。比如可能要手动修改上面的
错误。
其余错误问题根据具体提示查找资料排除即可。
以上,Spark搭建的前期部分已经完成。
参考文章:
Ubuntu 15.04开机root登录 http://www.linuxdiyf.com/linux/13626.html
进行到Spark安装的时候,spark-1.6.2没有对应的hadoop-2.7.2的with bin版本,因此推翻重来。
目前为hadoop-2.6.4+scala-2.10.6+spark-1.6.2-bin-hadoop2.6。
因此,如果近期搭建环境,注意三个包的版本选择搭配。官网有具体说明,请具体查阅。如果有精力,也可以使用源码等方式自行操作。
安装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 f 1105e ailed: 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 root@192.168.247.131:/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 root@: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的对应关系,此时可以直接以root@worker1的方式复制)
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。
root@master:/usr/local/hadoop/hadoop-2.7.2# mkdir tmp //最终效果如下 . ├── bin │ ├── ... ├── etc │ └── hadoop ├── hdfs │ ├── data │ └── name ├── ... └── tmp
2、 修改master的配置文件
下面主要修改
/etc/hadoop下的
core-site.xml、
mapred-site.xml、
hdfs-site.xml。如果没有该文件则新建,其中mapred-site.xml可以根据mapred-site.xml.template创建,即将mapred-site.xml.template复制为mapred-site.xml。
需要配置的内容为
<configuration>标签内的属性。
core-site.xml:
root@master:/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://master:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/usr/local/hadoop/hadoop-2.7.2/tmp</value> </property> </configuration> root@master:/usr/local/hadoop/hadoop-2.7.2#
mapred-site.xml:
root@master:/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>master:9001</value> </property> </configuration> root@master:/usr/local/hadoop/hadoop-2.7.2#
hdfs-site.xml:
root@master:/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.name.dir</name> <value>/usr/local/hadoop/hadoop-2.7.2/hdfs/name</value> </property> <property> <name>dfs.data.dir</name> <value>/usr/local/hadoop/hadoop-2.7.2/hdfs/data</value> </property> </configuration> root@master:/usr/local/hadoop/hadoop-2.7.2#
3、 masters和slaves文件
masters:
root@master:/usr/local/hadoop/hadoop-2.7.2# cat etc/hadoop/masters master 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 This script is Deprecated. Instead use start-dfs.sh and start-yarn.sh Starting namenodes on [master] master: starting namenode, logging to /usr/local/hadoop/hadoop-2.7.2/logs/hadoop-root-namenode-master.out worker2: starting datanode, logging to /usr/local/hadoop/hadoop-2.7.2/logs/hadoop-root-datanode-worker2.out worker1: starting datanode, logging to /usr/local/hadoop/hadoop-2.7.2/logs/hadoop-root-datanode-worker1.out Starting secondary namenodes [0.0.0.0] 0.0.0.0: starting secondarynamenode, logging to /usr/local/hadoop/hadoop-2.7.2/logs/hadoop-root-secondarynamenode-master.out starting yarn daemons starting resourcemanager, logging to /usr/local/hadoop/hadoop-2.7.2/logs/yarn-root-resourcemanager-master.out worker1: starting nodemanager, logging to /usr/local/hadoop/hadoop-2.7.2/logs/yarn-root-nodemanager-worker1.out worker2: starting nodemanager, logging to /usr/local/hadoop/hadoop-2.7.2/logs/yarn-root-nodemanager-worker2.out root@master:/usr/local/hadoop/hadoop-2.7.2#
3、 通过JPS命令分别查看一下三台主机的进程信息:
master:
root@master:/usr/local/hadoop/hadoop-2.7.2/sbin# jps 4705 NameNode 5049 SecondaryNameNode 5274 Jps 5198 ResourceManager 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、 查看master的Web控制台:
在master主机打开浏览器,查看Web控制台。网址为:
http://localhost:50070或者
http://localhost:50070/dfshealth.html#tab-overview。
5、 停止Hadoop集群
root@master:/usr/local/hadoop/hadoop-2.7.2/sbin# ./stop-all.sh This script is Deprecated. Instead use stop-dfs.sh and stop-yarn.sh Stopping namenodes on [master] master: stopping namenode worker1: stopping datanode worker2: stopping datanode Stopping secondary namenodes [0.0.0.0] 0.0.0.0: stopping secondarynamenode stopping yarn daemons stopping resourcemanager worker2: stopping nodemanager worker1: stopping nodemanager worker2: nodemanager did not stop gracefully after 5 seconds: killing with kill -9 worker1: nodemanager did not stop gracefully after 5 seconds: killing with kill -9 no proxyserver to stop root@master:/usr/local/hadoop/hadoop-2.7.2#
目前不清楚为什么出现最后的两句提示:
nodemanager did not stop gracefully after 5 seconds: killing with kill -9,希望后面的学习过程中可以解决这个疑惑。
错误提示
1、no datanode to stop如果在执行
stop-all.sh文件的时候提示“no datanode to stop”,可以根据下面的方法排除错误。
出现该错误的原因是因为每次使用
hadoop namenode -format命令格式化文件系统的时候会出现一个新的namenodeId,而在之前的格式化过程中,在我们手动创建的tmp目录下已经有了数据,只需要把每台机器上tmp文件夹、hdfs文件夹下的data和name文件夹中的内容清空即可,同时清空系统
/tmp文件夹下与Hadoop相关的内容清空。
master主机和多个worker主机的上述文件夹内容都要清空。
重新格式化并重新启动集群,即可解决问题。
2、运行start-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搭建的前期部分已经完成。
参考文章:
Ubuntu 15.04开机root登录 http://www.linuxdiyf.com/linux/13626.html
相关文章推荐
- 用Docker配置简单的Nginx+Apache的web负载均衡
- linux 下分离 debuginfo 到独立文件.
- windows dos合并文件命令 (copy与 type(这个更好用 ))
- tomcat部署两个相同的项目报错不能访问
- Linux内存中的Cache真的能被回收么?
- 终端修改 ~/.bashrc, ~/.profile, ~/.zshrc
- linux 下c 编译和调试
- windows dos合并文件的两个命令 copy与 type(这个更好用 )
- linux环境下deb格式文件转换成rpm格式
- cocopods 报错 _OBJC_CLASS_
- Linux系统编程--文件(二)
- Dubbo架构设计详解
- debian linux制作deb包
- linux中安装FastDFS-v5.05+nginx-1.8.0
- ubuntu14.04+openni2.2.0.33+primesense carmine1.09
- linux终端自定义命令的别名
- screen命令整理
- Linux之进程终止
- Linux之fork与vfork区别
- OpenStack简介