ARTS第五周

ARTS是什么?

Algorithm:每周至少做一个leetcode的算法题;
Review:阅读并点评至少一篇英文技术文章;
Tip/Techni:学习至少一个技术技巧;
Share:分享一篇有观点和思考的技术文章。

Algorithm

Review

分享一篇关于 Hive配置form官网 的文章

Tips

分享一篇Spark On Yarn:提交Spark应用程序到Yarn

Share

关于 Spark 和 Scala 的一些自己的文章:用Scala和Spark进行数据分析(Spark on Yarn)Spark 2.0版本与以前版本的重大区别

ARTS第四周

ARTS是什么?

Algorithm:每周至少做一个leetcode的算法题;
Review:阅读并点评至少一篇英文技术文章;
Tip/Techni:学习至少一个技术技巧;
Share:分享一篇有观点和思考的技术文章。

Algorithm

这周没有做算法题,复习了一部分关于java编程的知识点,基础太差,知道思路写不出来代码,尴尬。。。

Review

Tips

分享一篇关于grep命令的文章

Share

分享一篇自己的搭建Hadoop2.9在CentOS7上的文章。

ARTS第三周

ARTS是什么?

Algorithm:每周至少做一个leetcode的算法题;
Review:阅读并点评至少一篇英文技术文章;
Tip/Techni:学习至少一个技术技巧;
Share:分享一篇有观点和思考的技术文章。

Algorithm

题目
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:输入: “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。
示例 2:输入: “bbbbb”
输出: 1
解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。
示例 3:输入: “pwwkew”
输出: 3
解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。
请注意,你的答案必须是 子串 的长度,”pwke” 是一个子序列,不是子串。
题解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Solution {
public int lengthOfLongestSubstring(String s) {
if (s == null || s.length() == 0){return 0;}
int start=0,length = 1;
char[] str = s.toCharArray();
for(int i=1;i<= s.length()-1;i++){
for(int j=start;j< i;j++){
if(str[i] == str[j]){
start=j+1;
break;
}
}
if(i-start+1 > length){
length = i-start+1;
}
}
return length;
}
}

Review

Hadoop官网关于HDFSYARN的命令行操作(基于Hadoop 2.6.5)。

Tips

关于Hive metastore的三种方式

Share

关于Hive 窗口函数

ARTS第二周

ARTS是什么?

Algorithm:每周至少做一个leetcode的算法题;
Review:阅读并点评至少一篇英文技术文章;
Tip/Techni:学习至少一个技术技巧;
Share:分享一篇有观点和思考的技术文章。

Algorithm

题目:
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
public class Solution002 {
int val;
Solution002 next;
Solution002(int x) { val = x; }
}
class Solution {
public Solution002 addTwoNumbers(Solution002 l1, Solution002 l2) {
if(l1 == null){return l2;}
if(l2 == null){return l1;}
int v = l1.val + l2.val;
if ( v > 9){
l1.val = v - 10;
l1.next = addOne(l1.next);
} else {
l1.val = v;
}
l1.next = addTwoNumbers(l1.next,l2.next);
return l1;
}
private Solution002 addOne(Solution002 node) {
if (node == null)
return new Solution002(1);

if (node.val == 9) {
node.val = 0;
node.next = addOne(node.next);
} else {
++node.val;
}
return node;
}
}

Review

