sparksql脚本
⑴ 数据处理方式
什么是大数据:大数据(big data),指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。
大数据的5V特点:Volume(大量)、Velocity(高速)、Variety(多样)、Value(低价值密度)、Veracity(真实性),网络随便找找都有。
大数据处理流程:
1.是数据采集,搭建数据仓库,数据采集就是把数据通过前端埋点,接口日志调用流数据,数据库抓取,客户自己上传数据,把这些信息基础数据把各种维度保存起来,感觉有些数据没用(刚开始做只想着功能,有些数据没采集, 后来被老大训了一顿)。
2.数据清洗/预处理:就是把收到数据简单处理,比如把ip转换成地址,过滤掉脏数据等。
3.有了数据之后就可以对数据进行加工处理,数据处理的方式很多,总体分为离线处理,实时处理,离线处理就是每天定时处理,常用的有阿里的maxComputer,hive,MapRece,离线处理主要用storm,spark,hadoop,通过一些数据处理框架,可以吧数据计算成各种KPI,在这里需要注意一下,不要只想着功能,主要是把各种数据维度建起来,基本数据做全,还要可复用,后期就可以把各种kpi随意组合展示出来。
4.数据展现,数据做出来没用,要可视化,做到MVP,就是快速做出来一个效果,不合适及时调整,这点有点类似于Scrum敏捷开发,数据展示的可以用datav,神策等,前端好的可以忽略,自己来画页面。
数据采集:
1.批数据采集,就是每天定时去数据库抓取数据快照,我们用的maxComputer,可以根据需求,设置每天去数据库备份一次快照,如何备份,如何设置数据源,如何设置出错,在maxComputer都有文档介绍,使用maxComputer需要注册阿里云服务
2.实时接口调用数据采集,可以用logHub,dataHub,流数据处理技术,DataHub具有高可用,低延迟,高可扩展,高吞吐的特点。
高吞吐:最高支持单主题(Topic)每日T级别的数据量写入,每个分片(Shard)支持最高每日8000万Record级别的写入量。
实时性:通过DataHub ,您可以实时的收集各种方式生成的数据并进行实时的处理,
设计思路:首先写一个sdk把公司所有后台服务调用接口调用情况记录下来,开辟线程池,把记录下来的数据不停的往dataHub,logHub存储,前提是设置好接收数据的dataHub表结构
3.前台数据埋点,这些就要根据业务需求来设置了,也是通过流数据传输到数据仓库,如上述第二步。
数据处理:
数据采集完成就可以对数据进行加工处理,可分为离线批处理,实时处理。
1.离线批处理maxComputer,这是阿里提供的一项大数据处理服务,是一种快速,完全托管的TB/PB级数据仓库解决方案,编写数据处理脚本,设置任务执行时间,任务执行条件,就可以按照你的要求,每天产生你需要数据
2.实时处理:采用storm/spark,目前接触的只有storm,strom基本概念网上一大把,在这里讲一下大概处理过程,首先设置要读取得数据源,只要启动storm就会不停息的读取数据源。Spout,用来读取数据。Tuple:一次消息传递的基本单元,理解为一组消息就是一个Tuple。stream,用来传输流,Tuple的集合。Bolt:接受数据然后执行处理的组件,用户可以在其中执行自己想要的操作。可以在里边写业务逻辑,storm不会保存结果,需要自己写代码保存,把这些合并起来就是一个拓扑,总体来说就是把拓扑提交到服务器启动后,他会不停读取数据源,然后通过stream把数据流动,通过自己写的Bolt代码进行数据处理,然后保存到任意地方,关于如何安装部署storm,如何设置数据源,网上都有教程,这里不多说。
数据展现:做了上述那么多,终于可以直观的展示了,由于前端技术不行,借用了第三方展示平台datav,datav支持两种数据读取模式,第一种,直接读取数据库,把你计算好的数据,通过sql查出,需要配置数据源,读取数据之后按照给定的格式,进行格式化就可以展现出来
@jiaoready @jiaoready 第二种采用接口的形式,可以直接采用api,在数据区域配置为api,填写接口地址,需要的参数即可,这里就不多说了。
⑵ 大数据如何入门
首先我们要了解java语言和Linux操作系统,这两个是学习大数据的基础,学习的顺序不分前后。
大数据
Java :只要了解一些基础即可,做大数据不需要很深的Java 技术,学java SE 就相当于有学习大数据基础。
Linux:因为大数据相关软件都是在Linux上运行的,所以Linux要学习的扎实一些,学好Linux对你快速掌握大数据相关技术会有很大的帮助,能让你更好的理解hadoop、hive、hbase、spark等大数据软件的运行环境和网络环境配置,能少踩很多坑,学会shell就能看懂脚本这样能更容易理解和配置大数据集群。还能让你对以后新出的大数据技术学习起来更快。
Hadoop:这是现在流行的大数据处理平台几乎已经成为大数据的代名词,所以这个是必学的。Hadoop里面包括几个组件HDFS、MapRece和YARN,HDFS是存储数据的地方就像我们电脑的硬盘一样文件都存储在这个上面,MapRece是对数据进行处理计算的,它有个特点就是不管多大的数据只要给它时间它就能把数据跑完,但是时间可能不是很快所以它叫数据的批处理。
Zookeeper:这是个万金油,安装Hadoop的HA的时候就会用到它,以后的Hbase也会用到它。它一般用来存放一些相互协作的信息,这些信息比较小一般不会超过1M,都是使用它的软件对它有依赖,对于我们个人来讲只需要把它安装正确,让它正常的run起来就可以了。
Mysql:我们学习完大数据的处理了,接下来学习学习小数据的处理工具mysql数据库,因为一会装hive的时候要用到,mysql需要掌握到什么层度那?你能在Linux上把它安装好,运行起来,会配置简单的权限,修改root的密码,创建数据库。这里主要的是学习SQL的语法,因为hive的语法和这个非常相似。
Sqoop:这个是用于把Mysql里的数据导入到Hadoop里的。当然你也可以不用这个,直接把Mysql数据表导出成文件再放到HDFS上也是一样的,当然生产环境中使用要注意Mysql的压力。
Hive:这个东西对于会SQL语法的来说就是神器,它能让你处理大数据变的很简单,不会再费劲的编写MapRece程序。有的人说Pig那?它和Pig差不多掌握一个就可以了。
Oozie:既然学会Hive了,我相信你一定需要这个东西,它可以帮你管理你的Hive或者MapRece、Spark脚本,还能检查你的程序是否执行正确,出错了给你发报警并能帮你重试程序,最重要的是还能帮你配置任务的依赖关系。我相信你一定会喜欢上它的,不然你看着那一大堆脚本,和密密麻麻的crond是不是有种想屎的感觉。
Hbase:这是Hadoop生态体系中的NOSQL数据库,他的数据是按照key和value的形式存储的并且key是唯一的,所以它能用来做数据的排重,它与MYSQL相比能存储的数据量大很多。所以他常被用于大数据处理完成之后的存储目的地。
Kafka:这是个比较好用的队列工具,队列是干吗的?排队买票你知道不?数据多了同样也需要排队处理,这样与你协作的其它同学不会叫起来,你干吗给我这么多的数据(比如好几百G的文件)我怎么处理得过来,你别怪他因为他不是搞大数据的,你可以跟他讲我把数据放在队列里你使用的时候一个个拿,这样他就不在抱怨了马上灰流流的去优化他的程序去了,因为处理不过来就是他的事情。而不是你给的问题。当然我们也可以利用这个工具来做线上实时数据的入库或入HDFS,这时你可以与一个叫Flume的工具配合使用,它是专门用来提供对数据进行简单处理,并写到各种数据接受方(比如Kafka)的。
Spark:它是用来弥补基于MapRece处理数据速度上的缺点,它的特点是把数据装载到内存中计算而不是去读慢的要死进化还特别慢的硬盘。特别适合做迭代运算,所以算法流们特别稀饭它。它是用scala编写的。Java语言或者Scala都可以操作它,因为它们都是用JVM的。
⑶ 如何使用 Spark SQL
一、启动方法
/data/spark-1.4.0-bin-cdh4/bin/spark-sql --master spark://master:7077 --total-executor-cores 10 --executor-memory 1g --executor-cores 2
注:/data/spark-1.4.0-bin-cdh4/为spark的安装路径
/data/spark-1.4.0-bin-cdh4/bin/spark-sql –help 查看启动选项
--master MASTER_URL 指定master url
--executor-memory MEM 每个executor的内存,默认为1G
--total-executor-cores NUM 所有executor的总核数
-e <quoted-query-string> 直接执行查询SQL
-f <filename> 以文件方式批量执行SQL
二、Spark sql对hive支持的功能
1、查询语句:SELECT GROUP BY ORDER BY CLUSTER BY SORT BY
2、hive操作运算:
1) 关系运算:= ==, <>, <, >, >=, <=
2) 算术运算:+, -, *, /, %
3) 逻辑运算:AND, &&, OR, ||
4) 复杂的数据结构
5) 数学函数:(sign, ln, cos, etc)
6) 字符串函数:
3、 UDF
4、 UDAF
5、 用户定义的序列化格式
6、join操作:JOIN {LEFT|RIGHT|FULL} OUTER JOIN LEFT SEMI JOIN CROSS JOIN
7、 unions操作:
8、 子查询: SELECT col FROM ( SELECT a + b AS col from t1) t2
9、Sampling
10、 Explain
11、 分区表
12、 视图
13、 hive ddl功能:CREATE TABLE、CREATE TABLE AS SELECT、ALTER TABLE
14、 支持的数据类型:TINYINT SMALLINT INT BIGINT BOOLEAN FLOAT DOUBLE STRING BINARY TIMESTAMPDATE ARRAY MAP STRUCT
三、Spark sql 在客户端编程方式进行查询数据
1、启动spark-shell
./spark-shell --master spark://master:7077 --total-executor-cores 10 --executor-memory 1g --executor-cores 2
2、编写程序
val sqlContext = new org.apache.spark.sql.SQLContext(sc)
val df = sqlContext.read.json("../examples/src/main/resources/people.json")
查看所有数据:df.show()
查看表结构:df.printSchema()
只看name列:df.select("name").show()
对数据运算:df.select(df("name"), df("age") + 1).show()
过滤数据:df.filter(df("age") > 21).show()
分组统计:df.groupBy("age").count().show()
1、查询txt数据
import sqlContext.implicits._
case class Person(name: String, age: Int)
val people = sc.textFile("../examples/src/main/resources/people.txt").map(_.split(",")).map(p => Person(p(0), p(1).trim.toInt)).toDF()
people.registerTempTable("people")
val teenagers = sqlContext.sql("SELECT name, age FROM people WHERE age >= 13 AND age <= 19")
2、parquet文件
val df = sqlContext.read.load("../examples/src/main/resources/users.parquet")
3、hdfs文件
val df = sqlContext.read.load("hdfs://namenode.Hadoop:9000/user/hive/warehouse/spark_test.db/test_parquet/part-r-00001.gz.parquet")
4、保存查询结果数据
val df = sqlContext.read.load("../examples/src/main/resources/users.parquet")
df.select("name", "favorite_color").write.save("namesAndFavColors.parquet“)
四、Spark sql性能调优
缓存数据表:sqlContext.cacheTable("tableName")
取消缓存表:sqlContext.uncacheTable("tableName")
spark.sql.inMemoryColumnarStorage.compressedtrue当设置为true时,Spark SQL将为基于数据统计信息的每列自动选择一个压缩算法。
spark.sql.inMemoryColumnarStorage.batchSize10000柱状缓存的批数据大小。更大的批数据可以提高内存的利用率以及压缩效率,但有OOMs的风险
⑷ 大数据学习路线是什么
主要分为 7 个阶段:入门知识 → Java 基础 → Scala 基础 → Hadoop 技术模块 → Hadoop 项目实战 → Spark 技术模块 → 大数据项目实战。
阶段一:学习入门知识
这一部分主要针对的是新手,在学习之前需要先掌握基本的数据库知识。MySQL 是一个 DBMS(数据库管理系统),是最流行的关系型数据库管理系统(关系数据库,是建立在关系数据库模型基础上的数据库,借助于集合代数等概念和方法来处理数据库中的数据)。
MongoDB 是 IT 行业非常流行的一种非关系型数据库(NoSQL),其灵活的数据存储方式备受当前 IT 从业人员的青睐。
而 Redis 是一个开源、支持网络、基于内存、键值对存储数据库。两者都非常有必要了解。
1、Linux 基础入门(新版)
2、Vim编辑器
3、Git 实战教程
4、MySQL 基础课程
5、MongoDB 基础教程
6、Redis基础教程
阶段二:Java基础
Java 是目前使用最为广泛的编程语言,它具有的众多特性,特别适合作为大数据应用的开发语言。
Java 语言具有功能强大和简单易用两个特征,跨平台应用能力比 C、C++ 更易用,更容易上手。同时还具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点。最重要的一点是 Hadoop 是用 Java 编写的。
1、Java编程语言(新版)
2、Java进阶之设计模式
3、J2SE核心开发实战
4、JDK 核心 API
5、JDBC 入门教程
6、Java 8 新特性指南
阶段三:Scala基础
Scala 是一种多范式的编程语言,其设计的初衷是要集成面向对象编程和函数式编程的各种特性。由于 Scala 运行于 Java 平台(Java 虚拟机),并兼容现有的Java 程序,所以 Scala 可以和大数据相关的基于 JVM 的系统很好的集成。
1、Scala 开发教程
2、Scala 专题教程 - Case Class和模式匹配
3、Scala 专题教程 - 隐式变换和隐式参数
4、Scala 专题教程 - 抽象成员
5、Scala 专题教程 - Extractor
6、Scala 开发二十四点游戏
阶段四:Hadoop技术模块
Hadoop 是一款支持数据密集型分布式应用并以 Apache 2.0 许可协议发布的开源软件框架,它能搭建大型数据仓库,PB 级别数据的存储、处理、分析、统计等业务。编程语言你可以选,但 Hadoop 一定是大数据必学内容。
1、Hadoop入门进阶课程
2、Hadoop部署及管理
3、HBASE 教程
4、Hadoop 分布式文件系统--导入和导出数据
5、使用 Flume 收集数据
阶段五:Hadoop项目实战
当然,学完理论就要进行动手实战了,Hadoop 项目实战可以帮助加深对内容的理解,并锻炼动手能力。
1、Hadoop 图处理--《hadoop应用框架》
阶段六:Spark技术模块
Spark 和 Hadoop 都是大数据框架。Hadoop 提供了 Spark 所没有的功能特性,比如分布式文件系统,而 Spark 为需要它的那些数据集提供了实时内存处理。所以学习 Spark 也非常必要。
1、Spark
2、x 快速入门教程
2、Spark 大数据动手实验
3、Spark 基础之 GraphX 图计算框架学习
4、Spark 基础之 DataFrame 基本概念学习
5、Spark 基础之 DataFrame 高阶应用技巧
6、Spark 基础之 Streaming 快速上手
7、Spark 基础之 SQL 快速上手
8、Spark 基础之使用机器学习库 MLlib
9、Spark 基础之 SparkR 快速上手
10、流式实时日志分析系统--《Spark 最佳实践》
11、使用 Spark 和 D3.js 分析航班大数据
阶段七:大数据项目实战
最后阶段提供了大数据实战项目,这是对常用技能的系统运用,例如使用常用的机器学习进行建模、分析和运算,这是成为大数据工程师过程中的重要一步。
1、Ebay 在线拍卖数据分析
2、流式实时日志分析系统--《Spark 最佳实践》
3、大数据带你挖掘打车的秘籍
4、Twitter数据情感分析
5、使用 Spark 进行流量日志分析
6、Spark流式计算电商商品关注度
7、Spark的模式挖掘-FPGrowth算法
(4)sparksql脚本扩展阅读:
大数据技术的具体内容:
分布式存储计算架构(强烈推荐:Hadoop)
分布式程序设计(包含:Apache Pig或者Hive)
分布式文件系统(比如:Google GFS)
多种存储模型,主要包含文档,图,键值,时间序列这几种存储模型(比如:BigTable,Apollo,DynamoDB等)
数据收集架构(比如:Kinesis,Kafla)
集成开发环境(比如:R-Studio)
程序开发辅助工具(比如:大量的第三方开发辅助工具)
调度协调架构工具(比如:Apache Aurora)
机器学习(常用的有Apache Mahout 或 H2O)
托管管理(比如:Apache Hadoop Benchmarking)
安全管理(常用的有Gateway)
大数据系统部署(可以看下Apache Ambari)
搜索引擎架构(学习或者企业都建议使用Lucene搜索引擎)
多种数据库的演变(MySQL/Memcached)
商业智能(大力推荐:Jaspersoft)
数据可视化(这个工具就很多了,可以根据实际需要来选择)
大数据处理算法(10大经典算法)
⑸ 大数据平台是什么什么时候需要大数据平台如何建立大数据平台
首先我们要了解Java语言和Linux操作系统,这两个是学习大数据的基础,学习的顺序不分前后。
Java :只要了解一些基础即可,做大数据不需要很深的Java 技术,学java SE 就相当于有学习大数据基础。
Linux:因为大数据相关软件都是在Linux上运行的,所以Linux要学习的扎实一些,学好Linux对你快速掌握大数据相关技术会有很大的帮助,能让你更好的理解hadoop、hive、hbase、spark等大数据软件的运行环境和网络环境配置,能少踩很多坑,学会shell就能看懂脚本这样能更容易理解和配置大数据集群。还能让你对以后新出的大数据技术学习起来更快。
Hadoop:这是现在流行的大数据处理平台几乎已经成为大数据的代名词,所以这个是必学的。Hadoop里面包括几个组件HDFS、MapRece和YARN,HDFS是存储数据的地方就像我们电脑的硬盘一样文件都存储在这个上面,MapRece是对数据进行处理计算的,它有个特点就是不管多大的数据只要给它时间它就能把数据跑完,但是时间可能不是很快所以它叫数据的批处理。
Zookeeper:这是个万金油,安装Hadoop的HA的时候就会用到它,以后的Hbase也会用到它。它一般用来存放一些相互协作的信息,这些信息比较小一般不会超过1M,都是使用它的软件对它有依赖,对于我们个人来讲只需要把它安装正确,让它正常的run起来就可以了。
Mysql:我们学习完大数据的处理了,接下来学习学习小数据的处理工具mysql数据库,因为一会装hive的时候要用到,mysql需要掌握到什么层度那?你能在Linux上把它安装好,运行起来,会配置简单的权限,修改root的密码,创建数据库。这里主要的是学习SQL的语法,因为hive的语法和这个非常相似。
Sqoop:这个是用于把Mysql里的数据导入到Hadoop里的。当然你也可以不用这个,直接把Mysql数据表导出成文件再放到HDFS上也是一样的,当然生产环境中使用要注意Mysql的压力。
Hive:这个东西对于会SQL语法的来说就是神器,它能让你处理大数据变的很简单,不会再费劲的编写MapRece程序。有的人说Pig那?它和Pig差不多掌握一个就可以了。
Oozie:既然学会Hive了,我相信你一定需要这个东西,它可以帮你管理你的Hive或者MapRece、Spark脚本,还能检查你的程序是否执行正确,出错了给你发报警并能帮你重试程序,最重要的是还能帮你配置任务的依赖关系。我相信你一定会喜欢上它的,不然你看着那一大堆脚本,和密密麻麻的crond是不是有种想屎的感觉。
Hbase:这是Hadoop生态体系中的NOSQL数据库,他的数据是按照key和value的形式存储的并且key是唯一的,所以它能用来做数据的排重,它与MYSQL相比能存储的数据量大很多。所以他常被用于大数据处理完成之后的存储目的地。
Kafka:这是个比较好用的队列工具,队列是干吗的?排队买票你知道不?数据多了同样也需要排队处理,这样与你协作的其它同学不会叫起来,你干吗给我这么多的数据(比如好几百G的文件)我怎么处理得过来,你别怪他因为他不是搞大数据的,你可以跟他讲我把数据放在队列里你使用的时候一个个拿,这样他就不在抱怨了马上灰流流的去优化他的程序去了,因为处理不过来就是他的事情。而不是你给的问题。当然我们也可以利用这个工具来做线上实时数据的入库或入HDFS,这时你可以与一个叫Flume的工具配合使用,它是专门用来提供对数据进行简单处理,并写到各种数据接受方(比如Kafka)的。
Spark:它是用来弥补基于MapRece处理数据速度上的缺点,它的特点是把数据装载到内存中计算而不是去读慢的要死进化还特别慢的硬盘。特别适合做迭代运算,所以算法流们特别稀饭它。它是用scala编写的。Java语言或者Scala都可以操作它,因为它们都是用JVM的。