1.虚拟机与Linux
Spark+Tachyon+HDFS(HDFS擅长迭代运算,Tachyon基于内存分布式系统)
Spark是一个计算框架,需要相应的存储框架。目前是基于下面三种存储:
1.Hadoop的HDFS
2.S3,也就是云存储
3.Tychyon(业界在越来越多使用)
Spark+Tachyon+HDFS,将来是黄金组合
Tychyon是基于内存的分布式存储(分布式内存文件系统),也是来自berckly大学的AIM实验室。通过Tychyon可以把不同来源的数据合并起来。是用Java写的
数据不动代码动
Hadoop是Java开发的,可以运行在JVM中
Scala运行在JVM中
Spark是用Scala写的,所以也可以在JVM中
开发环境:
Windows系统,建议用win7
CPU,i7最好
内存,至少8G,建议金士顿8G * 2
VMware,11
Linux,首选CentOS,可以Ubuntu(ubuntukylin-14.04.2-desktop-amd64.iso)
镜像,8核8G,网络使用NAT模式
2.Hadoop集群的搭建和配置
Hadoop,2.6.0,目前最稳定版本,经过业界证实
安装路径:
cd /usr/local/jdk
cd /usr/local/hadoop
cd /usr/local/spark
生产环境里,可以自己编写自动化安装集群脚本,主要是基于CM(Cloudera Manager)和CDH进行集群安装
【Hadoop】
hadoop-2.6.0/etc/hadoop里是配置文件,主要的配置文件有:
core-site.xml
hdfs-site.xml
HDFS的block默认128M
多份副本,默认是3个副本
namenode,管理所有节点,数据的元数据在namenode里,而且也容易发生故障。所以有一个secondary namenode
mapred-site.xml
配置map/reduce运行在什么框架上,也就是yarn
yarn-site.xml
hadoop-env.sh
配置环境变量
~/.bashrc
配置bash的环境变量
slaves
包含datanode
$ bin/hdfs namenode -format
格式化磁盘为HDFS格式
配置了ssh信任互访之后就可以把hadoop文件夹,拷贝到其他机器中
scp -r ./hadoop-2.6.0 root@Worker1:/usr/local/hadoop/
scp /etc/hosts root@Worker1:/etc/hosts
jps,查看Hadoop的进程
tar -zxvf -c 指定目录 aaaa.tgz
3.Spark集群的搭建和配置
【Spark】
conf/spark-env.sh
用template copy一份,做修改
worker_cores,限制了并行处理的worker的数量
slaves,配置worker
配置~/.bashrc里环境变量
source ~/.bashrc,使其生效
然后同步环境变量文件到其他机器上
spark-defaults.conf
粗粒度,程序初始化时一次性分配资源,计算时不需要再申请资源
细粒度,程序计算时分配资源,计算结束后回收资源
yarn是粗粒度
Mesos既支持粗粒度,又支持细粒度
http://master:8088/cluster
spark web UI:4040端口
Hadoop web UI:50070端口
SparkPi程序
object SparkPi {
def main(args: Array[String]) {
val conf = new SparkConf().setAppName("Spark Pi")
val spark = new SparkContext(conf)
val slices = if (args.length > 0) args(0).toInt else 2
val n = math.min(100000L * slices, Int.MaxValue).toInt // avoid overflow
val count = spark.parallelize(1 until n, slices).map { i =>
val x = random * 2 - 1
val y = random * 2 - 1
if (x*x + y*y < 1) 1 else 0
}.reduce(_ + _)
println("Pi is roughly " + 4.0 * count /
每一个广告点击的总次数
点击排名(倒排)
SortBykey(false,1),其中1表示并行度
sc.textFile("/library/wordcount/input/Data").flatMap(_.split(" ")).map(word => (word, 1)).reduceByKey(_+_).map(pair => (pair._2, pair._1)).sortByKey(false,1).map(pair => (pair._2, pair._1)).saveAsTextFile("/library/wordcount/output/dt_spark_clicked3")
CDH
Spark
HDFS
HBase