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

Spark 1.5、Hadoop 2.7 集群环境搭建

[日期:2016-09-09] 来源: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以上版本运行。

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

更多Spark相关教程见以下内容

CentOS 7.0下安装并配置Spark  http://www.linuxidc.com/Linux/2015-08/122284.htm

Spark1.0.0部署指南 http://www.linuxidc.com/Linux/2014-07/104304.htm

Spark官方文档 - 中文翻译  http://www.linuxidc.com/Linux/2016-04/130621.htm

CentOS 6.2(64位)下安装Spark0.8.0详细记录 http://www.linuxidc.com/Linux/2014-06/102583.htm

Spark简介及其在Ubuntu下的安装使用 http://www.linuxidc.com/Linux/2013-08/88606.htm

安装Spark集群(在CentOS上) http://www.linuxidc.com/Linux/2013-08/88599.htm

Hadoop vs Spark性能对比 http://www.linuxidc.com/Linux/2013-08/88597.htm

Spark安装与学习 http://www.linuxidc.com/Linux/2013-08/88596.htm

Spark 并行计算模型 http://www.linuxidc.com/Linux/2012-12/76490.htm

Ubuntu 14.04 LTS 安装 Spark 1.6.0 (伪分布式) http://www.linuxidc.com/Linux/2016-03/129068.htm

Spark 的详细介绍请点这里
Spark 的下载���址请点这里

更多Hadoop相关信息见Hadoop 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=13

本文永久更新链接地址http://www.linuxidc.com/Linux/2016-09/135067.htm

linux
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款