早期内容
文章平均质量分 69
2022年以前的博客内容
栗筝i
海到无边天作岸,山登绝顶我为峰。期待更好的自己
展开
-
Docker入门-架构
Docker 包括三个基本概念:镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。仓库(Repository):仓库可看成一个代码控制中心,用原创 2020-09-03 11:29:55 · 1785 阅读 · 2 评论 -
Docker使用-构建MySQL
拉取官方镜像(我们这里选择5.7,如果不写后面的版本号则会自动拉取最新版)docker pull mysql:5.7 # 拉取 mysql 5.7docker pull mysql # 拉取最新版mysql镜像MySQL文档地址检查是否拉取成功$ sudo docker images一般来说数据库容器不需要建立目录映射sudo docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 -..原创 2020-09-04 10:26:41 · 1815 阅读 · 2 评论 -
Docker原理之CGroups
控制组(cgroups)是 Linux 内核的一个特性,主要用来对共享资源进行隔离、限制、审计 等。只有能控制分配到容器的资源,才能避免当多个容器同时运行时的对系统资源的竞争。控制组技术最早是由 Google 的程序员 2006 年起提出,Linux 内核自 2.6.24 开始支持。控制组可以提供对容器的内存、CPU、磁盘 IO 等资源的限制和审计管理。我们通过 Linux 的命名空间为新创建的进程隔离了文件系统、网络并与宿主机器之间的进程相互隔离,但是命名空间并不能够为我们提供物理资源上的..原创 2020-09-04 09:46:24 · 1931 阅读 · 1 评论 -
MySQL:基本命令
一、数据库操作1、查询数据库,命令如下:SHOW DATABASES;2、我们可以在登陆 MySQL 服务后,使用 create 命令创建数据库,命令格式:CREATE DATABASE 数据库名;3、使用 drop 命令删除数据库,命令格式:drop database 数据库名;4、使用 use 命令选择数据库,命令格式:use database 数据库名;二、数据表操作1、创建MySQL数据表的SQL通用语法:CREATE TABLE table_name (col原创 2020-09-08 15:05:02 · 1792 阅读 · 2 评论 -
Java集合:什么是Java集合?
一、集合的由来通常,我们的Java程序需要根据程序运行时才知道创建了多少个对象。但若非程序运行,程序开发阶段,我们根本不知道到底需要多少个数量的对象,甚至不知道它的准确类型。为了满足这些常规的编程需要,我们要求能在任何时候,任何地点创建任意数量的对象,而这些对象用什么来容纳呢?我们首先想到了数组,但是!数组只能存放同一类型的数据,而且其长度是固定的,那怎么办了?集合便应运而生了。二、集合是什么?Java集合类存放在java.util包中,是一个用来存放对象的容器。注意:1.集合只能存放对象。比如你原创 2020-09-04 14:34:25 · 1976 阅读 · 0 评论 -
MySQL:进阶应用
一、进阶应用1、可以在 SELECT, UPDATE 和 DELETE 语句中使用 Mysql 的 JOIN 来联合多表查询。JOIN 按照功能大致分为如下三类:INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。**LEFT JOIN(左连接):**获取左表所有记录,即使右表没有对应匹配的记录。RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。2、MySQL NULL 值处理我们已经知道 MySQL原创 2020-09-08 15:19:18 · 1911 阅读 · 1 评论 -
Java集合:Collection接口
Collection是一个接口,继承自Iterable。我们先看一下Iterable接口的源码一、Iterablepackage java.lang;import java.util.Iterator;import java.util.Objects;import java.util.Spliterator;import java.util.Spliterators;import java.util.function.Consumer; /** *实现这个接口的的类允许使原创 2020-09-04 16:07:35 · 1840 阅读 · 1 评论 -
Docker入门-简介
独具魅力的Docker作为一门新技术,它的出现有可能引起其所在领域大范围的波动甚至是重新洗牌。根据业内专业人士的看法,不论如何,Docker的出现,已经成为云服务市场中一枚极具意义的战略性棋子。从2013年开始在国内发力,一直到2015年的野蛮扩张逐渐发展到至今,Docker到底是何方神圣,能有如此大的威力?一、Docker是什么Docker 是一个开源的应用容器引擎,基于 Go 语言并遵从 Apache2.0 协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器.原创 2020-09-03 11:28:54 · 1817 阅读 · 0 评论 -
Docker入门-安装
Centos7下安装Dockerdocker官方说至少Linux 内核3.8 以上,建议3.10以上(ubuntu下要linux内核3.8以上, RHEL/Centos 的内核修补过, centos6.5的版本就可以)1、把yum包更新到最新:yum update2、安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的:yum install -y yum-utils device-mapper-persistent-da.原创 2020-09-03 11:30:40 · 1853 阅读 · 1 评论 -
Hive-常用操作
一. 数据库操作1、创建数据库//用户可以用 IF NOT EXISTS 选项来忽略这个异常。 create database [ if not exists ] myhive ;2、创建数据库并指定hdfs存储位置create database myhive2 location '/myhive2';3、修改数据库,可以使用alter database 命令来修改数据库的一些属性。但是数据库的元数据信息是不可更改的,包括数据库的名称以及数据库所在的位置alter database m原创 2020-09-10 19:09:52 · 1973 阅读 · 1 评论 -
Java集合:Map集合
一、简述public interface Map<K,V>将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。注意:Map中的集合不能包含重复的键,值可以重复。每个键只能对应一个值。Map集合是键值对形式存储值的,所以遍历Map集合无非就是获取键和值,根据实际需求,进行获取键和值。Map接口提供三种collection试图,允许以键集、值集或键-值集映射关系集的形式查看某个映射的内容。映射顺序 定义为迭代器在映射的 collection 视图上返回其元素的顺序。某些原创 2020-09-07 09:58:28 · 1915 阅读 · 1 评论 -
Java集合:List集合
List集合List集合类中元素有序、且可重复,集合中的每个元素都有其对应的顺序索引。List容器中的元素都对应一个整数型的序号记载其在容器中的位置,可以根据序号存取容器中的元素。JDK API中List接口的实现类常用的有:ArrayList、LinkList和Vector。List集合里添加了一些根据索引来操作集合元素的方法一、ArrayListArrayList是List接口的典型实现类,本质上,ArrayList是对象引用的一个变长数组。ArrayList是List接口的可变数组的原创 2020-09-04 16:08:47 · 1911 阅读 · 1 评论 -
JDK源码解析之 Java.lang.Package
如果我们在Class对象上调用getPackage方法,就可以得到描述该类所在包的Package对象(Package类是在java.lang中定义的)。我们也可以用包名通过调用静态方法getPackage或者调用静态方法getPackages(该方法返回由系统中所有已知包构成的数组)来获得Package对象。getName方法可以返回包的全名。Package对象的使用与其他反射类型完全不同,即我们不能在运行时创建或操纵包。我们可以使用Package对象来获取有关包的信息,诸如包的用途、谁创建了包、包的版.原创 2020-08-28 13:29:28 · 2497 阅读 · 2 评论 -
Java集合:HashMap
一、哈希表Hash表也称为散列表,也有直接译作哈希表,Hash表是一种根据关键字值(key - value)而直接进行访问的数据结构。也就是说它通过把关键码值映射到表中的一个位置来访问记录,以此来加快查找的速度。在链表、数组等数据结构中,查找某个关键字,通常要遍历整个数据结构,也就是O(N)的时间级,但是对于哈希表来说,只是O(1)的时间级。如果是哈希表,它是通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做**散列表,只需要O(1)**的时间原创 2020-09-07 10:00:35 · 1822 阅读 · 0 评论 -
MySQL:查询条件
查询条件1、使用 WHERE 子句从数据表中读取数据的通用语法:SELECT field1, field2,...fieldN FROM table_name1, table_name2...[WHERE condition1 [AND [OR]] condition2.....查询语句中你可以使用一个或者多个表,表之间使用逗号**,** 分割,并使用WHERE语句来设定查询条件。你可以在 WHERE 子句中指定任何条件。你可以使用 AND 或者 OR 指定一个或多个条件。WHERE 子句原创 2020-09-08 15:08:03 · 2090 阅读 · 1 评论 -
Docker原理之Namespaces
命名空间(namespaces)是 Linux 为我们提供的用于分离进程树、网络接口、挂载点以及进程间通信等资源的方法。一、Namespaces在日常使用 Linux 或者 macOS 时,我们并没有运行多个完全分离的服务器的需要,但是如果我们在服务器上启动了多个服务,这些服务其实会相互影响的,每一个服务都能看到其他服务的进程,也可以访问宿主机器上的任意文件,这是很多时候我们都不愿意看到的,我们更希望运行在同一台机器上的不同服务能做到完全隔离,就像运行在多台不同的机器上一样。在这种情况下,一旦服.原创 2020-09-04 09:45:42 · 2266 阅读 · 2 评论 -
Java集合:Set集合
一、Set接口的特点一个不包含重复元素的collection。更确切地讲,Set不包含满足e1.equals(e2)的元素对 e1和e2,并且最多包含一个null元素。Set集合由Set接口和Set接口的实现类组成,Set接口继承了Collection接口,因此包含了Collection接口的所有方法。其主要实现类有HashSet和TreeSet,在HashSet的基础上又延伸出了LinkedHashSet。HashSet和TreeSet的不同就在于如何判断两个数是否相同的方法上。1.HashSet原创 2020-09-04 16:09:39 · 1947 阅读 · 1 评论 -
Docker原理之UnionFS
一、UnionFSLinux 的命名空间和控制组分别解决了不同资源隔离的问题,前者解决了进程、网络以及文件系统的隔离,后者实现了 CPU、内存等资源的隔离,但是在 Docker 中还有另一个非常重要的问题需要解决 - 也就是镜像。镜像到底是什么,它又是如何组成和组织的是作者使用 Docker 以来的一段时间内一直比较让作者感到困惑的问题,我们可以使用 docker run 非常轻松地从远程下载 Docker 的镜像并在本地运行。Docker 镜像其实本质就是一个压缩包,我们可以使用下面的命令将一个 D原创 2020-09-04 09:46:53 · 2468 阅读 · 0 评论 -
Docker使用-Hello World
1、docker pull hello-world 拉去docker远程仓库中的Hello World的镜像[root@Carlota2 ~]# docker pull hello-worldUsing default tag: latestlatest: Pulling from library/hello-world0e03bdcc26d7: Pull complete Digest: sha256:7f0a9f93b4aa3022c3a4c147a449bf11e0941a1fd0bf4a8原创 2020-09-04 10:26:09 · 2208 阅读 · 2 评论 -
JDK源码解析之 java.lang.System
一个和系统环境进行交互的类.System不允许被实例化, 而且是一个final类一、不能实例化private System() {}二、成员变量public final static InputStream in = null; //这是“标准”输入流。public final static PrintStream out = null; //这是“标准”输出流。public final static PrintStream err = null; //这是“标准”错误输出流。 p.原创 2020-08-28 10:38:08 · 2015 阅读 · 3 评论 -
Scala变量和常用数据类型
一、 声明值和变量Scala声明变量有两种方式,一个用val,一个用var。声明方式:val / var 变量名 : 变量类型 = 变量值val定义的值是不可变的,它不是一个常量,是不可变量,或称之为只读变量。val示例:scala> val a1 = 10scala> a1 = 20(此处会报错,因为val不允许初始化后再次修改a1变量的引用)12var示例:scala> var a2 = 10scala> a2 = 20121、scala默认为匿名变量分原创 2020-09-18 15:39:21 · 2098 阅读 · 2 评论 -
Elasticsearch 7.x 安装及配置
一、下载安装1、下载地址:https://www.elastic.co/cn/downloads/elasticsearch2、解压安装:tar -zxcf elasticsearch-7.9.0-linux-x86_64.tar.gz二、新建es用户在某个版本以后,elasticsearch为了安全性,是不能用root用户启动的3、新建用户组groupadd esgroup4、新建用户useradd esuser -G esgroup5、将es所有者改为新建e s用户:chown -R lz原创 2020-09-12 13:38:52 · 3096 阅读 · 1 评论 -
Hive-分区分桶操作
在大数据中,最常用的一种思想就是分治,我们可以把大的文件切割划分成一个个的小的文件,这样每次操作一个小的文件就会很容易了,同样的道理,在hive当中也是支持这种思想的,就是我们可以把大的数据,按照每天,或者每小时进行切分成一个个的小的文件,这样去操作小的文件就会容易得多了。一、分区表操作企业常见的分区规则:按天进行分区(一天一个分区)1、创建分区表语法create table score(s_id string,c_id string, s_score int) partitioned by (.原创 2020-09-10 19:25:00 · 2490 阅读 · 1 评论 -
Java并发篇_synchronized
synchronized是Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。本文给大家介绍java中的用法。一、为什么要使用synchronized在并发编程中存在线程安全问题,主要原因有:1.存在共享数据2.多线程共同操作共享数据。关键字synchronized可以保证在同一时刻,只有一个线程可以执行某个方法或某个代码块,同时synchronized可以保证一个线程的变化可见(可见性),即可以代替volatile。synchro.原创 2020-09-21 22:07:39 · 1943 阅读 · 0 评论 -
JAVA并发篇_公平锁与非公平锁
简单的来说,如果一个线程组里,能保证每个线程都能拿到锁,那么这个锁就是公平锁。相反,如果保证不了每个线程都能拿到锁,也就是存在有线程饿死,那么这个锁就是非公平锁。一、引入概念1、公平锁:多个线程按照申请锁的顺序去获得锁,线程会直接进⼊队列去排队,永远都是队列的第⼀位才能得到锁。优点:所有的线程都能得到资源,不会饿死在队列中。缺点:吞吐量会下降很多,队列⾥⾯除了第⼀个线程,其他的线程都会阻塞,cpu唤醒阻塞线程的开销会很⼤。2、⾮公平锁:多个线程去获取锁的时候,会直接去尝试获取,获取不到,.原创 2020-09-14 10:12:24 · 2211 阅读 · 0 评论 -
Scala 函数
scala定义函数的标准格式为:def 函数名(参数名1: 参数类型1, 参数名2: 参数类型2) : 返回类型 = {函数体}函数示例1:返回Unit类型的函数def shout1(content: String) : Unit = { println(content)}函数示例2:返回Unit类型的函数,但是没有显式指定返回类型。(当然也可以返回非Unit类型的值)def shout2(content: String) = { println(content)}函数示例3:返原创 2020-09-19 13:57:21 · 1913 阅读 · 2 评论 -
Flume安装部署
1.安装部署1、解压tar -zxvf apache-flume-1.9.0-bin.tar.gz2、改名mv apache-flume-1.9.0-bin flume-1.9.03、配置环境变量 vi /etc/profile,source /etc/profile#flumeexport FLUME_HOME=/usr/local/apps/flume-1.9.0export PATH=$PATH:$FLUME_HOME/bin4、将conf下的flume-env.sh.template原创 2020-09-11 16:36:19 · 1853 阅读 · 2 评论 -
Elasticsearch 简介入门
Elasticsearch 是一个分布式的开源搜索和分析引擎,适用于所有类型的数据,包括文本、数字、地理空间、结构化和非结构化数据。Elasticsearch 在 Apache Lucene 的基础上开发而成,由 Elasticsearch N.V.(即现在的 Elastic)于 2010 年首次发布。Elasticsearch 以其简单的 REST 风格 API、分布式特性、速度和可扩展性而闻名,是 Elastic Stack 的核心组件;Elastic Stack 是适用于数据采集、充实、存储、分析和.原创 2020-09-12 13:37:41 · 1874 阅读 · 1 评论 -
Scala中class与object区别
calss scala编译器会字段帮我们生产一个私有字段和2个公有方法get和setscala 中没有 static 关键字,所以 对于一个class来说,所有的方法和成员变量在实例被 new 出来之前都是无法访问的因此在class中的main方法没什么用了scala 的object 中所有成员变量和方法默认都是 static 的所以可以直接访问main方法...原创 2020-09-18 09:46:07 · 1918 阅读 · 1 评论 -
Java并发篇_volatile
volatile是Java提供的一种轻量级的同步机制。Java 语言包含两种内在的同步机制:同步块(或方法)和 volatile 变量,相比于synchronized(synchronized通常称为重量级锁),volatile更轻量级,因为它不会引起线程上下文的切换和调度。但是volatile 变量的同步性较差(有时它更简单并且开销更低),而且其使用也更容易出错。volatile关键字的作用:保证了变量的可见性(visibility)。被volatile关键字修饰的变量,如果值发生了变更,其他线程立马可原创 2020-09-21 22:08:19 · 1946 阅读 · 0 评论 -
Java并发篇_Java内存模型
在并发编程中,我们通常会遇到以下三个问题:原子性问题,可见性问题,有序性问题。那么它们产生的原因和在Java中解决的办法又是什么呢?一、内存模型的相关概念 计算机在执行程序时,每条指令都是在CPU中执行的,而执行指令过程中,势必涉及到数据的读取和写入。由于程序运行过程中的临时数据是存放在主存(物理内存)当中的,这时就存在一个问题,由于CPU执行速度很快,而从内存读取数据和向内存写入数据的过程跟CPU执行指令的速度比起来要慢的多,因此如果任何时候对数据的操作都要通过和内存的交互来进行,会大大降低指.原创 2020-09-21 20:51:48 · 1867 阅读 · 0 评论 -
Java并发篇_线程详解
线程(thread) 是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。一、线程的分类我们知道计算机可以分为硬件和软件两大块,硬件是基础,软件提供实现不同功能的手段;而软件又可以分为操作系统和应用程序,操作系统专注于对硬件的交互管理并提供一个运行环境给应用程序使用,应用程序则是能实现若干功能的并且运行在操作系统环境中的软件。同样,线程按照操作系统和应用程序两层次可以分为.原创 2020-09-16 17:21:21 · 1915 阅读 · 0 评论 -
CentOS7下Spark集群的安装
从物理部署层面上来看,Spark主要分为两种类型的节点,Master节点和Worker节点,Master节点主要运行集群管理器的中心化部分,所承载的作用是分配Application到Worker节点,维护Worker节点,Driver,Application的状态。Worker节点负责具体的业务运行。从Spark程序运行的层面来看,Spark主要分为驱动器节点和执行器节点。1、机器准备准备两台以上Linux服务器,安装好JDK1.8我这里的是ip地址系统Carlota1Ce原创 2020-09-17 20:56:42 · 2666 阅读 · 0 评论 -
Java并发篇_乐观锁与悲观锁
乐观锁对应于生活中乐观的人总是想着事情往好的方向发展,悲观锁对应于生活中悲观的人总是想着事情往坏的方向发展。一、引入概念1、悲观锁总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁(共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程)。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。Java中synchronized和ReentrantLock等.原创 2020-09-14 10:10:43 · 1888 阅读 · 1 评论 -
Hive-分区分桶概述
一、分区简介为了对表进行合理的管理以及提高查询效率,Hive可以将表组织成“分区”。分区是表的部分列的集合,可以为频繁使用的数据建立分区,这样查找分区中的数据时就不需要扫描全表,这对于提高查找效率很有帮助。分区是一种根据“分区列”(partition column)的值对表进行粗略划分的机制。Hive中每个分区对应着表很多的子目录,将所有的数据按照分区列放入到不同的子目录中去。为什么要分区?庞大的数据集可能需要耗费大量的时间去处理。在许多场景下,可以通过分区的方法减少每一次扫描总数据量,这种做法原创 2020-09-10 19:24:25 · 1990 阅读 · 0 评论 -
Spark-大规模数据处理计算引擎
官网:http://spark.apache.org一、Spark是什么Spark是一种快速、通用、可扩展的大数据分析引擎,2009年诞生于加州大学伯克利分校AMPLab,2010年开源,2013年6月成为Apache孵化项目,2014年2月成为Apache顶级项目。项目是用Scala进行编写。目前,Spark生态系统已经发展成为一个包含多个子项目的集合,其中包含SparkSQL、Spark Streaming、GraphX、MLib、SparkR等子项目,Spark是基于内存计算的大数据并行计算原创 2020-09-17 20:55:39 · 2479 阅读 · 1 评论 -
可扩展的编程语言——Scala
一、Scala是什么Scala是一种多范式的编程语言,其设计的初衷是要集成面向对象编程和函数式编程的各种特性。Scala运行于Java平台(Java虚拟机),并兼容现有的Java程序。 Scala语言的名称来自于"可伸展的语言"。之所以这样命名,是因为它被设计成可以随着使用者的需求而扩展。Scala的应用范围很广,从编写简单脚本,到建立大型系统。 它在许多方面体现了面向对象和函数式编程的熔合;或许这种熔合比其他那些广泛使用的语言体现得还要深入。在可伸展性方面,这两种编程风格具有互补的力量。SCal原创 2020-09-17 11:38:55 · 2279 阅读 · 1 评论 -
Flume简单介绍
在一个完整的离线大数据处理系统中,除了HDFS+MapReduce+Hive组成分析系统的核心之外,还需要数据采集、结果数据导出、任务调度等不可或缺的辅助系统,而这些辅助工具在hadoop生态体系中都有便捷的开源框架,在此,我们首先来介绍下数据采集部分所用的的开源框架——Flume。一、FLUME概述Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写.原创 2020-09-11 16:10:13 · 2034 阅读 · 1 评论 -
Java并发篇_进程&线程
一个进程包括由操作系统分配的内存空间,包含一个或多个线程。一个线程不能独立的存在,它必须是进程的一部分。一个进程一直运行,直到所有的非守护线程都结束运行后才能结束。多线程能满足程序员编写高效率的程序来达到充分利用 CPU 的目的。一、进程1、什么是进程进程(Process) 是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。 在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。程序.原创 2020-09-16 17:20:49 · 1999 阅读 · 0 评论 -
Scala的控制结构
一、 if else表达式scala中没有三目运算符,因为根本不需要。scala中if else表达式是有返回值的,如果if或者else返回的类型不一样,就返回Any类型(所有类型的公共超类型)。例如:if else返回类型一样scala> val a3 = 10 | val a4 = | if(a3 > 20){ | "a3大于20" | }else{ | "a3小于20" | } | pr原创 2020-09-19 10:48:12 · 2079 阅读 · 3 评论