自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(40)
  • 收藏
  • 关注

原创 RDD是什么?

Spark 的核心是建立在统一的抽象弹性分布式数据集(Resiliennt Distributed Datasets,RDD)之上的,这使得 Spark 的各个组件可以无缝地进行集成,能够在同一个应用程序中完成大数据处理。那什么是RDD呢?详见下图及注释。...

2021-02-24 20:59:01 262

原创 java中父类和接口有什么区别

总结:因为java不支持多继承,故而出现了接口。接口不能通过new实列化对象,但是父类可以(抽象类父类除外)。接口中的方法都是抽象的,而父类中的方法权限没有限制。多态首先是建立在继承的基础上的,先有继承才能有多态。多态是指不同的子类在继承父类后分别都重写覆盖了父类的方法,即父类同一个方法,在继承的子类中表现出不同的形式。但父类和接口都可以表现出多态性,将父类和接口实例化。表现形式:父类或接口 起的名字 = new 子类(左边) (右边)细节:类继承—>

2021-02-24 17:32:01 4505 3

原创 MapReduce跑得慢的原因

Mapreduce 程序效率的瓶颈在于两点:1)计算机性能CPU、内存、磁盘健康、网络(所以万一MR跑得慢了,最简单的方式是提高计算及性能,加内存等等!)2)I/O 操作优化(1)数据倾斜(2)map和reduce数设置不合理(切片问题)(3)reduce等待过久(4)小文件过多(5)大量的不可分块的超大文件(6)spill次数过多(磁盘溢写次数过多)(7)merge次数过多等(因为要对数据进行归并排序)mapreduce 优化方法1)数据输入:(1)合并小文件:在执行mr任务前

2021-02-23 19:55:18 2083

原创 Hive分通表和分区表的区别

把表或分区划分成bucket有两个理由1,更快,桶为表加上额外结构,链接相同列划分了桶的表,可以使用map-side join更加高效。2,取样sampling更高效。没有分区的话需要扫描整个数据集。hive> create table bucketed_user (id int,name string)clustered by (id) sorted by (id asc) into 4 buckets;重点1:CLUSTERED BY来指定划分桶所用列和划分桶的个数。HIVE对key的

2021-02-22 22:39:08 997

原创 Hive分桶表

分桶表分区提供一个隔离数据和优化查询的便利方式。不过,并非所有的数据集都可形成合理的分区。对于一张表或者分区,Hive 可以进一步组织成桶,也就是更为细粒度的数据范围划分。分桶是将数据集分解成更容易管理的若干部分的另一个技术。分区针对的是数据的存储路径;分桶针对的是数据文件。1. 创建分桶表create table stu_buck(id int, name string)clustered by(id)into 4 bucketsrow format delimited fields term

2021-02-22 22:09:14 458 2

原创 HIVE/SQL窗口函数

