Apache Spark

实时流式计算系统中的几个陷阱

蹲街弑〆低调 提交于 2020-05-08 10:13:15
随着诸如Apache Flink,Apache Spark,Apache Storm之类的开源框架以及诸如Google Dataflow之类的云框架的增多,创建实时数据处理作业变得非常容易。这些API定义明确,并且诸如Map-Reduce之类的标准概念在所有框架中都遵循几乎相似的语义。 但是,直到今天,实时数据处理领域的开发人员都在为该领域的某些特性而苦苦挣扎。因此,他们在不知不觉中创建了一条路径,该路径导致了应用程序中相当常见的错误。 让我们看一下在设计实时应用程序时可能需要克服的一些陷阱。 活动时间 源生成数据的时间戳称为“ 事件时间” ,而应用程序处理数据的时间戳称为“ 处理时间” 。在实时数据流应用程序中,最常见的陷阱是无法区分这些时间戳。 让我们详细说明一下。 由于诸如代理中的GC较高或太多数据导致背压之类的多个问题,数据队列易出现延迟。我将事件表示为(E,P),其中E是事件时间戳(HH:MM:SS格式),P是处理时间戳。在理想世界中,E == P,但这在任何地方都不会发生。 假设我们收到以下数据 ('05:00:00','05:00:02'),('05:00:01','05:00:03'),('05:00:01','05:00: 03'),('05:00:01','05:00:05'), ('05:00:02','05:00:05'),('05:00:02',' 05

Spark SQL的整体实现逻辑

泪湿孤枕 提交于 2020-05-08 07:13:54
1、sql语句的模块解析 当我们写一个查询语句时,一般包含三个部分,select部分,from数据源部分,where限制条件部分,这三部分的内容在sql中有专门的名称: 当我们写sql时,如上图所示,在进行逻辑解析时会把sql分成三个部分,project,DataSource,Filter模块,当生成执行部分时又把他们称为:Result模块、 DataSource模块和Opertion模块。 那么在关系数据库中,当我们写完一个查询语句进行执行时,发生的过程如下图所示: 整个执行流程是:query -> Parse -> Bind -> Optimize -> Execute 1、写完sql查询语句,sql的查询引擎首先把我们的查询语句进行解析,也就是Parse过程,解析的过程是把我们写的查询语句进行分割,把project,DataSource和Filter三个部分解析出来从而形成一个逻辑解析tree,在解析的过程中还会检查我们的sql语法是否有错误,比如缺少指标字段、数据库中不包含这张数据表等。当发现有错误时立即停止解析,并报错。当顺利完成解析时,会进入到Bind过程。 2、Bind过程,通过单词我们可看出,这个过程是一个绑定的过程。为什么需要绑定过程?这个问题需要我们从软件实现的角度去思考,如果让我们来实现这个sql查询引擎,我们应该怎么做

sparksql查询excel

↘锁芯ラ 提交于 2020-05-08 06:11:57
Spark官网下载Spark Spark下载 ,版本随意,下载后解压放入bigdata下(目录可以更改) 下载Windows下Hadoop所需文件winutils.exe   同学们自己网上找找吧,这里就不上传了,其实该文件可有可无,报错也不影响Spark运行,强迫症可以下载,本人就有强迫症~~,文件下载后放入bigdata\hadoop\bin目录下。 不用创建环境变量,再Java最开始处定义系统变量即可,如下: System.setProperty("hadoop.home.dir", HADOOP_HOME); 创建Java Maven项目java-spark-sql-excel   建立相关目录层次如下:   父级目录(项目所在目录)     - java-spark-sql-excel     - bigdata       - spark       - hadoop         - bin           - winutils.exe 编码 初始化SparkSession static { System.setProperty( "hadoop.home.dir" , HADOOP_HOME); spark = SparkSession.builder() .appName( "test" ) .master( "local[*]" ) .config(

hdp3.1 hive 3.0的使用记录

浪子不回头ぞ 提交于 2020-05-08 04:04:53
近来在做项目中的技术调研,使用最新版的hdp3.1,其中使用spark2.3和hive 3.1. 遇到 一些问题,记录如下: 一,使用spark-sql client driver去访问hive创建的数据库,发现找不到,使用presto访问hive,只能读写外部表。 经过查询资料了解到,hive3.1默认对内部表支持事务和ACID特性,spark等外部工具无法直接读取ACID的表数据, spark新版本正在跟进,但spark-sql本身也在和hive分离,走自己的路,已经和hive共用一个元数据库,但是使用不同的 catalog,存不同的元数据。 如果想使用spark-sql来处理hive的表数据,则需要做如下调整: 1.在advanced spark2-hive-site-override中配置metastore.catalog.default=hive之后重启spark2 服务, 这样就可以看到hive创建的数据库和表,但是只能访问外部表,无法访问内部表,原因上面已说明。 2.如果想使用presto,spark-sql来访问hive3.1的表,则需要做如下调整,放弃acid和事务特性。 hive.strict.managed.tables=false hive.create.as.insert.only=false metastore.create.as.acid=false

python实现OSM文件转为JSON格式

不打扰是莪最后的温柔 提交于 2020-05-07 21:19:32
OSM是OpenStreetMap的开源数据格式,采用xml存储。这里将其转为json后可以加载到Spark/Hadoop等系统中进一步处理,也可以直接转入GIS软件中使用。 提取OpenStreetMap的osm文件(xml格式),转为json并保存到三个文件。 采用递归方式处理,内存消耗少,适合大文件的处理,速度很快。 from pprint import * import json # 将指定tag的对象提取,写入json文件。 def process_element(elem): elem_data = etree.tostring(elem) elem_dict = xmltodict.parse(elem_data,attr_prefix="",cdata_key="") #print(elem_dict) if (elem.tag == "node"): elem_jsonStr = json.dumps(elem_dict["node"]) fnode.write(elem_jsonStr + "\n") elif (elem.tag == "way"): elem_jsonStr = json.dumps(elem_dict["way"]) fway.write(elem_jsonStr + "\n") elif (elem.tag == "relation"):

ubuntu18.04 安装hadoop 2.7.3+hive 2.3.4

旧街凉风 提交于 2020-05-07 19:06:25
1. 安装hadoop 详细请参见本人的另外一片博文《 Hadoop 2.7.3 分布式集群安装 》 2. 下载 hive 2.3.4 解压文件到/opt/software tar -xzvf ~/Downloads/apache-hive- 2.3 . 4 -bin. tar .gz -C /opt/software/ 3. 配置hive环境变量: sudo vim /etc/profile 在文件末尾添加: #hive export HIVE_HOME =/opt/apache-hive- 2.3 . 4 - bin export HIVE_CONF_HOME =$HIVE_HOME/ conf export PATH =.:$HIVE_HOME/ bin:$PATH export HADOOP_CLASSPATH =$HADOOP_CLASSPATH:$HIVE_HOME/lib /* export HCAT_HOME=$HIVE_HOME/hcatalog export PATH=$HCAT_HOME/bin:$PATH 在本人机器上之前已经配置好了hadoop和jdk 4. 配置hive配置文件 cd /opt/software/apache-hive- 2.3 . 4 -bin/conf/ mv beeline-log4j2.properties.template

27.四种常见的相关度分数优化方法

不想你离开。 提交于 2020-05-07 16:43:28
对相关度评分进行调节和优化的常见的 4 种方法 一、 query-time boost, 如果认为某一个 term 的比较重要,就把这个 term 的权重设的大一点,也就是把 boost 的值设的大一点。 GET /forum/article/_search { "query": { "bool": { "should": [ { "match": { "title": { "query": "java spark", "boost": 2 } } }, { "match": { "content": "java spark" } } ] } } } 2 、重构查询结构 重构查询结构就是优化查询语句。重构查询结果,在 es 新版本中,影响越来越小了。一般情况下,没什么必要的话,不用也行。 GET /forum/article/_search { "query": { "bool": { "should": [ { "match": { "content": "java" } }, { "match": { "content": "spark" } }, { "bool": { "should": [ { "match": { "content": "solution" } }, { "match": { "content": "beginner" } } ] } } ] } } }

Spark(六)Spark之开发调优以及资源调优

帅比萌擦擦* 提交于 2020-05-07 16:35:29
Spark调优主要分为开发调优、资源调优、数据倾斜调优、shuffle调优几个部分。开发调优和资源调优是所有Spark作业都需要注意和遵循的一些基本原则,是高性能Spark作业的基础;数据倾斜调优,主要讲解了一套完整的用来解决Spark作业数据倾斜的解决方案;shuffle调优,面向的是对Spark的原理有较深层次掌握和研究的同学,主要讲解了如何对Spark作业的shuffle运行过程以及细节进行调优。 本文作为Spark性能优化指南的基础篇,主要讲解开发调优以及资源调优。 一 开发调优 调优概述 Spark性能优化的第一步,就是要在开发Spark作业的过程中注意和应用一些性能优化的基本原则。开发调优,就是要让大家了解以下一些Spark基本开发原则,包括:RDD lineage设计、算子的合理使用、特殊操作的优化等。在开发过程中,时时刻刻都应该注意以上原则,并将这些原则根据具体的业务以及实际的应用场景,灵活地运用到自己的Spark作业中。 1 避免创建重复的RDD 通常来说,我们在开发一个Spark作业时,首先是基于某个数据源(比如Hive表或HDFS文件)创建一个初始的RDD;接着对这个RDD执行某个算子操作,然后得到下一个RDD;以此类推,循环往复,直到计算出最终我们需要的结果。在这个过程中,多个RDD会通过不同的算子操作(比如map、reduce等)串起来,这个“RDD串”

spark-xgboost8.1 java 例子

旧时模样 提交于 2020-05-06 10:18:02
第一个xgb的例子,还算顺利 public class Xgb2 implements Serializable{ /** * */ private static final long serialVersionUID = 1L; public static void main(String[] args) throws Exception { Long start=System.currentTimeMillis(); SparkSession s= SparkSession.builder().appName("XgbTrain").getOrCreate(); Xgb2 main=new Xgb2(); main.udf(s); main.read(s); HttpClientUtil.sendDingMessage("耗时:"+(System.currentTimeMillis()-start)/1000+"s"); } public void udf(SparkSession s) { s.udf().register("strToDouble", new UDF1<String, Double>() { private static final long serialVersionUID = 1L; @Override public Double call(String

Centos下安装nc命令工具安装以及使用

混江龙づ霸主 提交于 2020-05-06 01:45:28
  1)netcat(nc)是一个简单而有用的工具,被誉为网络安全界的“瑞士军刀”,不仅可以通过使用TCP或UDP协议的网络连接读写数据,同时还是一个功能强大的网络调试和探测工具,能够建立你需要的几乎所有类型的网络连接。   2)在Linux终端窗口可以直接使用yum工具进行安装: [root@master01 spark]# yum install nc.x86_64   3)安装完毕后,在终端模式下运行nc -help查看命令是否正常安装 [hadoop@master01 spark]$ nc - help usage: nc [ -46DdhklnrStUuvzC] [-i interval] [- p source_port] [ -s source_ip_address] [-T ToS] [-w timeout] [- X proxy_version] [ - x proxy_address[:port]] [hostname] [port[s]] Command Summary: - 4 Use IPv4 - 6 Use IPv6 - D Enable the debug socket option -d Detach from stdin - h This help text -i secs Delay interval for lines sent, ports