hive(一) -- 简介和安装

数据仓库

数据仓库,英文名称为Data Warehouse,可简写为DW。是一个用于存储,分析,报告的数据系统.数据仓库的目的是构建面向分析的集成化数据环境,分析结果为企业提供决策支持.

数据库和数据仓库区别

数据库和数据仓库的区别实际就是OLTP和OLAP的区别

OLTP系统的典型应用就是RDBMS,也就是我们俗称的数据库,当然这里要特别强调此数据库表示的是关系型数据库,Nosql数据库并不在讨论范围内.

OLAP系统的典型应用就是DW,也就是我们俗称的数据仓库。

image

  1. 数据仓库不是大型的数据库,虽然数据仓库存储数据规模大。
  2. 数据仓库的出现,并不是要取代数据库。
  3. 数据库一般存储业务数据,数据仓库存储的一般是历史数据。
  4. 数据库是为捕获数据而设计,数据仓库是为分析数据而设计

hive

Apache Hive是一款建立在Hadoop之上的开源数据仓库系统,可以将存储在Hadoop文件中的结构化、半结构化数据文件映射为一张数据库表,基于表提供了一种类似SQL的查询模型,称为Hive查询语言(HQL),用于访问和分析存储在Hadoop文件中的大型数据集。

Hive核心是将HQL转换为MapReduce程序,然后将程序提交到Hadoop群集执行。

Hive由Facebook实现并开源。
image

通过上图我们发现Hive其实就干了两件事,第一将数据映射成一张表,第二将SQL语句转换为MR程序.

为什么使用Hive

使用Hadoop MapReduce直接处理数据所面临的问题
	人员学习成本太高需要掌握java语言
     MapReduce实现复杂查询逻辑开发难度太大
使用Hive处理数据的好处
	操作接口采用类SQL语法,提供快速开发的能力(简单、容易上手)
	避免直接写MapReduce,减少开发人员的学习成本
	支持自定义函数,功能扩展很方便
	背靠Hadoop,擅长存储分析海量数据集

Hive和Hadoop的关系

从功能来说,数据仓库软件,至少需要具备两种能力︰存储数据的能力、分析数据的能力

Apache Hive作为一款大数据时代的数据仓库软件,当然也具备上述两种能力。
只不过Hive并不是自己实现了上述两种能力,而是借助Hadoop。
Hive利用HDFS存储数据,利用MapReduce查询分析数据。
Hive的最大的魅力在于用户专注于编写HQL,Hive帮您转换成为MapReduce程序完成对数据的分析。

Hive的架构

image
Metadata:元数据(Metadata),又称中介数据、中继数据,为描述数据的数据( data about data ),主要是描述数据属性( property )的信息,用来支持如指示存储位置、历史数据、资源查找、文件记录等功能。

Hive Meatadata:Hive的元数据。包含用Hive创建的database、table、表的位置、类型、属性,字段顺序类型等元信息。元数据存储在关系型数据库中。如hive内置的Derby、或者第三方如MySQL等。

Metastore:元数据服务。Metastore服务的作用是管理metadata元数据,对外暴露服务地址,让各种客户端通过连接metastore服务,由metastore再去连接MySQL数据库来存取元数据。有了metastore服务,就可以有多个客户端同时连接,而且这些客户端不需要知道MySQL数据库的用户名和密码,只需要连接metastore 服务即可。某种程度上也保证了hive元数据的安全。

Hive与Mysql对比

Hive虽然具有RDBMS数据库的外表,包括数据模型、SQL语法都十分相似,但应用场景却完全不同。Hive只适合用来做海量数据的离线分析Hive的定位是数据仓库,面向分析的OLAP系统。因此时刻告诉自己,Hive不是大型数据库,也不是要取代MySQL承担业务数据处理

image

hive安装和部署

由于Apache Hive是一款基于Hadoop的数据仓库软件,通常部署运行在Linux系统之上。因此不管使用何种方式配置Hive Metastore,必须要先保证服务器的基础环境正常,Hadoop集群健康可用。

1.服务器的基础环境

集群时间同步、防火墙关闭、主机Host映射、免密登录、JDK安装

2.Hadoop集群健康可用

启动Hive之前必须先启动Hadoop集群。特别要注意,需等待HDFS安全模式关闭之后再启动运行ive。
Hive不是分布式安装运行的软件,其分布式的特性主要借由Hadoop完成。包括分布式存储、分布式计算。
配置Hive操作Hadoop权限
vi /opt/apps/hadoop-3.1.1/etc/hadoop/core-site.xml 

<property>
    <!-- 关闭权限认证 -->
    <name>dfs.permissions.enabled</name>
    <value>false</value>
</property>

<property>
    <name>hadoop.proxyuser.root.hosts</name>
    <value>*</value>
</property>

<property>
    <name>hadoop.proxyuser.root.groups</name>
    <value>*</value>
</property>


3.MySQL数据库准备

因为我们使用远程连接模式,要把元数据存储到Mysql中.所以需要安装mysql并开启远程连接权限.
Mysql安装我们已经安装完毕,没有安装详情参照Linux02课件.
这里直接开启远程权限
1.登录  mysql -uroot  -proot
2.在mysql中设置允许简单密码
  set global validate_password_policy=0;
  set global validate_password_length=1;
3.开放远程连接权限
  grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;
4.刷新权限 
  flush privileges;

这样就开启成功,开启成功后可以在windows上用图形化工具连接一下查看是否成功
补充数据库修改密码命令 SET PASSWORD FOR 'root'@'linux01' = PASSWORD('root'); 

4.上传解压

将资料中的apache-hive-3.1.2.tar.gz上传到linux01的/opt/apps文件夹 可以使用rz命令或者xftp工具
上传后进入到apps文件夹 进行解压
tar -zxvf apache-hive-3.1.2.tar.gz
解压后名称比较长 我们简单修改一下
mv apache-hive-3.1.2-bin/ hive-3.1.2/

如果hadoop版本比较高需要解决Hadoop和hive中guava版本差异(我们用的hadoop版本是3.1.1不需要修改)
在hive的lib文件夹下 guava的jar包版本是19.0  
而高版本的的hadoop的/opt/apps/hadoop-3.1.1/share/hadoop/common/lib
下的guava包是27.0 
可以删除hive下的guava 将hadoop的复制过来

5.配置
配置hive系统环境变量 让Hive命令可以在任意位置运行

vi /etc/profile  
export  JAVA_HOME=/opt/apps/jdk1.8.0_191
export  HADOOP_HOME=/opt/apps/hadoop-3.1.1
export  HIVE_HOME=/opt/apps/hive-3.1.2
export  PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HIVE_HOME/bin

添加完毕后别忘记
source /etc/profile

Hive总共有三种配置方式:内嵌模式,本地模式,远程模式. 三种方式主要区别在于Metastore是否需要单独启动,及Metadata存储在哪种数据库中.我们主要使用的是远程模式,这也是企业中使用的模式.

image

主要区别在于Metastare是不是需要单独启动? 内嵌模式和本地模式不需要单独启动  远程模式需要单独启动
Metadata元数据信息保存在哪里? 内嵌模式保存在hive内置数据库中Derby  本地模式和远程模式保存在mysql中

内嵌模式

内嵌模式(Embedded Metastore )是metastore默认部署模式。
此种模式下,元数据存储在内置的Derby数据库,并且Derby数据库和metastore服务都嵌入在主HiveServer进程中,当启动HiveServer进程时,Derby和metastore都会启动。不需要额外起Metastore服务。
但是一次只能支持一个活动用户,适用于测试体验,不适用于生产环境。

#修改Hive环境变量文件 添加Hadoop_HOME
cd /opt/apps/hive-3.1.2/conf
mv hive-env.sh.template hive-env.sh
vi hive-env.sh  
#在最后加上
export HADOOP_HOME=/opt/apps/hadoop-3.1.1
export HIVE_CONF_DIR=/opt/apps/hive-3.1.2/conf
export HIVE_AUX_JARS_PATH=/opt/apps/hive-3.1.2/lib
#初始化元数据
schematool -initSchema -dbType derby
#启动hive服务
hive

本地模式

本地模式(Local Metastore ) 下,Metastore服务与主HiveServer进程在同一进程中运行,但是存储元数据的数据库在单独的进程中运行,并且可以在单独的主机上。metastore服务将通过JDBC与metastore数据库进行通信。本地模式采用外部数据库来存储元数据,推荐使用MySQL。
hive根据hive.metastore.uris参数值来判断,如果为空,则为本地模式。缺点是︰每启动一次hive服务,都内置启动了一个metastore。

本地模式特征就是∶需要安装数据库MySQL来存储元数据,但是不需要配置启动Metastore服务。

注意:Hive3版本需要用户手动进行元数据初始化动作。

#修改Hive环境变量文件 添加Hadoop_HOME
cd /opt/apps/hive-3.1.2/conf
mv hive-env.sh.template hive-env.sh
vi hive-env.sh  
export HADOOP_HOME=/opt/apps/hadoop-3.1.1
export HIVE_CONF_DIR=/opt/apps/hive-3.1.2/conf
export HIVE_AUX_JARS_PATH=/opt/apps/hive-3.1.2/lib

在/opt/apps/hive-3.1.2/lib下上传mysql驱动包

