首页 文章 精选 留言 我的

精选列表

搜索[高DPI],共10000篇文章
优秀的个人博客,低调大师

java高并发之CountDownLatch,CyclicBarrier和join

晚上打车回家,在车上看到一篇文章《22岁大学生获谷歌天价Offer,年薪千万!》,讲的是印度一个22岁大学生多次参加ACM大赛,开源多个项目,以非常牛逼的履历通过了谷歌的AI测试,斩获谷歌仅有的50个顶尖offer之一。于是感慨:同样是大学生,为何这哥们就这么一枝独秀呢?难道印度也有陈独秀?为啥自己都12年义务教育+4年大学教育+3年烟酒僧教育了,连人家个零头都挣不了啊?真恨不得在地上挖个洞钻进去。不行,今晚必须输出篇博客安慰下被打击的心!想到这里顿时酒也醒了(老大走了,今晚几个同事送他,喝了点酒),心也不再那么伤感了,决定把今天get的一些知识点做个梳理,知识是一点点积累起来的,比你牛逼的人比你还努力,你还有什么资格不努力? 早上看了下CountDownLatch和CyclicBarrier的用法和区别,讲到CountDownLatch又想到了Thread.join()方法,就来讲讲这3兄弟的功能,特点&&用法,讲的不对的地方欢迎指正。 一、CountDownLatch: 功能:同步辅助类,也可以理解为倒计时锁,用于同步线程状态,允许一个或多个线程,等待其他一组线程完成操作,再继续往下执行。 特点:不可复用! 重要方法:countDown()方法:计数器-1,每次线程执行完后调用;await()方法:等待方法,在需要阻塞的地方调用,当所有线程都执行完后,自动往下执行 用法:构造的时候指定一个计数器的值,每个线程执行完后就减1,直到为0再往下走。如下: 输出结果: 可以看到:2个子线程分别睡眠了3s和5s,而主线的打印的“所有现场执行完毕”却是在所有子线程执行完成后才输出的,原因就是阻塞在了latch.await()方法,这个方法会等到所有线程都执行完才往下执行,阻塞的原理后面有空再研究分析 二、CyclicBarrier(循环栅栏): 功能:同步辅助类,功能和CountDownLatch类似,用于同步线程状态,允许一组线程相互之间等待,达到一个共同点,再继续执行。 特点:可复用!当组内所有线程都到达某个执行点后,count参数会被重置,于是就可重用了。 重要方法:await()方法:当某个线程到达某个点(比如执行完某个任务)后调用该方法,就会等待其他线程,直到所有线程都到达这个点,再自动往下执行。还有个重载方法await(long timeOut,TimeUnit unit),用于当某个线程执行超过指定时间后还未到达某个点时,就会抛出异常,不再等待这个线程,并往下执行。 用法:构造的时候指定一个线程数量的值和到达某个点后执行的动作,如下: 执行结果如下: 可以看到:当前线程先于2个子线程打印执行结果,原因就是CyclicBarrier针对的是一组线程之间的等待,await方法会等待该组内所有线程都执行完毕再往下执行,Runnable接口里定义的动作是在所有线程执行完毕后,随机选择一个线程来执行 三、join()方法: join方法也是管理线程状态同步的一个方法,和CountDownLatch和CyclicBarrier均由自身调用不同的是,join的调用者为当前线程,后面的线程必须等调用join的线程执行完后才能执行。参考例子如下: 执行结果: 结果分析:新创建了2个线程,每个线程的执行功能和时间是一样的,由于调用了join,主线程确实是在调用join的2个线程执行后才开始执行的 3者区别: 1、CountDownLatch不可复用,当计数器减为0后,只能重新构造新的计数器,CyclicBarrier可以复用,原因上面已说。 2、CyclicBarrier针对的是一组线程之间的等待,是组内等待关系,CountDownLatch针对的是一个线程等待别的一组线程的关系,是组间等待关系。 3、join方法和CountDownLatch方法功能类似,但是join方法不如CountdownLatch控制灵活,可以参考:https://blog.csdn.net/zhutulang/article/details/48504487。 本来还想讲讲volatile关键字的原理和特性,以及activeMQ中quene,topic和virtualTop之间的区别和用法的,以及mysql索引结构的实现原理的,时间不够了,明早还要去申请廉租房得早起,下次再讲吧。

优秀的个人博客,低调大师

Java高并发秒杀Api-web 层

章节目录 前端交互设计 Restful Spring MVC理论 整合配置MVC框架 bootstrap+jquery 福利彩蛋 前端交互设计 前端交互设计 详情页流程逻辑 Restful接口 什么是Restful Restful 是接口设计规范 一种优雅的URI表达方式 资源的状态和状态转移 获取的是资源的状态,删除的时候,其实是更改资源的状态 put、post、delete Restful示例 image.png image.png 不同的请求方法代表着对资源的不同操作类型。操作类型应与资源的接下来发生的状态状态转移对应起来 GET 请求是幂等性的 URL设计 url设计 秒杀Api设计 Spring MVC理论 理论部分 围绕handler开发 image.png Spring mvc 的运行流程 image.png 解释: 用户请求->前端控制器->寻找对应处理请求的handler,默认为DefaultAnnotationHandlerMapping->DefaultAnnotationHandlerAdapter->寻找处理请求的Controller->请求生成ModelAndView至中央控制器->中央控制器将数据转发给InternalResourceViewResolver去解析->解析完成的数据及页面结构,组合后,被生成资源,返回给用户。 HTTP请求映射的原理 image.png 默认使用DefaultAnnotationHandlerMapping->handler方法 注解映射技巧 @RequestMapping 注解 (1) 支持标准标准的URL (2) Ant风格URL (3) 带{xxx}占位符的URL 注解映射技巧 请求方法细节处理 (1) 请求参数绑定 (2) 请求方式限制 (3) 请求转发与重定向 (4) 数据模型赋值 (5) 返回json数据 (6) cookie的访问 请求参数绑定、重定向与转发、model数据绑定 返回json数据 cookie 数据 整合配置Spring MVC配置文件 <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1" metadata-complete="true"> <!-- 修改servlet版本为3.1 --> <!-- 配置DispatcherServlet--> <servlet> <servlet-name>seckill-dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 配置SpringMVC需要加载的配置文件 Spring-dao.xml, spring-service.xml, spring-web.xml MyBatis -> Spring -> SpringMVC --> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring/spring-*.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>seckill-dispatcher</servlet-name> <!-- 默认匹配所有的请求--> <url-pattern>/</url-pattern> </servlet-mapping> </web-app> Spring MVC 配置 spring-web.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> <!--配置Spring MVC--> <!--1:开启Spring MVC注解模式--> <!--简化配置 (1):自动注册DefaultAnnotationHandlerMapping、AnnotationMethodHandlerAdapter url->handler 映射 (2):默认提供一系列功能、数据绑定、数字与日期format @NumberFormat @DateTimeFormat xml json 默认读写支持 --> <mvc:annotation-driven/> <!--servlet-mapping 映射路径 /--> <!--静态资源配置,默认servlet配置--> <!-- 1:加入对静态资源的处理:js、png 2:允许使用"/"作为映射 --> <mvc:default-servlet-handler/> <!--配置jsp 显示 view Resolver--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> <property name="prefix" value="/WEB-INF/jsp/"/> <property name="suffix" value=".jsp"/> </bean> <!--扫描web相关的bean--> <context:component-scan base-package="org.seckill.web"/> </beans> **SecKillController ** package org.seckill.web; import org.seckill.domain.SecKill; import org.seckill.dto.Exposer; import org.seckill.dto.SecKillResult; import org.seckill.service.SecKillService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import java.util.List; @Controller @RequestMapping("/seckill") //url:/模块/资源/{id}/细分 public class SecKillController { private final Logger logger = LoggerFactory.getLogger(this.getClass()); @Autowired private SecKillService secKillService; /** * 获取秒杀商品list * * @param model * @return */ @RequestMapping(value = "/list", method = RequestMethod.GET) public String list(Model model) { //1.获取列表页面 List<SecKill> secKillList = secKillService.getSecKillList(); model.addAttribute("list", secKillList); //2.返回页面并携带model 数据list.jsp + model = ModelAndView return "list"; } /** * 接收参数、参数验证、业务逻辑调用并处理 * 获取秒杀商品详情 * * @param model * @param secKillId * @return */ @RequestMapping(value = "/{secKillId}/detial", method = RequestMethod.GET) public String detial(Model model, @PathVariable("secKillId") Long secKillId) { if (secKillId == null) {//请求重定向到list页面 return "redirect:/seckill/list"; } SecKill secKill = secKillService.getSecKillById(secKillId); if (secKill == null) { return "forward:/seckill/list"; } model.addAttribute("seckill", secKill); return "detial"; } /** * ajax接口-返回类型 json * 获取秒杀曝露地址 * * @param secKillId */ @RequestMapping(value = "/{secKillId}/exposer", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}//告诉浏览器返回数据类型是json ) @ResponseBody public SecKillResult<Exposer> /*TODO*/ exposer(@PathVariable("secKillId") Long secKillId) { SecKillResult<Exposer> result; try { Exposer exposer = secKillService.exportSecKillUrl(secKillId);//返回秒杀地址 result = new SecKillResult<Exposer>(true, exposer); } catch (Exception e) { logger.error(e.getMessage()); result = new SecKillResult<Exposer>(false, e.getMessage()); } return result; } } 福利彩蛋 职位:腾讯OMG 广告后台高级开发工程师; Base:深圳; 场景:海量数据,To B,To C,场景极具挑战性。 基础要求: 熟悉常用数据结构与算法; 熟悉常用网络协议,熟悉网络编程; 熟悉操作系统,有线上排查问题经验; 熟悉MySQL,oracle; 熟悉JAVA,GoLang,c++其中一种语言均可; 可内推,欢迎各位优秀开发道友私信[微笑] 期待关注我的开发小哥哥,小姐姐们私信我,机会很好,平台对标抖音,广告生态平台,类似Facebook 广告平台,希望你们用简历砸我~ 联系方式 微信 13609184526

