Alex 的 Hadoop 菜鸟教程: 第17课 更快速的MapReduce - Spark

声明

  • 本文基于Centos6.x + CDH 5.x

Spark是什么

Spark是Apache的顶级项目。项目背景是 Hadoop 的 MapReduce 太挫太慢了,于是有人就做了Spark,目前Spark声称在内存中比Hadoop快100倍,在磁盘上比Hadoop快10倍。

安装Spark

spark有5个组件

  • spark-core: spark核心包
  • spark-worker: spark-worker用的脚本
  • spark-master: spark-master用的脚本
  • spark-python: Spark的Python客户端
  • spark-history-server: 任务历史服务

开始安装Spark

安装组件包

我挑选host1作为master 和 worker,所以在host1上安装以下包

sudo yum install spark-core spark-master spark-worker spark-python

host2 作为 history-server 和 worker

sudo yum install spark-core spark-worker spark-history-server spark-python

配置Spark

Spark支持两种模式

  • 独立模式:  在独立模式, Spark使用一个 Master 服务来运行任务。
  • YARN模式: 在YARN模式, YARN ResourceManager 代替了Spark Master。Job还是由NodeManager运行。YARN 模式搭建会比较复杂,但是它支持安全机制,并且跟YARN集群的配合更好。

本教程中使用独立模式

编辑每一台安装了Spark机器上的 /etc/spark/conf/spark-env.sh 修改master所在机器的机器名,在这个教程中就是host1

###
### === IMPORTANT ===
### Change the following to specify a real cluster‘s Master host
###
export STANDALONE_SPARK_MASTER_HOST=‘host1‘

注意: 包裹host1的符号也要换成单引号

创建Spark History Server需要的hdfs文件夹 /user/spark/applicationHistory/

$ sudo -u hdfs hadoop fs -mkdir /user/spark
$ sudo -u hdfs hadoop fs -mkdir /user/spark/applicationHistory
$ sudo -u hdfs hadoop fs -chown -R spark:spark /user/spark
$ sudo -u hdfs hadoop fs -chmod 1777 /user/spark/applicationHistory

在Spark客户端,在本例中就是host2,创建一份新的配置文件

cp /etc/spark/conf/spark-defaults.conf.template /etc/spark/conf/spark-defaults.conf

把下面这两行增加到/etc/spark/conf/spark-defaults.conf 里面去

spark.eventLog.dir=/user/spark/applicationHistory
spark.eventLog.enabled=true

在所有的机器上复制hdfs-site.xml到 /etc/spark/conf 下

cp /etc/hadoop/conf/hdfs-site.xml /etc/spark/conf/

启动Spark

在host1上启动master服务

sudo service spark-master start

在其他节点上启动woker服务,本教程中就是 host1 和 host2

sudo service spark-worker start

在其中一个节点上启动history服务,本教程中用host2启动history

sudo service spark-history-server start

启动顺序

  1. master
  2. worker
  3. history-server

打开浏览器访问 http://host1:18080 可以看到Spark的管理界面

使用Spark

使用 spark-shell 命令进入spark shell