vi hive-site.xml
<configuration>
  <property>
  <name>javax.jdo.option.ConnectionURL</name>
  <value>jdbc:mysql://linux01:3306/hive?createDatabaseIfNotExist=true&amp;useSSL=false</value>
  </property>
  <property>
  <name>javax.jdo.option.ConnectionDriverName</name>
  <value>com.mysql.jdbc.Driver</value>
  </property>
  <!-- mysql的用户名和密码 -->
  <property>
  <name>javax.jdo.option.ConnectionUserName</name>
  <value>root</value>
  </property>
  <property>
  <name>javax.jdo.option.ConnectionPassword</name>
  <value>root</value>
  </property>

  <!--关闭元数据授权-->
  <property>
  <name>hive.metastore.event.db.notification.api.auth</name>
  <value>false</value>
  </property>
  <!--关闭元数据存储版本的验证-->
  <property>
  <name>hive.metastore.schema.verification</name>
  <value>false</value>
  </property>
</configuration>

开启hive操作hadoop权限
见2.2

初始化元数据
schematool -initSchema -dbType mysql -verbos

启动服务
hive

2.4.3 远程模式(重点)

​ 远程模式(Remote Metastore )下,Metastore服务在其自己的单独JVM上运行,而不在HiveServer的JVM中运行。如果其他进程希望与Metastore服务器通信,则可以使用thrift Network API进行通信。

​ 远程模式下,需要配置hive.metastore.uris 参数来指定metastore服务运行的机器ip和端口,并且需要单独手动启动metastore服务。元数据也采用外部数据库来存储元数据,推荐使用MySQL。

​ 在生产环境中,建议用远程模式来配置Hive Metastore。在这种情况下,其他依赖hive的软件都可以通过Metastore访问hive。由于还可以完全屏蔽数据库层,因此这也带来了更好的可管理性/安全性。

image

具体配置(重要)

1.修改Hive环境变量文件 添加Hadoop_HOME

#进入到hive下的conf文件夹
cd /opt/apps/hive-3.1.2/conf
#将hive环境变量文件模版 改为可用文件
cp  hive-env.sh.template  hive-env.sh

vim hive-env.sh
#在最后添加Hadoop_Home
export HADOOP_HOME=/opt/apps/hadoop-3.1.1
export HIVE_CONF_DIR=/opt/apps/hive-3.1.2/conf
export HIVE_AUX_JARS_PATH=/opt/apps/hive-3.1.2/lib

shift: set nu  将第40行注释打开
export HADOOP_HEAPSIZE=1024

2.创建Hive的核心配置文件 进行配置

在hive下的conf文件夹下 直接vi一个hive-site.xml
vi  hive-site.xml
<configuration>
    <!-- 记录hive中的元数据信息  记录在mysql中 -->
    <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://linux01:3306/hive?createDatabaseIfNotExist=true&amp;useSSL=false</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionDriverName</name>
        <value>com.mysql.jdbc.Driver</value>
    </property>
    <!-- mysql的用户名和密码 -->
    <property>
        <name>javax.jdo.option.ConnectionUserName</name>
        <value>root</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>123</value>
    </property>
    <!-- hive在HDFS上的工作目录 -->
    <property>
        <name>hive.metastore.warehouse.dir</name>
        <value>/user/hive/warehouse</value>
    </property>
    <property>
        <name>hive.exec.scratchdir</name>
        <value>/user/hive/tmp</value>
    </property>
    <property>
        <name>hive.querylog.location</name>
        <value>/user/hive/log</value>
    </property>
    <!-- 客户端远程连接的端口 -->
    <property>
        <name>hive.server2.thrift.port</name>
        <value>10000</value>
    </property>
    <property>
        <name>hive.server2.thrift.bind.host</name>
        <value>linux01</value>
    </property>
    <!-- hive服务的页面的端口 -->
    <property>
        <name>hive.server2.webui.port</name>
        <value>10002</value>
    </property>
    <property>
        <name>hive.server2.long.polling.timeout</name>
        <value>5000</value>
    </property>
    <property>
        <name>hive.server2.enable.doAs</name>
        <value>true</value>
    </property>
    <property>
        <name>datanucleus.autoCreateSchema</name>
        <value>false</value>
    </property>
    <property>
        <name>datanucleus.fixedDatastore</name>
        <value>true</value>
    </property>
    <!-- 执行引擎 -->
    <property>
        <name>hive.execution.engine</name>
        <value>mr</value>
    </property>
    <!--关闭元数据授权-->
    <property>
        <name>hive.metastore.event.db.notification.api.auth</name>
        <value>false</value>
    </property>
    <!--关闭元数据存储版本的验证-->
    <property>
        <name>hive.metastore.schema.verification</name>
        <value>false</value>
    </property>
    <!-- 添加元数据服务配置 -->
    <property>
        <name>hive.metastore.uris</name>
        <value>thrift://linux01:9083</value>
    </property>
</configuration>

3.上传MySQL驱动包放入到Hive的lib文件夹下

Hive的lib包中默认没有mysql驱动的jar包.我们需要上传一个mysql的jdbc驱动jar包放入到hive的lib下.
cd /opt/apps/hive-3.1.2/lib
使用rz命令上传我们之前用过的jdbc的jar包即可 

hive初始化

将hive的原数据信息初始化到mysql中 用的是hive下bin中的schematool命令 我们配置了环境变量可以直接使用.
schematool -initSchema -dbType mysql

最后出现 completed初始化成功 
Initialization script completed
schemaTool completed

在mysql数据库中发现生成一个新的hive数据库 里面默认有74张表 , 说明hive初始化成功!

本文转载于网络 如有侵权请联系删除

相关文章

  • Photoshop 2020(21.1.3) x64精简优化绿色版

    AdobePhotoshop-全球最大的图像处理软件!AdobePhotoshop具有更多更高效的性能,新功能包含:新的模糊效果和聚焦区域选定等工具、相机防抖动功能、CameraRAW功能改进、图像提升采样、属性面板改进、Behance集成、同步设置及其它一些同步等功能。AdobePhotoshopCC依然是数字图象处理和编辑的业界标准,提供广泛的专业级润饰工具套件,并集成了专为激发灵感而设计的强大编辑功能。#基于官方简体中文语言版,绿化适度精简,免激活免安装。 ﹂采用CCMaker.exe程序下载的官方离线简体中文语言版; ﹂采用老毛子写的PS仿真模拟授权插件NGLEmp0.6.9.0byPainter; #可选启用主屏幕UXP版,默认不强制加载,支持新旧新建文档界面; #不受官方安装程序的限制,支持适用64位Windows7或更高版本。 ﹂官方版和采用官方安装程序改装版仅支持Windowsv1803以上版本; #支持可选关联格式、可选预览PSD缩略图;支持拖拉图片到软件界面; ﹂加入预览缩略图插件(MysticThumbs64v1.9.8),绿化写入所有关联项支持; #支持打开导出

  • matlab+vivado设计数字滤波器

    两个月在做数字信号处理方面的工作,也是从一个小白刚刚起步,这两天才把fir滤波器给跑通,写文记录下。希望大家欢迎,多多支持。这篇文章写得辛苦,仅仅Word文件就有21页,写了足足两天时间,修修改改。希望大家多多支持,点赞,转发,打赏。在公众号【数字积木】对话框回复“fir滤波器”,即可获得该教材的下载链接。----2020-05-152.MATLAB设计滤波器系数。利用matlab的滤波器设计工具箱(FilterDesigner)可以非常方便地设计出符合工程要求的滤波器,在该工具箱中可以直接导出用于FPGA滤波器设计的系数文件。打开该工具箱后,默认显示如下:进行简单的设置:滤波器类型:低通滤波器滤波器形式:fir滤波器阶数:100频率单位:MHz采样频率:100MHz通带频率:1MHz截止频率:2MHz滤波器参数设置好后,点击DesignerFilter按钮,稍等片刻,即可出现设计好的滤波器的频幅相应曲线。【注】由于是初学乍练,以上的参数设计的不一定合理,其中某些概念还不是很懂,还望通信大神指点。由于要在FPGA中使用,还要将浮点型的系数转化为定点数。如下图设置,设置输出格式为定点数,

  • 测试过程需不需要践行敏捷?

    测试过程在瀑布式开发中作为开发流程中的一个环节,只能在实现软件基础后开始运行,这种模式很大程度上导致了人力资源的浪费。而在敏捷开发模式中,为了解决人力资源浪费的问题,团队的开发过程需要践行敏捷,同样,测试阶段也要践行敏捷。测试过程有没有必要性?测试人员如同食品生产的质检员,能够依据交付成果检验产品的完成标准,并对产品判定“合格”与否。也就是说,测试人员需要测试产品的各功能点,对出现BUG的部分进行汇总分析,最终提交到开发人员手上。假若产品的交付并未经过测试这一步骤,那么我们就无法保证交付成果是符合用户需求的。换句话说,面对一辆并未经过质检的刚出厂的车,你敢开吗?如何让测试过程变得敏捷起来?1.提高开发过程中的质量在敏捷开发过程中,测试不再只是在某一特定阶段内进行,而是贯穿于整个开发流程中去。也就是提高产品开发的内建质量——团队中各职能成员都要对最终交付的产品质量负责,测试人员当然也不例外。适当减少在一个迭代中的工作量在一个迭代过程中,如果产品需要做的功能点太多,就导致团队成员的任务量过满:开发人员会由于赶进度而忽视了代码的规范性要求;测试人员会因为测试出的BUG太多而不断进行“开发—

  • JS数组奇巧淫技

    作者:幻灵尔依 https://juejin.im/post/5d71fff5f265da03e4678328用不好数组的程序猿不是一个好猿,我说的~前段时间接手一个项目,逻辑晦涩难懂,代码庞大冗余,上手极其困难。很大的原因就是数组方法使用不熟练,导致写出了很多垃圾代码,其实很多地方稍加改动就可以变得简单高效又优雅。因此我在这里总结下数组的常用方法和奇巧淫技(奇巧淫技主要是reduce~)。数组操作首先要注意且牢记splice、sort、reverse这3个常用方法是对数组自身的操作,会改变数组自身。其他会改变自身的方法是增删push/pop/unshift/shift、填充fill和复制填充copyWithin。先说数组常用方法,后说使用误区。数组常用方法先献上数组方法懒人图一张祭天!(除了Array.keys()/Array.values()/Array.entries()基本都有):数组方法大全生成类似[1-100]这样的的数组:测试大量数组数据时可以:letarr=newArray(100).fill(0).map((item,index)=>index+1)复制数组解构

  • Istio 1.5部署,回归单体

    前言Istio架构又换了,从1.5开始,把控制平面的所有组件组合并成一个单体结构叫istiod,对于运维部署来说省去很大麻烦。Mixer组件被移除,新版本的HTTP遥测默认基于in-proxyStatsfilter,同时可使用WebAssembly开发in-proxy扩展。下面展示Istio架构图前世与今生:前世前世今生今生环境要求[1]Kubernetes版本支持按官方话来说,Istio1.5已在以下Kubernetes发布版本测试过:1.14,1.15,1.16。KubernetesPod和Service要求作为Istio服务网格中的一部分,Kubernetes集群中的Pod和Service必须满足以下要求:命名的服务端口:Service的端口必须命名。端口名键值对必须按以下格式:name:<protocol>[-<suffix>]。更多说明请参看协议选择。Service关联:每个Pod必须至少属于一个KubernetesService,不管这个Pod是否对外暴露端口。如果一个Pod同时属于多个KubernetesService,那么这些Service不能同

  • MySQL 8 中新增的资源管理特性

    1.资源管理 MySQL8开始支持使用资源组控制系统CPU资源的分配,将服务器内运行的线程分配给特定组,以便线程根据组可用的资源执行。组属性可以控制其资源,包括VCPU的个数和线程的优先级。DBA可以根据不同的工作负载修改这些属性。 默认情况下,有一个系统组和一个用户组,分别名为SYS_default和USR_default。无法删除这些默认组,并且无法修改其属性。每个默认组都没有CPU关联,优先级为02.资源组属性每个组都有一个名字。资源组名称是表和列名称之类的标识符。组名称不区分大小写,最长可达64个字符。 每个组都有一个类型,或者是SYSTEM或者USER。对于系统资源组,允许的优先级范围是-20到0,对于用户资源组,允许的优先级范围是0到19。系统组的优先级高于用户组,确保用户线程的优先级不会高于系统线程。 CPU亲缘关系是资源组可以使用的一组虚拟CPU。亲和关系可以是可用CPU的任何非空子集。如果组没有亲和力,则可以使用所有可用的CPU。 线程优先级是分配给资源组的线程的执行优先级。优先级值的范围从-20(最高优先级)到19(最低优先级)。系统组和用户组的默认优先级均为0。

  • Python 获取主机ip与hostna

    ->基础环境Linux:ubuntu16.04Python;2.7->修改hostname1:$sudohostname2tong-slavetwo2:$sudovi/etc/hostname  2tong-slavetwo3:$sudovi/etc/hosts  127.0.0.1localhost2tong-slavetwo  127.0.1.12tong-slavetwo->Python环境下输出iphostname>>>importsocket>>>hostname=socket.gethostname()>>>printhostname2tong-slavetwo>>>ip=socket.gethostbyname(hostname)>>>printip 127.0.0.1>>>ipList=socket.gethostbyname_ex(name)>>>printipList('localhost',['

  • 【漫画】https 加密那点事

    这篇文章之前有写过,不过那篇文章在排版上很差,而且有些小许的错误。今天,我重新修改了那篇文章。算是那篇文章的修订版。背景不知道从哪天开始,一禅也陷入了编程这条道路..... 对称加密在每次发送真实数据之前,服务器先生成一把密钥,然后先把密钥传输给客户端。之后服务器给客户端发送真实数据的时候,会用这把密钥对数据进行加密,客户端收到加密数据之后,用刚才收到的密钥进行解密。如图:当然,如果客户端要给服务器发送数据,也是采用这把密钥来加密,这里为了方便,我采用单方向传输的形式那万一密钥在传输的过程中被别人截取了怎么吧?例如:假如服务器用明文的方式传输密钥给客户端,然后密钥被中间人给捕获了,那么在之后服务器和客户端的加密传输过程中,中间人也可以用他捕获的密钥进行解密。这样的话,加密的数据在中间人看来和明文没啥两样。非对称加密这种方法就是,让客户端和服务器都拥有两把钥匙,一把钥匙是公开的(全世界知道都没关系),我们称之为公钥;另一把钥匙则是保密的(只有自己本人才知道),我们称之为私钥。这且,用公钥加密的数据,只有对应的私钥才能解密;用私钥加密的数据,只有对应的公钥才能解密。这样,服务器在给客户端传

  • DevOps实践——打造自服务持续交付(下)|洞见

    本文首发于InfoQ:http://www.infoq.com/cn/articles/devops--build-self-service-continuous-delivery-part02在上一篇文章中,主要讲了DevOps转型的动机、策略和方法,本文将会为大家带来更多DevOps转型的落地策略和实践。实践过程下图是我们为团队设计的持续交付流水线,目的是能让Platform团队和交付团队之间的触点能够被融入到持续交付流水线中,并且以基础设施即代码作为协同媒介,通过自动化的方式实现开发于运维(即基础设施与软件系统)的无缝对接。(点击查看大图)我们来看看我们给持续交付流水线赋予了哪些能力:站在交付团队的视角,我们决定将基础设施构建,流水线构建、部署等活动都代码化,与应用代码放在同一个代码仓库中。交付团队通过提交我们的基础设施代码到仓库后,自动触发持续交付工具创建或更新流水线。接着会自动触发构建,静态检查,测试覆盖率校测,代码规范验证等任务,最终输出构建产物并将构建产物推送到仓库。然后会根据交付团队对基础设施和环境的定义到当前要部署的网络环境中去创建或更改虚拟机、网络、存储方式等。最后

  • 体验JPEG图片渐进模式

    前几天看了一个高手朋友的文章后才知道,原来JPEG文件有两种保存方式,分别是BaselineJPEG(标准型)和ProgressiveJPEG(渐进式)两种格式唯一的区别是二者显示的方式不同标准型存储方式:从上到下扫描,把每一行顺序的保存在JPEG文件中显示方式:数据将按照存储时的顺序从上到下一行一行的被显示出来,如果文件较大或者网络下载速度较慢,那么就会看到图片被一行行加载的效果渐进式存储方式:进行多次扫描,每次扫描的精度逐渐提高,把多次扫描结果顺序保存在JPEG文件中显示方式:先显示整个图片的模糊轮廓,随着扫描次数的增加,图片变得越来越清晰优势和不足优势渐进式图片一开始大小框架就定好,不会像基本式图片一样,由于尺寸未设定而造成页面重排,所以渐进式图片提高了页面渲染性能并且由于开始就能让用户看到图片的轮廓,也提高了用户体验不足相比基本式图片更占用CPU和内存实际测试(1)准备图片找了一张1.1M的图片,放入一个测试页面,把图片外面加一层div,如<divstyle="border:2pxsolidred">添加边框是为了看加载图片时的区域大小(2)把图

  • 什么是云原生应用 有哪些关键点?

    最近讨论云原生应用越来越多,其是指原生为在云平台上部署运行而设计开发的应用。公平的说,大多数传统的应用,不做任何改动,都是可以在云平台运行起来的,只要云平台支持这个传统应用所运行的计算机架构和操作系统。只不过这种运行模式,仅仅是把虚拟机当物理机一样使用,不能够真正利用起来云平台的能力。云并非把原先在物理服务器上跑的东西放到虚拟机里跑,真正的云化不仅是基础设施和平台的事情,应用也要做出改变,改变传统的做法,实现云化的应用——应用的架构、应用的开发方式、应用部署和维护技术都要做出改变,真正的发挥云的弹性、动态调度、自动伸缩……一些传统IT所不具备的能力。这里说的“云化的应用”也就是“云原生应用”。云原生架构和云原生应用所涉及的技术很多,如容器技术、微服务等。而云原生应用最大的特点就是可以迅速部署新业务。在企业里,提供新的应用程序环境及部署软件新版本通常所需时间以日、周甚至以月计算。这种速度严重限制了软件发布所能承受的风险,因为犯错及改错也需要花费同样的时间成本,竞争优势就会由此产生。所以云原生不是一个产品,而是一套技术体系和一套方法论,而数字化转型是思想先行,从内到外的整体变革。云原生包括

  • No.003 Longest Substring Without Repeating Characters

    LongestSubstringWithoutRepeatingCharactersTotalAccepted: 167158TotalSubmissions: 735821Difficulty: MediumGivenastring,findthelengthofthe longestsubstring withoutrepeatingcharacters.Examples:Given "abcabcbb",theansweris "abc",whichthelengthis3.Given "bbbbb",theansweris "b",withthelengthof1.Given "pwwkew",theansweris "wke",withthelengthof3.Notethattheanswermustbea substring, "pwke" isa subsequence andnotasubstring.解题思路参考自: http:

  • 量化交易 平台介绍

    平台介绍 概述RiceQuant是一个云端的框架,可以帮助我们随时,随地的开发袭击的交易策略,验证资金的投资思路.RiceQuant的回测系统简单好用,所以在接下来的学习当中,我们会使用这个平台来讲解.回测框架肯定有很多朋友好奇为什么我们不自己实现一个回测框架.原因有三:没有完整的股票行情和基本面数据1.回测平台是载体,重点在于快速验证策略1.证券投资机构各自使用的回测框架不同,没用通用的框架RiceQuant平台介绍网址:https://www.ricequant.com/welcome/注册注册我就不多赘述了,小伙伴们请自行完成.创建策略首先我们先点击进入平台,如图:然后我们点击新建策略,如图:在新建策略中我们点击代码策略,如图:在策略名称中我们填入“我的第一个策略”,如图:策略页面功能介绍策略页面的样子:各个区块的功能:如何完成一个策略选择策略的运行信息:选择运行区间和初始资金-选择回测频率-选择股票池编写策略的逻辑:获取股票行情,基本面数据-选择哪些股票,以及交易时间分析结构策略指标分析策略初始设置基础设置:指定回测起止日期,初始资金以及回测频率起止日期:策略运行的时间区间-初

  • C++对象模型

     C++对象模型何为C++对象模型?C++对象模型可以概括为以下2部分:1.       语言中直接支持面向对象程序设计的部分2.       对于各种支持的底层实现机制语言中直接支持面向对象程序设计的部分,如构造函数、析构函数、虚函数、继承(单继承、多继承、虚继承)、多态等等,这也是组里其他同学之前分享过的内容。第一部分这里我简单过一下,重点在底层实现机制。在c语言中,“数据”和“处理数据的操作(函数)”是分开来声明的,也就是说,语言本身并没有支持“数据和函数”之间的关联性。在c++中,通过抽象数据类型(abstractdatatype,ADT),在类中定义数据和函数,来实现数据和函数直接的绑定。概括来说,在C++类中有两种成员数据:static、nonstatic;三种成员函数:static、nonstatic、virtual。如下面的Base类定义:Base类定义:#pragmaonce#include<iostream>

  • Java 思考题:Java程序设计中创建的线程属于哪种实现方式?为什么进程切换的开销比线程切换大呢?

    思考题byjwk 思考题(一): 1、结论 Q:Java程序设计中创建的线程属于哪种实现方式? A:Java的线程是映射到操作系统的原生线程之上的,在Linux和windows使用的是内核级线程。 Java线程在JDK1.2之前,是基于称为“绿色线程“(GreenThreads)的用户线程实现的 而在JDK1.2中,线程模型替换为基于操作系统原生线程模型来实现。 JVM没有限定Java线程需要使用哪种线程模型来实现,JVM只是封装了底层操作系统的差异,而不同的操作系统可能使用不同的线程模型,例如Linux和windows使用了一对一模型,solaris和unix某些版本可能使用多对多模型。所以一谈到Java语言的多线程模型,需要针对具体JVM实现。 比如SunJDK1.2开始,线程模型都是基于操作系统原生线程模型来实现,它的Window版和Linux版都是使用系统的1:1的线程模型实现的。 轻量级进程与内核线程之间1:1的关系 进程与用户线程之间1:N的关系 用户线程与轻量级进程之间M:N的关系 2、证据 3、实验 不可以直接看总线程数!!!没法控

  • synchronized与条件同步

    在并发编程中,有这样的需求:当满足某个条件时线程执行同步块中的代码,条件不满足时,让线程在此等待,直至条件满足再执行同步代码块。java的Object类即提供了一类这样的方法wait(),notifyAll()/notify(),调用wait()方法后,线程A释放对同步代码块的控制并进入休眠状态,在条件再次满足时,调用notifyAll()/notify()方法唤醒线程A,线程A将被唤醒并重新试图获得同步代码块的控制,在进入同步代码块成功之后,再次对条件判断。典型的应用场景是生产者-消费者模式,有一个固定大小的缓冲区存放消息,一个或者多个生产者线程把消息写入缓冲区;一个或者多个消费者从缓冲区获取消息。如果缓冲区满了,生产者就不能写入消息,并等待。如果缓冲区为空,消费者就不能获取消息,并等待。我们使用synchronized关键字来同步代码块,由于java中的类都继承自Object类,因此可以在我们的类中调用wait()让线程进入休眠并等待唤醒。首先创建一个类MessageStorage来管理消息缓冲区,并使用LinkedList队列来作为消息缓冲区:publicclassMessage

  • 王家林的81门一站式云计算分布式大数据&amp;移动互联网解决方案课程第六门课程:NoSQL架构揭秘和MongoDB深入浅出最佳实践

    一:课程简介: 该来的终于来了,一股NoSQL革命正在席卷全球… 由于传统数据库越来越无法满足日益增长的海量数据的高效存储、访问以及高并发读写以及巨大的可扩展性等问题,传统的关系型数据库面临着巨大的调整,NoSQL应用而生。   NoSQL通过自身的架构和设计非常有效的解决了大数据量、高性能、高可用性、高度可扩展性等问题,并且在性能上具有革命性的优势,在众多的NoSQL中其中的MongoDB作为非关系型数据库中功能最为丰富、最像关系型数据库的最受欢迎,它具有高性能、易部署、易使用、存储和管理方便等诸多优势。       本课程从NoSQL揭秘开始,以实践为基础循序渐进的剖析NoSQL的方方面面,尤其是对MongoDB的剖析尤为深入实用。助力你成为NoSQL时代的弄潮儿。   二:课程特色 1,     深入浅出中动手实作; 2,     各种NoSQL的产品对比; 3,  &nb

  • JavaScript面向对象(3)—深入ES6的class

    JavaScript面向对象—深入ES6的class 前言 在前面一篇中主要介绍了JavaScript中使用构造函数+原型链实现继承,从实现的步骤来说还是比较繁琐的。在ES6中推出的class的关键字可以直接用来定义类,写法类似与其它的面向对象语言,但是使用class来定义的类其本质上依然是构造函数+原型链的语法糖而已,下面就一起来全面的了解一下class吧。 1.类的定义 class关键字定义类可使用两种方式来定义: classPerson{}//类声明 constPerson=class{}//类表达式 复制 2.类的构造函数 从上面class定义类可以发现是没有()让我们来传递参数的,当希望在实例化对象的给类传递一些参数,这个时候就可以使用到类的构造函数constructor了。 每个类都可以有一个自己的constructor方法,注意只能有一个,如果有多个会抛出异常; classPerson{ constructor(name,age){ this.name=name this.age=age } constructor(){} } 复制 当通过new操作符

  • 关于我

    2021年9月3日更新补充 (真的心累,本来是个小问题,但是网上帖子都基本差不多,基本都是相同的操作,导致搜了半个多小时才解决) 一、首先为什么要重新发一次呢,因为我发现上次写的这个记录是不完善甚至是错的,因为我忽略了一个操作,其次在今天再次去解决这个问题的时候,发现了一个比较正确的解决方法。下面我基本以上一次的内容为基础,因为上一次的内容仅仅完成了一部分的操作,并未解决真正的问题。也庆幸上次写的那篇随笔没有很多人去看,不然和网上的帖子一样会误导很多人,而且也成为了一篇没有用的帖子。 二、我会在每一个步骤上打上补充,避免误操作。而且希望一步步往下看,因为最后还会有一个根据这些网上普遍的操作总结出来的问题。 以下是上次文章内容,文章标题:记录"ERROR1045(28000):Accessdeniedforuser'root'@'localhost'(usingpassword:YES/NO)”错误 前言 前段时间MySQL莫名的挂了,导致我数据都被清了,数据库也连不上;具体原因我也没去多看,今天顺便去搜了一下解决方法,没想到重置了一下密码竟然好了,但是数据还是被清了,有时间再去看

  • sql注入漏洞与防范

    1建立查询语句 $host="localhost"; $username="root"; $dbname="acool"; $dbpwd="root"; $con=mysql_connect($host,$username,$dbpwd)ordie("#failtocontecttodb."); mysql_select_db($dbname,$con)ordie("failtoopendatabase"); $user=$_GET['user']; $pwd=$_GET["pwd"]; $sql="select*fromuserwhereusername='{$user}'andpwd='{$pwd}'"; $result=mysql_query($sql,$con); $num_rows=mysql_num_rows($result); if($num_rows<1){ echo"fail"; }else{ echo"succes"; } while($row=mysql_fetch_array($result)){ var_dump($row); } echo"&

  • POJ2318 TOYS (计算几何)

    [###题目链接###](http://poj.org/problem?id=2318) 题目大意: 给定一个矩形,这个矩形被\(n\)条线段(端点分别在矩形上下边界上)切割成\(n+1\)个块。再给你\(m\)个物品的坐标,问每个块中会有多少个物品,保证物品放置位置合法。 分析: 一个物品在一个块中时,他一定夹在两个分界线中间,且在左分界线的右边,右分界线的左边。故按图中那样,将物品连接某个边界下端,构成一个向量,再判断蓝色向量与紫色向量的位置关系,进行叉积即可。故二分找到第一个物品向量\(×\)边界向量为负的位置,即为该物品所在块的右边界(或者二分最后一个叉积为正的)。 代码如下: #include<set> #include<map> #include<queue> #include<stack> #include<vector> #include<string> #include<cstring> #include<iostream> #include<algorithm&

相关推荐

推荐阅读