0%

本文为学习笔记,对应视频教程来自黑马程序员Hive教程

Hive函数入门

函数概述

1
2
3
4
5
6
-- 显示所有的函数和运算符
SHOW FUNCTIONS;
-- 查看运算符或者函数的使用说明
DESCRIBE FUNCTION avg;
-- 使用extended 可以查看更加详细的使用说明
DESCRIBE FUNCTION EXTENDED avg;

内置函数

String Functions 字符串函数
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
-- 字符串长度函数:length(str | binary)
SELECT length("Facebook");
-- 字符串反转函数:reverse
SELECT reverse("Facebook");

-- 字符串连接函数:concat(str1, str2, ... strN)
SELECT concat("abc","def");

-- 带分隔符字符串连接函数:concat_ws(separator, [string | array(string)]+)
SELECT concat_ws('.', 'www', array('facebook', 'com'));

-- 字符串截取函数:substr(str, pos[, len]) 或者 substring(str, pos[, len])
-- pos是从1开始的索引,如果为负数则倒着数
SELECT substr("Facebook",-2);
SELECT substr("Facebook",2,2);

-- 字符串转大写函数:upper,ucase
SELECT upper("Facebook");
SELECT ucase("Facebook");

-- 字符串转小写函数:lower,lcase
SELECT lower("Facebook");
SELECT lcase("Facebook");

-- 去空格函数:trim 去除左右两边的空格
SELECT trim(" facebook ");

-- 左边去空格函数:ltrim
SELECT ltrim(" facebook ");

-- 右边去空格函数:rtrim
SELECT rtrim(" facebook ");

-- 正则表达式替换函数:regexp_replace(str, regexp, rep)
SELECT regexp_replace('100-200', '(\\d+)', 'num');

-- 正则表达式解析函数:regexp_extract(str, regexp[, idx]) 提取正则匹配到的指定组内容
SELECT regexp_extract('100-200', '(\\d+)-(\\d+)', 2);

-- URL解析函数:parse_url 注意要想一次解析出多个 可以使用parse_url_tuple这个UDTF函数
SELECT parse_url('http://www.facebook.cn/path/p1.php?query=1', 'HOST');

-- json解析函数:get_json_object
-- $代表当前JSON对象
SELECT get_json_object(
'[{"website":"www.itcast.cn","name":"allenwoon"}, {"website":"cloud.itcast.com","name":"carbondata 中文文档"}]',
'$.[1].website');

-- 空格字符串函数:space(n) 返回指定个数空格
SELECT space(2);

-- 重复字符串函数:repeat(str, n) 重复str字符串n次
SELECT repeat("123", 2);

-- 返回首字符ascii函数:ascii
-- a对应ASCII 97
SELECT ascii("apple");

-- 左补足函数:lpad
-- ???hi
SELECT lpad('hi', 5, '??');
-- h
SELECT lpad('hi', 1, '??');

-- 右补足函数:rpad
SELECT rpad('hi', 5, '??');

-- 分割字符串函数: split(str, regex)
SELECT split('oneAtwoBthreeC', '[ABC]');

-- 集合查找函数: find_in_set(str,str_array)
SELECT find_in_set('ab', 'abc,b,ab,c,def');
阅读全文 »

本文为学习笔记,对应视频教程来自尚硅谷大数据Spark教程从入门到精通

Spark快速上手

创建Maven项目

增加Scala插件

Spark 由 Scala 语言开发的,我这里使用的 Scala 编译版本为 2.12.15。请通过官网查看 Spark 和 Scala 对应的版本关系Spark Documentation

WordCount
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
package com.eitan.bigdata.spark.core.wordcount

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

object Spark03_WordCount {
def main(args: Array[String]): Unit = {
// 创建 Spark 运行配置对象
val sparkConf = new SparkConf().setMaster("local").setAppName("WordCount")
// 创建 Spark 上下文环境对象(连接对象)
val sparkContext = new SparkContext(sparkConf)
// 读取文件数据
val lines: RDD[String] = sparkContext.textFile("data\\1.txt,data\\2.txt")
// 将文件中的数据进行分词
val words: RDD[String] = lines.flatMap(_.split(" "))

val wordToOne: RDD[(String, Int)] = words.map(
word => (word, 1)
)

// Spark 框架提供了更多功能,可以将分组和聚合使用一个方法实现
// reduceByKey: 相同Key的数据,可以对value进行reduce聚合
val wordToCount: RDD[(String, Int)] = wordToOne.reduceByKey(_ + _)

// 将转换结果采集到控制台打印出来
val array: Array[(String, Int)] = wordToCount.collect()
array.foreach(println)
//关闭 Spark 连接
sparkContext.stop()
}
}
阅读全文 »