[[email protected] impala]# spark-shell
2015-02-10 09:02:07,059 INFO  [main] spark.SecurityManager (Logging.scala:logInfo(59)) - Changing view acls to: root
2015-02-10 09:02:07,069 INFO  [main] spark.SecurityManager (Logging.scala:logInfo(59)) - Changing modify acls to: root
2015-02-10 09:02:07,070 INFO  [main] spark.SecurityManager (Logging.scala:logInfo(59)) - SecurityManager: authentication disabled; ui acls disabled; users with view permissions: Set(root); users with modify permissions: Set(root)
2015-02-10 09:02:07,072 INFO  [main] spark.HttpServer (Logging.scala:logInfo(59)) - Starting HTTP Server
2015-02-10 09:02:07,217 INFO  [main] server.Server (Server.java:doStart(272)) - jetty-8.y.z-SNAPSHOT
2015-02-10 09:02:07,350 INFO  [main] server.AbstractConnector (AbstractConnector.java:doStart(338)) - Started [email protected]:59058
2015-02-10 09:02:07,352 INFO  [main] util.Utils (Logging.scala:logInfo(59)) - Successfully started service ‘HTTP class server‘ on port 59058.
Welcome to
      ____              __
     / __/__  ___ _____/ /__
    _\ \/ _ \/ _ `/ __/  ‘_/
   /___/ .__/\_,_/_/ /_/\_\   version 1.2.0
      /_/

Using Scala version 2.10.4 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_25)
...
2015-02-10 09:02:21,572 INFO  [main] storage.BlockManagerMaster (Logging.scala:logInfo(59)) - Registered BlockManager
2015-02-10 09:02:22,472 INFO  [main] scheduler.EventLoggingListener (Logging.scala:logInfo(59)) - Logging events to file:/user/spark/applicationHistory/local-1423530140986
2015-02-10 09:02:22,672 INFO  [main] repl.SparkILoop (Logging.scala:logInfo(59)) - Created spark context..
Spark context available as sc.

scala> 

我们来开始玩一下Spark。还是做之前用YARN做的wordcount任务,看看Spark如何完成这项任务。

STEP1

创建测试文本

$ echo "Hello World Bye World" > file0
$ echo "Hello Hadoop Goodbye Hadoop" > file1
$ hdfs dfs -mkdir -p /user/spark/wordcount/input
$ hdfs dfs -put file* /user/spark/wordcount/input

STEP2

进入 spark-shell 运行 wordcount任务脚本

val file = sc.textFile("hdfs://mycluster/user/spark/wordcount/input")
val counts = file.flatMap(line => line.split(" ")).map(word => (word, 1)).reduceByKey(_ + _)
counts.saveAsTextFile("hdfs://mycluster/user/spark/wordcount/output")

这回不用写java代码了,简单了好多。这里用的是Scala语言。

Spark支持 Java, Scale, Python 三种语言,但是对Scala的支持最全,建议开始用java来写,后期还是熟悉下Scala比较好。

STEP3

我们去看下结果,我用Pig看下结果

grunt> ls
hdfs://mycluster/user/spark/wordcount/input <dir>
hdfs://mycluster/user/spark/wordcount/output    <dir>
grunt> cd output
grunt> ls
hdfs://mycluster/user/spark/wordcount/output/_SUCCESS<r 2>  0
hdfs://mycluster/user/spark/wordcount/output/part-00000<r 2>    8
hdfs://mycluster/user/spark/wordcount/output/part-00001<r 2>    10
hdfs://mycluster/user/spark/wordcount/output/part-00002<r 2>    33
grunt> cat part-00000
(Bye,1)
grunt> cat part-00001
(World,2)
grunt> cat part-00002
(Goodbye,1)
(Hello,2)
(Hadoop,2)

更深入的学习请看手册Spark Programming Guide , 另外这个手册写的真不错。

参考资料

时间: 2024-07-28 14:00:54

Alex 的 Hadoop 菜鸟教程: 第17课 更快速的MapReduce - Spark的相关文章

Alex 的 Hadoop 菜鸟教程: 第17课 Spark 安装以及使用教程

声明 本文基于Centos6.x + CDH 5.x 本文基于CSDN的markdown编辑器写成,csdn终于支持markdown了,高兴! Spark是什么 Spark是Apache的顶级项目.项目背景是 Hadoop 的 MapReduce 太挫太慢了,于是有人就做了Spark,目前Spark声称在内存中比Hadoop快100倍,在磁盘上比Hadoop快10倍. 安装Spark spark有5个组件 spark-core: spark核心包 spark-worker: spark-work

Alex 的 Hadoop 菜鸟教程: 第15课 Impala 安装使用教程

声明: 本文基于Centos 6.x + CDH 5.x 硬件要求 Impala的使用是有硬件要求的!我第一次见到有硬件要求的,那就是你的CPU必须支持SSSE3,如果你的CPU较老,不支持SSSE3 (3个S),那么你只能找别的机器来学习Impala,因为虚拟机也没有办法给你虚拟出不同的CPU. 为什么用 Impala 因为Hive 太慢了!Impala 也可以执行SQL,但是比Hive的速度快很多.为什么Impala可以比Hive快呢?因为Hive采用的是把你的sql转化成hadoop 的

Alex 的 Hadoop 菜鸟教程: 第4课 Hadoop 安装教程 - HA方式 (2台服务器)

声明 本文基于Centos 6.x + CDH 5.x 官方英文安装教程 http://www.cloudera.com/content/cloudera/en/documentation/cdh5/v5-0-0/CDH5-Installation-Guide/cdh5ig_cdh5_install.html 本文并不是简单翻译,而是再整理 如果没有yum源请参考http://blog.csdn.net/nsrainbow/article/details/36629339#t2 准备工作 用vm

Alex 的 Hadoop 菜鸟教程: 第19课 华丽的控制台 HUE 安装以及使用教程

声明 本文基于Centos 6.x + CDH 5.x HUE Hadoop也有web管理控制台,而且还很华丽,它的名字叫HUE.通过HUE可以管理Hadoop常见的组件.下面用一幅图说明HUE能管理哪些组件 除了Oozie,LDAP SAML和Solr以外,前面的课程都说过了,Oozie是一个工作流组件,在下一课讲解,LDAP是一个用户密码的管理中心,负责用户的登陆.Solr是一个全文检索的引擎,不过其实Solr也不算Hadoop系专有的,Solr在很早以前就出现了,要算的话应该算Lucene

Alex 的 Hadoop 菜鸟教程: 第7课 Sqoop2 导出教程

承接上节课,现在说说导出教程 检查连接 先看看有没有可用的connection 连接,如果没有就要根据上节课的方法创建一个 sqoop:000> show connector --all 1 connector(s) to show: Connector with id 1: Name: generic-jdbc-connector Class: org.apache.sqoop.connector.jdbc.GenericJdbcConnector Version: 1.99.3-cdh5.0

Alex 的 Hadoop 菜鸟教程: 第10课 Hive 入门教程

Hive 安装 相比起很多教程先介绍概念,我喜欢先动手装上,然后用例子来介绍概念.我们先来安装一下Hive 先确认是否已经安装了对应的yum源,如果没有照这个教程里面写的安装cdh的yum源http://blog.csdn.net/nsrainbow/article/details/36629339 Hive是什么 Hive 提供了一个让大家可以使用sql去查询数据的途径.但是最好不要拿Hive进行实时的查询.因为Hive的实现原理是把sql语句转化为多个Map Reduce任务所以Hive非常

Alex 的 Hadoop 菜鸟教程: 第8课 Sqoop1 安装/导入/导出教程

靠!sqoop2的文档太少了,而且居然不支持Hbase,十分简陋,所以我愤而放弃Sqoop2转为使用Sqoop1,之前跟着我教程看到朋友不要拿砖砸我,我是也是不知情的群众 卸载sqoop2 这步可选,如果你们是照着我之前的教程你们已经装了sqoop2就得先卸载掉,没装的可以跳过这步 $ sudo su - $ service sqoop2-server stop $ yum -y remove sqoop2-server $ yum -y remove sqoop2-client 安装Sqoop

Alex 的 Hadoop 菜鸟教程: 第8课 Sqoop1 导入 Hbase 以及 Hive

继续写,其实mysql 导入导出 hdfs 对于实际项目开发没啥用的,但是那个可以拿来入门.今天写跟Hbase和Hive的协作.我突然发现我的教程写的顺序很凌乱啊,没有先介绍Hive 的安装,这点向大家道歉,我后面补上. 数据准备 mysql 在mysql 里面建立表 employee 并插入数据 CREATE TABLE `employee` ( `id` int(11) NOT NULL, `name` varchar(20) NOT NULL, PRIMARY KEY (`id`) ) E

Alex 的 Hadoop 菜鸟教程: 第21课 不只是在HBase中用SQL:Phoenix

声明 本文基于 Centos6.x + CDH5.x 什么是Phoenix Phoenix的团队用了一句话概括Phoenix:"We put the SQL back in NoSQL" 意思是:我们把SQL又放回NoSQL去了!这边说的NoSQL专指HBase,意思是可以用SQL语句来查询Hbase,你可能会说:"Hive和Impala也可以啊!".但是Hive和Impala还可以查询文本文件,Phoenix的特点就是,它只能查Hbase,别的类型都不支持!但是也