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