1.去清华的镜像站点下载文件spark-2.1.0-bin-without-hadoop.tgz,不要下spark-2.1.0-bin-hadoop2.7.tgz

2.把文件解压到/usr/local目录下,解压之后的效果,Hadoop和Spark都在Hadoop用户

下面的操作都在Hadoop用户下

drwxrwxrwx 13 hadoop hadoop 4096 4月   4 11:50 spark-2.1.0-bin-without-hadoop/

添加Hadoop用户和用户组

$ sudo addgroup hadoop
$ sudo adduser --ingroup hadoop hadoop
$ sudo adduser hadoop sudo

然后修改文件夹的用户,用户组以及权限

sudo chown -R hduser:hadoop spark-2.1.0-bin-without-hadoop
sudo chmod 777 hadoop/

Hadoop文件夹如果权限不对的话,也需要修改

3.在/etc/profile下添加路径

export SPARK_HOME=/usr/local/spark-2.1.0-bin-without-hadoop
export PATH=${SPARK_HOME}/bin:$PATH

4.还需要修改Spark的配置文件spark-env.sh

cd /usr/local/spark-2.1.0-bin-without-hadoop
cp ./conf/spark-env.sh.template ./conf/spark-env.sh

添加如下

export SPARK_DIST_CLASSPATH=$(/home/lintong/software/apache/hadoop-2.9.1/bin/hadoop classpath)

(以上可以参考厦门大学林子雨老师的教程——Spark2.1.0入门:Spark的安装和使用),有些教程坑无数

5.在~/coding/coding/Scala/word-count路径下准备一个文本文件,比如test.segmented文件

6.在该目录下,在终端运行 spark-shell

创建一个RDD

scala> val textFile = sc.textFile("file:///home/common/coding/coding/Scala/word-count/test.segmented")

保存RDD成文件

textFile.saveAsTextFile("file:///home/common/coding/coding/Scala/word-count/writeback")

这时候会发现在文件夹目录下多了writeback目录,目录下是这么几个文件

现在,我们建立hdfs文件夹,来把 test.segmented 文件放进我们的hdfs文件夹中

首先,启动Hadoop的HDFS组件,因为没有用到MapReduce组件,所以没有必要启动MapReducen或者YARN

cd /usr/local/hadoop
./sbin/start-dfs.sh

HDFS文件系统中,建立文件夹

./bin/hdfs dfs -mkdir -p /user/hadoop

使用命令查看一下HDFS文件系统中的目录和文件

在Hadoop文件夹下运行命令

./bin/hdfs dfs -ls .       #或者
./bin/hdfs dfs -ls /user/hadoop

或者直接

hadoop fs -ls /user/hadoop    #或者
hadoop fs -ls .

把刚刚的 test.segmented 文件上传到分布式文件系统HDFS中(放到hadoop用户目录下)

hadoop fs -put /home/common/coding/coding/Java/WordCount/input/test.segmented .

再次查看一下

hadoop@master:~$ hadoop fs -ls /user/hadoop
Found 2 items
drwxr-xr-x - hadoop supergroup 0 2017-04-03 16:18 /user/hadoop/QuasiMonteCarlo_1491207499210_758373570
-rw-r--r-- 1 hadoop supergroup 59 2017-04-03 16:43 /user/hadoop/test.segmented

如果需要删除

hadoop fs -rm /user/hadoop/test.segmented

查看一个文件的大小

hadoop fs -du -h /logs/xxxx

现在回到 spark-shell 窗口,编写代码从HDFS文件系统加载 test.segmented 文件

并打印文件中的第一行内容

scala> val textFile = sc.textFile("hdfs://master:9000/user/hadoop/test.segmented")
textFile: org.apache.spark.rdd.RDD[String] = hdfs://master:9000/user/hadoop/test.segmented MapPartitionsRDD[1] at textFile at <console>:24 scala> textFile.first()
res0: String = aa bb aa

如果是单机的话,其中下面两条语句和上面第一条语句是一样的,但是如果是Hadoop伪分布式或者分布式的话,就不行

val textFile = sc.textFile("/user/hadoop/test.segmented")

再次把textFile写回到HDFS文件系统中

textFile.saveAsTextFile("hdfs://master:9000/user/hadoop/writeback")

再次查看

hadoop@master:~$ hadoop fs -ls /user/hadoop
Found 3 items
drwxr-xr-x - hadoop supergroup 0 2017-04-03 16:18 /user/hadoop/QuasiMonteCarlo_1491207499210_758373570
-rw-r--r-- 1 hadoop supergroup 59 2017-04-03 16:43 /user/hadoop/test.segmented
drwxr-xr-x - hadoop supergroup 0 2017-04-03 17:10 /user/hadoop/writeback

如果进入writeback文件夹中查看的话,可以看到里面的文件的内容和test.segmented中的是一样的

hadoop@master:~$ hadoop fs -ls /user/hadoop/writeback
Found 3 items
-rw-r--r-- 3 hadoop supergroup 0 2017-04-03 17:10 /user/hadoop/writeback/_SUCCESS
-rw-r--r-- 3 hadoop supergroup 36 2017-04-03 17:10 /user/hadoop/writeback/part-00000
-rw-r--r-- 3 hadoop supergroup 24 2017-04-03 17:10 /user/hadoop/writeback/part-00001
hadoop@master:~$ hadoop fs -cat /user/hadoop/writeback/part-00000
aa bb aa
bb aa aa
cc bb ee
dd ee cc
hadoop@master:~$ hadoop fs -cat /user/hadoop/writeback/part-00001
aa
cc
ee
ff
ff
gg
hh
aa

现在进入WordCount阶段,再次进入 Spark-shell

val textFile = sc.textFile("hdfs://master:9000/user/hadoop/test.segmented")
val wordCount = textFile.flatMap(line => line.split(" ")).map(word => (word, 1)).reduceByKey((a, b) => a + b)
wordCount.collect()

输出

res6: Array[(String, Int)] = Array((ee,3), (aa,6), (gg,1), (dd,1), (hh,1), (ff,2), (bb,3), (cc,3))

在spark-shell下面运行成功之后,就需要试着在idea里面建立一个工程来运行这段代码

在idea下面建立一个Scala的工程,构建的方式选择是sbt

由于本机的Scala的版本是2.11.8

所以在project structure里面设置成2.11.8

接着在build.sbt里面写

name := "word-count"

version := "1.0"

scalaVersion := "2.11.8"

libraryDependencies += "org.apache.spark" %% "spark-core" % "2.1.0"

注意里面的scalaVersion如果是2.11.X的话,sbt就会去拉spark-core_2.11-2.1.0的包

可以去公司的私服nexus里面去看看有没有这个包

然后在WordCount.scala文件中写入我们的代码

注意如果是setMaster("local")的话,需要在/etc/hosts中设置127.0.1.1,然后取消192.168.0.1

import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf
/**
* Created by common on 17-4-3.
*/ object WordCount {
def main(args: Array[String]) {
val inputFile = "file:///home/common/coding/coding/Scala/word-count/test.segmented"
val conf = new SparkConf().setAppName("WordCount").setMaster("local")    #创建一个SparkConf对象来配置应用
    #集群URL:告诉Spark连接到哪个集群,local是单机单线程,无需连接到集群,应用名:在集群管理器的用户界面方便找到应用
val sc = new SparkContext(conf)        #然后基于这SparkConf创建一个SparkContext对象
val textFile = sc.textFile(inputFile)    #读取输入的数据
val wordCount = textFile.flatMap(line => line.split(" ")).map(word => (word, 1)).reduceByKey((a, b) => a + b)  #切分成单词,转换成键值对并计数
wordCount.foreach(println)
}
}

然后在sbt中refresh,进行拉包,拉包的过程是无比缓慢的

拉好了之后运行的结果

和在 spark-shell中运行的结果是一致的

在林子雨老师的教程中,Spark2.1.0入门:第一个Spark应用程序:WordCount

最后是将整个应用程序打包成JAR,然后通过 spark-submit 提交到 Spark 中运行

做法是在idea的终端中,对代码进行打包

common@master:~/coding/coding/Scala/word-count$ sbt package
[info] Loading project definition from /home/common/coding/coding/Scala/word-count/project
[info] Set current project to word-count (in build file:/home/common/coding/coding/Scala/word-count/)
[info] Compiling 1 Scala source to /home/common/coding/coding/Scala/word-count/target/scala-2.11/classes...
[info] Packaging /home/common/coding/coding/Scala/word-count/target/scala-2.11/word-count_2.11-1.0.jar ...
[info] Done packaging.
[success] Total time: 6 s, completed 2017-4-4 18:02:13

生成的jar包位置在

/home/common/coding/coding/Scala/word-count/target/scala-2.11

最后通过 spark-submit 运行程序,将jar包通过这个命令提交到 Spark 中运行

common@master:~/coding/coding/Scala/word-count$ spark-submit --class "WordCount"  /home/common/coding/coding/Scala/word-count/target/scala-2.11/word-count_2.11-1.0.jar

运行结果

在执行spark任务的时候,如果遇到

报如下错误:
Exception in thread "main" java.lang.Exception: When running with master 'yarn-client' either HADOOP_CONF_DIR or YARN_CONF_DIR must be set in the environment

在spark的配置文件 conf/spark-env.sh 中添加

export HADOOP_HOME=/home/lintong/software/apache/hadoop-2.9.1
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
PATH=$PATH:$HIVE_HOME/bin:$HADOOP_HOME/bin

spark集群安装参考:spark 集群搭建 详细步骤

主要是配置slave文件和spark-env文件

集群内容spark-env文件,其中xxx是spark web ui的端口

export SPARK_DIST_CLASSPATH=$(/usr/bin/hadoop classpath)

#export JAVA_HOME=/usr/lib/jvm/java-8-oracle
export SCALA_HOME=/home/dl/packages/scala-2.11.8 export SPARK_MASTER_WEBUI_PORT=xxxx export HADOOP_HOME=/opt/cloudera/parcels/CDH-5.12.0-1.cdh5.12.0.p0.29/lib/hadoop
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HIVE_HOME=/opt/cloudera/parcels/CDH-5.12.0-1.cdh5.12.0.p0.29/lib/hive
PATH=$PATH:$HIVE_HOME/bin:$HADOOP_HOME/bin

Spark学习笔记——安装和WordCount的更多相关文章

  1. Spark学习笔记-如何运行wordcount(使用jar包)

    IDE:eclipse Spark:spark-1.1.0-bin-hadoop2.4 scala:2.10.4 创建scala工程,编写wordcount程序如下 package com.luoga ...

  2. Spark学习笔记--安装SCALA和IDEA开发环境

    一:安装Scala

  3. Spark学习笔记2(spark所需环境配置

    Spark学习笔记2 配置spark所需环境 1.首先先把本地的maven的压缩包解压到本地文件夹中,安装好本地的maven客户端程序,版本没有什么要求 不需要最新版的maven客户端. 解压完成之后 ...

  4. spark学习笔记总结-spark入门资料精化

    Spark学习笔记 Spark简介 spark 可以很容易和yarn结合,直接调用HDFS.Hbase上面的数据,和hadoop结合.配置很容易. spark发展迅猛,框架比hadoop更加灵活实用. ...

  5. Spark学习笔记1——第一个Spark程序:单词数统计

    Spark学习笔记1--第一个Spark程序:单词数统计 笔记摘抄自 [美] Holden Karau 等著的<Spark快速大数据分析> 添加依赖 通过 Maven 添加 Spark-c ...

  6. Spark学习笔记之SparkRDD

    Spark学习笔记之SparkRDD 一.   基本概念 RDD(resilient distributed datasets)弹性分布式数据集. 来自于两方面 ①   内存集合和外部存储系统 ②   ...

  7. Spark学习笔记3(IDEA编写scala代码并打包上传集群运行)

    Spark学习笔记3 IDEA编写scala代码并打包上传集群运行 我们在IDEA上的maven项目已经搭建完成了,现在可以写一个简单的spark代码并且打成jar包 上传至集群,来检验一下我们的sp ...

  8. Spark学习笔记-GraphX-1

    Spark学习笔记-GraphX-1 标签: SparkGraphGraphX图计算 2014-09-29 13:04 2339人阅读 评论(0) 收藏 举报  分类: Spark(8)  版权声明: ...

  9. SystemTap 学习笔记 - 安装篇

    https://segmentfault.com/a/1190000000671438 在安装前,需要知道下自己的系统环境,我的环境如下: uname -r 2.6.18-308.el5 Linux ...

随机推荐

  1. 【洛谷】1600:天天爱跑步【LCA】【开桶】【容斥】【推式子】

    P1600 天天爱跑步 题目描述 小c同学认为跑步非常有趣,于是决定制作一款叫做<天天爱跑步>的游戏.<天天爱跑步>是一个养成类游戏,需要玩家每天按时上线,完成打卡任务. 这个 ...

  2. CocosCreator编辑器脚本生命周期函数

    Cocos Creator 为组件脚本提供了生命周期的回调函数.用户只要定义特定的回调函数,Creator 就会在特定的时期自动执行相关脚本,用户不需要手工调用它们. 目前提供给用户的生命周期回调函数 ...

  3. linux tail命令的使用方法详解

    本文介绍Linux下tail命令的使用方法. linux tail命令用途是依照要求将指定的文件的最后部分输出到标准设备,通常是终端,通俗讲来,就是把某个档案文件的最后几行显示到终端上,假设该档案有更 ...

  4. [TenserFlow学习笔记]——安装

    最近人工智能.深度学习.机器学习等词汇很是热闹,所以想进一步学习一下.不一定吃这口饭,但多了解一下没有坏处.接下来将学习到的一些知识点做一下记录. 1.安装环境 在VMWare虚拟机中安装最新版本的U ...

  5. NSArray与NSString、NSData,NSDictionary与NSString、NSData 相互转化

    NSArray *array = @[ @1, @2, @3, @4, @5, @3 ]; // 1. NSArray与NSData相互转化 // NSArray to NSData NSError ...

  6. Java全栈程序员之04:Ubuntu下安装MySQL、注册服务及Navcat

    在安装MySQL之前,我们先来介绍一下Ubuntu下软件的安装方式.首先回顾下,我们安装JDK,使用的是后缀名为tar.gz的安装包.安装idea,使用的是tar.gz:那有没有别的安装方式呢? 1. ...

  7. 常用CTPN、CRNN文本检测识别框架

    一.SWT识别: yestinsong/Text-Detection( Text Detection System with MSER , SWT and Text Verification(fft ...

  8. jq 回车提交指定按钮

    $(this).keydown(function (e) { var key = window.event ? e.keyCode : e.which; ") { $("#Main ...

  9. 解决nginx access日志中400 bad request 错误(转)

    在access.log中有大量400错误,并以每天几百M的速度增加,占用大量空间.tail -f /opt/nginx/logs/access.log 116.236.228.180 - - [15/ ...

  10. [Aaronyang] 写给自己的WPF4.5 笔记8[复杂数据处理三步曲,数据视图精讲1/3]

    真的好累了 ,笑了.做回自己吧       -------------      Aaronyang技术分享 www.ayjs.net 博文摘要: 详细介绍了WPF中视图的种类和开始学之前的准备工作 ...