优秀的个人博客,低调大师

高可用Hadoop平台-Oozie工作流

1.概述 在开发Hadoop的相关应用使用,在业务不复杂,任务不多的情况下,我们可以直接使用Crontab去完成相关应用的调度。今天给大家介绍的是统一管理各种调度任务的系统,下面为今天分享的内容目录: 内容介绍 Oozie Server 截图预览 下面开始今天的内容分享。 2.内容介绍 今天的内容不涉及Oozie的具体细节操作,它的工作流程在下一篇博客为大家详细介绍。今天主要给大家分享Oozie的作用,它的集成步骤等内容。 2.1 作用 Oozie它是一个开源的工作流调度系统,它可以管理逻辑复杂的多个Hadoop作业任务,按照指定的顺序将其进行协同工作。比如说,我们日常的工作场景: 收集数据到HDFS 编写MR去清洗数据,生成新的数据存放到指定的HDFS路径下 创建Hive表分区,并加载数据到对应的表分区 使用HQL进行业务指标统计,并将统计的结果输出到对应的Hive大表当中 对统计后的大表当中的数据进行数据导出共外界业务去调用使用 通过上述的日常工作流程,我们可以编写工作流系统,生成一个工作流实例,然后每天定时去运行实例即可。针对这样一种Hadoop的应用场景,Oozie能够简化我们的任务调度并执行。 2.2 基础环境 本次给大家分享的基础环境是: Name Value 操作系统 CentOS6.6 工作流 Oozie4.2 Hadoop 2.6 以上便是本篇博客需依赖的基础环境。另外还需要用到JDK,Maven,MySQL驱动文件等。 3.Oozie Server Oozie Server能够为我们提供便捷的Job管理功能,可以通过其可视化界面去管理Job的运行状态,当然也支持构建复杂的Hadoop Job流程,各个Job之间的依赖关系可以通过工作流进行配置,由Oozie Server统一去执行。 3.1 依赖包准备 Maven 下载安装Maven环境,命令如下所示: wget http://mirrors.hust.edu.cn/apache/maven/maven-3/3.3.3/binaries/apache-maven-3.3.3-bin.tar.gz tar -zxvf apache-maven-3.3.3-bin.tar.gz 接着添加环境变量,如下所示: export M2_HOME=/home/hadoop/maven-3.3.3 export PATH=$PATH:$ES_HOME/bin 然后输入一下命令使之立即生效: . /etc/profile 最后,我们输入 mvn -version 命令,若能现实对应的Maven版本号,即表示Maven环境集成OK。 MySQL 关于 MySQL 数据库的安装配置较为简单,这里就不多做赘述了。 Tomcat 由于Oozie会用其Web容器,这里需要安装Tomcat Web服务器,可以到Apache的官网下载对应的安装包,这里不多做赘述。 ExtJS工具包 在可视化会依赖该工具包,所以这里我们需要下载其工具,下载地址我们可以在Oozie的DG_QuickStart页面找到,如下图所示: 地址如下所示: wget http://dev.sencha.com/deploy/ext-2.2.zip Oozie 这里我们可以在Oozie的官网下载其安装包,下载地址: wget http://mirrors.cnnic.cn/apache/oozie/4.2.0/oozie-4.2.0.tar.gz 3.2 Oozie集成 在准备好环境后,接下来,我们去集成Oozie。首先,我们将下载的Oozie安装包进行解压,然后,使用Maven命令对其进行打包。操作命令如下所示: # 解压 tar -zxvf oozie-4.2.0.tar.gz # 进入 cd oozie-4.2.0 # 打包 mvn clean package assembly:single -DskipTests 注意:这里需要对pom文件进行修改,将JDK、Hadoop、HBase、Hive等组件的版本号进行统一,与你使用的版本号一致即可。 成功后出现以下图所示: 生成的路径地址如下所示: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0 此时,我们修改Oozie的环境变量,如下所示: export OOZIE_HOME=/home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0 export PATH=$PATH:$OOZIE_HOME/bin 接着,我们在$OOZIE_HOME目录下创建一个文件夹用于存放ExtJS和Hadoop的JAR文件,这里我们将前面下载的ExtJS的压缩包和Hadoop的Share目录下的JAR文件拷贝到libext文件夹下即可。由于,我们使用了MySQL来存储Oozie的元数据,所以需要用到MySQL的驱动包,因而,我们需要将MySQL的驱动包拷贝到libext目录下。 在准备完这些后,下面我们开始安装,命令如下所示: # 进入$OOZIE_HOME/bin目录 ./oozie-setup.sh prepare-war 生成以下信息,表示成功,内容如下所示: [hadoop@nna bin]$ ./oozie-setup.sh prepare-war setting CATALINA_OPTS="$CATALINA_OPTS -Xmx1024m" INFO: Adding extension: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/libext/commons-configuration-1.6.jar INFO: Adding extension: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/libext/hadoop-auth-2.6.0.jar INFO: Adding extension: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/libext/hadoop-common-2.6.0.jar INFO: Adding extension: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/libext/hadoop-common-2.6.0-tests.jar INFO: Adding extension: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/libext/hadoop-hdfs-2.6.0.jar INFO: Adding extension: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/libext/hadoop-hdfs-2.6.0-tests.jar INFO: Adding extension: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/libext/hadoop-hdfs-nfs-2.6.0.jar INFO: Adding extension: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/libext/hadoop-mapreduce-client-app-2.6.0.jar INFO: Adding extension: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/libext/hadoop-mapreduce-client-common-2.6.0.jar INFO: Adding extension: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/libext/hadoop-mapreduce-client-core-2.6.0.jar INFO: Adding extension: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/libext/hadoop-mapreduce-client-hs-2.6.0.jar INFO: Adding extension: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/libext/hadoop-mapreduce-client-hs-plugins-2.6.0.jar INFO: Adding extension: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/libext/hadoop-mapreduce-client-jobclient-2.6.0.jar INFO: Adding extension: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/libext/hadoop-mapreduce-client-jobclient-2.6.0-tests.jar INFO: Adding extension: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/libext/hadoop-mapreduce-client-shuffle-2.6.0.jar INFO: Adding extension: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/libext/hadoop-mapreduce-examples-2.6.0.jar INFO: Adding extension: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/libext/hadoop-nfs-2.6.0.jar INFO: Adding extension: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/libext/hadoop-yarn-api-2.6.0.jar INFO: Adding extension: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/libext/hadoop-yarn-applications-distributedshell-2.6.0.jar INFO: Adding extension: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/libext/hadoop-yarn-applications-unmanaged-am-launcher-2.6.0.jar INFO: Adding extension: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/libext/hadoop-yarn-client-2.6.0.jar INFO: Adding extension: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/libext/hadoop-yarn-common-2.6.0.jar INFO: Adding extension: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/libext/hadoop-yarn-registry-2.6.0.jar INFO: Adding extension: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/libext/hadoop-yarn-server-applicationhistoryservice-2.6.0.jar INFO: Adding extension: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/libext/hadoop-yarn-server-common-2.6.0.jar INFO: Adding extension: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/libext/hadoop-yarn-server-nodemanager-2.6.0.jar INFO: Adding extension: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/libext/hadoop-yarn-server-resourcemanager-2.6.0.jar INFO: Adding extension: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/libext/hadoop-yarn-server-tests-2.6.0.jar INFO: Adding extension: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/libext/hadoop-yarn-server-web-proxy-2.6.0.jar INFO: Adding extension: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/libext/mysql-connector-java-5.1.32-bin.jar New Oozie WAR file with added 'ExtJS library, JARs' at /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/oozie-server/webapps/oozie.war INFO: Oozie is ready to be started 若失败,可根据提示做对应的处理。 这样,我们在/home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/oozie-server/webapps目录下就生成了oozie.war文件。 3.3 配置Oozie 我们在$OOZIE_HOME/conf目录下修改oozie-site.xml文件,内容如下所示: <property> <name>oozie.service.JPAService.jdbc.driver</name> <value>com.mysql.jdbc.Driver</value> <description>JDBC driver class. </description> </property> <property> <name>oozie.service.JPAService.jdbc.url</name> <value>jdbc:mysql://nna:3306/oozie</value> <description>JDBC URL.</description> </property> <property> <name>oozie.service.JPAService.jdbc.username</name> <value>root</value> <description>DB user name.</description> </property> <property> <name>oozie.service.JPAService.jdbc.password</name> <value>root</value> <description>DB user password.</description> </property> 这里我们使用手动去创建数据库,oozie.service.JPAService.create.db.schema若为true属性,即表示去自动创建。手动创建脚本如下所示: CREATE DATABASE oozie; GRANT ALL ON oozie.* TO 'root'@'nna' IDENTIFIED BY 'root'; FLUSH PRIVILEGES; 然后,我们使用以下命令,生成数据表: #在$OOZIE_HOME/bin目录下操作 ./ooziedb.sh create -sqlfile oozie.sql -run 生成以下内容: [hadoop@nna bin]$ ./ooziedb.sh create -sqlfile oozie.sql -run setting CATALINA_OPTS="$CATALINA_OPTS -Xmx1024m" Validate DB Connection DONE DB schema does not exist Check OOZIE_SYS table does not exist DONE Create SQL schema DONE Create OOZIE_SYS table DONE Oozie DB has been created for Oozie version '4.2.0' The SQL commands have been written to: oozie.sql 若执行正常,会生成oozie.sql的脚本,如下图所示: 3.4 启动 接下来,我们去启动Oozie,命令如下所示: # 在$OOZIE_HOME/bin目录下 ./oozie-start.sh 正常启动内容如下所示: [hadoop@nna bin]$ ./oozie-start.sh WARN: Use of this script is deprecated; use 'oozied.sh start' instead Setting OOZIE_HOME: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0 Setting OOZIE_CONFIG: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/conf Sourcing: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/conf/oozie-env.sh setting CATALINA_OPTS="$CATALINA_OPTS -Xmx1024m" Setting OOZIE_CONFIG_FILE: oozie-site.xml Setting OOZIE_DATA: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/data Setting OOZIE_LOG: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/logs Setting OOZIE_LOG4J_FILE: oozie-log4j.properties Setting OOZIE_LOG4J_RELOAD: 10 Setting OOZIE_HTTP_HOSTNAME: nna Setting OOZIE_HTTP_PORT: 11000 Setting OOZIE_ADMIN_PORT: 11001 Setting OOZIE_HTTPS_PORT: 11443 Setting OOZIE_BASE_URL: http://nna:11000/oozie Setting CATALINA_BASE: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/oozie-server Setting OOZIE_HTTPS_KEYSTORE_FILE: /home/hadoop/.keystore Setting OOZIE_HTTPS_KEYSTORE_PASS: password Setting OOZIE_INSTANCE_ID: nna Setting CATALINA_OUT: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/logs/catalina.out Setting CATALINA_PID: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/oozie-server/temp/oozie.pid Using CATALINA_OPTS: -Xmx1024m -Dderby.stream.error.file=/home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/logs/derby.log Adding to CATALINA_OPTS: -Doozie.home.dir=/home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0 -Doozie.config.dir=/home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/conf -Doozie.log.dir=/home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/logs -Doozie.data.dir=/home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/data -Doozie.instance.id=nna -Doozie.config.file=oozie-site.xml -Doozie.log4j.file=oozie-log4j.properties -Doozie.log4j.reload=10 -Doozie.http.hostname=nna -Doozie.admin.port=11001 -Doozie.http.port=11000 -Doozie.https.port=11443 -Doozie.base.url=http://nna:11000/oozie -Doozie.https.keystore.file=/home/hadoop/.keystore -Doozie.https.keystore.pass=password -Djava.library.path= Setting up oozie DB setting CATALINA_OPTS="$CATALINA_OPTS -Xmx1024m" Validate DB Connection DONE DB schema exists The SQL commands have been written to: /tmp/ooziedb-9100396876446618885.sql Using CATALINA_BASE: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/oozie-server Using CATALINA_HOME: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/oozie-server Using CATALINA_TMPDIR: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/oozie-server/temp Using JRE_HOME: /usr/java/jdk1.7 Using CLASSPATH: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/oozie-server/bin/bootstrap.jar Using CATALINA_PID: /home/hadoop/oozie-4.2.0/distro/target/oozie-4.2.0-distro/oozie-4.2.0/oozie-server/temp/oozie.pid 4.截图预览 然后,我们可以输入浏览地址,查看是否启动正常,如下图所示: 5.总结 关于Oozie的集成,会有点繁琐,本篇博客只是针对单独的Oozie去集成,后续博客会给大家介绍Oozie集成到Hadoop集群,以及相关工作流的用法介绍等。 6.结束语 这篇博客就和大家分享到这里,如果大家在研究学习的过程当中有什么问题,可以加群进行讨论或发送邮件给我,我会尽我所能为您解答,与君共勉! 联系方式: 邮箱:smartloli.org@gmail.com Twitter: https://twitter.com/smartloli QQ群(Hadoop - 交流社区1): 424769183 温馨提示:请大家加群的时候写上加群理由(姓名+公司/学校),方便管理员审核,谢谢! 热爱生活,享受编程,与君共勉! 本文转自哥不是小萝莉博客园博客,原文链接:http://www.cnblogs.com/smartloli/,如需转载请自行联系原作者

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册