spark
1. 概念
2. spark 安装
2. 1) 安装依赖于scala , 需要 把Scala tar 分别解压安装在所有节点设备(主从机)上 的 /usr/local
cd scala -2.12.8
ls
2. 2) 解压 spark tar 包, 并完成配置
1.) 将 cdh 的 spark 包 解压到、 home/hduser/下
2.) 把 修改spark 主目录下、conf/slaves 配置如下
cd .. /conf
cp slaves.template salves
gedit salves
node2
node3
3) 修改 spark 主目录下 /conf/spark-env.sh
打开 spark-env.sh 并配置
export JAVA_HOME=
export HADOOP_HOME=
export SCALA_HOME=
export HADOOP_CONF_DIR=/home/hduser/hadoop/etc/hadoop // hadoop 配置文件目录
export SPARK_LOCAL_DIRS=/home/hduser/spark-1.6.0*
export SPARK_CLASSPATH=/home/hduser/spark-1.6.0*/lib/* // 配置 spark classpath 指向lib 包
export SPARK_MASTER_IP=node1 // 主机 IP
export SPARK_MASTER_PORT=8088
export SPARK_WORKER_MEMORY=512m 、/ 从机运行 spark job 最大内存
export SPARK_DIST_CLASSPATH=$($HADOOP_HOME/bin/hadoop classpath)
4. ) 把下包 拷贝到 spark/lib 文件夹下
cd spark -1.6.0 *
cd lib
scp -r
5 ) 将配置好的spark 主目录 , 拷贝的从机 node2 , node3 上
2.3 ) 常用命令
启动和关闭命令都在 spark 主目录 /sbin/ 下, 其他执行命令都在spark 主目录/bin 下
a) 启动
$> spark 主目录/sbin/start-all.sh
b) 关闭
$> spark 主目录/sbin/stop-all.sh
c) spark-shell
$> spark 主目录、/bin/spark-shell
执行完改名了后会切换到 Scala 命令窗口
2.4) 测试是否安装成功
1) 启动后 看进程, 主机 master, 从机 , worker
2) 浏览器访问 spark 集群 (http: //node1 : 8088)
3) 运行 $> spark 主目录 /bin/spark-shell 命令 切换spark 开发窗口
cd ~/spark-1.6.0
cd bin
./spark-shell
启动 Hadoop 下的 dfs 运算框架
3. 术语
3. 1. SparkConf
SparkConf : 主要 是配置 spark 的环境配置, 主机地址, 作业名称
val conf = new SparkConf().setMaster("主机地址”) . setAppName("作业名称”);
类似于:
Configuration conf = new Configuration();
core - site : 主机地址 ---> hdfs : //node1:9000
Job job = Job.getInstance(conf , "job名称")
3. 2. SparkContext
SparkContext 是 spark 环境 的上下文
val sc = new SparkContext (conf) ; // 其中 conf 是SparkConf , 所有spark 操作都是在 SparkContext 里完成的
3.3. RDD
RDD : 弹性分布式数据, 主要是一个RDD 一批(个) 文件, 但是RDD 没有真实存储对应的物理数据, 而可以通过RDD 完成对物理数据的操作, rdd 是只读的
a .) 根据 hdfs 上的文件创建对应的RDD 对象
val rdd1 = sc.textFile("hdfs://node1:9000/input/word.txt"); // 取数据
b .) 对 rdd 数据 , 做map 操作
hadoop is a application : valueIn.split(" ")
// rdd1 . map (x=> x.split(" ")) .map (x=>(x, 1));
val rdd2 = rdd1 . flatMap (x=> x.split(" ")) .map ((_, 1)) // flatMap 扁平化
rdd2.foreach(println)
rdd1 . flatMap() 与 rdd1 . map() 区别如下
如 有一个 rdd 的内容为 :
Hadoop is a java
mysql
rdd.map 处理后新的rdd 只有两条数据 每一条都是Array [String ] 类型
rdd1 . flatMap 扁平化处理后得到新的 rdd 有5 条数据 , 每一条都是 String 类型
c。), rdd [(key, value)].reduceByKey : 处理的是键值对, 将相同的数据一起处理,
如 : rdd 对象 r1 数据内容为 (Hadoop 1) (Java 1)(is 1)(java 1)
val r2 = r1.reduceByKey(_ +_ ): // 第一个 _ 代表本数据之前的运算结果值 , 第二个代表当前值
r2 的经过reduceByKey处理后变为 (Hadoop 1) (Java 2)(is 1)
val rdd3 = rdd2 .reduceByKey((_ + _))
rdd3.foreach(println)
4. Spark Shell
将 词频 words .txt 上传到 hdfs : //node1:9000/input/ 下
val rd1 = sc . textFile("hdfs 上 music 素材 ”)
val rd2 = rd1.map(x=>{(x.split("\t")(1), 1)});
val rd3 = rd2.reduceByKey(_ + _);
$> hadoop dfs -ls /input/
5。 ecplise 开发 Spark