一.窗口函数有什么用?在日常工作中,经常会遇到需要在每组内排名,比如下面的业务需求:排名问题:每个部门按业绩来排名topN问题:找出每个部门排名前N的员工进行奖励面对这类需求,就需要使用sql的高级功能窗口函数了。二.什么是窗口函数?窗口函数,也叫OLAP函数(Online Anallytical Processing,联机分析处理),可以对数据库数据进行实时分析处理。窗口函数的基本语法如下:<窗口函数> over (partition by <用于分组的列名>or

2021-02-22 19:13:43 347

原创 HIVE 分区表详解

一、背景1、在Hive Select查询中一般会扫描整个表内容,会消耗很多时间做没必要的工作。有时候只需要扫描表中关心的一部分数据,因此建表时引入了partition概念。2、分区表指的是在创建表时指定的partition的分区空间。3、如果需要创建有分区的表,需要在create表的时候调用可选参数partitioned by,详见表创建的语法结构。二、技术细节1、一个表可以拥有一个或者多个分区,每个分区以文件夹的形式单独存在表文件夹的目录下。2、表和列名不区分大小写。3、分区是以字段的形式在

2021-02-21 19:01:24 4168

原创 4种排序方式比较:order by, sort by, distribute by, cluster by

文章记录了4种排序方式:order by, sort by, distribute by, cluster by总结:order by 全局排序,只有一个 Reducer,通过order对字段进行降序或者升序sort by 对于大规模的数据集 order by 的效率非常低。在很多情况下,并不需要全局排序,此时可以使用 sort by。Sort by 为每个reducer 产生一个排序文件。每个 Reducer 内部进行排序,对全局结果集来说不是排序。distribute by 在有些情

2021-02-21 03:17:47 7532 1

原创 SQL Join方式总结

SQL Join方式总结:(一共7种)1,内连接SELECT FROM TABLEA A INNER JOIN TABLEB B ON A.key=B.key2,全外连接 Mysql暂不支持SELECT FROM TABLEA A FULL OUTER JOIN TABLEB B ON A.key=B.key3,全外连接-差集 Mysql暂不支持SELECT FROM TABLEA A FULL OUTER JOIN TABLEB B ON A.key=B.key WHERE A.key

2021-02-20 23:19:41 179

原创 Group by 和 correlated subqueries的转化

计算 emp 每个部门中每个岗位的最高薪水参数: employee表,包含所有信息 department 部门,string类型 job 工作,string类型 salary 每个人的薪水,int类型答案一:用group bySELECT department, job, max(salary)FROM employeeGROUP BY department,job答案二:用correlated subqueriesSELECT depar

2021-02-20 20:50:57 162

原创 Having和Where+subqueries的转换

Having表示对上述结果进行过滤,所以比Where更加灵活。Where之后不能跟聚合函数,因为where表示对每一行进行条件限制,此时聚合函数的值还没有求出,但是Having可以跟聚合函数,因为Having表示对结果进行过滤。例子:求平均薪资大约2000的部门及部门薪资参数: employee表,包含所有信息 department 部门,string类型 salary 每个人的薪水,int类型下面这个两个答案是错的:(where之后不能用聚合函数的信息)答案1:SELE

2021-02-20 20:25:41 174

原创 Hive数据导出

1.Insert导出2.Hadoop 命令导出到本地3.Hive Shell 命令导出基本语法:(hive -f/-e 执行语句或者脚本 > file)4.Export 导出到 HDFS 上export 和 import 主要用于两个 Hadoop 平台集群之间 Hive 表迁移。

2021-02-20 00:35:10 181

原创 创建表时通过 Location 指定加载数据路径(先有数据,后建表)

如果文件夹中已有txt格式数据,可以先上传数据到HDFS的路径(不一定是数据库和表所在的文件夹),然后再建表。常规方法是先建表,然后用load和insert加载数据。

2021-02-19 23:02:49 2294 1

原创 查询语句中创建表并加载数据(As Select)

这里有一种非常快的建表方式,用As我们根据查询结果创建表(查询的结果会添加到新创建的表中)例如:create table if not exists student3as select id, name from student;然后一个名为student3的表就被建立,并且有两个parameters: id 和 name。其数据类型和student表一样,且student表中每一行的数据也被拷贝到student3中。可以用 show tables 和 select * from student

2021-02-19 22:29:59 936

原创 Insert插入数据

INSERT插入数据插入数据-1使用INSERT语句将数据插入表/分区Hive支持从同一个表进行多次插入INSERT INTO中TABLE关键字是可选的INSERT INTO可以指定插入到哪些字段中如:INSERT INTO t(x,y,z)INSERT INTO table_name VALUES,支持插入值列表数据插入必须与指定列数相同-- INSERT支持OVERWRITE(覆盖)和INTO(追加)INSERT OVERWRITE/INTO TABLE tablename1

2021-02-19 22:19:51 1050

原创 Hive Load装载数据与HDFS的关系

装载数据:LOAD移动数据LOCAL:指定文件位于本地文件系统 ;OVERWRITE表示覆盖现有数据使用方法:-- load数据格式LOAD DATA LOCAL INPATH '/home/dayongd/Downloads/employee.txt' OVERWRITE INTO TABLE employee;-- 方式一:LOCAL表示文件位于本地,OVERWRITE表示覆盖现有数据LOAD DATA LOCAL INPATH '/home/dayongd/Downloads/empl

2021-02-19 20:56:15 1659 1

原创 insert、load、put向表中插入数据

本文意在记录insert、load、put插入数据后,对元数据TABLE_PARAMS中numFiles、numRows的影响。1. insert1)本身插入时会走MapReduce程序2)对元数据TABLE_PARAMS中numFiles、numRows都会相应改变数值(通过计数器记录)3)所以用count(*)查询记录时,不再走MapReduce程序,直接读取元数据TABLE_PARAMS中numRows数值2. put1)这个命令和hive没什么关系,只是单纯上传文件到HDFS,当然不会走

