Alex 的 Hadoop 菜鸟教程: 第17课 更快速的MapReduce – Spark「建议收藏」

Alex 的 Hadoop 菜鸟教程: 第17课 更快速的MapReduce – Spark「建议收藏」Spark是Apache的顶级项目。项目背景是Hadoop的MapReduce太挫太慢了,于是有人就做了Spark,目前Spark声称在内存中比Hadoop快100倍,在磁盘上比Hadoop快10倍。

大家好,又见面了,我是你们的朋友全栈君。

原文地址: http://blog.csdn.net/nsrainbow/article/details/43735737  最新课程请关注原作者博客,获得更好的显示体验

声明

  • 本文基于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的管理界面

Alex 的 Hadoop 菜鸟教程: 第17课 更快速的MapReduce - Spark「建议收藏」

使用Spark

使用 spark-shell 命令进入spark shell

[root@host1 impala]# spark-shell2015-02-10 09:02:07,059 INFO  [main] spark.SecurityManager (Logging.scala:logInfo(59)) - Changing view acls to: root2015-02-10 09:02:07,069 INFO  [main] spark.SecurityManager (Logging.scala:logInfo(59)) - Changing modify acls to: root2015-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 Server2015-02-10 09:02:07,217 INFO  [main] server.Server (Server.java:doStart(272)) - jetty-8.y.z-SNAPSHOT2015-02-10 09:02:07,350 INFO  [main] server.AbstractConnector (AbstractConnector.java:doStart(338)) - Started SocketConnector@0.0.0.0:590582015-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 BlockManager2015-02-10 09:02:22,472 INFO  [main] scheduler.EventLoggingListener (Logging.scala:logInfo(59)) - Logging events to file:/user/spark/applicationHistory/local-14235301409862015-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 , 另外这个手册写的真不错。

参考资料

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/143745.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • vue路由懒加载的实现方式_vue-router路由模式

    vue路由懒加载的实现方式_vue-router路由模式本文已参与「新人创作礼」活动,一起开启掘金创作之路1.路由懒加载如何实现当打包构建应用时,JavaScript包会变得非常大,影响页面加载。如果我们能把不同路由对应的组件分割成不同的代码块,然后当路由被访问的时候才加载对应组件,这样就会更加高效当前,我们使用如下方式导入组件importLoginfrom’../views/Login打包后,这些组件都会被打包到一个.s文件中,css代码会打包到css文件中访问应用时,就会下载这js文件和对应的css文件随着代码的增多,文件

    2022年10月7日
    0
  • pycharm激活码2021年7月【2021免费激活】

    (pycharm激活码2021年7月)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.htmlBI7JCUH1TG-eyJsa…

    2022年3月22日
    41
  • vue slot插槽_vue3 slot插槽

    vue slot插槽_vue3 slot插槽为什么使用slotslot(插槽)在生活中很多地方都有插槽,电脑usb的插槽,插板当中的电源插槽插槽的目的是为了让我们原来的设备具备更多的扩展性比如电脑的USB我们可以插入U盘,手机,鼠标,键

    2022年7月31日
    5
  • python常见运维脚本_Python运维常用脚本[通俗易懂]

    python常见运维脚本_Python运维常用脚本[通俗易懂]一、清除指定redis缓存#!/usr/bin/envpython3importredis#选择连接的数据库db=input(‘输入数据库:’)r=redis.Redis(host=‘127.0.0.1’,port=6379,db=0)#输入要匹配的键名id=input(‘请输入要执匹配的字段:’)arg=‘’+id+’’n=r.keys(arg)#查看匹配到键值f…

    2022年7月12日
    16
  • 如何理解相位式激光测距公式

    如何理解相位式激光测距公式参考链接1:相位式激光测距法中相位产生原理参考链接2:相位法激光测距原理及算法详解公式t=Δφ/w在N=0时才成立,可以用多尺测量方法。如果单尺测量,精度较小。选择高频率,则测程变小。所以,综合使用多尺测量。2L=c/f可以用于计算精尺和粗尺频率。…

    2022年6月2日
    38
  • java经典入门教程(java从入门到精通第几版好用)

    刚开始学习java的时候,可能是一头雾水,不知道从何学起,这里跟大家分享一下!(仅仅只供初级学者学习,大佬勿喷)一、初始java1.生活中的程序:从起床到教室上课的过程穿衣打扮》起床》洗漱》出宿舍》》吃早餐》到教室按照特定的顺序去完成某一件事的过程我们叫做生活中的程序2.计算机中的程序:一组有序指令的集合,需要和计算机交流就要使用计算机语言,java就是计算机语言的一种3.java…

    2022年4月16日
    47

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号