慕课网大数据笔记

安装环境

# 存放应用
/home/hadoop/app

# 修改映射关系
chmod /etc/hosts
vim /etc/hosts

# 删除dfs文件夹
rm -r /hadoop/app/tmp/dfs

# 重新format
cd /home/hadoop/app/hadoop-2.6.0-cdh5.7.0/bin
./hadoop namenode -format
1.怎么学习spark
Spark源码所在的地方:https://github.com/apache/spark

官网:xxxx.apache.org
源码:https://github.com/apache/xxxx


abstract class RDD[T: ClassTag](
    @transient private var _sc: SparkContext,
    @transient private var deps: Seq[Dependency[_]]
) extends Serializable with Logging

1)RDD是一个抽象类
2)带泛型的,可以支持多种类型: String、Person、User


RDD:Resilient Distributed Dataset   弹性 分布式 数据集

Represents an 
	immutable:不可变
	partitioned collection of elements :分区
		Array(1,2,3,4,5,6,7,8,9,10)  3个分区: (1,2,3) (4,5,6) (7,8,9,10)
	that can be operated on in parallel: 并行计算的问题




单机存储/计算==>分布式存储/计算
1)数据的存储: 切割    HDFS的Block
2)数据的计算: 切割(分布式并行计算)   MapReduce/Spark
3)存储+计算 :   HDFS/S3+MapReduce/Spark
	
	==> OK 


2.RDD的特性:	
Internally, each RDD is characterized by five main properties:
- A list of partitions
	特性一:每个RDD一系列的分区/分片组成

- A function for computing each split/partition
	y = f(x)
	rdd.map(_+1)  
	特性二:对RDD执行函数会作用到每一个分区上

- A list of dependencies on other RDDs
	rdd1 ==> rdd2 ==> rdd3 ==> rdd4
	dependencies: *****

	rdda = 5个partition
	==>map
	rddb = 5个partition
	特性三:RDD相互连接

- Optionally, a Partitioner for key-value RDDs (e.g. to say that the RDD is hash-partitioned)
	特性四:(可选)可确定RDD的划分方式

- Optionally, a list of preferred locations to compute each split on (e.g. 
block locations for an HDFS file)
	特性五:数据在哪优先把作业调度到数据所在的节点进行计算:移动数据不如移动计算
	为什么location有s?


3.五大特性源码体现:
def compute(split: Partition, context: TaskContext): Iterator[T] 特性二
def getPartitions: Array[Partition]  特性一
def getDependencies: Seq[Dependency[_]] = deps  特性三
def getPreferredLocations(split: Partition): Seq[String] = Nil  特性五
val partitioner: Option[Partitioner] = None  特性四



4.怎么开始
第一要务:创建SparkContext
	连接到Spark“集群”:local、standalone、yarn、mesos
	通过SparkContext来创建RDD、广播变量到集群

在创建SparkContext之前还需要创建一个SparkConf对象


RDD创建方式
	Parallelized Collections
	External Datasets

If using a path on the local filesystem, the file must also be accessible at the same path on worker nodes
	1)我们上课是在单节点上的:一个节点, hello.txt只要在这台机器上有就行了
	2)standalone: Spark集群: 3个节点  local path 都是从节点的本地读取数据  不建议



开发pyspark应用程序
	1) IDE: IDEA  pycharm
	2) 设置基本参数: python interceptor    PYTHONPATH   SPARK_HOME   2zip包
	3)开发
	4)使用local进行本地测试

提交pyspark应用程序($SPARK_HOME)
	./spark-submit --master local[2] --name spark0301 /home/hadoop/script/spark0301.py
	具体提交的详细说明参见:http://spark.apache.org/docs/latest/submitting-applications.html

RDD创建方式

方式一:
Parallelize Collections

>>> data = [1,2,3,4,5]
# 用parallelize函数创建
>>> distData = sc.parallelize(data)
>>> data
[1, 2, 3, 4, 5]
>>> distData
ParallelCollectionRDD[0] at parallelize at PythonRDD.scala:175

# 收集并输出rdd
>>> distData.collect()
[1, 2, 3, 4, 5]
>>>> distData.reduce(lambda a,b : a + b)
15
# 切成5个partition 会有5个Task
>>> distData = sc.parallelize(data,5)
>>>> distData.collect()
[1, 2, 3, 4, 5]

方式二:
External Datasets

# 读取文件
>>> sc.textFile("file:///home/hadoop/data/hello.txt").collect()
['hello\tworld\twelcome', 'hello\twelcome', 'hello spark', '']

# 读取集群的文件
>>> sc.textFile("hdfs://hadoop000:8020/hello.txt").collect()
['hello\tworld\twelcome', 'hello\twelcome', 'hello spark', '']

注意

1.我们上课是在单节点上的:一个节点,hello.txt 只要在这台机器上有就行了
2.standalone(Spark集群)读取本地文件时,需要文件在相同每个机器的相同文件上都存在(麻烦,少用),生产环境一般用yarn

3.textFile()可以传入参数空partition的数量(默认是128m为一个partition,自己设置不能超过这个大小)

触发spark job方式

  • collect
  • reduce

把数据写写入文件系统

猜你喜欢

转载自blog.csdn.net/DylanYuan/article/details/85108511