你好,游客 登录 注册 搜索
背景:
阅读新闻

Spark 1.5、Hadoop 2.7 集群环境搭建

[日期:2016-09-13] 来源:Linux公社  作者:zjc [字体: ]

最近需要用到大数据的一些相关技术,于是实验了一下spark和Hadoop的集群环境搭建。实验包括三台虚拟机,linux-1、linux-2、linux-3,spark是一个master两个worker, hadoop是一个主NameNode、两个DataNode,其中一个兼做副NameNode。软件方面,spark用的1.5.2版本,最新的1.6.1版本遇到一个java代码访问拒绝的问题,网上有说是bug,退回到1.5.2版。hadoop用的最新2.7.2稳定版,只能在jdk7以上版本运行。

Hadoop

spark集群安装非常简单:

1.分别在各个机器上解压缩spark包,选定一个做master,其他的做worker。在master上启动 {spark_dir}/sbin/start-master.sh

2.worker机器上启动 {spark_dir}/sbin/start-slave.sh spark://{master}:7077

3.这里唯一要注意的是,spark是采用主机名作为服务识别,所以虽然用-h xx.xx.xx.xx 的参数也可以按ip方式启动成功,但在代码调用里往往遇到麻烦。所以还是老老实实用主机名算了。那么就要注意变更每台机器的/etc/hostname及把各个机器的hostname配置到每台机器的/etc/hosts文件里。

4.此外,这种方法虽然很好理解,但是要一台机器一台机器的操作,有点麻烦,也可以把配置文件写好,一个命令同时启动所有机器,这个后面说。

hadoop集群的安装略微麻烦些,因为组件也多一些。hadoop实际上由hdfs、mapreduce、yarn三个主要功能模块构成。hdfs是分布式文件系统;mapreduce是分布式计算系统(spark就是替代这部分的);yarn是任务调度和资源管理系统。

1.有了前面的第3步,这里就不用重复操作了。

2.下面要配置master能够ssh无密码登录其他slave。具体方法:先在master机器上生成公钥,ssh-keygen -t rsa,后续直接回车,之后会看到产生两个文件,id_rsa、id_rsa.pub,把id_rsa.pub分别拷贝到自身和各slave机器的~/.ssh目录(如果没有,手工创建)下,并改名为authorized_keys(如果以前有这个文件且不想破坏,可以用cat >>追加),这样从master就可以无密码登录各个机器了。

3.在各个机器上修改{hadoop_dir}/etc/hadoop/hadoop-env.sh 中的JAVA_HOME变量,形如export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64 (这句必须改,在其他地方配置的JAVA_HOME环境变量没有作用)。

在各个机器上配置PATH环境变量 export PATH=$PATH:{hadoop_dir}/bin:{hadoop_dir}/sbin

4.配置集群环境,即编辑{hadoop_dir}/etc/hadoop 下的slaves、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml五个文件。

slaves 文件中把每个slave主机名写在一行,很简单,就不给示例了。

core-site.xml文件示例如下:

<configuration>

<property>

<name>fs.defaultFS</name>

<value>hdfs://linux-1:9000</value>

</property>

<property>

<name>hadoop.tmp.dir</name>

<value>file:/home/clusterwork/hadoop-2.7.2/tmp</value>

<description>Abase for other temporary directories.</description>

</property>

</configuration>

hdfs-site.xml文件示例如下:

<configuration>

<property>

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

<value>linux-2:50090</value>

</property>

<property>

<name>dfs.replication</name>

<value>2</value>

</property>

<property>

<name>dfs.namenode.name.dir</name>

<value>file:/home/clusterwork/hadoop-2.7.2/tmp/dfs/name</value>

</property>

<property>

<name>dfs.datanode.data.dir</name>

<value>file:/home/clusterwork/hadoop-2.7.2/tmp/dfs/data</value>

</property>

</configuration>

mapred-site.xml文件示例如下(没有这个文件先从mapred-site.xml.template拷贝一份,如果不使用map-reduce不配也可以):

<configuration>

<property>

<name>mapreduce.framework.name</name>

<value>yarn</value>

</property>

<property>

<name>mapreduce.jobhistory.address</name>

<value>linux-1:10020</value>

</property>

<property>

<name>mapreduce.jobhistory.webapp.address</name>

<value>linux-1:19888</value>

</property>

</configuration>

yarn-site.xml文件示例如下:

<configuration>

<property>

<name>yarn.resourcemanager.hostname</name>

<value>linux-1</value>

</property>

<property>

<name>yarn.nodemanager.aux-services</name>

<value>mapreduce_shuffle</value>

</property>

</configuration>

以上配置均为示例,还可以有更多选项,具体参考官方文档。之后把这5个文件拷贝到每台机器上,覆盖原文件。

首次启动需要先在 Master 节点执行 NameNode 的格式化:hdfs namenode -format

之后在master上启动{hadoop_dir}/sbin/start-dfs.sh 、{hadoop_dir}/sbin/start-yarn.sh、{hadoop_dir}/sbin/mr-jobhistory-daemon.sh start historyserver,如果一切正常,使用jps命令,可以看到下面一些进程。

linux-1上:

Jps

NameNode

ResourceManager

JobHistoryServer

linux-2上:

Jps

NodeManager

SecondaryNameNode

DataNode

linux-3上:

NodeManager

DataNode

Jps

现在hadoop就已经可用了。在使用hdfs之前先要创建用户:hdfs dfs -mkdir -p /user/clusterwork  (这个用户最好和当前操作用户同名,这样在操作时可免输绝对路径),以下是常用命令,和普通linux差不多,而且在集群中任意的机器上皆可:

hdfs dfs -mkdir data  ——建目录,其实是建在了/user/clusterwork/data 下

hdfs dfs -put *.xml data  ——传文件

hdfs dfs -ls data    ——显示文件

hdfs dfs -rm data/* ——删除文件

hdfs dfs -rmdir data ——删除目录

不一一列举

最后补充spark的集群启动。其实也是利用的ssh无密码登录了。但这个对于spark不是必须的,对于hadoop则是必须的。所以既然前面hadoop安装第2步已经做了,这里就省事了。配置各个机器的/conf/slaves ,把worker写进去。启动 {spark_dir}/sbin/start-all.sh 即可。

之后通过web访问检查一下各集群情况:http://linux-1:8080、 http://linux-1:50070、 http://linux-1:8088





收藏 推荐 打印 | 录入:elainebo | 阅读: