前几天刚着实研究spark,spark安装与配置是入门的关键,本人也是根据网上各位大神的教程,尝试配置,发现版本对应最为关键。现将自己的安装与配置过程介绍如下,如有兴趣的同学可以尝试安装。所谓工欲善其事必先利其器,下面咱们将进入安装教程。

2016-12-06  10:17:07

环境

本教程使用了Ubuntu 14.04 64位作为系统环境,用到的安装程序有:jdk 1.7、spark-1.6.0 、scala-2.10.6、scala-SDK-4.4.1-vfinal-2.11-linux.gtk.x86_64(集成了scala的 eclipse)、hadoop 2.6.0。下面将一一介绍各个程序的安装过程。

×××注意

1、
文中和截图中会出现hadoop字样,这是由于作者在之前装过hadoop,并以hadoop为用户名登陆了电脑,比如/home/hadoop/下载,
这中间的hadoop就是hadoop用户家目录下的下载文件夹,你们的应该是/home/用户名(你们自己设置的)/Downloads(中文版的是下
载)

2、linux中用到的解压方法大部分都是

tar -zxvf 文件名(适用于以.tar.gz为结尾的压缩文件)

unzip 文件名     (适用于以.zip为结尾的压缩文件)

3、移动文件或文件夹时,如遇到权限不够的问题

可将目标文件夹权限更改为777:

chmod -R 777 目标文件夹

但是在更改过后尽量将权限再改到755(为了安全):

chmod -R 755 目标文件夹

4、如果要用到hdfs,请安装hadoop,我的hadoop版本是2.6.0,参照 给力星 的文章(写的特别好):

转载:http://www.powerxing.com/install-hadoop/

一、java环境安装(如果已经安装好java环境的同学可以跳过这一步骤)