分享一下自己整理的HiveDDL语言DML语言手册(来自Hive官网

Tips

关于mysql优化的一篇文章。

Share

分享一篇自己整理的关于Hive的常用SQL

面试

1、面试

1.1 数据仓库(数据挖掘,ETL)理论

1.什么是数据仓库?

数据仓库是面向主题的、集成的、时变的和非易失的有组织的数据集合,支持管理决策制定。

2.基本的数据模型,区别,适用场景

ER模型、维度模型

3.数据仓库的基本架构

数据源、ETL、数据仓库、元数据、OLAP

4.数据仓库分层架构,每层的作用

数据缓冲层、数据明细层、数据模型层、数据集市层、数据应用层

5.实现数据增量抽取的方式(除了加时间戳外,其它方式)

1、时间戳
2、md5(col_all)

6.用过的ETL工具及报表工具,及特点

1、kettle
2、impala

7.雪花模型和星型模型的区别

一个是数据冗余度的区别,星型模型的数据冗余度比雪花型要高,另一个是查询的性能问题,星型模型的使用便捷性和查询性能要高于雪花型

8.OLAP和OLTP的区别

OLAP联机分析处理,OLTP联机事务处理

9.缓慢变化维度如何处理
10.项目中最重要或最需要注意的部分,如何处理?
11.元数据管理哪些方面?
12.数据抽取注意事项,如何保证?
13.拉链表的优缺点
14.数据质量管控如何实现?
15.事实维度表的类型有哪些
16.对于数据的注意事项
17.数据库三范式

1.2 Hadoop原理及操作

1.2.1 集群

1.用过的集群及规模

2+15,2T+200T,2.6.5
2+4,1T+100T,2.6.5
2+35,4T+1225T,2.6.0-cdh5.13.3

2.每个组件的基本作用

基本模块:
Hadoop 基础功能库:支持其他 Hadoop 模块的通用程序包。
HDFS :一个分布式文件系统,能够以高吞吐量访问应用的数据。
YARN :一个作业调度和资源管理框架。
MapReduce :一个基于 YARN 的大数据并行处理程序。
其他模块:
HBase :一个可扩展的分布式数据库,支持大表的结构化数据存储。
Hive :一个数据仓库基础架构,提供数据汇总和命令行的即席查询功能。
Spark :一个处理 Hadoop 数据的、高速的、通用的计算引擎。
ZooKeeper :一个用于分布式应用的高性能协调服务。

3.基本的命令

参考Hadoop集群基本命令

1.2.2 MapReduce

1.MapReduce工作原理
2.Hadoop提交任务的流程
3.MR图的绘制
4.MR的二次排序
5.YARN的原理,MR原理一样么?

以上五个参考Hadoop系列-Hadoop知识点 笔记

6.MapReduce的map数和reduce数控制

1.2.3 Hive

1.Hive SQL具体的函数使用

参考Hive常用函数

2.全局排序和分组排序的区别(Sort By,Order By,Cluster By,Distrbute By)

order by:会对输入做全局排序,因此只有一个reducer(多个reducer无法保证全局有序)。只有一个reducer,会导致当输入规模较大时,需要较长的计算时间
sort by:不是全局排序,其在数据进入reducer前完成排序。
distribute by:按照指定的字段对数据进行划分输出到不同的reduce中。
cluster by:除了具有 distribute by 的功能外还兼具 sort by 的功能

3.UDF编写,关键是自己的处理具体问题的想法
4.hql的行转列,列转行

实现hive里横转纵的功能

1
2
3
4
5
select gmsfhm,  gddh1   from zb_dwa.DWA_R_JB_RYDHHMK t lateral view explode(split(t.gddh,','))a as gddh1 where gmsfhm='152301198209100568';
152632196712060315    ,13088573907,13034744906    
转化成                   
152632196712060315    13088573907
152632196712060315    13034744906

实现hive里纵变横的功能

1
2
3
4
5
6
7
8
9
10
11
12
原始:
sys_region (id,name)
1 a
1 b
2 c
2 d
select id,concat_ws(',',collect_set(name))
from sys_region
group by id;
结果:
1 a,b
2 c,d

5.Hive里的UDF有哪几种

用户自定义函数:UDF
用户自定义聚合函数:UDAF
用户自定义表生成函数:UDTF

6.count(distinct xxx)如何优化

select count (1) from (select distinct xxx from b) a;

7.数据倾斜会出现在什么情况下,如何处理

发生场景:
1.有聚合运算的时候
2.有join的时候
处理方案:
第一种方案:建临时表
第二种方案:将key通过随机数打散后运算,然后再重新拆分聚合
第三种方案:设置参数 set hive.exec.reducers.bytes.per.reducer以及set hive.optimize.skewjoin = true
第四种方案:大小表关联用map join,group by的时候设置参数

8.Hive几种join方式

inner join,只有进行连接的两个表中都存在与连接标准相匹配的数据才会保留下来。
left join,join操作符左边表中符合where子句的所有记录将会被返回。
right join,会返回右边表中所有符合where语句的记录
full join,会返回所有表中符合where语句条件的所有记录
笛卡尔积join,表示左边表的行数乘以右边表的行数等于笛卡尔结果集的大小。

9.Hive有哪几种文件存储格式,大概说一下原理

1.TEXTFILE为默认的存储格式,行式存储。如果建表的时候不特殊指定则采用这种格式存储,便于和其他工具(grep,sed和awk等)共享数据,也便于查看和编辑。但是相对于二进制文件,存储空间要大。
2.SequenceFile文件存储格式,行式存储。定义表结构时可以通过STORED AS SEQUENCEFILE语句指定。SequenceFile文件是含有键-值对的二进制文件,是Hadoop本身就可以支持的一种标准文件格式。SequenceFile可以在块级别和记录级别进行压缩,同时仍然可以支持按照块级别的文件分割,以方便并行处理。
3.RCfile文件存储格式,是一种行列存储相结合的存储方式。首先,其将数据按行分块,保证同一个记录在一个块上,避免读一个记录需要读取多个block。其次,块数据列式存储,有利于数据压缩和快速的列存取。
主要用到这三种。

10.Hive实现拉链表
11.条件写在join后面和写在where后面的区别

join是数据在查询范围内用join where 只获得符合条件的数据
对结果集:join不符合的显示的是null where 是不显示的

12.Hive的压缩格式及区别

使用压缩的优势是可以最小化所需要的磁盘存储空间,以及减小磁盘和网络I/O操作。但是,文件压缩过程和解压过程会增加CPU开销。
BZip2压缩率最高,但是同时需要消耗最多的COU开销。
GZIP是压缩率和压缩/解压缩速度上的下一个选择。
LZO和Snappy压缩率相比前面的2种要小但是压缩/解压缩速度要快。
GZIP和Snappy压缩的文件不可分割。

13.row_number和rank有啥区别
  • row_number()从1开始,按照顺序,生成分组内记录的序列,row_number()的值不会存在重复,当排序的值相同时,按照表中记录的顺序进行排列
  • RANK() 生成数据项在分组中的排名,排名相等会在名次中留下空位
  • DENSE_RANK() 生成数据项在分组中的排名,排名相等会在名次中不会留下空位
    14.Hive分区,分桶表
    Hive分区是指按照数据表的某列或某些列分为多个区,分区从形式上可以理解为文件夹。
    分桶是相对分区进行更细粒度的划分,分桶将整个数据内容安装某列属性值得hash值进行区分。
    15.常用优化方式
    1.使用EXPLAIN查看执行计划。
    2.JOIN优化。1)将最大的表放置在JOIN语句的最右边。2)使用map-side JOIN。
    3.开启本地模式。
    4.开启并行执行。
    5.开启严格模式。
    6.调整mapper和reducer个数。
    7.JVM重用。
    8.开启压缩。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    一些调优参数
    set hive.groupby.skewindata=true; //当数据出现倾斜时,会自动进行负载均衡
    set hive.exec.compress.output=true; //hive最终输出是否压缩
    set mapred.output.compression.codec=org.apache.hadoop.io.compress.SnappyCodec; //map的输出压缩方式
    set mapred.output.compression.type=BLOCK; //压缩类型,默认为RECORD,压缩单独的记录,BLOCK为块压缩
    set mapreduce.map.memory.mb=2049; //每个map的内存大小
    set mapreduce.reduce.memory.mb=2049; //每个reduce的内存大小
    set hive.exec.parallel=true; //控制同一个sql中的不同的job是否可以同时运行,默认为false
    set hive.exec.parallel.thread.number=4; //控制对于同一个sql来说同时可以运行的job的最大值,默认为8
    set mapred.max.split.size=256000000; //决定每个map处理的最大的文件大小,单位为B
    set mapred.min.split.size.per.node=100000000; //节点中可以处理的最小的文件的大小
    set mapred.min.split.size.per.rack=100000000; //机架中可以处理的最小的文件的大小
    set hive.merge.mapfiles=true; //在Map-only的任务结束时合并小文件
    set hive.merge.mapredfiles=true; //在Map-Reduce的任务结束时合并小文件
    set hive.merge.size.per.task=128000000; //合并文件的大小
    set hive.meger.smallfiles.avgsize=100000000; //当输出文件的平均大小小于该值时,启动一个独立的map-reduce任务进行文件合并
    set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat; //hive的输入 InputFormat
    set hive.hadoop.supports.splittable.combineinputformat=true; //是否支持可切分的combineinputformat
    set mapred.reduce.tasks=10;
    set hive.exec.reducers.bytes.per.reducer=750000000; //控制reducer个数
    set hive.exec.compress.output=true; //hive最终输出是否压缩
    set mapred.compress.map.output=false; //hadoop参数,map输出是否压缩
    set mapred.output.compress=true; //hadoop参数,reduce输出是否压缩