2021-02-19 20:24:47 1264

原创 Hive架构(数据库和表)

本文介绍一下Hive中的数据库(Database/Schema)和表(Table)的基础知识,由于篇幅原因,这里只是一些常用的、基础的。一、Hive的数据库和表先看两张图:从图上可以看出,Hive作为一个“数据库”,在结构上积极向传统数据库看齐,也分数据库(Schema),每个数据库下面有各自的表组成。再往下分,可以分为分区和桶。1.Hive在HDFS上的默认存储路径Hive的数据都是存储在HDFS上的,默认有一个根目录,在hive-site.xml中,由参数hive.metastore.wa

2021-02-19 17:14:57 3792 5

原创 Hive 增加/修改/替换列信息

1.更新列ALTER TABLE table_name CHANGE [COLUMN] col_old_name col_new_namecolumn_type [COMMENT col_comment] [FIRST|AFTER column_name]2.增加和替换列ALTER TABLE table_name ADD|REPLACE COLUMNS (col_name data_type [COMMENT col_comment], ...)注:ADD 是代表新增一字段,字段位置在所有列

2021-02-18 23:26:25 2100

原创 管理表与外部表的相互转换

也可以打开MySql库查看表的信息

2021-02-18 21:54:37 159

原创 Hive外部表

因为表是外部表,所以 Hive 并非认为其完全拥有这份数据。所以删除该表并不会删除掉这份数据,不过描述表的元数据信息会被删除掉(所以用drop命令之后再用show命令,就会发现这张外部表消失了)。但这张表的信息在HDFS里却还存有,所以简单的命令:create table if not exists 原来这张外部表的名字就可以恢复这张表以前的内容,之后用show和desc命令就可以查看这张表。...

2021-02-18 19:16:12 268

原创 Hive修改数据库(如何强制删除)

1.修改数据库用户可以使用 ALTER DATABASE 命令为某个数据库的 DBPROPERTIES 设置键-值对属性值,来描述这个数据库的属性信息。hive (default)> alter database db_hive set dbproperties('createtime'='20170830');在hive中查看修改结果hive> desc database extended db_hive;db_name comment location owner_name ow

2021-02-18 18:02:00 2328

原创 Hive查询数据库(以及详细信息)

1.显示数据库1)显示数据库hive> show databases;2)过滤显示查询的数据库hive> show databases like 'db_hive*'; 以db_hive为开头的OKdb_hivedb_hive_12.查询数据库1)显示数据库信息hive> desc database db_hive;OKdb_hive hdfs://hadoop102:9820/user/hive/warehouse/db_hive.dbatguiguUSER

2021-02-18 15:57:05 6311

原创 Hive 创建数据库(以及指定存放位置)

