• [课程学习] apache学习随笔
    使用apache服务来部署静态网站Apache特点:跨平台,安全性nginx特点:轻量级,高并发 apache的服务名称叫做httpd通过systemctl来实现对http的各种操作httpd服务各个配置文件存放的位置我们可以修改httpd.conf文件下面来实现对访问路径的修改/文件但是在修改之后我们发现界面为这里就是SElinux在起作用了,下面讲讲selinux SElinux安全子系统Security-enhanced LINUX:对资源的访问提供限制的保险,打个比方:防火墙是窗户,那么SELinux就是防护栏服务模式 作用enforcing强制启动安全模式,将拦截的服务不合法请求permissive对于不合法请求只发出警告不会强制拦截disabled对于越权的行为不警告也不拦截如何查看安全模式?/etc/selinux/config里面,修改后重启生效 回归上文,为什么会出现禁止访问呢?因为/home目录是存放用户数据的目录而不是httpd服务的目录,所以SELINUX会禁止访问这个目录下面的文件解决这个问题有几个方法1:关闭Selinux2:修改http.conf,然后将文件复制到原来的路径下面(笨蛋方法3:通过semanage命令来实现添加对访问权限的添加一般来说bash下面不一定有semanage这条命令,需要我们下载安装包yum  install policycoreutils-python之后可以使用semanage命令了semanage fcontext -a -t httpd_sys_content /home/wwwtestsemanage fcontext -a -t httpd_sys_content /home/wwwtest/*向网站数据下面加一条SELINUX上下文,使得目录和里面的数据可以被httpd服务访问到restorecon -Rv /home/wwwtest/对目录进行递归,最后可以访问得到页面内容4:还有可能是selinux域安全策略密钥放行,这里通过getsebool和查找来找到相关服务getsebool -a | grep httpd我们将安全策略修改就可以实现(这里设置的为个人博客,当然做不同的东西可能会碰到不同得到东西就是了,原理相同setsebool httpd_enable_homedirs=on 
  • Struts2框架小知识
      Struts2 是 Apache 软件组织推出的一个相当强大的 Java Web 开源框架,本质上相当于一个 servlet。Struts2 基于 MVC 架构,框架结构清晰。通常作为控制器(Controller)来建立模型与视图的数据交互,用于创建企业级 Java web 应用程序      Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。Struts2是一个基于MVC设计模式的Web应用框架,大家可以看看之前分享过的一篇介绍什么是MVC:cid:link_0Struts2详细工作流程?     a.浏览器发出welcome.action请求     b.请求到达Struts的Filter控制器(由于web.xml配置)c.Struts控制器判断请求类型,如果是/welcome.action或/welcome格式请求,将调用struts.xml配置,寻找对应的Action组件     d.调用Action组件的execute方法处理请求,最后返回一个String视图标识     e.Struts控制器根据视图标识寻找相应的JSP(struts.xml中result配置)     f.调用JSP视图生成响应界面给浏览器显示。Struts2控制流程?         1)请求到来         2)创建ValueStack(Action放栈顶),进行初始化         3)调用拦截器Interceptor,在拦截器中是可以访问ValueStack的         4)调用Action,执行execute()方法         5)调用Result,Result负责把数据显示给用户         6)最后到页面,通过标记库(Taglib)取出数据       Struts2中常用的集中Result组件?    1)JSP响应         dispatcher :采用请求转发方式调用JSP组件响应。         redirect:采用请求重定向方式调用JSP组件响应。(在重定向后,原request和action都被销毁掉,因此在JSP获取不到值)    2)Action响应         redirectAction:采用重定向方式发出一个*.action请求         chain:采用转发方式发出一个*.action请求    3)流响应          典型功能:验证码和下载。          stream:可以将Action中的一个InputStream类型属性以流方式响应输出。    4)JSON响应           负责对Ajax请求进行数据响应。          json:可以将Action中的一个属性或多个属性以json格式响应输出        (注意:使用前需要引入struts-json-plugin.jar,然后将<package>元素的extends设置成"json-default")
  • [问题求助] Linux下apche如何支持php
    centos7.2,apache2.4.6,php7.0.33。系统下的有apache和nginx,nginx可以解析.php网页文件,但apache直接就是原样输出。httpd.conf也添加了LoadModule rewrite_module modules/mod_rewrite.so和:AllowOverride all 。不知道怎么回事了。
  • [技术干货] 使用Apache IoTDB进行IoT相关开发的架构设计与功能实现(5)
    使用Apache IoTDB进行IoT相关开发的架构设计与功能实现(5)在开始使用IoTDB之前,大家需要首先配置配置文件,为了方便起见,已经有部分重要文件设置了默认配置。总的来说,Apache IoTDB为用户提供三种配置模块:环境配置文件(iotdb-env.bat, iotdb-env.sh),环境配置项的默认配置文件。用户可以在文件中配置JAVA-JVM的相关系统配置项系统配置文件(iotdb-engine.properties),iotdb-engine.properties:IoTDB引擎层配置项的默认配置文件。用户可以在文件中配置IoTDB引擎的相关参数,如JDBC服务监听端口(rpc_port),未排序数据存储目录(unsequence_data_dir),等等。此外,用户可以配置关于TsFile的信息,例如每次写入磁盘的数据大小(group_size_in_byte)日志配置文件(logback.xml)三个配置项的配置文件位于IoTDB安装目录中:$IOTDB_HOME/conf文件夹。热修改配置为了方便用户,IoTDB服务器为用户提供了热修改功能,即修改中的一些配置参数iotdb engine. Properties并立即将其应用到系统中。在下面描述的参数中,这些参数Effective是trigger支持热修改。触发方式:客户端发送命令load configurationIoTDB服务器。有关客户端的使用,请参见第4章。IoTDB环境配置文件环境配置文件主要用于配置IoTDB服务器运行时的Java环境相关参数,如JVM相关配置。当IoTDB服务器启动时,这部分配置被传递给JVM。用户可以通过查看iotdb-env.sh(或者iotdb-env.bat)文件。每个变量的细节如下:MAX_HEAP_SIZEHEAP_NEWSIZEJMX_LOCALJMX_PORTJMX_IP
  • [技术干货] 使用Apache IoTDB进行IoT相关开发的架构设计与功能实现(4)
    使用Apache IoTDB进行IoT相关开发的架构设计与功能实现(4)编码为了提高数据存储的效率,需要在数据写入时对数据进行编码,从而减少磁盘空间的使用量。在写入和读取数据的过程中,可以减少I/O操作中涉及的数据量以提高性能。对于不同类型的数据,IoTDB支持四种编码方法:PLAIN:普通编码是默认的编码模式,即不编码,支持多种数据类型。它具有较高的压缩和解压缩效率,但空间存储效率较低。TS_2DIFF:二阶差分编码更适合对单调递增或递减的序列数据进行编码,不推荐对波动较大的序列数据进行编码。RLE:游程编码更适合存储具有连续整数值的序列,不推荐用于大多数时间具有不同值的序列数据。游程编码也可用于对浮点数进行编码,但必须指定保留的十进制数字。比较适合存储浮点值连续出现、单调递增或递减的序列数据,不适合存储小数点后精度要求高或波动较大的序列数据。GORILLA:GORILLA编码更适合值相近的浮点序列,不建议用于波动较大的序列数据。常规编码常规数据编码更适合编码常规序列递增的数据(例如,每个数据点之间经过的时间相同的时间序列),在这种情况下,它比TS_2DIFF更好。规则数据编码方式不适合有波动的数据,即不规则数据,此时建议用TS_2DIFF处理。数据类型和编码之间的对应关系前面描述的四种编码适用于不同的数据类型。如果对应关系是错误的,就不能正确地创建时间序列。下表中详细总结了数据类型及其支持的编码之间的对应关系。**数据类型及其支持的编码之间的对应关系**Data TypeSupported EncodingBOOLEANPLAIN, RLEINT32PLAIN, RLE, TS_2DIFF, REGULARINT64PLAIN, RLE, TS_2DIFF, REGULARFLOATPLAIN, RLE, TS_2DIFF, GORILLADOUBLEPLAIN, RLE, TS_2DIFF, GORILLATEXTPLAIN压缩当时间序列按照指定的类型写成二进制数据编码后,IoTDB使用压缩技术对数据进行压缩,进一步提高空间存储效率。虽然编码和压缩都是为了提高存储效率,但编码技术通常只适用于特定的数据类型。例如,二阶差分编码只适用于INT32或INT64数据类型,存储浮点数需要乘以10m才能转换为整数,之后将数据转换为二进制流。压缩方法(SNAPPY)压缩二进制流,因此压缩方法的使用不再受数据类型的限制。IoTDB允许咱们开发者在创建时间序列时指定列的压缩方法,现在主要支持以下两种压缩方法:UNCOMPRESSEDSNAPPY单节点设置大家可以通过sbin文件夹下的启动服务器脚本来启动IoTDB。# Unix/OS X> nohup sbin/start-server.sh >/dev/null 2>&1 &or> nohup sbin/start-server.sh -c -rpc_port >/dev/null 2>&1 &# Windows> sbin\start-server.bat -c -rpc_port "-c "和"-rpc_port "是可选的选项"-c "指定系统配置文件目录选项“-rpc_port”指定rpc端口如果两个选项都指定了,则rpc _端口将覆盖中的rpc_port配置路径
  • [技术干货] 使用Apache IoTDB进行IoT相关开发的架构设计与功能实现(3)
    使用Apache IoTDB进行IoT相关开发的架构设计与功能实现(3)接下来我给大家继续介绍一下Apache IoTDB的数据类型和相关用法在显示时间戳时,IoTDB可以支持长类型和日期时间显示类型。日期时间显示类型可以支持用户定义的时间格式。自定义时间格式的语法如下表所示:**自定义时间格式的语法**SymbolMeaningPresentationExamplesGeraeraeraCcentury of era (>=0)number20Yyear of era (>=0)year1996xweekyearyear1996wweek of weekyearnumber27eday of weeknumber2Eday of weektextTuesday; Tueyyearyear1996Dday of yearnumber189Mmonth of yearmonthJuly; Jul; 07dday of monthnumber10ahalfday of daytextPMKhour of halfday (0~11)number0hclockhour of halfday (1~12)number12Hhour of day (0~23)number0kclockhour of day (1~24)number24mminute of hournumber30ssecond of minutenumber55Sfraction of secondmillis978ztime zonetextPacific Standard Time; PSTZtime zone offset/idzone-0800; -08:00; America/Los_Angeles‘escape for textdelimiter‘’single quoteliteral‘相对时间戳相对时间是指相对于服务器时间的时间now()和DATETIME时间。用法如下:Duration = (Digit+ ('Y'|'MO'|'W'|'D'|'H'|'M'|'S'|'MS'|'US'|'NS'))+RelativeTime = (now() | DATETIME) ((+|-) Duration)+**持续时间单位的语法**SymbolMeaningPresentationExamplesyyear1y=365 days1ymomonth1mo=30 days1mowweek1w=7 days1wdday1d=1 day1dhhour1h=3600 seconds1hmminute1m=60 seconds1mssecond1s=1 second1smsmillisecond1ms=1000_000 nanoseconds1msusmicrosecond1us=1000 nanoseconds1usnsnanosecond1ns=1 nanosecond1ns用法如下:now() - 1d2h //1 day and 2 hours earlier than the current server timenow() - 1w //1 week earlier than the current server time数据类型IoTDB一共支持以下6种数据类型:BOOLEAN (布尔型)INT32 (整数型)INT64 (长整数型)FLOAT (单精度浮点)DOUBLE (双精度浮点)TEXT (字符串)时间序列float和double类型可以指定最大点数,如果编码方法为,则为浮点数小数点后的位数RLE或者TS_2DIFF,如果未指定最大点数,系统将使用浮点精度在配置文件中iotdb-engine.properties。对于浮点数据值,数据范围是(MAX_VALUE,整数型。MAX_VALUE),而不是Float。MAX_VALUE,而max_point_number是19,这是因为Java中函数Math.round(float)的限制。对于双精度数据值,数据范围为(MAX_VALUE,长整数型。MAX_VALUE),而不是Double。MAX_VALUE,而max_point_number是19,这是因为Java(Long)中函数Math.round(double)的限制,MAX_VALUE=9.22E18。当用户在系统中输入的数据的数据类型与时间序列的数据类型不对应时,系统将报告类型错误。如下所示,二阶差分编码不支持布尔类型:IoTDB> create timeseries root.ln.wf02.wt02.status WITH DATATYPE=BOOLEAN, ENCODING=TS_2DIFFerror: encoding TS_2DIFF does not support BOOLEAN
  • 使用Apache IoTDB进行IoT相关开发的架构设计与功能实现(2)
    使用Apache IoTDB进行IoT相关开发的架构设计与功能实现(2)Apache IoTDB中常见的数据模型和术语通过上图我们可以非常清楚的了解到属性的覆盖范围和它们之间的隶属关系,并且根据属性的覆盖范围和它们之间的隶属关系,将其表达为属性层次结构。其层次关系为:power group layer - power plant layer - device layer - sensor layer。其中,ROOT是根节点,传感器层的每个节点称为一个叶节点。在使用IoTDB的过程中,可以用“.”直接连接从根节点到每个叶节点的路径上的属性,从而形成了IoTDB中一个timeseries的名称。例如,图中最左边的路径可以生成一个名为ROOT.ln.wf01.wt01.status 的路径。1.属性层次结构在获得时间序列的名称后,大家就需要根据数据的实际场景和规模来设置存储组。在一般场景下,数据通常是以组为单位到达的(即数据可能跨越电场和设备),为了避免写数据时频繁切换io,也为了满足用户对以组为单位的数据进行物理隔离的要求,可以在组层设置存储组。接下来我给大家介绍几个IoTDB中涉及的模型的基本概念:设备设备是真实场景中装备有传感器的装置。在IoTDB中,所有的传感器都应该有相应的设备。传感器传感器是实际场景中的检测设备,能够感知待测信息,并将感知到的信息转换成电信号或其他所需形式的信息输出,并发送给IoTDB。在IoTDB中,所有存储的数据和路径都以传感器为单位进行组织。存储组存储组用于让用户定义如何组织和隔离磁盘上不同的时间序列数据。属于同一存储组的时间序列将被连续写入相应文件夹中的同一文件。该文件可能由于用户命令或系统策略而关闭,因此来自这些传感器的下一个数据将存储在同一文件夹的新文件中。属于不同存储组的时间序列存储在不同的文件夹中。用户可以将任何前缀路径设置为存储组。假设有四个时间序列root.vehicle.d1.s1, root.vehicle.d1.s2, root.vehicle.d2.s1, root.vehicle.d2.s2,两个设备d1和d2在小路下面root.vehicle可能属于同一个车主或者同一个厂家,所以d1和d2关系密切。此时,可以将前缀path root.vehicle指定为一个存储组,这将使IoTDB能够将其下的所有设备存储在同一个文件夹中。下新添加的设备root.vehicle也将属于该存储组。其中完整路径(root.vehicle.d1.s1如上例所示)不允许设置为存储组。设置合理数量的存储组可以带来性能的提升:既不会因为存储文件或文件夹过多而导致IO频繁切换,也不会因为占用大量内存,导致内存文件频繁切换而导致系统变慢,也不会因为存储文件或文件夹过少而导致写命令阻塞,起到降低并发的作用。用户应该根据自己的数据大小和使用场景来平衡存储文件的存储组设置,以获得更好的系统性能。(大家如果对于存储组设置非常感兴趣的话,可以自己查询一下官方提供的存储组规模和性能测试报告)。其中时间序列的前缀必须属于一个存储组。在创建时间序列之前,用户必须设置该序列属于哪个存储组。只有设置了存储组的时间序列才能保存到磁盘上。一旦前缀路径被设置为存储组,就不能更改存储组设置。设置存储组后,不允许再次设置相应前缀路径的所有父层和子层(例如,在root.ln设置为存储组、根层和root.ln.wf01不允许设置为存储组。路径在IoTDB中,路径是符合以下约束的表达式:path: LayerName (DOT LayerName)+LayerName: Identifier | STAR我们称两条路径之间的中间部分为“.”作为一个层,因此root.A.B.C是一条有四层的路径。值得注意的是,在路径中,root是一个保留字符,只允许出现在下面提到的时间序列的开头。如果root出现在其他层中,则无法对其进行解析并报告错误。时间序列路径timeseries路径是IoTDB中的核心概念。时间序列路径可以被认为是产生时间序列数据的传感器的完整路径。IoTDB中的所有时间序列路径必须以root开始,以传感器结束。时间序列路径也可以称为完整路径。例如,如果车辆类型的设备1有一个名为sensor1的传感器,则其时间序列路径可表示为:root.vehicle.device1.sensor1.其中当前IoTDB支持的timeseries路径的层数必须大于等于四层(以后会改为两层)。前缀路径前缀路径是指timeseries路径的前缀所在的路径。前缀路径包含以该路径为前缀的所有时间序列路径。例如,假设我们有三个传感器:root.vehicle.device1.sensor1, root.vehicle.device1.sensor2, root.vehicle.device2.sensor1,前缀路径root.vehicle.device1包含两个时间序列路径root.vehicle.device1.sensor1和root.vehicle.device1.sensor,期间root.vehicle.device2.sensor1被排除在外。带星形的路径为了更方便快捷地表示多个时序路径或前缀路径,IoTDB为用户提供了路径指针。*可以出现在路径的任何一层。根据所处的位置*出现时,带有星号的路径可以分为两种类型:*出现在路径的末端;*出现在路径中间;*出现在路径的末尾的时候,它表示(*)+,它是一层或多层*。举个例子,root.vehicle.device1.*表示所有前缀为root.vehicle.device1层数大于或等于4层,如root.vehicle.device1.*,root.vehicle.device1.*.*, root.vehicle.device1.*.*.*等。当...的时候*出现在路径的中间,它代表*本身,即一层。举个例子,root.vehicle.*.sensor1表示前缀为的4层路径root.vehicle后缀是sensor1。在这里我们应该注意:*不能放在路径的开头。路径包含*与前缀路径具有相同的含义,例如,root.vehicle.*和root.vehicle是一样的。时间戳时间戳是产生数据的时间点。它包括绝对时间戳和相对时间戳绝对时间戳IoTDB中的绝对时间戳分为LONG和DATETIME两种(包括DATETIME-INPUT和DATETIME-DISPLAY)。当用户输入时间戳时,他可以使用长类型时间戳或日期时间输入类型时间戳,日期时间输入类型时间戳支持的格式如下表所示:**日期时间输入类型时间戳的支持格式* *Formatyyyy-MM-dd HH:mm:ssyyyy/MM/dd HH:mm:ssyyyy.MM.dd HH:mm:ssyyyy-MM-dd’T’HH:mm:ssyyyy/MM/dd’T’HH:mm:ssyyyy.MM.dd’T’HH:mm:ssyyyy-MM-dd HH:mm:ssZZyyyy/MM/dd HH:mm:ssZZyyyy.MM.dd HH:mm:ssZZyyyy-MM-dd’T’HH:mm:ssZZyyyy/MM/dd’T’HH:mm:ssZZyyyy.MM.dd’T’HH:mm:ssZZyyyy/MM/dd HH:mm:ss.SSSyyyy-MM-dd HH:mm:ss.SSSyyyy.MM.dd HH:mm:ss.SSSyyyy/MM/dd’T’HH:mm:ss.SSSyyyy-MM-dd’T’HH:mm:ss.SSSyyyy.MM.dd’T’HH:mm:ss.SSSyyyy-MM-dd HH:mm:ss.SSSZZyyyy/MM/dd HH:mm:ss.SSSZZyyyy.MM.dd HH:mm:ss.SSSZZyyyy-MM-dd’T’HH:mm:ss.SSSZZyyyy/MM/dd’T’HH:mm:ss.SSSZZyyyy.MM.dd’T’HH:mm:ss.SSSZZISO8601 standard time format这次先给大家介绍到这里,下次再来给小伙伴们介绍时间戳和相对时间戳的数据格式~
  • [技术干货] 使用Apache IoTDB进行IoT相关开发的架构设计与功能实现(1)
    使用Apache IoTDB进行IoT相关开发的架构设计与功能实现(1)当今社会,物联网技术的发展带来了许多繁琐的挑战,尤其是在数据库管理系统领域,比如实时整合海量数据、处理流中的事件以及处理数据的安全性。例如,应用于智能城市的基于物联网的交通传感器可以实时生成大量的交通数据。据估计,未来5年,物联网设备的数量将达数万亿。物联网产生大量的数据,包括流数据、时间序列数据、RFID数据、传感数据等。要有效地管理这些数据,就需要使用数据库。数据库在充分处理物联网数据方面扮演着非常重要的角色。因此,适当的数据库与适当的平台同等重要。由于物联网在世界上不同的环境中运行,选择合适的数据库变得非常重要。1.什么是IoTDB有的小伙伴可能不了解什么是IoTDB,我先来给大家简单介绍一下:IoTDB即物联网数据库,是一个面向时间序列数据的集成数据管理引擎,可以为用户提供特定的数据收集、存储和分析服务。由于其轻量级结构、高性能和可用特性,以及与Hadoop和Spark ecology的紧密集成,IoTDB满足了物联网工业领域的海量数据集存储、高速数据输入和复杂数据分析的要求。2.IoTDB的体系结构IoTDB套件可以提供真实情况下的数据采集、数据写入、数据存储、数据查询、数据可视化和数据分析等一系列功能,下图显示了IoTDB套件的所有组件带来的整体应用程序架构。如图所示呢,咱们广大用户可以使用JDBC将设备上传感器收集的时间序列数据导入本地/远程IoTDB。这些时间序列数据可以是系统状态数据(如服务器负载和CPU内存等)。消息队列数据、来自应用程序的时间序列数据或数据库中的其他时间序列数据。用户也可以将数据直接写入TsFile(本地或HDFS)。对于写入IoTDB和本地TsFile的数据,大家可以使用TsFileSync工具将TsFile同步到HDFS,从而在Hadoop或Spark数据处理平台上实现异常检测、机器学习等数据处理任务。对于写入HDFS或本地TsFile的数据,用户可以使用TsFile-Hadoop-Connector或TsFile-Spark-Connector来允许Hadoop或Spark处理数据。分析的结果可以用同样的方式写回TsFile。还有呢,IoTDB和TsFile提供了客户端工具,完全可以满足用户以SQL形式、脚本形式和图形形式编写和查看数据的各种需求。3.IoTDB的体系特征灵活部署IoTDB为用户提供了云上一键安装工具、一次解压即可使用的终端工具以及云平台与终端工具之间的桥梁工具(数据同步工具)。存储成本低IoTDB可以达到很高的磁盘存储压缩比,这意味着IoTDB可以用更少的硬件磁盘成本存储同样多的数据。高效的目录结构IoTDB支持来自智能网络设备的复杂时间序列数据结构的高效组织,来自同类设备的时间序列数据的组织,海量复杂时间序列数据目录的模糊搜索策略。高吞吐量读写IoTDB支持上百万低功耗设备的强连接数据访问,支持上面提到的智能联网设备和混合设备的高速数据读写。丰富的查询语义IoTDB支持跨设备和传感器的时间序列数据的时间对齐、时间序列域的计算(频域变换)和时间维度丰富的聚合函数支持。容易上手IoTDB支持类SQL语言、JDBC标准API和易于使用的导入/导出工具。自身和开源生态系统紧密集成IoTDB支持Hadoop、Spark等。分析生态系统和Grafana可视化工具。4.IoTDB的文件类型在IoTDB中呢,需要存储的数据种类繁多。现在我来给大家介绍IoTDB的数据存储策略,方便大家对IoTDB的数据管理有一个直观的了解。首先呢,IoTDB存储的数据分为三类,即数据文件、系统文件和预写日志文件。(1)数据文件数据文件存储用户写入IoTDB的所有数据,IoTDB包含TsFile和其他文件。TsFile存储目录可以用data_dirs来配置相关项目,其他文件通过其他特定的数据来配置项目。为了更好地支持用户的磁盘空间扩展等存储需求,IoTDB支持多种文件目录存储方式进行TsFile存储配置。用户可以将多个存储路径设置为数据存储位置,大家可以指定或自定义目录选择策略。(2)系统文件系统文件包括模式文件,模式文件存储IoTDB中数据的元数据信息。它可以通过配置base_dir配置项目。(3)预写日志文件预写日志文件存储WAL文件。它可以通过配置wal_dir配置项目。(4)设置数据存储目录的示例为了更清楚地理解配置数据存储目录,我在这给出一个示例。存储目录设置中涉及的所有数据目录路径有:base_dir、data_dirs、multi_dir_strategy、wal_dir,分别指系统文件、数据文件夹、存储策略、预写日志文件。配置项的示例如下:base_dir = $IOTDB_HOME/datadata_dirs = /data1/data, /data2/data, /data3/datamulti_dir_strategy=MaxDiskUsableSpaceFirstStrategywal_dir= $IOTDB_HOME/data/wal这段代码并不复杂,相信很多小伙伴都应该可以看懂,我在这里给大家简单说明一下下,设置以上配置后,系统将:将所有系统文件保存在$io TDB _ HOME/data中将TsFile保存在/data1/data、/data2/data、/data3/data中。选择策略是MaxDiskUsableSpaceFirstStrategy,即每次数据写入磁盘时,系统会自动选择剩余磁盘空间最大的目录来写入数据。将WAL数据保存在$IOTDB_HOME/data/wal中这次先为大家介绍到这,下次我再来给小伙伴们分享之前我自己的IoTDB学习经历~
  • [培训资料] 【华为云Stack ManageOne 集成对接】【视频】基础集成-消息推送
    video【华为云Stack ManageOne 集成对接】【视频】基础集成-消息推送
  • [应用安全] 【漏洞通告】Apache Tomcat 拒绝服务漏洞CVE-2022-29885
    漏洞名称:Apache Tomcat 拒绝服务漏洞组件名称:Apache Tomcat影响范围:未配置 EncryptInterceptor 则全版本受影响配置 EncryptInterceptor 如下版本受影响:10.1.0-M1 ≤ Apache Tomcat ≤ 10.1.0-M1410.0.0-M1 ≤ Apache Tomcat ≤10.0.209.0.13 ≤ Apache Tomcat ≤ 9.0.628.5.38 ≤Apache Tomcat ≤8.5.78漏洞类型:拒绝服务利用条件:1、用户认证:不需要用户认证2、前置条件:开启集群配置3、触发方式:远程综合评价:<综合评定利用难度>:未知。<综合评定威胁等级>:中危,能造成拒绝服务。漏洞分析:组件介绍:Apache Tomcat 是美国阿帕奇(Apache)软件基金会的一款轻量级 Web 应用服务器,该程序实现了对Servlet 和 JavaServer Page(JSP) 的支持。漏洞简介:2022年7月2日,监测到一则 Apache Tomcat 拒绝服务漏洞的信息,漏洞编号:CVE-2022-29885,漏洞威胁等级:中危。该漏洞是由于 Tomcat 开启集群配置中存在缺陷,攻击者可利用该漏洞在未权限的情况下,构造恶意数据造成拒绝服务,最终导致目标服务器拒绝服务。影响范围:目前受影响的 Apache Tomcat 版本:未配置EncryptInterceptor则全版本受影响配置EncryptInterceptor如下版本受影响:10.1.0-M1 ≤ Apache Tomcat ≤ 10.1.0-M1410.0.0-M1 ≤ Apache Tomcat ≤10.0.209.0.13 ≤ Apache Tomcat ≤ 9.0.628.5.38 ≤ Apache Tomcat ≤8.5.78解决方案:1.如何检测组件系统版本Windows 系统在 Tomcat 的 bin 目录下,输入 catalina version 命令即可显示版本信息。Linux 系统在 bin 目录下执行如下命令:bash version.sh  可显示版本信息。2.官方修复建议当前官方已发布最新版本,建议受影响的用户及时更新升级到最新版本。链接如下:https://tomcat.apache.org/security-10.htmlhttps://tomcat.apache.org/security-9.htmlhttps://tomcat.apache.org/security-8.html
  • [技术干货] 一文解析Apache Avro数据
    本文是avro解析的demo,当前FlinkSQL仅适用于简单的avro数据解析,复杂嵌套avro数据暂时不支持。本文主要解析Apache Avro数据的相关内容,感兴趣的朋友一起看看吧摘要:本文将演示如果序列化生成avro数据,并使用FlinkSQL进行解析。 Avro官方文档所写,http://avro.apache.org/docs/current/index.html.Avro简介avro是一个数据序列化系统提供了:• 丰富的数据结构• 紧凑的,快速的,二进制的数据格式• 一种文件格式,用于存储持久化数据• 远程过程调用系统(RPC)• 和动态语言的简单交互。并不需要为数据文件读写产生代码,也不需要使用或实现RPC协议。代码生成是一种优化方式,但是只对于静态语言有意义。技术背景随着互联网高速的发展,云计算、大数据、人工智能AI、物联网等前沿技术已然成为当今时代主流的高新技术,诸如电商网站、人脸识别、无人驾驶、智能家居、智慧城市等等,不仅方面方便了人们的衣食住行,背后更是时时刻刻有大量的数据在经过各种各样的系统平台的采集、清晰、分析,而保证数据的低时延、高吞吐、安全性就显得尤为重要,Apache Avro本身通过Schema的方式序列化后进行二进制传输,一方面保证了数据的高速传输,另一方面保证了数据安全性,avro当前在各个行业的应用越来越广泛,如何对avro数据进行处理解析应用就格外重要,本文将演示如果序列化生成avro数据,并使用FlinkSQL进行解析。本文是avro解析的demo,当前FlinkSQL仅适用于简单的avro数据解析,复杂嵌套avro数据暂时不支持。场景介绍本文主要介绍以下三个重点内容:• 如何序列化生成Avro数据• 如何反序列化解析Avro数据• 如何使用FlinkSQL解析Avro数据前提条件• 了解avro是什么,可参考apache avro官网快速入门指南• 了解avro应用场景操作步骤1、新建avro maven工程项目,配置pom依赖pom文件内容如下:1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0"         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">    <modelVersion>4.0.0</modelVersion>     <groupId>com.huawei.bigdata</groupId>    <artifactId>avrodemo</artifactId>    <version>1.0-SNAPSHOT</version>    <dependencies>        <dependency>            <groupId>org.apache.avro</groupId>            <artifactId>avro</artifactId>            <version>1.8.1</version>        </dependency>        <dependency>            <groupId>junit</groupId>            <artifactId>junit</artifactId>            <version>4.12</version>        </dependency>    </dependencies>     <build>        <plugins>            <plugin>                <groupId>org.apache.avro</groupId>                <artifactId>avro-maven-plugin</artifactId>                <version>1.8.1</version>                <executions>                    <execution>                        <phase>generate-sources</phase>                        <goals>                            <goal>schema</goal>                        </goals>                        <configuration>                            <sourceDirectory>${project.basedir}/src/main/avro/</sourceDirectory>                            <outputDirectory>${project.basedir}/src/main/java/</outputDirectory>                        </configuration>                    </execution>                </executions>            </plugin>            <plugin>                <groupId>org.apache.maven.plugins</groupId>                <artifactId>maven-compiler-plugin</artifactId>                <configuration>                    <source>1.6</source>                    <target>1.6</target>                </configuration>            </plugin>        </plugins>    </build> </project>注意:以上pom文件配置了自动生成类的路径,即${project.basedir}/src/main/avro/和${project.basedir}/src/main/java/,这样配置之后,在执行mvn命令的时候,这个插件就会自动将此目录下的avsc schema生成类文件,并放到后者这个目录下。如果没有生成avro目录,手动创建一下即可。2、定义schema使用JSON为Avro定义schema。schema由基本类型(null,boolean, int, long, float, double, bytes 和string)和复杂类型(record, enum, array, map, union, 和fixed)组成。例如,以下定义一个user的schema,在main目录下创建一个avro目录,然后在avro目录下新建文件 user.avsc :123456789{"namespace": "lancoo.ecbdc.pre", "type": "record", "name": "User", "fields": [     {"name": "name", "type": "string"},     {"name": "favorite_number",  "type": ["int", "null"]},     {"name": "favorite_color", "type": ["string", "null"]} ]}3、编译schema点击maven projects项目的compile进行编译,会自动在创建namespace路径和User类代码4、序列化创建TestUser类,用于序列化生成数据1234567891011121314151617181920212223User user1 = new User();user1.setName("Alyssa");user1.setFavoriteNumber(256);// Leave favorite col or null // Alternate constructorUser user2 = new User("Ben", 7, "red"); // Construct via builderUser user3 = User.newBuilder()        .setName("Charlie")        .setFavoriteColor("blue")        .setFavoriteNumber(null)        .build(); // Serialize user1, user2 and user3 to diskDatumWriter<User> userDatumWriter = new SpecificDatumWriter<User>(User.class);DataFileWriter<User> dataFileWriter = new DataFileWriter<User>(userDatumWriter);dataFileWriter.create(user1.getSchema(), new File("user_generic.avro"));dataFileWriter.append(user1);dataFileWriter.append(user2);dataFileWriter.append(user3);dataFileWriter.close();执行序列化程序后,会在项目的同级目录下生成avro数据user_generic.avro内容如下:Objavro.schema{"type":"record","name":"User","namespace":"lancoo.ecbdc.pre","fields":[{"name":"name","type":"string"},{"name":"favorite_number","type":["int","null"]},{"name":"favorite_color","type":["string","null"]}]}5、反序列化通过反序列化代码解析avro数据1234567891011// Deserialize Users from diskDatumReader<User> userDatumReader = new SpecificDatumReader<User>(User.class);DataFileReader<User> dataFileReader = new DataFileReader<User>(new File("user_generic.avro"), userDatumReader);User user = null;while (dataFileReader.hasNext()) {    // Reuse user object by passing it to next(). This saves us from    // allocating and garbage collecting many objects for files with    // many items.    user = dataFileReader.next(user);    System.out.println(user);}执行反序列化代码解析user_generic.avroavro数据解析成功。6、将user_generic.avro上传至hdfs路径12hdfs dfs -mkdir -p /tmp/lztest/hdfs dfs -put user_generic.avro /tmp/lztest/7、配置flinkserver准备avro jar包将flink-sql-avro-*.jar、flink-sql-avro-confluent-registry-*.jar放入flinkserver lib,将下面的命令在所有flinkserver节点执行123cp /opt/huawei/Bigdata/FusionInsight_Flink_8.1.2/install/FusionInsight-Flink-1.12.2/flink/opt/flink-sql-avro*.jar /opt/huawei/Bigdata/FusionInsight_Flink_8.1.3/install/FusionInsight-Flink-1.12.2/flink/libchmod 500 flink-sql-avro*.jarchown omm:wheel flink-sql-avro*.jar同时重启FlinkServer实例,重启完成后查看avro包是否被上传hdfs dfs -ls /FusionInsight_FlinkServer/8.1.2-312005/lib8、编写FlinkSQL1234567891011121314151617181920212223242526CREATE TABLE testHdfs(  name String,  favorite_number int,  favorite_color String) WITH(  'connector' = 'filesystem',  'path' = 'hdfs:///tmp/lztest/user_generic.avro',  'format' = 'avro');CREATE TABLE KafkaTable (  name String,  favorite_number int,  favorite_color String) WITH (  'connector' = 'kafka',  'topic' = 'testavro',  'properties.bootstrap.servers' = '96.10.2.1:21005',  'properties.group.id' = 'testGroup',  'scan.startup.mode' = 'latest-offset',  'format' = 'avro');insert into  KafkaTableselect  *from  testHdfs;保存提交任务9、查看对应topic中是否有数据FlinkSQL解析avro数据成功。转载自https://www.jb51.net/article/233454.htm
  • [应用安全] 【漏洞预警】Apache APISIX 信息泄露漏洞(CVE-2022-29266)
    漏洞描述:Apache(音译为阿帕奇)是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩充,将Perl/Python等解释器编译到服务器中。因为Apache它是自由软件,所以不断有人来为它开发新的功能、新的特性、修改原来的缺陷。Apache的特点是简单、速度快、性能稳定,并可做代理服务器来使用。Apache官方发布消息,声称APISIX存在信息泄露漏洞。攻击者可利用依赖库 lua-resty-jwt 中的逻辑错误问题,通过向受 jwt-auth 插件保护的路由发送恶意制作的 JSON Web Token,从而获得插件配置的敏感信息。漏洞危害:针对企业,如果企业内部重要数据比如客户资料或企业机密文件等信息泄露的话,可能会影响企业的发展、动摇企业的根基,很有可能会退出市场。针对个人,如果用户信息通过该信息泄露漏洞,可能会使公民的个人信息被泄露,甚至可以溯源出用户完整信息,利用用户信息进行违法犯罪活动。影响范围:Apache APISIX < 2.13.1漏洞等级:   高危修复方案:厂商已发布升级修复漏洞,用户请尽快更新至安全版本。引用链接:https://apisix.apache.org/zh/downloads/
  • [问题求助] 安装apache-kylin-3.1.2-bin-hadoop3,启动服务后,访问WEB UI 7070端口,报错404
    各组件版本如下:
  • [整体安全] 【漏洞通告】Apache Struts2 远程代码执行漏洞CVE-2021-31805
    漏洞名称:Apache Struts2 远程代码执行漏洞组件名称:Apache Struts2影响范围:2.0.0 <= Apache Struts2 <= 2.5.29漏洞类型:远程代码执行利用条件:1、用户认证:未知2、前置条件:未知3、触发方式:远程综合评价:<综合评定利用难度>:未知。<综合评定威胁等级>:高危,能造成远程代码执行。漏洞分析:1 组件介绍Apache Struts2 是一个基于 MVC 架构的,用于开发 Java EE 网络应用程序的 Web 框架,它本质上相当于一个Servlet。在 MVC 设计模式中,Apache Struts2 作为控制器来建立模型与视图的数据交互。2 漏洞描述近日,监测到一则 Apache Struts2 组件存在远程代码执行漏洞的信息,漏洞编号:CVE-2021-31805,漏洞威胁等级:高危。该漏洞是由于 Apache Struts2 对 CVE-2020-17530(S2-061) 的修复不够完整,导致一些标签属性仍然可以执行 OGNL 表达式,攻击者利用该漏洞可以构造恶意数据远程执行任意代码。影响范围:Apache Struts2 是当前 Java 企业级 Web 应用开发的主流框架之一,具有简洁、易扩展等优点。其作为底层框架来使用,极大简化了 Web 应用从构建、部署的开发周期,被广泛用于工业界中,使用范围较广。若基于该框架开发的应用,将用户输入作为 OGNL 表达式来执行,则可能受该漏洞影响。目前受影响的 Apache Struts2 版本:2.0.0 <=  Apache Struts2 <= 2.5.29解决方案:1:如何检测组件系统版本方案一全盘搜索 struts2-core,如果存在 struts2-core-{version}.jar,且所使用的版本号在受影响范围内则用户可能受漏洞影响。方案二如果项目是由 maven 编译的(一般在项目根目录下会有 pom.xml)打开 pom.xml 文件在此文件中搜索 struts2-core,如果可以搜索到如下关键字,且所使用的版本号在受影响范围内,则可能受该漏洞影响。<dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-core</artifactId> <version>2.5.29</version></dependency>2:官方修复建议当前官方已发布最新版本,建议受影响的用户及时更新升级到最新版本。链接如下:https://cwiki.apache.org/confluence/display/WW/Version+Notes+2.5.30参考链接:https://cwiki.apache.org/confluence/display/WW/S2-062
  • [问题求助] 【MRS产品】【hive功能】报错 return code 2 from org.apache.hadoop.hive.ql
    使用cdm导入10G的数据进入hive,表A,parquest格式,压缩lzo。在hdfs里面生成的是一个10G左右的文件。然后创建格式一模一样的表B,执行语句, insert overwrite table 表B select * from表A,将表A数据插入到表B一份。表B在HDFS的形式是一些256M大小的文件,大约四十多个。现在执行select count(1) from 表A ,结果是:40086390select count(1) from 表B,报错,报错是:Error while processing statement FAILED Execution Error code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask计算引擎是MR。
总条数:97 到第
上滑加载中