16.exist怎么实现比较快
17.left semi join什么特点
18.不用order by 实现全局排序
19.不用开窗函数 实现分组 topN
20.SQL怎么解决数据倾斜(不用map side join)

1.2.4 Spark

1.Spark 2.0新特性

1.2.5 HBase

1.HBase工作原理
2.rowkey设计原理
3.HBase分区
4.HBase和Hadoop有什么区别,脱离HDFS能存在么?

1.2.6 Kafka

1.Kafka接数的原理

1.2.7 ZooKeeper

1.3 常用SQL

1.3.1 基于Hive的SQL及常用优化

1.求连续五天通过一个卡口的车辆
2.求一段数字排列中不连续的排列
3.求一个学生的成绩占总成绩的百分比

思路:通过表自关联实现

4.字段a,b,c,值为1000,2000,中国;3000,4000,美国,给定1500,求中国

思路:(写udf实现,使用luce索引)java
1)写sql
2)自选方案

5.分组求top N
6.行转列,列转行具体写法

1.3.2 基于Mysql的SQL优化

1.3.3 基于Oracle的SQL优化

1.4 Linux Shell

1.4.1 常用命令

1.5 编程语言

1.6 项目经验

ARTS第一周

ARTS是什么?

Algorithm:每周至少做一个leetcode的算法题;
Review:阅读并点评至少一篇英文技术文章;
Tip/Techni:学习至少一个技术技巧;
Share:分享一篇有观点和思考的技术文章。

