
大数据学习
ZhuangYQ丶
大佬饶命
展开
-
hive中的json串和map结构的取数区别
hive中的json串和map结构的取数区别hive中如果定义的是json串,那么取数据用这种处理: get_json_object(params,'$.user_id')如果是map<string,string>结构,那么取数据这样处理params['user_id']那么我们想要统一将json串转成map结构,便于取数方便。这种怎么处理?第一种方式就是暴力的解析字符串,用正则的方式匹配:select pt_day, uid,point, str_t原创 2021-01-15 17:34:16 · 4361 阅读 · 2 评论 -
spark-sql中字段为bigint类型,但是查询用的字符串产生的bug
在一次工作实践中,记录了一次我的失误和坑。首先我这个字段为bigint 类型。但是我查询的时候 让该字段='123124565434567897654’这种类似的方法查询,发现查询的数据是有问题的。发现查出来两条,但是前半部分是正常匹配的,只是后面的部分匹配有问题。后来发现字段类型不匹配,用explain打印出来,发现两边都转成了double,才会导致这个问题。统一一下字段类型之后数据就是正常的了。详细的问题就是隐式转换的问题了。具体解释:bigint和string比较时会隐式地都转换成do原创 2020-12-19 23:00:07 · 3536 阅读 · 1 评论 -
大数据中用 CONCAT_WS拼接数组
之前用CONCAT_WS用的一直都是拼接的字符串,简单提一下用法吧SELECT concat_ws('.', 'www', 'toutiao', 'com', 'cn')输出的是www.toutiao.com.cn这就不具体说了。需要记录的是CONCAT_WS这个udf中可以传入的是array(string)具体看一下git的源码:git的源码注释直接写明第一个参数是分割的字符串,第二个参数是string或者是array数组需要注意的是这个数组只能是string数组。再看一下原创 2020-12-19 22:42:47 · 1395 阅读 · 1 评论 -
记录 2020-11-18 23点
大数据学习进步有很长时间没有更新博客了,原因是公司很多限制,还有就是大多数都写在公司的文档里面了。还有一个重要原因,太懒了 。。。。。。。。。。。痛定思痛,决定学习不能落下,更新博客也不能落下,所以决定至少双周一次学习和记录,对一些详细的知识点包括底层的源码进行一定的分析和学习okr制定:每双周一次技术更新!!!...原创 2020-11-18 23:26:38 · 185 阅读 · 3 评论 -
spark学习进步之广播变量的用法(broadcast)
原理:问题点1、参数设置: spark.sql.adaptive.join.enabled AE 相关,开启后能够根据数据量自动判断能否将 sortMergeJoin 转换成 broadcast join true spark.sql.broadcastTimeout broadcast joins 时,广播数据最长等待时间,网络不稳定时,容易出现超时造成任务失败,可适当增大此参数 .原创 2020-05-17 22:05:29 · 1859 阅读 · 0 评论 -
大数据学习-外部表&内部表详解
外部表和内部表区别和实际运用:前提知识储备:1、hive存储的数据在hdfs上,建表的时候实际上是在hdfs上创建目录而已。2、hive的元数据信息实际上是存在于mysql中(通常的做法)3、访问hive的数据是先访问元数据再根据元数据的地址信息来获取数据 外部表和内部表在建表上的区别就是external(代表的外部表),外部表存储的方式是固定的hdfs路径,表是通过映射的方式访问(load数据到表中),而内部表的访问方式就是一个表和一个hdfs对应。所以在删除外部表的时候,...原创 2020-05-15 22:11:18 · 2750 阅读 · 0 评论 -
大数据-数据倾斜那些事情
在平时处理大数据量的过程中,会遇到很多数据倾斜的问题,在业务中很多坑也都踩过了,特此记录一下。首先,有很多的数据倾斜是是在业务场景中发生的。 以订单数据为例,在之前的例行任务中都是正常运行,但是在某一天搞了一个活动,导致某一个商品的订单数据增加了100倍,然后进行一些group等的操作,这种在处理数据的时候会产生数据倾斜,因为同一个key(商品id)都shuffle到同...原创 2020-04-30 17:57:44 · 372 阅读 · 0 评论 -
hive读取json数组并转换成多行(列转行)
背景:在读取hive表中某一些字段的时候,有的json字符串其中会包括数组,那么想要读取这个数组并且转换为多行该怎么操作那?操作:1、数据举例:["[{\"pet_skill_avg_level\":0,\"pet_guard_star\":0,\"pet_type\":0,\"pet_step\":0,\"pet_skill_num\":0,\"pet_adv_score\":0,\"p...原创 2020-03-03 17:17:49 · 5343 阅读 · 0 评论 -
拉链表实现(demo)
创建库create database shop_ods;创建订单增量分区表(每天一个分区)CREATE TABLE shop_ods.ods_orders_inc (orderid INT,createtime STRING,modifiedtime STRING,status STRING) partitioned by(day string )row format del...原创 2020-02-26 11:50:38 · 1331 阅读 · 0 评论 -
Hive行转列过程中使用LATERAL VIEW遇到空MAP或者空数组的情况
背景:HIve在进行行转列的过程中,如果遇到转的数组或者MAP()的情况,会出现一种特殊情况,就是数据会消失:原数据: SELECT '1' AS id, MAP() AS purchase_info UNION ALL SELECT '2' AS id, ...原创 2019-12-03 16:09:48 · 1233 阅读 · 0 评论 -
hive实现全自动动态分区
我们在业务中往往会遇到一种情况就是:现有的业务已经有很多的数据堆积,并且需要根据现有的数据以分区的形式来建立数据仓库,这样的话就需要将表中的一个字段作为分区字段,以这个字段的值作为分区的依据。那么就需要动态分区进行处理:首先需要设置参数:-- 表示开启动态分区功能 (默认false)set hive.exec.dynamic.partition =true--(默认st...原创 2019-06-22 19:12:41 · 6287 阅读 · 0 评论 -
hive之union、union all的列名不统一的记录
在MySQL中,union和union all中,只需要列的数量对应,这样就可以完成union和union all操作。但是在hive中,我也是这样想的,于是,我并没有关注列名必须一致,只是关注了列数量一致,这样的话,其实也是可以的,比如:--不同渠道的目标客户量select 'sources' as type,sources as type_detail,count(*) as c...原创 2019-06-22 18:08:26 · 12806 阅读 · 2 评论 -
hive优化之谓词下推
所谓hive中的谓词下推指的是:hive中join操作:如果直接两个表进行join,在最后再进行两个表的where条件过滤,这样的话实际上hive会将两个表先join起来,最后join出来的大表再进行where筛选,这样的话导致了全表join并且效率低下:如下:select a.id,a.value1,b.value2 from table1 a left outer join...原创 2019-06-22 16:47:24 · 2536 阅读 · 0 评论 -
hive中根据身份证号码获取年龄、性别
select id_no, id_no, case when length(id_no) = 18 then floor(datediff( from_unixtime(unix_timestamp(),'yyyy-MM-dd'), concat_ws('-',substr(id_no,7,4),substr(id_...原创 2019-06-17 20:47:23 · 3051 阅读 · 0 评论 -
Azkaban错误:User xml file home/bigdata/cluster/azkaban/server/conf/azkaban-users.xml doesn't exist.
安装azkaban过程中启动相关的服务出现错误:bigdata@linux server]$ bin/azkaban-web-start.sh Using Hadoop from Using Hive from bin/..:bin/../lib/azkaban-2.5.0.jar:bin/../lib/commons-collections-3.2.1.jar:bin/../lib...原创 2019-06-17 19:02:11 · 431 阅读 · 0 评论 -
Spark和MR对比
MR的迭代:Spark中的迭代:1、spark把运算的中间数据存放在内存,迭代计算效率更高;mapreduce的中间结果需要落地,需要保存到磁盘,这样必然会有磁盘io操做,影响性能。2、spark容错性高,它通过弹性分布式数据集RDD来实现高效容错,RDD是一组分布式的存储在节点内存中的只读性质的数据集,这些集合是弹性的,某一部分丢失或者出错,可以通过整个数据集的计算流程的血...原创 2019-06-14 11:01:40 · 1614 阅读 · 0 评论 -
sqoop错误-ERROR manager.SqlManager: Error reading from database: java.sql.SQLException:
ERROR manager.SqlManager: Error reading from database: java.sql.SQLException: Streaming result set com.mysql.jdbc.RowDataDynamic@5119fb47 is still active. No statements may be issued when any stre...原创 2019-06-25 00:17:53 · 1453 阅读 · 0 评论 -
Spark-wordcount案例
def main(args: Array[String]): Unit = { //创建一个配置信息对象 //设置应用程序名称 val config:SparkConf = new SparkConf().setAppName("scala_worldcount") //设置运行模式 /* * local:使用本地一个线程模拟集群执行任...原创 2019-06-14 10:46:12 · 183 阅读 · 0 评论 -
hive分区表中--新增字段,发现数据为null的坑
数仓开发过程中,经常会有需求变更,添加字段的情况所在,添加完了字段还需要重新跑数据,重新将这个字段的数据加载进去,但是会出现一个坑就是加载的数据为null。问题所在:对于分区表添加字段,向已存在分区中插入数据,结果新增字段的值全部为null。alter table xunying add colums(name string);insert overwrite table x...原创 2019-06-22 19:45:54 · 3621 阅读 · 0 评论 -
用sqoop将MySQL的数据导入到Hive分区表中
在工作中,我们经常遇到的业务就是要将MySQL每天差生的生产数据定时导入到Hive的分区表中,然后根据分区表中的数据进行“数仓建设”,各种数据处理。那么怎么运用sqoop将MySQL的数据导入到hive的分区表中呐?首先,不能再用--hive-table, --hive-partition-key, --hive-partition-value这三个参数。因为这样只能向单个分区导入数据,无...原创 2019-06-23 16:44:21 · 1773 阅读 · 0 评论 -
azkaban设置依赖,并且多个任务并行执行
在azkaban的任务调度中,设置依赖可以完成对任务的调度,脚本如下:第一个job:命名为 ods_actlog.job---config: #failure.emails: xx@xxnodes: - name: ods_actlog_sql_job type: command config: command: sh ods_actl...原创 2019-06-27 00:57:41 · 9971 阅读 · 3 评论 -
scala,实现case class类的时候 业务字段过多导致的异常。不能超过22个字段
一、背景1、在scala-2.10.x版本种,case class的元素超过22个以后即会编译报错2、有些业务场景下,需要超过22个元素的值我们项目当中日志一共有105个字段,在对原始日志进行处理转换成parquet文件的过程中,我们使用的方法是定义一个case class类,将这105个字段封装到这个对象里面,基于这种方式构建的DataFrame。结果运行的时候报错了,之后我们...原创 2019-07-02 20:36:32 · 2162 阅读 · 1 评论 -
sqoop错误:Access denied for user 'root'@'mini1' (using password: YES)
在用sqoop将MySQL的数据导入到hive中的时候出现的错误:ERROR manager.SqlManager: Error executing statement: java.sql.SQLException: Access denied for user 'root'@'mini1' (using password: YES)java.sql.SQLException: Acce...原创 2019-06-25 00:14:51 · 914 阅读 · 0 评论 -
Spark Core中解决group by造成的数据倾斜问题
在大数据开发中,我们可能会遇到大数据计算中一个最棘手的问题——数据倾斜,此时Spark作业的性能会比期望差很多。数据倾斜调优,就是使用各种技术方案解决不同类型的数据倾斜问题,以保证Spark作业的性能。该篇博客参考美团的spark高级版,修改了代码使用了scala写的。 这个方案的核心实现思路就是进行两阶段聚合。第一次是局部聚合,先给每个key都打上一个随机数,比如...原创 2019-07-29 20:54:01 · 1536 阅读 · 0 评论 -
Spark Sql 处理groupby 的数据倾斜问题
写sql处理使用groupby 产生的数据倾斜问题:import java.util.Randomimport org.apache.spark.sql.SparkSessionobject TestUDF { def main(args: Array[String]): Unit = { val spark = SparkSession.builder()...原创 2019-07-29 21:12:26 · 1580 阅读 · 0 评论 -
Hive 行转列、列转行
在Hive中使用Hive sql实现表 数据的行转列、列转行:原始数据:行转列:select ss.id,ss.name,s1 from test_sql sslateral view explode(split(ss.address,',')) aa as s1列转行:select sss.id,sss.name,concat_ws(',',collect...原创 2019-07-30 16:45:58 · 258 阅读 · 1 评论 -
Hive表建立分区外部表并且添加每天的增量数据为分区
一、数据仓库建设过程中,我们都有每天的增量数据进来,我们需要把增量数据映射到我们的hive表中,但是为了数据能够被其他部门共同使用,并且需要对我们的原始数据进行综合管理,在数据仓库建设的第一层,我们就要使用外部表进行处理。(外部表和内部表的区别自行查资料)二、介绍一下怎么从外部的一个文件怎么映射成外部表并且分区,并且数据不会move到hive的相关目录下面。1、将文件(text...原创 2019-08-08 15:07:16 · 1503 阅读 · 0 评论 -
Hive-显示当前库、显示表的头部信息
显示当前库:set hive.cli.print.current.db=true;改了之后:显示头部信息set hive.cli.print.header=true;各个字段的信息会显示出来。这种设置可以在Hive的配置文件中进行设置:...原创 2019-04-17 20:03:40 · 1032 阅读 · 0 评论 -
数仓项目中azkaban的工作错误总结!
一、写成的sql文件提交到azkaban中,进行任务调度:博客中有对azkaban的学习,可以看一下,这里主要记录一下azkaban的坑1、调度文件:*.job,这个文件以.job结尾,其中,格式是这样的:---config: #failure.emails: xx@xxnodes: - name: dm_release_customer_cube_sql_job...原创 2019-06-18 21:44:50 · 1016 阅读 · 0 评论 -
spark——比较map和mapPartitions
Spark中,最基本的原则,就是每个task处理一个RDD的partition。MapPartitions操作的优点:如果是普通的map,比如一个partition中有1万条数据;ok,那么你的function要执行和计算1万次。但是,使用MapPartitions操作之后,一个task仅仅会执行一次function,function一次接收所有 的partition数据。只要执行一次...原创 2019-05-31 00:43:59 · 623 阅读 · 0 评论 -
Hive-分区详解
分区的类型:静态分区、动态分区、混合分区静态分区:新增分区或者是加载分区数据时指定分区名动态分区:新增分区或者是加载分区数据时,分区名未知。混合分区:静态分区和动态分区同时存在。思路:动态分区的举例:A表数据uid uname year month day1 zhangsan 2019 4 192 lissi 2019 4 18B表是分区表,按照year mo...原创 2019-04-18 11:15:00 · 433 阅读 · 0 评论 -
hive的索引:
hive的索引:索引是数据库的一种标准技术,hive在0.7版本以后支持索引,只不过hive的索引的性能要比关系型数据库的差优点:提高查询效率,避免全表扫描缺点:冗余存储,加载数据较慢索引文件的特点:索引数据有序,并且数据量较小索引的参数(关键字)index如何创建一个索引create table if not exists text3asselect * f...原创 2019-04-22 21:16:39 · 557 阅读 · 1 评论 -
hive 的存储格式
默认存储格式textfiletextfile:普通的文本文件存储,不压缩sequencefile:hive为用户提供的二进制存储,本身就压缩,不能使用load的方式加载数据rcfile:hive提供的行列混合存储,hive在该格式下,会尽量将附近的行和列得块存储到一起,仍然是压缩格式,查询效率比较高orc:orf是rcfile的升级版首先是默认的:textfilecreate...原创 2019-04-22 21:11:34 · 237 阅读 · 0 评论 -
Hive-分区的具体操作
分区的操作创建一个一级分区create table if not exists day_part(uid int,uname string)partitioned by (year int)row format delimitedfields terminated by '\t';load入数据:load data local inpath '/root/da...原创 2019-04-17 22:04:41 · 192 阅读 · 0 评论 -
Hive分区
1、为什么要分区 随着系统的运行,数据量越来越大,而hive的查询时全表扫描,这样将会导致大量的不必要的数据扫描,从而查询效率低下。引进分区技术,避免全表扫描,提高查询效率。分区:partition可以将用户的整个表的数据划分成多个子目录(子目录以分区变量的值来命名)2、怎么分区通常使用年、月、日、地区等进行分区,具体和业务相关hive的分区和mysql的分区是有区...原创 2019-04-17 21:13:10 · 264 阅读 · 0 评论 -
Hive学习-对库的删除
删除库(只能删除空库)drop database test;删除库(强制删除)drop database test cascade;原创 2019-04-17 20:07:32 · 339 阅读 · 0 评论 -
Hive学习-表的基本操作
一、表的属性的修改修改表名:rename toalter table log_1 rename to log;显示表的建表信息:desc log_1;或者show create table log_1;修改字段名:change column(需要加上数据类型)alter table log change column ip myip ##报...原创 2019-04-17 19:46:04 · 185 阅读 · 0 评论 -
Linux中安装MySQL 5.6
安装mysql-5.61.解决依赖问题 yum -y install libaio.x86_64 yum -y install perl.x86_642.解决包冲突问题 rpm -e --nodeps mysql-libs-5.1.73-5.el6_6.x86_643.安装mysql服务端 rpm -ivh /data/MySQL-serv...原创 2019-04-17 19:23:13 · 131 阅读 · 0 评论 -
Hive-自定义函数
自定义函数:内置函数无法满足所有的业务场景hive提供了许多模块的自定义功能。比如serde,自定义函数、输入输出格式等常见的自定义函数UDF:user defined functionUDTF:user defined table-generate function ,一对多的输入输出(explode)UDAF:user defined agregation function,用户自定...原创 2019-04-20 21:56:39 · 295 阅读 · 0 评论 -
Hive--count(*)、count(1)、count(某字段)的区别
count(*):所有行进行统计,包括NULL行count(1):所有行进行统计,包括NULL行count(column):对column中非Null进行统计.执行效率上:列名为主键:count(col) 会比count(1)快列名不为主键:count(1) 会比count(col)快如果表有多个列,并且没有主键,count(1)要比count(*)快,如果有主键count(主键)最...原创 2019-04-20 17:43:17 · 993 阅读 · 0 评论