自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

大数据学习与分享的博客

【微信公众号:大数据学习与分享】专注于大数据领域常用技术,如Spark、Hadoop、Hive、HBase、Kafka、Zookeeper等技术的使用、实战技巧、源码解读,语言主要以Java和Scala为主

  • 博客(109)
  • 收藏
  • 关注

原创 如何使用spark或者hive sql将Excel文件加载为一张hive表

一、Spark实现方案1. 创建Hive外部表, 数据保存格式为parquetcreate external table `bigdatalearnshare.test_excel_file`(`id` string,`name` string,`age` string)stored as parquetlocation '/bigdatalearnshare/test/test_excel_file';2. spark代码demospark版本: 2.4.3scala版本: 2.11

2022-04-16 22:18:04 2841

原创 ORA-24920 column size too large

问题: 使用的oracle client是11.2.0.4,当查询oracle数据时,报错:ORA-24920 column size too large。原因: 查询的oracle数据中存在varchar字段类型,并且长度超过了4000,解决: 升级oracle client为12c,如 12.2.0.1...

2022-04-02 14:54:36 3118 1

原创 cx_Oracle.DatabaseError: Error while trying to retrieve text for error ORA-01804

**问题:**使用cx_Oracle连接oracle时报错cx_Oracle.DatabaseError: Error while trying to retrieve text for error ORA-01804sample code:import cx_Oracleconn = cx_Oracle.connect(user,pwd, self.ois_tns)**解决:**排查服务器执行该代码的Linux用户下的 .bash_profile中,关于oracle的环境变量设置情况,如下:ex

2022-03-28 17:29:07 5074

原创 金三银四——大数据/Java面试集锦

金三银四,无论今年你有无跳槽计划,这篇文章集锦都值得你反复研读,建议收藏。下列文章链接请阅读:《金三银四——面试集锦》高级大数据研发工程师面试题总结海量大数据处理面试题和思路总结大数据之数据仓库面试题一文概览数据仓库知识和面试数仓相关面试题经典的SparkSQL/Hive-SQL/MySQL面试-练习题一文掌握HBase核心知识以及面试问题ETL和数据建模数仓建模 - 维度 vs 关系Hive高频面试题Hive经典面试题之连续登录、行转列和

2022-03-19 19:52:18 1792

原创 互联网大厂的背景调查,你需要认真对待了!

不知不觉2021年已过半载,想必经历了金三银四的伙伴们儿,都已经找到心满意足的新工作。一份求职,大多经历的过程无外乎,准备简历、投递目标公司的意向职位、公司邀约面试、候选人笔试/面试。如果面试顺利的话,将进入谈offer环节。通常由企业HR跟候选人沟通,期望薪酬、目前薪酬等方面,然后HR去走offer流程审批确定你的职级、薪酬等。通常,小公司的offer审批流程简单,速度快。大公司,则半个月到一个月都比较常见。当然了,HR跟候选人的沟通不一定放在面试的最后环节。但是,顺利通过面试,并且拿下offer,

2021-07-05 15:14:22 2963

原创 Hive函数:row_number() over() 、 rank和dense_rank

