JohnShen's Blog.

[Untitled Post]

字数统计: 490阅读时长: 2 min
2020/11/30 Share

Spark

特点:

Speed / Generality / Ease of use / Runs Everywhere

快的原因:

  • 基于内存,而非基于磁盘。
  • 基于DAG 有向无环图 的执行引擎
  • MR是进程级别运行,Spark是基于线程模型(线程池)

local模式:

./spark-shell –master local[2]

standalone模式

spark-env.sh

1
2
3
SPARK_WORKER_CORES=2
SPARK_WORKER_MEMORY=2g
SPARK_WORKER_INSTANCES=1

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

CATALOG
  1. 1. Spark