一、RDD(Resilient Distributed Dataset)弹性分布式数据集
Spark 中最基本的数据抽象是RDD。
二、RDD五大特点
• A list of partitions
RDD由很多partition构成,在spark中,计算式,有多少partition就对应有多少个task来执行。 如果从hdfs文件创建的RDD,分区数和block数一致,如果从本地文件中创建RDD,默认是机器的cpu个数。
• A function for computing each split
对RDD做计算,相当于对RDD的每个split或partition做计算。
• A list of dependencies on other RDDs
RDD之间有依赖关系,可溯源。
• Optionally, a Partitioner for key-value RDDs
可选项。如果RDD里面存的数据是key-value形式,则可以传递一个自定义的Partitioner进行重新分区。
• Optionally, a list of preferred locations to compute eachsplit on
可选项。RDD抽象出的partition数据在内存中。RDD转换过程中一直是内存到内存的过程。如果内存性能太差,可以指定将partition加载至另外性能好的机器上运行。
三、Spark运行时
四、Spark代码示例
• lines = sc.textFile(“hdfs://...”)
• 加载进来成为RDD
• errors = lines.filter(_.startsWith(“ERROR”))
• Transformation转换
• errors.persist()
• 缓存RDD
• Mysql_errors = errors.filter(_.contain(“MySQL”)).count
• Action执行
• http_errors = errors.filter(_.contain(“Http”)).count
• Action执行
五、安装运行Spark
5.1 Local集群模式
将spark-1.3.1-bin-hadoop2.4.tgz上传至服务器,执行下面命令解压。
tar -zxvf spark-1.3.1-bin-hadoop2.4.tgz
cd spark-1.3.1-bin-hadoop2.4
然后再执行下方命令使用LOCAL模式计算圆周率
./bin/spark-submit --class org.apache.spark.examples.SparkPi --master local ./lib/spark-examples-1.3.1-hadoop2.4.0.jar 100
结果如下图:
5.2 standalone集群模式
将spark-1.3.1-bin-hadoop2.4.tgz上传至每一台服务器,执行下面命令解压。
tar -zxvf spark-1.3.1-bin-hadoop2.4.tgz
cd spark-1.3.1-bin-hadoop2.4/conf/
cp slaves.template slaves
cp spark-env.sh.template spark-env.sh
在每一台服务器上修改slaves和spark-env.sh
在master节点执行下方命令启动Spark
cd /home/spark-1.3.1-bin-hadoop2.4/
./sbin/start-all.sh
出现下图日志说明启动了一个master,两个worker
前往http://node1:8080/ ,可以看到如下界面,说明启动成功。
5.2.1 client模式,结果在控制台可见
执行下方命令
cd /home/spark-1.3.1-bin-hadoop2.4
./bin/spark-submit --class org.apache.spark.examples.SparkPi --master spark://node1:7077 --executor-memory 1G --total-executor-cores 1 ./lib/spark-examples-1.3.1-hadoop2.4.0.jar 100
控制台出现下图回显说明执行成功
同时观察界面,发现任务显示在了界面中
5.2.2 cluster模式,结果在spark管理控制界面可见
执行下方命令
cd /home/spark-1.3.1-bin-hadoop2.4
./bin/spark-submit --class org.apache.spark.examples.SparkPi --master spark://node1:7077 --deploy-mode cluster --supervise --executor-memory 1G --total-executor-cores 1 ./lib/spark-examples-1.3.1-hadoop2.4.0.jar 10
出现下图说明提交任务成功
如下图所示为运行完成的任务。
点击Completed Drivers的Worker,再点击stdout便可以看到结果。
5.3 Yarn模式
5.3.1 停止Spark,配置Spark Yarn模式的配置
执行下面命令,停止Spark
cd /home/spark-1.3.1-bin-hadoop2.4/
./sbin/stop-all.sh
对/home/spark-1.3.1-bin-hadoop2.4/conf/spark-env.sh做如下配置。
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop
export SPARK_HOME=/home/spark-1.3.1-bin-hadoop2.4
export SPARK_JAR=/home/spark-1.3.1-bin-hadoop2.4/lib/spark-assembly-1.3.1-hadoop2.4.0.jar
export PATH=$SPARK_HOME/bin:$PATH
5.3.2 启动Hadoop
我们之前已经大见过一个Hadoop的HA集群,现在执行下方步骤将其启动:
1、启动Zookeeper(在每一台服务器上执行下面命令)
zkServer.sh start
2、在nameNode上执行start-all.sh,启动Hadoop集群
3、启动完成后我们查看http://node1:50070/和http://node2:50070/,如下说明Hadoop集群启动成功。
5.3.3 启动Spark
执行下方命令,启动Spark
cd /home/spark-1.3.1-bin-hadoop2.4/
./sbin/start-all.sh
会出现下图日志
前往http://node1:8080/,可以看到下图截图,说明启动成功:
5.3.4、提交Spark程序
1、Client模式(结果控制台可见)
执行下面命令提交任务。
cd /home/spark-1.3.1-bin-hadoop2.4
./bin/spark-submit --class org.apache.spark.examples.SparkPi --master yarn-client --executor-memory 250M --num-executors 1 ./lib/spark-examples-1.3.1-hadoop2.4.0.jar 10
提交成功后,前往http://node1:8088/界面点击左侧Applications,可以看到如下所示任务运行在Yarn中。我不小心手抖提交了三次,所以有三个任务,其中一个是Running状态。
继续观察控制台,可以发现运行完毕之后,结果会在控制台显示出来。
2、cluster模式(结果在界面可见)
执行下面命令提交任务。
cd /home/spark-1.3.1-bin-hadoop2.4
./bin/spark-submit --class org.apache.spark.examples.SparkPi --master yarn-cluster --executor-memory 200M --num-executors 1 ./lib/spark-examples-1.3.1-hadoop2.4.0.jar 10
提交成功后,控制台依次打印如下:
yarn分配资源成功,接收任务
任务开始运行,控制台结束打印
我们再前往http://node1:8088/界面点击左侧Applications,可以看到如下所示任务运行在Yarn中。
等待任务运行完成
之后可以看到如下所示结果: