Spark
特点:
Speed / Generality / Ease of use / Runs Everywhere
快的原因:
- 基于内存,而非基于磁盘。
 - 基于DAG 有向无环图 的执行引擎
 - MR是进程级别运行,Spark是基于线程模型(线程池)
 
local模式:
./spark-shell –master local[2]
standalone模式
spark-env.sh
1  | SPARK_WORKER_CORES=2  | 
slaves
文件slave启动在哪些机器上
./sbin/start-all.sh
SQL on Hadoop
1)Hive
    sql ==> mapreduce
    metastore : 元数据
    sql:database、table、view
    facebook
2)impala
    cloudera : cdh、cm
    sql:自己的守护进程执行的,非mr
    高内存要求
    metastore
3)presto
    facebook
    京东
    sql
4)drill
    sql
    可访问:hdfs、rdbms、json、hbase、mongodb、s3、hive
5)Spark SQL
    sql
    dataframe/dataset api
    metastore
    访问:hdfs、rdbms、json、hbase、mongodb、s3、hive  ==> 外部数据源
hive –service metastore
hive-site.xml 放到spark conf目录下
–jars 传递mysql驱动包
./spark-shell –master local[2] –jars /root/hive-1.1.0/lib/mysql-connector-java-5.1.48.jar
spark.sql(“select * from youdata.mock_table_1”).show
可直接输入sql
./spark-sql –master local[2] –jars /root/hive-1.1.0/lib/mysql-connector-java-5.1.48.jar
select * from emp e join dept d on e.deptno=d.deptno;
explain extented sql 输出执行计划
thriftserver
./start-thriftserver.sh –master local[2] –jars /root/hive-1.1.0/lib/mysql-connector-java-5.1.48.jar
thriftserver和普通的spark-shell/spark-sql有什么区别?
1)spark-shell、spark-sql都是一个spark  application;
2)thriftserver, 不管你启动多少个客户端(beeline/code),永远都是一个spark application
    解决了一个数据共享的问题,多个客户端可以共享数据;
A Dataset is a distributed collection of data:分布式的数据集
A DataFrame is a Dataset organized into named columns.
以列(列名、列的类型、列值)的形式构成的分布式数据集,按照列赋予不同的名称
DataFrame和RDD互操作的两种方式:
1)反射:case class   前提:事先需要知道你的字段、字段类型    
2)编程:Row 如果第一种情况不能满足你的要求(事先不知道列)
3) 选型:优先考虑第一种
DataFrame = Dataset[Row]
Dataset:强类型  typed  case class
DataFrame:弱类型   Row