row_number() over()为查询出来的每一行记录生成一个序号。序号从1开始,按照顺序,生成分组内记录的序列,row_number()的值不会存在重复,当排序的值相同时,按照表中记录的顺序进行排列。示例:利用row_number函数,对表中的数据根据id进行分组,按照pv倒序排序求最大的pv相关信息。select t.id, t.date, t.pvfrom(selectid,date, pv, row_number() over(partition by id ord

2021-06-18 16:18:40 1485

原创 高级大数据研发工程师面试题总结

1.Spark处理数据流程、并行度决定机制2.SparkSQL解析SQL的详细流程、hash广播底层实现3.Spark shuffle、shuffle文件4.groupByKey、reduceByKey、aggregateByKey、combineByKey区别5.repartition和coalesce区别6.Spark内存管理模型7.Spark中能够进行下推的算子和不能进行下推的算子有哪些?谓词下推?映射(project)下推?8.数仓数据的存储格式(parquet+snappy),为什么

2021-06-04 09:31:03 3146

原创 Spark SQL和Hive中的函数(五):SparkSQL函数算子

本系列文章主要介绍Spark SQL/Hive中常用的函数,主要分为字符串函数、JSON函数、时间函数、开窗函数以及在编写Spark SQL代码应用时实用的函数算子五个模块。本篇文章主要介绍SparkSQL函数算子。之前介绍的函数都是可以直接在SQL中应用的。那么如果是在Spark SQL的DataFrame/DataSet的算子中调用,可以参考DataFrame/DataSet的算子以及org.apache.spark.sql.functions._下的函数:关联文章:经典的SparkSQL/

2021-03-30 09:14:03 323

原创 Spark SQL和Hive中的函数(四)常用的开窗函数

开窗函数格式通常满足:function_name([argument_list])OVER ([PARTITION BY partition_expression,…][ORDER BY sort_expression, … [ASC|DESC]])function_name: 函数名称,比如SUM()、AVG()partition_expression:分区列sort_expression:排序列注意:以下举例涉及的表employee中字段含义:name(员工姓名)、dept_no(部门

2021-03-23 11:13:16 554

原创 Spark SQL和Hive中的函数(三):时间函数

1. current_date / current_timestamp获取当前时间select current_date;select current_timestamp;2. 从日期时间中提取字段/格式化时间1)year、month、day、dayofmonth、hour、minute、second-- 20select day("2020-12-20");2)dayofweek(1 = Sunday, 2 = Monday, …, 7 = Saturday)、dayofyear--

2021-03-17 09:01:16 997

原创 Spark SQL和Hive中的函数(二):JSON函数

1. get_json_object-- v2select get_json_object('{"k1": "v1", "k2": "v2"}', '$.k2');2. from_jsonselect tmp.k from (select from_json('{"k": "fruit", "v": "apple"}','k STRING, v STRING', map("","")) as tmp);这个方法可以给json定义一个Schema,这样在使用时,就可以直接使用a.k这种方式

2021-03-16 11:33:27 1817

原创 Spark SQL和Hive中的函数(一):字符串函数

本系列文章主要介绍Spark SQL/Hive中常用的函数,主要分为字符串函数、JSON函数、时间函数、开窗函数以及在编写Spark SQL代码应用时实用的函数算子五个模块。1. concat对字符串进行拼接:concat(str1, str2, …, strN) ,参数:str1、str2…是要进行拼接的字符串。-- return the concatenation of str1、str2、..., strN-- SparkSQLselect concat('Spark', 'SQL');

2021-03-12 09:30:21 1152

原创 【大数据学习与分享】技术干货合集

【大数据学习与分享】主要是做什么的?【大数据学习与分享】主要专注于大数据领域常用的技术,如Spark、Hadoop、Hive、HBase、Kafka、Zookeeper等技术的使用、实战技巧、源码解读,语言主要以Java和Scala为主,保证文章质量,为大家提供一个优质的大数据学习与分享平台。同时也会涉及到目前市场上已经开源的并且在企业中已得到实际应用的基于这些技术进行“封装”的一些技术。但是专注于大数据却并不仅仅是大数据,毕竟技术是相通的,很多技术往往都有其共性,但也有各自的特色也就有了不同的适用场景

2021-02-19 16:51:59 274

原创 Hive常用性能优化方法实践全面总结

Apache Hive作为处理大数据量的大数据领域数据建设核心工具,数据量往往不是影响Hive执行效率的核心因素,数据倾斜、job数分配的不合理、磁盘或网络I/O过高、MapReduce配置的不合理等等才是影响Hive性能的关键。Hive在执行任务时,通常会将Hive SQL转化为MapReduce job进行处理。因此对Hive的调优,除了对Hive语句本身的优化,也要考虑Hive配置项以及MapReduce相关的优化。从更底层思考如何优化性能,而不是仅仅局限于代码/SQL的层面。列裁剪和分区裁剪H

2021-02-03 15:39:35 1014

原创 一张图了解Hive与传统的关系型数据库(RDBMS)的区别

关联文章:必须掌握的分布式文件存储系统—HDFS关于HDFS应知应会的几个问题详解MapReduce

2021-01-19 09:28:05 399

原创 Spark推荐系统实践

推荐系统是根据用户的行为、兴趣等特征,将用户感兴趣的信息、产品等推荐给用户的系统,它的出现主要是为了解决信息过载和用户无明确需求的问题,根据划分标准的不同,又分很多种类别:根据目标用户的不同,可划分为基于大众行为的推荐引擎和个性化推荐引擎根据数据之间的相关性,可划分为基于人口统计学的推荐和基于内容的推荐…通常,我们在讨论推荐系统时主要是针对个性化推荐系统,因为它才是更加智能的信息发现过程。在个性化推荐系统中,协同过滤算法是目前应用最成功也是最普遍的算法,主要包括两大类,基于用户的协同过滤

2021-01-12 10:56:30 2614 1

原创 Hive中的3种虚拟列以及Hive如何进行条件判断

9. Hive中的3种虚拟列当Hive产生非预期的数据或null时,可以通过虚拟列进行诊断,判断哪行数据出现问题,主要分3种:1. INPUT__FILE__NAME每个map任务输入文件名2. BLOCK__OFFSET__INSIDE__FILEmap任务处理的数据所对应文件的块内偏移量,当前全局文件的偏移量。对于块压缩文件,就是当前块的文件偏移量,即当前块的第一个字节在文件中的偏移量3. ROW__OFFSET__INSIDE__BLOCK行偏移量,默认不可用。需要设置hive.exec

2021-01-11 17:39:24 790 1

原创 Hive join转化为MapReduce任务

8. Hive JOIN写join查询时,需要注意几个关键点:1)只支持等值join,因为非等值连接非常难转化为MapReduce任务示例:select a.* from a join b on a.id = b.id是正确的,然而:select a.* from a join b on a.id>b.id是错误的。2)可以join多个表,如果join中多个表的join的列是同一个,则join会被转化为单个MapReduce任务示例:select a., b., c.* from a joi