本文为学习笔记,对应视频教程来自黑马程序员Hive教程

Hive部署

Mysql 安装

卸载Centos7自带mariadb和mysql
1
2
3
4
5
[root@hadoop102 ~]# rpm -qa | grep mariadb
mariadb-libs-5.5.60-1.el7_5.x86_64
[root@hadoop102 ~]# rpm -e mariadb-libs-5.5.60-1.el7_5.x86_64 --nodeps
# 最小化安装不会自带MySQL
[root@hadoop102 ~]# rpm -e --nodeps $(rpm -qa | grep mysql)
mysql安装介质下载

官网下载地址:MySQL Product Archives

Product Version Operating System OS Version
5.7.20 Linux - Generic Linux - Generic(glibc 2.12)(x86,64-bit)
解压安装介质
1
2
3
4
[root@hadoop102 ~]# cd /opt/software/
[root@hadoop102 software]# tar -zxf mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz
# 将解压出的文件夹名称修改为mysql-5.7.20
[root@hadoop102 software]# mv mysql-5.7.20-linux-glibc2.12-x86_64 ../module/mysql-5.7.20
建立用户和组并创建相关目录
1
2
3
4
5
6
[root@hadoop102 mysql-5.7.20]# groupadd mysql
[root@hadoop102 mysql-5.7.20]# useradd -r -g mysql -s /bin/false mysql

[root@hadoop102 mysql-5.7.20]# mkdir -p /data/mysql
[root@hadoop102 mysql-5.7.20]# chown -R mysql:mysql /data
[root@hadoop102 mysql-5.7.20]# chmod 750 /data
阅读全文 »

本文为学习笔记,对应视频教程来自尚硅谷大数据Hadoop 3.x

模板虚拟机环境准备

安装虚拟机

IP地址192.168.203.100、主机名称hadoop100、内存4G、硬盘50G

1
2
3
4
5
6
7
8
9
# 一、编辑静态 ip 地址
vi /etc/sysconfig/network-scripts/ifcfg-ens33
# 修改
BOOTPROTO="static"
# 添加
IPADDR="192.168.203.100"
NETMASK="255.255.255.0"
GATEWAY="192.168.203.2"
DNS1="114.114.114.114"
阅读全文 »

HashMap 的静态变量

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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
public class HashMap<K,V> extends AbstractMap<K,V>
implements Map<K,V>, Cloneable, Serializable {

private static final long serialVersionUID = 362498820763181265L;

/**
* The default initial capacity - MUST be a power of two.
* 默认初始容量 - 必须是2的幂次方
*/
static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16

/**
* The maximum capacity, used if a higher value is implicitly specified
* by either of the constructors with arguments.
* MUST be a power of two <= 1<<30.
* 最大容量
*/
static final int MAXIMUM_CAPACITY = 1 << 30;

/**
* The load factor used when none specified in constructor.
* 默认负载因子
*/
static final float DEFAULT_LOAD_FACTOR = 0.75f;

/**
* The bin count threshold for using a tree rather than list for a
* bin. Bins are converted to trees when adding an element to a
* bin with at least this many nodes. The value must be greater
* than 2 and should be at least 8 to mesh with assumptions in
* tree removal about conversion back to plain bins upon
* shrinkage.
* 树化的阈值
*/
static final int TREEIFY_THRESHOLD = 8;

/**
* The bin count threshold for untreeifying a (split) bin during a
* resize operation. Should be less than TREEIFY_THRESHOLD, and at
* most 6 to mesh with shrinkage detection under removal.
* 取消树化的阈值
*/
static final int UNTREEIFY_THRESHOLD = 6;

/**
* The smallest table capacity for which bins may be treeified.
* (Otherwise the table is resized if too many nodes in a bin.)
* Should be at least 4 * TREEIFY_THRESHOLD to avoid conflicts
* between resizing and treeification thresholds.
* 进行树化时表的最小容量,否则将进行resized来减少链表长度
*/
static final int MIN_TREEIFY_CAPACITY = 64;
阅读全文 »

案例说明

在 Spring 中,我们通过在配置类中使用 @Bean 注解是能成功将其标注的方法返回的 Bean 对象注入到 Spring 容器中。但是如果我们通过容器获取到配置类的对象,在调用配置类对象被 @Bean 修饰的方法是否会重新生成对象呢?代码如下:

MyApplicationContext

1
2
3
4
5
6
7
8
9
public class MyApplicationContext {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(MyConfiguration.class);
MyConfiguration myConfiguration = context.getBean(MyConfiguration.class);
Cat cat1 = myConfiguration.getCat();
Cat cat2 = myConfiguration.getCat();
System.out.println(cat1 == cat2);
}
}