语句:CREATE DATABASE [IF NOT EXISTS] database_name[COMMENT database_comment][LOCATION hdfs_path][WITH DBPROPERTIES (property_name=property_value, ...)];1.创建一个数据库,数据库在 HDFS 上的默认存储路径是/user/hive/warehouse/*.dbhive (default)> create database db_hive;

2021-02-18 15:34:11 9877

原创 Hive数据类型(基本数据类型+集合数据类型)

基本数据类型集合数据类型案例实操1.Hive 上创建测试表 testcreate table test(name string,friends array<string>,children map<string, int>,address struct<street:string, city:string>)row format delimited fields terminated by ','collection items terminat

2021-02-18 03:14:24 377

原创 区别:count(1) 和 count(*)和count(列名)

执行效果上:count(*)包括了所有的列,相当于行数,在统计结果的时候,不会忽略列值为NULL;count(1)包括了忽略所有列,用1代表代码行,在统计结果的时候,不会忽略列值为NULL;count(列名)只包括列名那一列,在统计结果的时候,会忽略列值为空(这里的空不是只空字符串或者0,而是表示null)的计数,即某个字段值为NULL时,不统计。所以呢,count(1)和count(*)之间没有区别,因为他们两个都不会过滤空值,但count(列名)就有区别了,因为count(列名)会去过滤空值

2021-02-17 18:57:08 2521 3

原创 Hive查询不走MapReduce

在使用Hive的时候,有时候只是想取表中某个分区的前几条的记录看下数据格式,比如一个很常用的查询:select * from xxx where partition_column=xxx limit 2;这种对数据基本没什么要求,随便来点就行,既然如此为什么不直接读取本地存储的数据作为结果集呢?Hive命令都要转换为MapReduce任务去执行,但是因为启动MapReduce需要消耗资源,然后速度还很慢(相比较于直接从本地文件中读取而言),所以Hive对于查询做了优化,对于某些查询(比如消耗资源大的查

2021-02-17 18:26:55 1032

原创 Hive交互方式

本文列举了三种Hive的交互方式:Hive Shell, JDBC, 使用sql语句或者sql脚本进行交互。1.用Hive Shell#登录[hadoop@node03 ~]$ cd /kkb/install/hive-1.1.0-cdh5.14.2/[hadoop@node03 hive-1.1.0-cdh5.14.2]$ bin/hive#退出hive (default)> quit;图片:2.用JDBC2.1 后台先启动hive服务[hadoop@node03 ~]$

2021-02-17 13:42:45 173

原创 软件、硬件与操作系统

1、什么是API?https://baike.baidu.com/item/API/10154API(Application Programming Interface,应用程序接口)是一些预先定义的函数,或指软件系统不同组成部分衔接的约定。 [1] 目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问原码,或理解内部工作机制的细节。2、什么是驱动程序?https://baike.baidu.com/item/驱动程序/103009?fr=aladdin驱动程序一般指

2021-02-16 22:02:19 645

原创 hive内部建表和目录结构

1、默认情况 Hive内部表都属于缺省库default,在HDFS的目录为/user/hive/warehouse/(以下默认Hive的HDFS根目录为/user/hive)下。下图中abc,bonus,department,dept,emp为缺省库default下的几张表,目录名与表名一致。[root@data1 ~]# hdfs dfs -ls /user/hive/warehouse/Found 7 itemsdrwxrwxrwt - root hive 0 201

2021-02-16 01:44:41 1011

原创 xml配置文件概述

文章转于:https://blog.csdn.net/qq_38206090/article/details/82556860谢谢楼主!概述xml:eXtensible Markup Language,可拓展标记语言。作用主要是做配置文件和数据传输载体。本文只说明它做配置文件的知识。下面介绍它的文档结构、元素&属性、注释&CDATA、解析、DTD约束、Schema约束。文档结构1.文档声明任何一个xml文件都是的第一行都必须是文档声明。简单文档声明如下:<?xml vers

2021-02-08 08:26:42 615

原创 MapReduce中切片、Map、Reduce的关系

转载于:https://blog.csdn.net/ancony_/article/details/81274624感谢楼主的文章!MapReduce运行流程1最先启动MRAppMaster,MRAppMaster根据job的描述信息,计算需要的maptask实例的数量,然后向集群申请机器,启动相应数量的maptask进程。2 maptask启动之后,根据给定的数据切片范围进行数据处理。A利用指定的inputformat来获取RecordReader对象读取数据,形成KV输入。B将输入的kv对传

2021-02-07 16:13:36 241

原创 Hadoop MapReduce序列化

序列化是干啥用的?序列化的原本意图是希望对一个Java对象作一下“变换”,变成字节序列,这样一来方便持久化存储到磁盘,避免程序运行结束后对象就从内存里消失,另外变换成字节序列也更便于网络运输和传播,所以概念上很好理解:序列化:把Java对象转换为字节序列。反序列化:把字节序列恢复为原先的Java对象。如果MapReduce是在集群上工作时,Map和Reduce可能在不同的服务器上,则从Map的服务器传数据到Reduce的服务器这一过程中,数据都是以字节为单位传输的,所以所有的数据都必须能够序列化

2021-02-06 14:50:34 268

原创 CombineTextInputFormat 切片机制以及实例

CombineTextInputFormat 切片机制 原理以及应用场景框架默认的 TextInputFormat 切片机制是对任务按文件规划切片,不管文件多小,都会是一个单独的切片,都会交给一个 MapTask,这样如果有大量小文件,就会产生大量的MapTask,处理效率极其地下。应用场景CombineTextInputFormat 用于小文件过多的场景,它可以将多个小文件从逻辑上规划到一个切片中,这样,多个小文件就可以交给一个 MapTask 处理。虚拟存储切片最大值设置CombineText

2021-02-06 10:52:46 432 1

原创 FileInputFormat切片机制和配置参数

1. FileInputFormat中默认的切片机制(1)简单地按照文件的内容长度进行切片 (2)切片大小,默认等于block大小 (本地模式块大小32M,yarn模式128M,老的版本64M)(3)切片时不考虑数据集整体,而是逐个针对每一个文件单独切片 比如待处理数据有两个文件: file1.txt 330M file2.txt 10M 经过FileInputFormat的切片机制运算后,形成的切片信息如下: file1.txt.s

2021-02-06 08:56:21 706

原创 Hadoop MapReduce Job提交流程解析

注释:job提交好后,stagingDir路径下会有三个文件,分别是job.split, job.xml, job.jar相应的代码可以表示为:waitForCompletion() submit(); // 1建立连接 connect(); // 1)创建提交Job的代理 new Cluster(getConfiguration()); // (1)判断是本地yarn还是远程 initialize(jobTrackAddr, conf); // 2 提交job.

2021-02-05 10:53:49 392

原创 Java 比较器

Java 比较器Java中的对象,正常情况下只能进行比较 == 或者 !=,不能使用>或<进行比较,但是在开发场景中,我们需要对多个对象进行排序,也就是说,我们需要一种方式来比较对象的大小(如淘宝对所有搜到的物品进行排序,如按销量、口碑、热度等)。为了达到这一目的,我们就要使用两个接口中的任意一个:comparator 或者 comparable。...

2021-02-05 10:38:01 140 2

原创 FileInputFormat切片源码解析

FileInputFormat切片源码解析(input.getSplits(job))程序先找到数据存储的目录开始遍历处理(规划切片)目录下的每一个文件遍历第一个文件ss.txta) 获取文件大小fs.sizeOf(ss.txt)b)计算切片大小computeSpliteSize(Math.max(minSize, Math.min(maxSize, blocksize))) = blocksize = 128MminSize是1,blocksie是128M,maxSize是long的最大值

2021-02-05 10:24:56 417

原创 Hadoop MapReduce Job提交流程源码详解

文章转载于:并加了一些自己的理解和注释主要介绍的是写完mr(job) 如何提交到集群上,这一段过程它执行了哪些操作。写一个简单的的 WordCount ,通过调试来看程序是如何执行的。大体步骤:1. 写class WordcountMapper, 重写map方法2. 写class WordcountReducer, 重写reduce方法3. 写class WordcountDriver...

2021-02-05 00:32:47 380

原创 数据切片和MapTask并行度决定机制

数据切片和MapTask并行度决定机制数据块:Block是HDFS物理上把数据分成一块一块。数据切片:数据切片只是在逻辑上对输入进行分片,并不会在磁盘上将其切分成片进行存储。所以数据块和数据切片是两种程度上的概念。数据切片的数量 = MapTask的数量(也就是说,一个数据切片就产生一个MapTask)然而,如果数据切片和数据块大小不一致的话,MapTask在并行计算时,就可能要调用不同的DataNode来获取一个完整的MapTask,这是由于数据切片和数据块的大小不一致导致的。所以为了方便提高I

2021-02-03 22:21:54 321

空空如也

空空如也

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

TA关注的人

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