2020-12-24 20:44:47 566

原创 Hive中的分区、分桶以及数据抽样

6. Hive中的分区、分桶以及数据抽样对Hive表进行分区、分桶,可以提高查询效率,抽样效率6.1 分区分区,在hdfs中表现为table目录下的子目录6.2 分桶对应建表时bucket关键字,在hdfs中表现为同一个表目录下根据hash散列之后的多个文件,会根据不同的文件把数据放到不同的桶中。如果分桶表导入数据没有生成对应数量的文件,可通过如下方式解决:开启自动分桶,设置参数:set hive.enforce.bucketing= true手动设置reduce数量,比如set m

2020-12-21 09:25:49 683

原创 Hive的严格模式和非严格模式

7. Hive的严格模式和非严格模式通过设置参数hive.mapred.mode来设置是否开启严格模式。目前参数值有两个:strict(严格模式)和nostrict(非严格模式,默认)。通过开启严格模式,主要是为了禁止某些查询(这些查询可能造成意想不到的坏的结果),目前主要禁止3种类型的查询:1)分区表查询在查询一个分区表时,必须在where语句后指定分区字段,否则不允许执行。因为在查询分区表时,如果不指定分区查询,会进行全表扫描。而分区表通常有非常大的数据量,全表扫描非常消耗资源。2)orde

2020-12-18 10:39:44 3673

原创 Hive中order by、sort by、distribute by、cluster by的区别