Algorithm

题目:
Given an array of integers, return indices of the two numbers such that they add up to a specific target.
You may assume that each input would have exactly one solution, and you may not use the same element twice.
Example:
Given nums = [2, 7, 11, 15], target = 9,
Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].
分析:
给定一个整数数组,和一个整数,返回两个数字的索引,使它们相加等于这个整数。
假设每个输入只有一个解决方案,不会两次使用相同的元素。
实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Solution {
public int[] twoSum(int[] nums, int target) {
int [] end={0,0};
for(int i=0;i<nums.length;i++){
for( int j=i+1;j<nums.length;j++){
if(nums[i]+nums[j] == target){
end[0]=i;
end[1]=j;
return end;
}
}
}
return end;
}
}

总结:
好久没有写程序了,只想到了简单粗暴的遍历两次数组,还语法错误了好几次。。。接下来要看一下Java基础了。

Review

因为工作关系,本周通过Hadoop官网详细了解了一下关于Hadoop-2.6.5的RM HA机制,文章是HA机制(日后可以研究一下这块儿的源码)。

Tips

这周一大半时间用在搭建梯子和博客上了,这里我想分享两篇在搭建过程中对我帮助相当大的本章关于搭建shadowsocks搭建hexo博客的文章。
搭建shadowsocks是基于CentOS7.4系统,使用python版本的shadowsocks。安转配置shadowsocks的过程比较简单,前提是有一台服务器。

Share

分享一篇自己总结的vim编辑器操作和一篇最近看到的关于vim编辑器的文章138 条 Vim 命令、操作、快捷键全集