java安装的方法我是参照给力星的文章(转载 http://www.powerxing.com/install-hadoop/

因为后续可能需要更改一些配置文件,所有我们安装一下vim(也可以用gedit),首先按ctrl+alt+t打开终端窗口,输入:

sudo apt-get install vim

安装软件时需要确认,在提示出输入y即可

下面首先是安装java环境,通过命令直接安装

sudo apt-get install openjdk-7-jre openjdk-7-jdk
JRE和JDK的区别

JRE(Java Runtime Environment,Java运行环境),是运行 Java 所需的环境。JDK(Java Development Kit,Java软件开发工具包)即包括 JRE,还包括开发 Java 程序所需的工具和类库。

安装好 OpenJDK 后,需要找到相应的安装路径,这个路径是用于配置 JAVA_HOME 环境变量的。执行如下命令:

    dpkg -L openjdk-7-jdk | grep '/bin/javac' 

该 命令会输出一个路径,除去路径末尾的 “/bin/javac”,剩下的就是正确的路径了。如输出路径为 /usr/lib/jvm/java-7-openjdk-amd64/bin/javac,则我们需要的路径为 /usr/lib/jvm/java-7-openjdk-amd64。

接着配置 JAVA_HOME 环境变量,为方便,我们在 ~/.bashrc 中进行设置(扩展阅读: 设置Linux环境变量的方法和区别):

vim ~/.bashrc

在文件最前面添加如下单独一行(注意 = 号前后不能有空格),将“JDK安装路径”改为上述命令得到的路径,并保存:

export JAVA_HOME=JDK安装路径 

如下图所示(该文件原本可能不存在,内容为空,这不影响):

配置JAVA_HOME变量

接着还需要让该环境变量生效,执行如下代码:

source ~/.bashrc # 使变量设置生效

设置好后我们来检验一下是否设置正确:

echo $JAVA_HOME                       # 检验变量值

java -version

$JAVA_HOME/bin/java -version     # 与直接执行 java -version 一样

如果设置正确的话,$JAVA_HOME/bin/java -version 会输出 java 的版本信息,且和 java -version 的输出结果一样。

成功配置JAVA_HOME变量

这样,spark 所需的 Java 运行环境就安装好了。

二、scala环境安装

Scala是一门多范式的编程语言,一种类似java的编程语言 ,设计初衷是实现可伸缩的语言,并集成面向对象编程函数式编程的各种特性。

scala是spark的原生语言,各种新特性肯定是scala最先支持的。

Scala两大特点,正好匹配Spark的需求:

  • 基于JVM,和Hadoop、YARN等集成比较容易
  • 函数式编程语言,从对外API到对内实现上都更容易统一范式

首先下载scala2.10.6版本 下载地址为:http://www.scala-lang.org/download/2.10.6.html,linux下下载的文件一般会保存在  /下载 文件夹下 。下载的文件为:scala-2.10.6.tgz。将其安装在/usr/local/文件夹下,在命令行输入:

tar -zxvf scala-2.10.6.tgz  #解压tgz文件

将文件夹移到/usr/local下

mv /home/local/scala-2.10.6 /usr/local/scala   #移动scala-2.10.6文件夹,并重命名为scala

编辑 /etc/profile文件 增加SCALA_HOME环境变量配置,在/etc/profile中配置文件(用sudo vim /etc/profile或是sudo gedit /etc/profile打开)

sudo vim /etc/profile

按键盘上的 i 键,在文件最后添加

#Seeting Scala Scala环境变量
export SCALA_HOME=/usr/local/scala
export PATH=${SCALA_HOME}/bin:$PATH

按键盘上的 Esc 键,然后按 Shift 加:键,输入wq,回车键退出配置文件。

接下来立即生效 /etc/profile ,命令行中输入:

 source /etc/profile

验证scala

scala -version

编写简单scala程序,在命令行输入scala,并输入println("hello,Scala"),查看输出结果,是不是很类似java

到此为止scala就安装成功了!下面进入今天的主角spark的安装阶段。

三、spark安装与配置

首先下载spark:http://spark.apache.org/downloads.html,选择1.6.0版本,此版本对应hadoop2.6.0(如果需要安装hadoop的同学可以参照给力星的文章,文章开头有介绍)

下载结束后会在下载文件夹看到文件:spark-1.6.0-bin-hadoop2.6.tgz

在命令行终端,输入:

cd /home/hadoop/下载                      #进入下载文件夹
tar -zxvf spark-1.6.0-bin-hadoop2.6.tgz #解压文件
mv /home/hadoop/下载/spark-1.6.0-bin-hadoop2.6 /usr/local/spark #移动spark-1.6.0文件夹,并重命名为spark

下面配置环境变量

编辑 /etc/profile文件 增加SCALA_HOME环境变量配置,在/etc/profile中配置文件(用sudo vim /etc/profile或是sudo gedit /etc/profile打开)

sudo vim /etc/profile

按键盘上的 i 键,在文件最后添加

#setting Spark Spark环境变量
export SPARK_HOME=/usr/local/spark
export PATH=$PATH:${SPARK_HOME}/bin

按键盘上的 Esc 键,然后按 Shift 加:键,输入wq,回车键退出配置文件。

接下来使配置文件生效,命令行终端输入:

source /etc/profile

spark就已经安装好了,下面测试一下:
    在命令行输入:

/usr/local/spark/bin/spark-shell 

进入bin目录:

cd /usr/local/spark/bin

 接下来输入:

./run-example SparkPi 10     #(迭代次数) 计算π的值

这就是迭代10次计算的结果:

开启spark(scala),在命令行输入:

cd /usr/local/spark/bin
./spark-shell
#把输入文件加载进RDD:
val textFile = sc.textFile("YOUR_INPUT_FILE")
#MapReduce操作,以work为key,1为value:
val wordCounts = textFile.flatMap(line => line.split(" ")).map(word => (word, 1)).reduceByKey((a, b) => a + b)
#查看每个单词出现的次数
wordCounts.collect()

结果展示:

至此spark的安装环境已经结束。但是平常咱们习惯用eclipse等集成开发环境来进行实验与开发,所以下面我将介绍如果用eclipse进行spark程序开发。

四、eclipse上spark程序开发

还是首先进行下载,这时候下载的是继承了scala编程环境的eclipse。

我们下载是http://scala-ide.org/download/sdk.html:选择linux 64位

下载完成后会在下载文件夹看到:scala-SDK-4.4.1-vfinal-2.11-linux.gtk.x86_64.tar.gz

对其解压:

cd /home/hadoop/下载
tar -zxvf scala-SDK-4.4.1-vfinal-2.11-linux.gtk.x86_64.tar.gz

将其移动到/opt文件夹下,opt文件夹通常用来安装大型软件(其实你愿意放哪就放哪,只要不放在/tmp临时文件夹下就行)

mv /home/hadoop/eclipse /opt

现在打开eclipse:

cd /opt/eclipse
./eclipse

新建一个scala project,并创建包名为com.dt.spark的package名

然后右键新建,选择other,输入scala,点击scala object

通常Scala library container默认是2.11.8,我们需要改成2.10版本的,解决办法:

选中Scala library container,右键->Properties->Latest 2.10 bundle(dynamic),点击OK:

然后新建一个名为WordCount的scala文件

这时候需要导入spark的jar包:spark-assembly-1.6.0-hadoop2.6.0.jar,编写程序需要调用的包都在这个jar包里,它大约180多MB,spark 2.0 及以上将其拆分成若干个小jar包了。

它在文件夹 /usr/local/spark/lib下。

右键Build Path->Configure Build Path->Add External Jars->选择/usr/local/spark/lib下的spark-assembly-1.6.0-hadoop2.6.0.jar。

双击wordCount.scala,编写代码:

package com.dt.spark

import org.apache.spark.SparkConf
import org.apache.spark.SparkContext /**
* 使用Scala开发本地测试的Spark WordCount程序
* 程序注释内容来自王家林的大数据视频
*/ object WordCount {
def main(args : Array[String]){
/**
* 第1步:创建Spark的配置对象SparkConf,设置Spark程序的运行时的配置信息,
* 例如说通过setMaster来设置程序要链接的Spark集群的Master的URL,如果设置
* 为local,则代表Spark程序在本地运行,特别适合于机器配置条件非常差(例如
* 只有1G的内存)的初学者 *
*/
val conf = new SparkConf()//创建SparkConf对象
conf.setAppName("Wow,My First Spark Programe")//设置应用程序的名称,在程序运行的监控界面可以看到名称
conf.setMaster("local")//此时,程序在本地运行,不需要安装Spark集群
/**
* 第2步:创建SparkContext对象
* SparkContext是Spark程序所有功能的唯一入口,无论是采用Scala、Java、Python、R等都必须有一个SparkContext
* SparkContext核心作用:初始化Spark应用程序运行所需要的核心组件,包括DAGScheduler、TaskScheduler、SchedulerBackend
* 同时还会负责Spark程序往Master注册程序等
* SparkContext是整个Spark应用程序中最为至关重要的一个对象
*/
val sc = new SparkContext(conf)//创建SparkContext对象,通过传入SparkConf实例来定制Spark运行的具体参数和配置信息
/**
* 第3步:根据具体的数据来源(HDFS、HBase、Local FS、DB、S3等)通过SparkContext来创建RDD
* RDD的创建基本有三种方式:根据外部的数据来源(例如HDFS)、根据Scala集合、由其它的RDD操作
* 数据会被RDD划分成为一系列的Partitions,分配到每个Partition的数据属于一个Task的处理范畴
*/
val lines = sc.textFile("/home/hadoop/input/input",1)//读取本地文件并设置为一个Partion
/**
* 第4步:对初始的RDD进行Transformation级别的处理,例如map、filter等高阶函数等的编程,来进行具体的数据计算
* 第4.1步:讲每一行的字符串拆分成单个的单词
*/ val words = lines.flatMap{line => line.split(" ")}//对每一行的字符串进行单词拆分并把所有行的拆分结果通过flat合并成为一个大的单词集合 /**
* 第4步:对初始的RDD进行Transformation级别的处理,例如map、filter等高阶函数等的编程,来进行具体的数据计算
* 第4.2步:在单词拆分的基础上对每个单词实例计数为1,也就是word => (word, 1)
*/ val pairs = words.map{word => (word,1)}
/**
* 第4步:对初始的RDD进行Transformation级别的处理,例如map、filter等高阶函数等的编程,来进行具体的数据计算
* 第4.3步:在每个单词实例计数为1基础之上统计每个单词在文件中出现的总次数
*/
val wordCounts = pairs.reduceByKey(_+_)//对相同的Key,进行Value的累计(包括Local和Reducer级别同时Reduce)
wordCounts.foreach(wordNumberPair => println(wordNumberPair._1 + " : " +wordNumberPair._2))//在命令行中打印该结果
wordCounts.repartition(1).saveAsTextFile("/home/hadoop/output/");//结果保存到本地
sc.stop()//记得关闭创建的SparkContext对象
}
}

等等,先别运行!!!

这时候通常工程名上会出现一个红色的叉叉×,解决办法如下:

WordCount工程->右键->Scala->Set the Scala Installation->Fixed Scala Installation:2.10.6 (bundled)

点击OK,问题解决!(如果还不能解决,请参看google或是百度)

现在开始运行吧!

运行结果展示:

至此为止,spark的安装与wordcount的运行历程就结束了,这是我第一次写这种博客,有不足的地方请帮忙指正,其中还有很多地方是参照别人的教程,由于之前安装时比较匆忙,来不及保存网页,如有抄袭请见谅,谢谢!

最后贴一段java语言编写的wordcount:

package spark_hdfs;

import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaPairRDD;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.api.java.function.FlatMapFunction;
import org.apache.spark.api.java.function.Function2;
import org.apache.spark.api.java.function.PairFunction;
import scala.Tuple2; import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.regex.Pattern; public final class JavaWordCount { private static final Pattern SPACE = Pattern.compile(" ");
public static void main(String[] args) throws Exception {
Date start=new Date();
String[] otherArgs=new String[]{"hdfs://localhost:9000/user/hadoop/spark_input/","hdfs://localhost:9000/user/hadoop/spark_output"}; /* 直接设置输入参数 */
if (otherArgs.length != 2) {
System.err.println("Usage: wordcount <in> <out>");
System.exit(2);
} //创建SparkConf,包含application的相关信息
// SparkConf sparkConf = new SparkConf().setAppName("JavaWordCount");
//创建一个JavaSparkContext对象
SparkConf sparkConf = new SparkConf()
.setAppName("WordCountLocal")
.setMaster("local");
JavaSparkContext ctx = new JavaSparkContext(sparkConf);
//textFile()方法可将本地文件或HDFS文件转换成RDD,读取本地文件需要各节点上都存在,或者通过网络共享该文件
//读取一行
JavaRDD<String> lines = ctx.textFile(otherArgs[0], 1);
//flatMap与map的区别是,对每个输入,flatMap会生成一个或多个的输出,而map只是生成单一的输出
//用空格分割各个单词,输入一行,输出多个对象,所以用flatMap
JavaRDD<String> words = lines.flatMap(new FlatMapFunction<String, String>() {
@Override
public Iterable<String> call(String s) {
return Arrays.asList(SPACE.split(s));
}
});
//对每个单词生成key-value对,PairFunction<T,K,V>
//表示输入类型为T,生成的key-value对中的key类型为k,value类型为v,对本例,T=String, K=String, V=Integer(计数)
//重写scala的Tupple2方法
JavaPairRDD<String, Integer> ones = words.mapToPair(new PairFunction<String, String, Integer>() {
@Override
//scala.Tuple2<K,V> call(T t)
//Tuple2为scala中的一个对象,call方法的输入参数为T,即输入一个单词s,新的Tuple2对象的key为这个单词,计数为1
public Tuple2<String, Integer> call(String s) {
return new Tuple2<String, Integer>(s, 1);
}
});
//调用reduceByKey方法,按key值进行reduce
//调用Function2对象,Function2<T1,T2,R>
//输入两个参数,T1,T2,返回R
//若ones有<"one", 1>, <"one", 1>,会根据"one"将相同的pair单词个数进行统计,输入为Integer,输出也为Integer
//输出<"one", 2>
JavaPairRDD<String, Integer> counts = ones.reduceByKey(new Function2<Integer, Integer, Integer>() {
@Override
public Integer call(Integer i1, Integer i2) {
return i1 + i2;
}
});
//将结果保存到HDFS中
counts.saveAsTextFile(otherArgs[1]);
//collect返回一个包含RDD内所有元素的Array
List<Tuple2<String, Integer>> output = counts.collect();
for (Tuple2<?, ?> tuple : output) {
System.out.println(tuple._1() + ": " + tuple._2());
}
Date end=new Date();
System.out.println(end.getTime()-start.getTime());
ctx.stop();
}
}

spark 1.6.0 安装与配置(spark1.6.0、Ubuntu14.04、hadoop2.6.0、scala2.10.6、jdk1.7)的更多相关文章

  1. 烂泥:zabbix3.0安装与配置

    本文由ilanniweb提供友情赞助,首发于烂泥行天下 想要获得更多的文章,可以关注我的微信ilanniweb 这个月又快过完了,最近也比较忙,没时间写文章,今天挤点时间把zabbix3.0安装与配置 ...

  2. Spark on YARN模式的安装(spark-1.6.1-bin-hadoop2.6.tgz + hadoop-2.6.0.tar.gz)(master、slave1和slave2)(博主推荐)

    说白了 Spark on YARN模式的安装,它是非常的简单,只需要下载编译好Spark安装包,在一台带有Hadoop YARN客户端的的机器上运行即可.  Spark on YARN简介与运行wor ...

  3. CentOS-6.6下Tomcat-7.0安装与配置(Linux)

    CentOS-6.6下Tomcat-7.0安装与配置(Linux) 一.认识tomcat Tomcat是一个免费的开源的Serlvet容器,它是Apache基金会的Jakarta项目中的一个核心项目, ...

  4. CDH6.3.0下Apache Atlas2.1.0安装与配置

    CDH6.3.0下Apache Atlas2.1.0安装与配置 0. 说明 文中的${ATLAS_HOME}, ${HIVE_HOME} 环境变更需要根据实际环境进行替换. 1. 依赖 A. 软件依赖 ...

  5. Windows 8.0上Eclipse 4.4.0 配置CentOS 6.5 上的Hadoop2.2.0开发环境

    原文地址:http://www.linuxidc.com/Linux/2014-11/109200.htm 图文详解Windows 8.0上Eclipse 4.4.0 配置CentOS 6.5 上的H ...

  6. DL服务器主机环境配置(ubuntu14.04+GTX1080+cuda8.0)解决桌面重复登录

    DL服务器主机环境配置(ubuntu14.04+GTX1080+cuda8.0)解决桌面重复登录 前面部分是自己的记录,后面方案部分是成功安装驱动+桌面的正解 问题的开始在于:登录不了桌面,停留在重复 ...

  7. ubuntu12.04+hadoop2.2.0+zookeeper3.4.5+hbase0.96.2+hive0.13.1伪分布式环境部署

    目录: 一.hadoop2.2.0.zookeeper3.4.5.hbase0.96.2.hive0.13.1都是什么? 二.这些软件在哪里下载? 三.如何安装 1.安装JDK 2.用parallel ...

  8. 【甘道夫】Ubuntu14 server + Hadoop2.2.0环境下Sqoop1.99.3部署记录

    第一步.下载.解压.配置环境变量: 官网下载sqoop1.99.3 http://mirrors.cnnic.cn/apache/sqoop/1.99.3/ 将sqoop解压到目标文件夹,我的是 /h ...

  9. CentOS7.0安装与配置Tomcat-7

    解决权限不够 #chmod a+x filename 安装说明 安装环境:CentOS-7.0.1406安装方式:源码安装 软件:apache-tomcat-7.0.29.tar.gz 下载地址:ht ...

随机推荐

  1. 校验正确获取对象或者数组的属性方法(babel-plugin-idx/_.get)

    背景: 开发中经常遇到取值属性的时候,需要校验数值的有效性. 例如: 获取props对象里面的friends属性 props.user && props.user.friends &a ...

  2. 微信小程序填坑之旅(2)-wx.showLoading的时候,仍能点击穿透,造成重复点击button的问题

    解决办法:mask =true wx.showLoading({ title: '正在上传...', mask:true, })

  3. 【CUDA 基础】5.2 共享内存的数据布局

    title: [CUDA 基础]5.2 共享内存的数据布局 categories: - CUDA - Freshman tags: - 行主序 - 列主序 toc: true date: 2018-0 ...

  4. loj541

    七曜圣贤 sol:我标算还没写过,似乎分块就可以过(因为数据是随机的),我写个set可以有70~80分 //C++ #include<bits/stdc++.h> using namesp ...

  5. redis,memcached,mongodb之间的区别

    Redis Redis的优点: 支持多种数据结构,如 string(字符串). list(双向链表).dict(hash表).set(集合).zset(排序set).hyperloglog(基数估算) ...

  6. SyntaxError: (unicode error) 'utf-8' codec can't decode byte 0xce in position 0: invalid continuatio

    点击  文档>>设置文件编码>>Unicode>>Unicode(UTF-8)

  7. Http协议三次握手和四次挥手

    TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接: 位码即tcp标志位,有6种标示: SYN(synchronous建立联机) ACK(acknowledgemen ...

  8. javascript中的BOM

    浏览器对象模型BOM,提供了访问浏览器的接口.这些功能大多和网页内容无关,多年来,由于缺乏规范导致BOM中的不同方法在不同浏览器中的实现有所差异,直到html5,才将BOM的主要方面纳入规范. BOM ...

  9. 一些风骚的shell命令行操作

    1.用你最喜欢的编辑器来敲命令 command <CTRL-x CTRL-e> 在已经敲完的命令后按<CTRL-x CTRL-e>,会打开一个你指定的编辑器(比如vim,通过环 ...

  10. iOS开发-多层嵌套block中如何使用__weak和__strong

    1.关于__weak__weak只能在ARC模式下使用,也只能修饰对象(比如NSString等),不能修饰基本数据类型(比如int等)__weak修饰的对象在block中不可以被重新赋值.__weak ...