MyConfiguration

1
2
3
4
5
6
7
8
9
@Configuration
public class MyConfiguration {
@Bean
public Cat getCat(){
Cat cat = new Cat();
cat.setName("zs");
return cat;
}
}

Cat

1
2
3
4
5
6
7
8
9
10
11
public class Cat {
private String name;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}

实验结果为 true,表明调用代理对象 myConfiguration.getCat() 并不会重新生成新的对象,这显然与我们的认知截然不同。而这一次我们将探究 Spring 是如何实现这一功能的。

阅读全文 »

案例代码

被代理类Calculator

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class Calculator {
public int add(int i, int j) {
return i + j;
}

public int sub(int i, int j) {
return i - j;
}

public int mult(int i, int j) {
return i * j;
}

public int div(int i, int j) {
return i / j;
}
}

MethodInterceptor

1
2
3
4
5
6
7
public class MyCglib implements MethodInterceptor {
@Override
public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
System.out.println("调用cglib动态代理");
return methodProxy.invokeSuper(o, objects);
}
}

程序入口

1
2
3
4
5
6
7
8
9
10
11
12
public class CglibTest {
public static void main(String[] args) {
// 设置cglib生成的class文件保存路径
System.setProperty(DebuggingClassWriter.DEBUG_LOCATION_PROPERTY, "E:\\mashibing\\spring");
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(Calculator.class);
enhancer.setCallback(new MyCglib());
Calculator myCalculator = (Calculator) enhancer.create();
myCalculator.add(1, 1);
System.out.println(myCalculator.getClass());
}
}
阅读全文 »

前期准备

  1. 本次打算使用虚拟机来搭建 Elasticsearch 集群,所以需要准备一台刚安装完成的虚拟机
  2. 如果虚拟机不会安装的小伙伴可以参考 2021韩顺平 一周学会Linux 的前10节
  3. 下载软件可能需要科学上网,如有需要请参考 github-科学上网
  4. 网络拓扑图、配置文件,来自于Elastic认证特训班-吴磊老师
阅读全文 »

常用分析工具

工具名称 作用描述
jps.exe JVM 进程状态工具(JVM Process Status Tool),用于显示目标系统上 JVM 的 Java 进程信息
jstat.exe JVM 统计检测工具(JVM Statistics Monitorng Tool),主要用于检测并显示 JVM 的性能统计信息
jinfo.exe Java 配置信息工具(Java Configuration Information),用于打印指定 Java 进程、核心文件或者远程调试服务器的配置信息
jhat.exe Java 堆分析工具(Java Heap Analysis Tool),用于分析 Java 堆内存中的对象信息
jmap.exe Java 内存映射工具(Java Memory Map),主要用于打印指定 Java 进程、核心文件或者远程调试服务器的共享对象内存映射或堆内存细节
jstack.exe Java 堆栈跟踪工具,主要用于打印指定 Java 进程,核心文件或者远程调试服务器的 Java 线程的堆栈跟踪信息
jmc.exe Java 任务控制工具(Java Mission Control),主要用于 JVM 的生产时间监测、分析、诊断
jvisualvm.exe JVM 监测、故障排除、分析工具,主要以图形化界面的方式提供运行与指定虚拟机的 Java 应用程序的详细信息
jconsole.exe 图形化用户界面的监测工具,主要用于监测并显示运行与 Java 平台的应用程序的性能和资源占用等信息
阅读全文 »