order by: 会将所有的数据汇聚到一个reduce上去执行,然后能保证全局有序。但是效率低,因为不能并行执行sort by: 当设置mapred.reduce.tasks>1,则sort by只保证每个reducer的输出有序,不保证全局有序。好处是:执行了局部排序之后可以为接下去的全局排序提高不少的效率(其实就是做一次归并排序就可以做到全局排序。distribute by: 根据指定的字段将数据分到不同的reduce,且分发算法是hash散列。能保证每一个reduce负责的数据范围不重叠了

2020-12-14 09:04:19 625

原创 Hive的数据类型、内部表和外部表

3. Hive的数据类型Hive内置数据类型主要分为两类:基础数据类型和复杂数据类型。基础数据类型无外乎就是tinyint、smallint、int、bigint、boolean、float、double、string、timestamp、decimal等。笔者这里主要介绍Hive的复杂数据类型,或者称之为集合类型。Hive的复杂数据类型主要分三种:map、array、struct,并且支持复杂类型嵌套,利用好这些数据类型,将有效提高数据查询效率。目前为止对于关系型数据库不支持这些复杂类型。首先

2020-12-11 10:39:46 455

原创 Hive的架构设计和建表语义

Apache Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供一种HQL语言进行查询,具有扩展性好、延展性好、高容错等特点,多应用于离线数仓建设。1. Hive架构存储: Hive底层存储依赖于hdfs,因此也支持hdfs所支持的数据存储格式,如text、json、parquet等。当我们将一个文件映射为Hive中一张表时,只需在建表的时告诉Hive,数据中的列名、列分隔符、行分隔符等,Hive就可以自动解析数据。支持多种压缩格式: bzip2、gzip

2020-12-10 09:48:17 178 1

原创 Kafka集群消息积压问题及处理策略

通常情况下,企业中会采取轮询或者随机的方式,通过Kafka的producer向Kafka集群生产数据,来尽可能保证Kafk分区之间的数据是均匀分布的。在分区数据均匀分布的前提下,如果我们针对要处理的topic数据量等因素,设计出合理的Kafka分区数量。对于一些实时任务,比如Spark Streaming/Structured-Streaming、Flink和Kafka集成的应用,消费端不存在长时间"挂掉"的情况即数据一直在持续被消费,那么一般不会产生Kafka数据积压的情况。但是这些都是有前提的,当一

2020-12-10 09:22:52 3826

原创 必须要掌握的Scala技术点(五)Scala高阶函数、方法、柯里化、隐式转换

5. 高阶函数Scala中的高阶函数包含:作为值的函数、匿名函数、闭包、柯里化等,可以把函数作为参数传递给方法或函数。5.1 作为值的函数定义函数时格式:val 变量名 = (输入参数类型和个数) => 函数实现和返回值类型和个数。=:表示将函数赋给一个变量=>:左面表示输入参数名称、类型和个数,右边表示函数的实现和返回值类型和参数个数5.2 匿名函数在Scala中,你不需要给每一个函数命名,没有将函数赋给变量的函数叫做匿名函数5.3 方法转换为函数在Scala中,方法和函数是

2020-12-08 17:50:29 137

原创 必须要掌握的Scala技术点(四)Scala模式匹配和样例类(case class)

4. 模式匹配和样例类4.1 模式匹配Scala有一个十分强大的模式匹配机制,可以应用到很多场合:如替代Java中的switch语句、类型检查等。并且Scala还提供了样例类,对模式匹配进行了优化,可以快速进行匹配。// 1. 匹配字符串import scala.util.Randomobject Case01 extends App { val arr = Array(1, 2, 3) val i = arr(Random.nextInt(arr.length)) i match

2020-12-03 20:24:19 161

原创 Hive数据导入HBase引起数据膨胀引发的思考

最近朋友公司在做一些数据的迁移,主要是将一些Hive处理之后的热数据导入到HBase中,但是遇到了一个很奇怪的问题:同样的数据到了HBase中,所占空间竟增长了好几倍!详谈中,笔者建议朋友至少从几点原因入手分析:HBase中的数据相对于Hive中的数据会新增一些附加信息导致磁盘占用的增加,比如布隆过滤器Hive中的数据是否进行过压缩,比如snappy,压缩比还是很高的row key和列族都会占据一定的空间,当数据量较大时,仅二者就会占据很多不必要的空间建议将相同查询场景下的几个常用的

2020-12-01 09:04:25 507

原创 HBase中Memstore存在的意义以及多列族引起的问题和设计

Memstore存在的意义HBase在WAL机制开启的情况下,不考虑块缓存,数据日志会先写入HLog,然后进入Memstore,最后持久化到HFile中。HFile是存储在hdfs上的,WAL预写日志也是,但Memstore是在内存的,增加Memstore大小并不能有效提升写入速度,为什么还要将数据存入Memstore中呢?Memstore在内存中维持数据按照row key顺序排列,从而顺序写入磁盘由于hdfs上的文件不可修改,为了让数据顺序存储从而提高读取率,HBase使用了LSM树结构来存

2020-11-30 16:02:48 482

原创 必须要掌握的Scala技术点(三)类、对象(伴生对象)、apply和unapply方法、继承和trait

3.1 类3.1.1 类的定义Scala中,可以在类中定义类、以在函数中定义函数、可以在类中定义object;可以在函数中定义类,类成员的缺省访问级别是:public//在Scala中,类不用声明为public//Scala源文件中可以包含多个类,所有这些类都具有公有可见性class Person { //val修饰的变量是只读属性,相当于Java中final修饰的变量,只提供get() val id = "1" //var修饰的变量,提供get()和set() var age:

2020-11-30 16:02:03 649 3

原创 Linux常见笔试题

1.linux系统中获取pid为100的进程所监听的tcp端口号netstat -npta | grep 1002.查找/home目录下大小为10k的文件find /home -size 10K3.在当前目录中的Main.java中关键字keywords出现位置,并将结果追加到main.txt中find . -name Main.java | xargs grep -n “keywords” >> main.txt【xargs将前一个命令的输出作为后一个命令的参数】4.压缩文件夹t

2020-11-27 15:52:57 886

原创 linux文件句柄、单个用户进程数、swap分区、软限制、硬限制等系统调优

无论对Spark集群,还是Hadoop集群等大数据相关的集群进行调优,对linux系统层面的调优都是必不可少的,这里主要介绍3种常用的调优:1. linux文件句柄linux在整个系统层面和单个进程两个层面对打开的文件句柄进行限制。配置文件/proc/sys/fs/file-max是对整个系统层面对打开的文件句柄最大数进行控制,单个用户或进程能够打开的文件句柄数受此限制。通过ulimit -a查看当前用户或进程能够打开的最大文件数:上述只是默认值,在实际生产环境肯定是不够用的,如果配置过小,有时

2020-11-24 10:43:41 458

原创 从HBase底层原理解析HBASE列族不能设计太多的原因?

在之前的文章《深入探讨HBASE》中,笔者详细介绍了:HBase基础知识(包括简介、表结构)、系统架构、数据存储WAL log和HBase中LSM树的应用HBase寻址机制minor合并和major合并region管理以及region server上下线HMaster工作机制和HBase容错性HBASE数据迁移和备份a. distcp命令拷贝hdfs文件的方式b. copytable的方式实现表的迁移和备份c. replication的方式实现表的复制d.

2020-11-19 16:55:07 546 1

原创 Hive建表时开启事务机制导致insert失败: This command is not allowed on an ACID table.. with a non-ACID transaction

建表语句:create table A ( table_code string, data_dt string, update_dt string) clustered by (table_code) into 1 buckets row format delimited fields terminated by '\033' stored as orc -- orc格式 tablproperties('transactional'='

2020-11-19 09:14:32 3702 1

原创 经典的SparkSQL/Hive-SQL/MySQL面试-练习题(二)

第十题存在如下表:table student(s_id string, s_name string, s_birth string, s_sex string) table course(c_id string, c_name string, t_id string) table teacher(t_id string, t_name string) table score(s_id string, c_id string, s_score int)示例数据:student:01 赵雷 1

2020-11-16 09:05:15 452

原创 必须要掌握的Scala技术点(二)数组、映射、元组、集合

2.1 数组import scala.collection.mutable.ArrayBuffer//scala导包比如导入scala.collection.mutable下所有的类:scala.collection.mutable._object ArrayDemo { def main(args: Array[String]): Unit = { println("======定长数组======") // 初始化一个长度为8的定长数组,所有元素初始化值为0 var a

2020-11-09 11:48:56 276

原创 Spark SQL处理decimal类型空指针异常(spark.sql.hive.convertMetastoreParquet)

系列三在此之前可以先阅读文章:SparkSQL与Hive metastore Parquet转换但如果同时设置spark.sql.hive.convertMetastoreParquet为false时,要注意一些数据类型以及精度的处理,比如对于decimal类型的处理。通过一个例子复原一下当时的场景:1.创建Hive外部表testdb.test_decimal,其中字段fee_rate为decimal(10,10)CREATE EXTERNAL TABLE `testdb`.`test_decima

2020-11-06 09:22:18 1998

原创 spark.sql.parquet.writeLegacyFormat:ParquetDecodingException: Can not read value at 0 in block -1 in

系列二在此之前可以先阅读文章:SparkSQL与Hive metastore Parquet转换在说问题之前首先了解一个参数spark.sql.parquet.writeLegacyFormat(默认false)的作用:设置为true时,数据会以Spark1.4和更早的版本的格式写入。比如decimal类型的值会被以Apache Parquet的fixed-length byte array格式写出,该格式是其他系统例如Hive、Impala等使用的。设置为false时,会使用parquet的新版格

2020-11-06 09:18:10 2881 1

原创 SparkSQL与Hive metastore Parquet

Spark SQL为了更好的性能,在读写Hive metastore parquet格式的表时,会默认使用自己的Parquet SerDe,而不是采用Hive的SerDe进行序列化和反序列化。该行为可以通过配置参数spark.sql.hive.convertMetastoreParquet进行控制,默认true。这里从表schema的处理角度而言,就必须注意Hive和Parquet兼容性,主要有两个区别:Hive是大小写敏感的,但Parquet相反Hive会将所有列视为nullable,但是

2020-11-03 18:16:50 1342

原创 SparkSQL: Cannot have map type columns in DataFrame which calls set operations(intersect, except,

通过SparkSQL,对两个存在map类型字段的Hive表进行union操作,报如下错误:org.apache.spark.sql.AnalysisException: Cannot have map type columns in DataFrame which calls set operations(intersect, except, etc.), but the type of column map is map<string,string>;1. 场景模拟1)通过函数str_

2020-11-01 11:22:48 2939

原创 SparkSQL存储数据到Parquet:AnalysisException: Parquet data source does not support null data type.

使用SparkSQL(2.4版本)往存储格式为parquet的Hive分区表中存储NullType类型的数据时报错:org.apache.spark.sql.AnalysisException: Parquet data source does not support null data type.虽然在Stack OverFlow上找到了类似的问题,但没有具体阐明到底是什么原因导致了这种问题以及如何解决?1.场景模拟1)创建temp view:test_viewsparkSession.sql

2020-10-30 20:06:14 3718 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除