首页 文章 精选 留言 我的

精选列表

搜索[快速],共10012篇文章
优秀的个人博客,低调大师

Quartz 框架快速入门(一)

创建一个 Java 工程,引入几个 JAR 到工程中才能成功构建它们。首先,你需要 Quartz 的二进制版本,包的名字是 quartz-<version>.jar。Quartz 还需要几个第三方库;这依赖于你要用到框架的什么功能而定,Commons Digester 库可以在 <QUARTZ_HOME>/lib/core 和 <QUARTZ_HOME>/lib/optional 目录中找到。如果出现java.lang.NoClassDefFoundError: javax/transaction/UserTransaction的错误,解决办法是:引入jta.jar包,这个包在quartz-1.6.0/lib/build 下。 ·创建一个 Quartz Job 类 每一个 Quartz Job 必须有一个实现了 org.quartz.Job 接口的具体类。这个接口仅有一个要你在 Job 中实现的方法,execute(),方法 execute() 的原型如下: public void execute(JobExecutionContext context) throws JobExecutionException; 当 Quartz 调度器确定到时间要激发一个 Job 的时候,它就会生成一个 Job 实例,并调用这个实例的 execute() 方法。调度器只管调用 execute() 方法,而不关心执行的结果,除了在作业执行中出问题抛出的 org.quartz.JobExecutionException 异常。 下面是我们的第一个 Quartz job,它被设计来扫描一个目录中的文并显示文件的详细信息。 复制代码 package com.vista.quartz; import java.io.File; import java.io.FileFilter; import java.util.Date; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.quartz.Job; import org.quartz.JobDataMap; import org.quartz.JobDetail; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; public class ScanDirectoryJob implements Job { static Log logger = LogFactory.getLog(ScanDirectoryJob.class);//日志记录器 public void execute(JobExecutionContext context) throws JobExecutionException { //Every job has its own job detail JobDetail jobDetail = context.getJobDetail(); // The name is defined in the job definition String jobName = jobDetail.getName();//任务名称 // Log the time the job started logger.info(jobName + " fired at " + new Date());//记录任务开始执行的时间 // The directory to scan is stored in the job map JobDataMap dataMap = jobDetail.getJobDataMap();//任务所配置的数据映射表 String dirName = dataMap.getString("SCAN_DIR");//获取要扫描的目录 // Validate the required input if (dirName == null) {//所需要的扫描目录没有提供 throw new JobExecutionException( "Directory not configured" ); } // Make sure the directory exists File dir = new File(dirName); if (!dir.exists()) {//提供的是错误目录 throw new JobExecutionException( "Invalid Dir "+ dirName); } // Use FileFilter to get only XML files FileFilter filter = new FileExtensionFileFilter(".xml"); //只统计xml文件 File[] files = dir.listFiles(filter); if (files == null || files.length <= 0) {//目录下没有xml文件 logger.info("No XML files found in " + dir); // Return since there were no files return; } // The number of XML files int size = files.length; // Iterate through the files found for (int i = 0; i < size; i++) { File file = files[i]; // Log something interesting about each file. File aFile = file.getAbsoluteFile(); long fileSize = file.length(); String msg = aFile + " - Size: " + fileSize; logger.info(msg);//记录下文件的路径和大小 } } } 复制代码 当 Quartz 调用 execute() 方法,会传递一个 org.quartz.JobExecutionContext 上下文变量,里面封装有 Quartz 的运行时环境和当前正执行的 Job。通过 JobexecutionContext,你可以访问到调度器的信息,作业和作业上的触发器的信息,还有更多更多的信息。在代码中,JobExecutionContext 被用来访问 org.quartz.JobDetail 类,JobDetail 类持有 Job 的详细信息,包括为 Job 实例指定的名称,Job 所属组,Job 是否被持久化(易失性),和许多其他感兴趣的属性。 JobDetail 又持有一个指向 org.quartz.JobDataMap 的引用。JobDataMap 中有为指定 Job 配置的自定义属性。例如,在代码中我们从 JobDataMap 中获得欲扫描的目录名,我们可以在 ScanDirectoryJob 中硬编码这个目录名,但是这样的话我们难以重用这个 Job 来扫描别的目录了。在后面你将会看到目录是如何配置到 JobDataMap 的。 execute() 方法中剩下的就是标准 Java 代码了:获得目录名并创建一个 java.io.File 对象。它还对目录名作为简单的校验,确保是一个有效且存在的目录。接着调用 File 对象的 listFiles() 方法得到目录下的文件。还创建了一个 java.io.FileFilter 对象作为参数传递给 listFiles() 方法。org.quartzbook.cavaness.FileExtensionFileFilter 实现了 java.io.FileFilter 接口,它的作用是过滤掉目录仅返回 XML 文件。默认情况下,listFiles() 方法是返回目录中所有内容,不管是文件还是子目录,所以我们必须过滤一下,因为我们只对 XML 文件感兴趣。 FileExtensionFileFilter 被用来屏蔽名称中不含字符串 “.xml” 的文件。它还屏蔽了子目录--这些子目录原本会让 listFiles() 方法正常返回。过滤器提供了一种很便利的方式选择性的向你的 Quartz 作业提供它能接受的作为输入的文件 复制代码 package com.vista.quartz; import java.io.File; import java.io.FileFilter; public class FileExtensionFileFilter implements FileFilter { private String extension;//文件后缀 public FileExtensionFileFilter(String extension) { this.extension = extension; } public boolean accept(File file) {//只接受指定后缀的文件 // Lowercase the filename for easier comparison String lCaseFilename = file.getName().toLowerCase();//小写化 return (file.isFile() &&(lCaseFilename.indexOf(extension) > 0 )) ? true : false ; } } 复制代码 到目前为止,我们已经创建了一个 Quartz job,但还没有决定怎么处置它--明显地,我们需以某种方式为这个 Job 设置一个运行时间表。时间表可以是一次性的事件,或者我们可能会安装它在除周日之外的每个午夜执行。你即刻将会看到,Quartz Schduler 是框架的心脏与灵魂。所有的 Job 都通过 Schduler 注册;必要时,Scheduler 也会创建 Job 类的实例,并执行实例的 execute() 方法。 ·编程式安排一个 Quartz Job 所有的要 Quartz 来执行的作业必须通过调度器来注册。大多情况下,这会在调度器启动前做好。正如前面说过,这一操作也提供了声明式与编程式两种实现途径的选择。 因为每一个 Job 都必须用 Scheduler 来注册,所以先定义一个 JobDetail,并关联到这个 Scheduler 实例。 下面的程序提供了一个理解如何编程式安排一个 Job 很好的例子。代码首先调用 createScheduler() 方法从 Scheduler 工厂获取一个 Scheduler 的实例。得到 Scheduler 实例之后,把它传递给 schedulerJob() 方法,由它把 Job 同 Scheduler 进行关联。 首先,创建了我们想要运行的 Job 的 JobDetail 对象。JobDetail 构造器的参数中包含指派给 Job 的名称,逻辑组名,和实现 org.quartz.Job 接口的全限类名称。我们可以使用 JobDetail 的别的构造器。 在前面有说过,JobDetail 扮演着某一 Job 定义的角色。它带有 Job 实例的属性,能在运行时被所关联的 Job 访问到。其中在使用 JobDetail 时,的一个最重要的东西就是 JobDataMap,它被用来存放 Job 实例的状态和参数。在代码中,待扫描的目录名称就是通过 scheduleJob() 方法存入到 JobDataMap 中的。 Job 只是一个部分而已。注意我们没有在 JobDetail 对象中为 Job 设定执行日期和次数。这是 Quartz Trigger 该做的事。顾名思义,Trigger 的责任就是触发一个 Job 去执行。当用 Scheduler 注册一个 Job 的时候要创建一个 Trigger 与这个 Job 相关联。Quartz 提供了四种类型的 Trigger,但其中两种是最为常用的,它们就是在下面要用到的 SimpleTrigger 和 CronTrigger. SimpleTrigger 是两个之中简单的那个,它主要用来激发单事件的 Job,Trigger 在指定时间激发,并重复 n 次--两次激发时间之间的延时为 m,然后结束作业。CronTrigger 非常复杂且强大。它是基于通用的公历,当需要用一种较复杂的时间表去执行一个 Job 时用到。例如,四月至九月的每个星期一、星期三、或星期五的午夜。 为更简单的使用 Trigger,Quartz 包含了一个工具类,叫做 org.quartz.TriggerUtils. TriggerUtils 提供了许多便捷的方法简化了构造和配置 trigger. 本文的例子中有用的就是 TriggerUtils 类;SimpleTrigger 和 CronTrigger 会在后面用到。 正如你看到的那样,调用了 TriggerUtils 的方法 makeSecondlyTrigger() 来创建一个每10秒种激发一次的 trigger(实际是由 TriggerUtils 生成了一个 SimpleTrigger 实例,但是我们的代码并不想知道这些)。我们同样要给这个 trigger 实例一个名称并告诉它何时激发相应的 Job;与之关联的 Job 会立即启动,因为由方法 setStartTime() 设定的是当前时间 复制代码 package com.vista.quartz; import java.util.Date; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.quartz.JobDetail; import org.quartz.Scheduler; import org.quartz.SchedulerException; import org.quartz.Trigger; import org.quartz.TriggerUtils; import org.quartz.impl.StdSchedulerFactory; public class SimpleScheduler { static Log logger = LogFactory.getLog(SimpleScheduler.class); public static void main(String[] args) { SimpleScheduler simple = new SimpleScheduler(); try { // Create a Scheduler and schedule the Job Scheduler scheduler = simple.createScheduler(); simple.scheduleJob(scheduler); // Start the Scheduler running scheduler.start(); logger.info( "Scheduler started at " + new Date()); } catch (SchedulerException ex) { logger.error(ex); } } public Scheduler createScheduler() throws SchedulerException {//创建调度器 return StdSchedulerFactory.getDefaultScheduler(); } //Create and Schedule a ScanDirectoryJob with the Scheduler private void scheduleJob(Scheduler scheduler) throws SchedulerException { // Create a JobDetail for the Job JobDetail jobDetail = new JobDetail("ScanDirectory",Scheduler.DEFAULT_GROUP,ScanDirectoryJob.class); // Configure the directory to scan jobDetail.getJobDataMap().put("SCAN_DIR","D:\\Tomcat\\conf"); //set the JobDataMap that is associated with the Job. // Create a trigger that fires every 10 seconds, forever Trigger trigger = TriggerUtils.makeSecondlyTrigger(10);//每10秒触发一次 trigger.setName("scanTrigger"); // Start the trigger firing from now trigger.setStartTime(new Date());//设置第一次触发时间 // Associate the trigger with the job in the scheduler scheduler.scheduleJob(jobDetail, trigger); } } 复制代码 假如你有不只一个个 Job (你也许就是),你将需要为每一个 Job 创建各自的 JobDetail。每一个 JobDetail 必须通过 scheduleJob() 方法一一注册到 Scheduler 上。而如果你想重用了一个 Job 类,让它产生多个实例运行,那么你需要为每个实例都创建一个 JobDetail。例如,假如你想重用 ScanDirectoryJob 让它检查两个不同的目录,你需要创建并注册两个 JobDetail 实例 复制代码 package com.vista.quartz; import java.util.Date; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.quartz.JobDetail; import org.quartz.Scheduler; import org.quartz.SchedulerException; import org.quartz.Trigger; import org.quartz.TriggerUtils; import org.quartz.impl.StdSchedulerFactory; public class SimpleScheduler { static Log logger = LogFactory.getLog(SimpleScheduler.class); public static void main(String[] args) { SimpleScheduler simple = new SimpleScheduler(); try { // Create a Scheduler and schedule the Job Scheduler scheduler = simple.createScheduler(); // Jobs can be scheduled after Scheduler is running scheduler.start(); logger.info("Scheduler started at " + new Date()); // Schedule the first Job simple.scheduleJob(scheduler, "ScanDirectory1",ScanDirectoryJob.class,"D:\\conf1", 10); // Schedule the second Job simple.scheduleJob(scheduler, "ScanDirectory2",ScanDirectoryJob.class,"D:\\conf2 ", 15); } catch (SchedulerException ex) { logger.error(ex); } } public Scheduler createScheduler() throws SchedulerException {//创建调度器 return StdSchedulerFactory.getDefaultScheduler(); } private void scheduleJob(Scheduler scheduler, String jobName,Class jobClass, String scanDir, int scanInterval) throws SchedulerException { // Create a JobDetail for the Job JobDetail jobDetail = new JobDetail(jobName,Scheduler.DEFAULT_GROUP, jobClass); // Configure the directory to scan jobDetail.getJobDataMap().put("SCAN_DIR", scanDir); // Trigger that repeats every "scanInterval" secs forever Trigger trigger = TriggerUtils.makeSecondlyTrigger(scanInterval); trigger.setName(jobName + "-Trigger"); // Start the trigger firing from now trigger.setStartTime(new Date()); // Associate the trigger with the job in the scheduler scheduler.scheduleJob(jobDetail, trigger); } } 复制代码 本文转自Phinecos(洞庭散人)博客园博客,原文链接:http://www.cnblogs.com/phinecos/archive/2008/09/03/1282747.html,如需转载请自行联系原作者

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

Django学习笔记----快速入门

上一篇>Django学习笔记----环境搭建基于Windows 基于以下环境: Windows 10 Python 3.6 Django 1.18 开始第一个Django项目 进入Cmder, 进入想创建工程的文件夹, 键入django-admin startproject 项目名 注意不能选择test这样的项目名称, 会于Python已有的模块名称冲突 Begin! 生成成功后, 可以看到如下项目结构 mysite/ manage.py mysite/ __init__.py settings.py urls.py wsgi.py manage.py: 一个实用的命令行工具,可让你以各种方式与该 Django 项目进行交互。 mysite/_init_.py: 一个空文件,告诉 Python 该目录是一个 Python 包。 mysite/settings.py: 该 Django 项目的设置/配置。 mysite/urls.py: 该 Django 项目的 URL 声明; 一份由 Django 驱动的网站"目录"。 mysite/wsgi.py: 一个 WSGI 兼容的 Web 服务器的入口,以便运行你的项目。 建立第一个App 在cmder中键入 django-admin startapp testApp 在settings.py中的INSTALLED_APPS中键入App名称,如此处的testApp # 示例代码 INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', # 键入你的App 'testApp', ] 建立视图与路由的映射 views.py中的函数对应url.py中的urlpatterns(url格式) views.py # 首个参数需要是request def hello(request): return HttpResponse("Hello World") urls.py “urlpatterns”列表将URL路由映射到视图。 指向路径(第一个参数)都由此视图代理 ^头部匹配, $尾部匹配 程序从项目的settings.py中找到ROOT_URLCONF定义的urls.py的路径,在此路径中查找对应的url pattern, 进入相应的视图函数中, 通过HttpResponse返回响应的对象经处理后显示在网页上 urlpatterns = [ url(r'^hello/$', views.hello, name='hello'), ] urlpatterns中可以使用正则表达式进行匹配. 配置完毕后在Cmder中键入python manage.py runserver启动Django 需要注意的是处于开发者状态时, Django显示的是对应的错误信息 正式发布时需要将settings.py的DEBUG=True改为False

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

Hbase快速开始——shell操作

一. 介绍 HBase是一个分布式的、面向列的开源数据库,源于google的一篇论文《bigtable:一个结构化数据的分布式存储系统》。HBase是Google Bigtable的开源实现,它利用Hadoop HDFS作为其文件存储系统,利用Hadoop MapReduce来处理HBase中的海量数据,利用Zookeeper作为协同服务。 HBase以表的形式存储数据。表有行和列组成。列划分为若干个列族/列簇(column family)。 如上图所示,key1, key2, key3是三条记录的唯一的row key值,column-family1, column-family2, column-family3是三个列族,每个列族下又包括几列。比如 column-family1这个列族下包括两列,名字是column1和column2。t1:abc,t2:gdxdf是由row key1和column-family1-column1唯一确定的一个单元cell。这个cell中有两个数据,abc和gdxdf。两个值的时间戳不一样,分别是t1,t2, hbase会返回最新时间的值给请求者。 二. 安装 下载HBase最新版本,放到合适的目录,比如/usr/local 或 /opt 之后解压 tar -zxvf hbase-x.y.z tar.gz 三. 命令行操作 进入解压后的目录,开启hbase,启动hbase shell bin/start-hbase.sh bin/hbase shell 输入 help 可以看到命令分组 部分命令清单 下边分组举例 general操作 查询服务器状态 status 查询hbase版本 version ddl操作 1. 创建一个表 create 'table1', 'tab1_id', 'tab1_add', 'tab1_info' 2. 列出所有的表 list 3. 获得表的描述 describe "table1" 4. 删除一个列族 disable alter enable disable 'table1' alter 'table1', {NAME=>'tab1_add', METHOD=>'delete'} enable 'table1' 5. 查看表是否存在 exists 'table2' 6. 判断表是否为‘enable’ is_enabled 'table1' 判断表是否为‘disable’ is_disabled 'table1' 7. 删除一个表 disable 'table1' drop 'table1' dml操作 1. 插入几条记录 1 2 3 4 5 6 put 'member' , 'scutshuxue' , 'info:age' , '24' put 'member' , 'scutshuxue' , 'info:birthday' , '1987-06-17' put 'member' , 'scutshuxue' , 'info:company' , 'alibaba' put 'member' , 'scutshuxue' , 'address:contry' , 'china' put 'member' , 'scutshuxue' , 'address:province' , 'zhejiang' put 'member' , 'scutshuxue' , 'address:city' , 'hangzhou' 2. 全表扫描 scan 3. 获得数据 get 3.1 获得一行的所有数据 3.2 获得某行,某列族的所有数据 3.3 获得某行,某列族,某列的所有数据 4. 更新一条记录 put(把scutshuxue年龄改为99) put 'member', 'scutshuxue', 'info:age', 99 5. 删除 delete、 deleteall 5.1 (删除行'scutshuxue', 列族为‘info' 中age的值 delete 'member', 'scutshuxue', 'info:age' 5.2 删除整行 deleteall 'member', 'scutshuxue' 6. 查询表中有多少行 count 'member' 7.给‘xiaoming’这个id增加'info:age'字段,并使用counter实现递增 incr 'member', 'xiaoming', 'info:age' 8. 将整个表清空 truncate 'member' tools操作 1. 创建一个表 四. 参考 http://smallwildpig.iteye.com/blog/1705718 本文转自jihite博客园博客,原文链接:http://www.cnblogs.com/kaituorensheng/p/3814925.html,如需转载请自行联系原作者

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

.Net Micro Framework 快速入门

一、简介 Microsoft .NET Micro Framework 2001年由微软研究院开始研发,并随后在其MSN Direct项目中使用该技术,2007年9月微软对外发布2.0,2008年10月 V3.0、2009年11月 V4.0、2010年5月 V4.1 beta,2009年并入.NET产品组,Digi、Atmel、飞思卡尔等半导体公司都先后为其推出了开发板,该技术可以应用到远程控制、智能家电、教育类机器、医疗电子、零售终端、Sideshow以及汽车电子等行业应用场景;此外由于.Net MF集成了各种接口,如串口、网口、Wifi、Zigbee、I2C、SPI、SDIO、USB等通信接口,加上其应用开发简便,所以在物联网时代,将大有作为。 <1>.Net Micro Framework 低价开发板 http://blog.csdn.net/yefanqiu/archive/2010/06/03/5645129.aspx <2>.Net Micro Framework 所有博文 http://blog.csdn.net/yefanqiu/category/633947.aspx ----------------------------- Microsoft .NET Micro Framework 将 .NET 的可靠性和效率与 Visual Studio的高生产率结合起来,以针对价格较低、资源受限的小型设备开发应用程序,可帮助人们使用熟悉的 Visual Studio 工具来构建托管的嵌入式应用程序。2009年5月,.Net Micro Framework采用Apache 2.0 license,比Linux等开源软件更为彻底的方式实现了源代码完全开放。 1.哪些领域可以采用.NET Micro Framework技术? .NET Micro Framework技术可以应用到:Sideshow、远程控制、智能家电、教育类机器、医疗电子、零售终端以及汽车电子等行业应用场景;此外由于.Net MF集成了各种接口,如串口、网口、Wifi、Zigbee、I2C、SPI、SDIO、USB等通信接口,加上其应用开发简便,所以在物联网时代,将大有作为。 2.NET Micro Framework与Window CE和Windows XP Embedded的区别? .NET Micro Framework对存储器和处理器的要求更低。开发人员可以在低功耗、低成本的ARM7、ARM9、Blackfin和Cortex-M3处理器上使用该框架(不需要MMU支持),所开发出来的软件仅需要几百Kbytes的RAM或Flash/ROM存储空间。而Windows Embedded CE的托管代码环境需要约10~12Mbytes的存储空间,基于.NET的应用编程设备只需要较少的存储空间,降低了产品成本。 3.NET Micro Framework与其他.NET平台的区别? 作为.NET家族的一员,.Net Micro Framework是微软专门针对超轻量级平台设计的软件架构。与.Net Framework和.Net Compact Framework不同的地方是,.Net Micro Framework具有自启动的特性,并且在HAL层,微软将操作系统的必要特性引入,如:启动管理、中断处理、线程调度、内存管理等。.Net Micro Framework可以单独使用,不需要依托其它操作系统,因此占用空间很小。 二、应用开发 1、.Net Micro Framework研究—Digi开发板初探http://yfsoft.blog.51cto.com/1635641/323413 2、.Net Micro Framework研究—IO读写http://yfsoft.blog.51cto.com/1635641/323412 3、.Net Micro Framework研究—串口操作http://yfsoft.blog.51cto.com/1635641/323411 4、.Net Micro Framework研究—TCP/IP通信http://yfsoft.blog.51cto.com/1635641/323409 5、.Net Micro Framework研究—模拟器改造http://yfsoft.blog.51cto.com/1635641/3234098 6、.Net Micro Framework研究—中文显示 http://yfsoft.blog.51cto.com/1635641/3234097 7、 .Net Micro Framework研究—绘图http://yfsoft.blog.51cto.com/1635641/323402 8、.Net Micro Framework研究—Shapes命名空间http://yfsoft.blog.51cto.com/1635641/323401 9、.Net Micro Framework研究—窗体控件http://yfsoft.blog.51cto.com/1635641/323400 10、.Net Micro Framework研究—应用实例http://yfsoft.blog.51cto.com/1635641/322945 11、.Net Micro Framework研究—Tinyfnt字体研究http://yfsoft.blog.51cto.com/1635641/322943 12、.Net Micro Framework研究—带IO的模拟器http://yfsoft.blog.51cto.com/1635641/322942 13、 .Net Micro Framework研究—带AD的模拟器http://yfsoft.blog.51cto.com/1635641/322939 14、 .Net Micro Framework研究—带I2C总线的模拟器http://yfsoft.blog.51cto.com/1635641/322937 15、..Net Micro Framework研究—Windows桌面http://yfsoft.blog.51cto.com/1635641/322933 16、.Net Micro Framework研究—模拟器直接运行MF程序http://yfsoft.blog.51cto.com/1635641/322928 17、.Net Micro Framework研究—用MF编写俄罗斯方块http://yfsoft.blog.51cto.com/1635641/322921 18、.Net Micro Framework研究—让MF支持鼠标http://yfsoft.blog.51cto.com/1635641/322917 19、.Net Micro Framework研究—用MF控制机器人http://yfsoft.blog.51cto.com/1635641/323874 20、.Net Micro Framework研究—数据的永久存储http://yfsoft.blog.51cto.com/1635641/322911 21、.Net Micro Framework研究—实现SideShow窗体界面http://yfsoft.blog.51cto.com/1635641/322900 22、.Net Micro Framework研究—让MF支持英文输入法http://yfsoft.blog.51cto.com/1635641/321212 23、.Net Micro Framework研究—MF驱动继电器 http://yfsoft.blog.51cto.com/1635641/321288 24、.Net Micro Framework研究—串口部署的困惑 http://yfsoft.blog.51cto.com/1635641/321286 25、.Net Micro Framework研究—串口部署释疑 http://yfsoft.blog.51cto.com/1635641/321212 26、.Net Micro Framework研究— http://yfsoft.blog.51cto.com/1635641/321282 三、系统移植 1、【.Net Micro Framework PortingKit - 01】移植初步:环境搭建http://yfsoft.blog.51cto.com/1635641/321243 2、【.Net Micro Framework PortingKit - 02】STM3210E平台构建http://yfsoft.blog.51cto.com/1635641/321240 3、【.Net Micro Framework PortingKit - 03】调试初步:点亮LED灯http://yfsoft.blog.51cto.com/1635641/321238 4、【.Net Micro Framework PortingKit - 04】修改启动代码&重写向量表http://yfsoft.blog.51cto.com/1635641/321235 5、【.Net Micro Framework PortingKit - 05】SRAM初始化&设置NVIC中断表偏移http://yfsoft.blog.51cto.com/1635641/321234 6、【.Net Micro Framework PortingKit - 06】设置芯片时钟http://yfsoft.blog.51cto.com/1635641/321233 7、【.Net Micro Framework PortingKit - 07】NVIC中断处理http://yfsoft.blog.51cto.com/1635641/321229 8、【.Net Micro Framework PortingKit - 08】GPIO驱动http://yfsoft.blog.51cto.com/1635641/321228 9、【.Net Micro Framework PortingKit – 09】串口驱动http://yfsoft.blog.51cto.com/1635641/321224 10、【.Net Micro Framework PortingKit – 10】世界首款Cortex-M3内核MFV4诞生http://yfsoft.blog.51cto.com/1635641/323881 11、【.Net Micro Framework PortingKit – 11】NandFlash驱动开发http://yfsoft.blog.51cto.com/1635641/321222 12、【.Net Micro Framework PortingKit – 12】SysTick驱动开发http://yfsoft.blog.51cto.com/1635641/321221 13、【.Net Micro Framework PortingKit – 13】LCD驱动开发http://yfsoft.blog.51cto.com/1635641/321220 14、【.Net Micro Framework PortingKit – 14】TinyCLR编译与测试http://yfsoft.blog.51cto.com/1635641/321219 15、【.Net Micro Framework PortingKit – 15】移植总结(兼谈MF未来发展)http://yfsoft.blog.51cto.com/1635641/321218 四、高级开发 1、【玩转.Net MF – 01】Flash远程读写 http://yfsoft.blog.51cto.com/1635641/321217 2、【玩转.Net MF – 02】让PC成为MF的鼠标键盘 http://yfsoft.blog.51cto.com/1635641/321216 3、【玩转.Net MF – 03】远程文件查看器 http://yfsoft.blog.51cto.com/1635641/321214 4、【玩转.Net MF – 04】远程屏幕截图 http://yfsoft.blog.51cto.com/1635641/321215 5、【玩转.Net MF – 05】加载文件系统中的Pe文件 http://yfsoft.blog.51cto.com/1635641/321213 五、功能扩展 1、支持横竖屏切换的.Net Micro Framework模拟器 http://yfsoft.blog.51cto.com/1635641/321248 2、Micro Framework 3.0模拟器改造 http://yfsoft.blog.51cto.com/1635641/321260 3、开源System.Windows.Forms库,让.Net Micro Framework界面开发和上位机一样简单 http://yfsoft.blog.51cto.com/1635641/321246 六、相关网址 1、官方网址 http://www.microsoft.com/netmf/default.mspx 2、官方博客 http://blogs.msdn.com/netmfteam/ 3、中文博客 http://yfsoft.blog.51cto.com http://www.cnblogs.com/yefanqiu 4、中文讨论组 http://space.cnblogs.com/group/MFSoft 5、SDK下载 http://www.microsoft.com/downloads/details.aspx?FamilyId=77dbfc46-14a1-4dcf-a809-eda7ccfe376b&displaylang=en 6、源码下载 http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=16fa5d31-a583-4c0d-af74-f4d5e235d5bc 更多文章,请随时关注:http://yfsoft.blog.51cto.com 本文转自yefanqiu51CTO博客,原文链接:http://blog.51cto.com/yfsoft/321212,如需转载请自行联系原作者

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

Android2.2快速入门

正文 一、环境配置和安装(Android2.2) 参考文章:这里 1.1JDK 1.2SDK 下载地址:http://dl.google.com/android/android-sdk_r06-windows.zip 1.3Eclipse 3.5 (Galileo) 下载地址: http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/galileo/R/eclipse-java-galileo-win32.zip 1.4ADT 0.9.7 下载地址:http://dl.google.com/android/ADT-0.9.7.zip 1.5安装 依次下载,按照文章步骤安装即可,注意安装SDK时,需要如下设置下: 不然更新不下来,那个链接地址被墙了。 二、Android系统架构 2.1 Linux内核(Linux Kernel) * Android运行在linux kernel 2.6之上,但是把linux内受GNU协议约束的部分做了取代,这样在Android的程序可以用于商业目的。 * Linux内核是硬件和软件层之间的抽象层。 2.2中间件 *中间件包括两部分:核心库和运行时(libraries & Android runtime) *核心库包括,SurfaceManager显示系统管理库,负责把2D或3D内容显示到屏幕;Media Framework媒体库,负责支持图像,支持多种视频和音频的录制和回放;SQlite数据库,一个功能强大的轻量级嵌入式关系数据库;WebKit浏览器引擎等。 * Dalvik虚拟机:区别于Java虚拟机的是,每一个Android应用程序都在它自己的进程中运行,都有一个属于自己的Dalvik虚拟机,这一点可以让系统在运行时可以达到优化,程序间的影响大大降低。Dalvik虚拟机并非运行Java字节码,而是运行自己的字节码。 2.3应用程序框架(Application Framework) *丰富而又可扩展性的视图(Views),可以用来构建应用程序,它包括列表(lists),网格(grids),文本框(text boxes),按钮(buttons),可嵌入的web浏览器。 *内容提供者(Content Providers)使得应用程序可以访问另一个应用程序的数据(如联系人数据库),或者共享它们自己的数据。 *资源管理器(Resource Manager)提供非代码资源的访问,如本地字符串,图形,和布局文件(layoutfiles)。 *通知管理器(Notification Manager)使得应用程序可以在状态栏中显示自定义的提示信息。 *活动管理器(Activity Manager)用来管理应用程序生命周期并提供常用的导航回退功能。 2.4应用程序(Applications) * Android系统会内置一些应用程序包包括email客户端,SMS短消息程序,日历,地图,浏览器,联系人管理程序等。所有的应用程序都是使用JAVA语言编写的。 三、Android系统包说明 android.app :提供高层的程序模型、提供基本的运行环境 android.content :包含各种的对设备上的数据进行访问和发布的类 android.database :通过内容提供者浏览和操作数据库 android.graphics :底层的图形库,包含画布,颜色过滤,点,矩形,可以将他们直接绘制到屏幕上. android.location :定位和相关服务的类 android.media :提供一些类管理多种音频、视频的媒体接口 android.net :提供帮助网络访问的类,超过通常的Java.net.* 接口 android.os :提供了系统服务、消息传输、IPC 机制 android.opengl :提供OpenGL 的工具 android.provider :提供类访问Android 的内容提供者 android.telephony :提供与拨打电话相关的API 交互 android.view :提供基础的用户界面接口框架 android.util :涉及工具性的方法,例如时间日期的操作 android.webkit :默认浏览器操作接口 android.widget :包含各种UI 元素(大部分是可见的)在应用程序的屏幕中使用 四、Android项目工程说明 src:存放java源代码。 gen:存放编译器自动生成的java代码,这个目录下的文件是系统自动维护的。 assets:存放在这个目录下的文件,无论是mp3还是图片,都会被打包到发布包中。 res:资源文件目录,添加到这个目录下的文件都会在gen下的R.ava文件中显示出来;如果res下存放的资源在应用中没有使用到,那么在gen下的R.java的文件中就不会显示,那么打包的时候就不会将这部分资源打包,减少了应用的发布文件大小。 drawable:存放图片文件,注意图片名称必须是[a-z0-9_.]组成;drawable目录下不能分子级目录,只能通过命名方法来加以区分。 layout:存放与UI相关的布局文件,都是xml文件。 raw:直接复制到设备中的任意文件,不会被编译,可以放数据库文件。 values:存放字符串,颜色,数组等常量数据。可以任意命名,但是通常命名:color.xml、strings.xml、array.xml、styles.xml、dimens.xml(定义尺寸值:dimension value) xml:任意的XML文件,在运行时可以通过调用Resources.getXML()读取。 参见http://www.inandroid.cn/bbs/thread-1401-1-1.html。 五、基本控件 5.1文本框(TextView)、自动完成(AutoCompleteTextView) 自动完成的效果和代码:http://android.yaohuiji.com/archives/390 AutoCompleteTextView : 5.2编辑框(EditText) android:hint内容为空时提醒的信息,如“请输入” 5.3下拉列表(Spinner) android:entries可以通过在strings.xml中指定string-array来设置选项。 5.4进度条(ProgressBar) 效果和代码:http://www.eoeandroid.com/viewthread.php?tid=1081 5.5拖动条(SeekBar) 5.6评分条(RatingBar) 5.7按钮(Button)、图片按钮(ImageButton) Button: ImageButton: 5.8图片框(ImageView)、画廊(Gallery) ImageView Gallery 画廊效果:http://android.yaohuiji.com/archives/565 5.9日期和时间(DatePicker、TimePicker) AnalogClock DigitalClock Chronometer(计时器) DatePicker DatePickerDialog TimePicker TimePickerDialog 5.10单项选择(RadioGroup、RadioButton)、多项选择(CheckBox) CheckBox RadioButton ToggleButton 5.11表格(GridView)、列表(ListView) GridView ListView GridView:http://blog.csdn.net/hellogv/archive/2009/09/18/4567095.aspx ListView:http://www.cnblogs.com/allin/archive/2010/05/11/1732200.html 5.12对话框(AlertDialog)、对话框中的进度条(ProgressDialog) AlertDialog AlertDialog:http://android.yaohuiji.com/archives/655 ProgressDialog:http://aina-hk55hk.javaeye.com/blog/679134 5.13菜单(Menu) 5.14提示(Toast) 类似于MessageBox,非模式窗口。如: Toast.makeText(this, "信息", Toast.LENGTH_SHORT).show(); 5.15GestureOverLayView 文章1、文章2 5.16HorizontalScrollView 5.17MapView 5.18VideoView 5.19WebView 5.20ZoomControls 六、布局和容器 6.1帧布局(FrameLayout) 放入其中的所有元素都被放置最左上的区域,无法为这些元素指定一个确切的位置。如果有多个子元素,那么后边的子元素的显示会重叠在前一个元素上。 6.2线性布局(LinearLayout) 常用布局,子元素按行或列依次排列。 android:layout_gravity是本元素对父元素的重力方向。 android:gravity是本元素所有子元素的重力方向。 6.3绝对布局(AbsoluteLayout) 可以让子元素指定准确的x/y坐标值,(0, 0)为左上角,没有页边框,允许元素之间互相重叠。 6.4相对布局(RelativeLayout) 允许子元素指定他们相对于其它元素或父元素的位置(通过ID指定) 6.5表格布局(TableLayout) 将子元素的位置分配到行(TableRow)中,注意不会显示边框线也不能够跨行合并单元格。 例子:http://hi.baidu.com/hoyah/blog/item/d9db34275d6f361a8b82a171.html 6.6选项卡(TabWidget) 例子:http://fatkun.com/2010/06/android-tabwidget.html 七、常用代码 7.1在当前Activity中启动另外一个Activity startActivity(new Intent(this,目标Activity.class)); 7.2从当前ContentView从查找控件 (Button)findViewById(R.id.btnAbout) R.id.btnAbout指控件id。 7.3获取屏幕宽高 DisplayMetrics dm = new DisplayMetrics(); //获取窗口属性 getWindowManager().getDefaultDisplay().getMetrics(dm); int screenWidth =dm.widthPixels;//320 int screenHeight = dm.heightPixels;//480 7.4无标题栏、全屏 //无标题栏 requestWindowFeature(Window.FEATURE_NO_TITLE); //全屏模式 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 注意在setContentView()之前调用,否则无效。 7.5注册activity 所有用到的Activity都必须在AndroidManifest.xml中注册,否则会报空指针错误。如:<activity android:name="com.common.TestView">,注意是包名+类名。 八、Adb命令行 8.1 DOS进入android-sdk-windows\tools目录 8.2 Linux 登录linux命令:adb shell 列出当前文件:ls 删除文件:rm文件名 8.3 Sqlite 登录sqlite命令:sqlite3 8.4 Adb命令 列出当前有哪些活动的模拟器:adb devices 上传文件:adb push 安装apk文件:adb install android123.apk 九、Apk文件破解 9.1获取apk的资源图片 直接用WinRAR打开,res/drawable直接拖拽出来即可。 9.2获取xml文件信息 虽然能用WinRAR看到里面的xml文件,但是xml是经过优化的,无法直接查看,需要使用apktool工具,下载地址:https://code.google.com/p/android-apktool/。 下载apktool-1.3.1.tar.bz2和apktool-install-windows-2.2_r01-2.tar.bz2解压到同一个目录,然后把待破解的apk文件拷贝到同一目录,DOS进入该目录,输入:aapt d 91callinfo.apk 91callinfo,这里第四个参数为破解完存放的路径。 9.3反编译dex获取Java源代码 Apktool工具只能反编译成smali的中间代码文件,这里需要借助另外一个开源工具:dex2jar,下载地址:http://code.google.com/p/dex2jar/。这个工具不能直接翻译成java文件,但是可以把dex文件转换成jar文件,然后可以通过jad工具把jar文件反编译成Java源文件,如果只是看看源码的话可以用jd-gui,下载地址: http://java.decompiler.free.fr/jd-gui/downloads/jd-gui-0.3.3.windows.zip。 dex文件(classes.dex)可以用WinRAR从apk文件中解压出来。 十、小技巧 10.1使用系统的图标 例如调用系统打电话的图标: <ImageView android:src="@android:drawable/ic_menu_call" 图标名称和效果(Android1.5和1.6): http://since2006.com/android/1.5-drawables.php http://since2006.com/android/1.6-drawables.php 10.2让控件透明,如ImageButton 设置android:background="@null" 10.3在layout中直接指定onclick方法 不用手动绑定,在layout中设置android:onClick=”methodName”,methodName为对应Activity中的方法,如下格式:public voidmethodName(View view){}(适应1.6以上版本) 10.4用PC键盘控制模拟器 PC键盘 模拟器按键 说明 Home Home 主页 F2 Menu 菜单 Esc Back 后退 F3 Call 打电话 F4 Hangup 挂断 F5 Search 搜索 Ctrl+F12 横竖屏切换 10.5进入界面就显示/隐藏软键盘 在AndroidManifest.xml中设置activity的 android:windowSoftInputMode="stateHidden" 10.6界面可视化布局工具 系统提供可视化布局并不好用,这里推荐一款,布局完后点生成代码即可: DroidDraw:http://www.droiddraw.org/ 10.7在Eclipse中看Android的源码 将源代码拷贝至android-sdk-windows\platforms\android-4\sources下即可。注意源码版本对应android-4文件夹,这里指Android1.6的源码。 十一、Q & A 11.1用模拟器调试频繁连不上,或者报emulator-5554 disconnected的错误? Window(窗口) -> Show Views(显示视图) -> device -> view menu(视图菜单) -> Reset adb 11.2匿名类中如何使用this? classname(类名).this 11.3程序出错后模拟器上仅显示应用程序遇到问题将关闭怎么办? 可以从LogCat中检查错误,默认LogCat在DDMS视图中,可以通过以下方法调整到Java视图与控制台并列显示:点击Eclipse左下角,点开后在其他里面找到Android目录下的LogCat拖拽出来即可。 十二、后期维护 12.1 2010-10-1 补充了许多控件的截图,导出PDF下载:http://download.csdn.net/source/2729442 12.2 2010-10-18 补充了GestureOverLayView的文章链接,文章1是英语的,文章2为中文的。 本文转自over140 51CTO博客,原文链接:http://blog.51cto.com/over140/582221,如需转载请自行联系原作者

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

HBase伪快速分页查询

之前有两个功能,都是查询历史数据的一个分页查询,系统刚上线的时候,没有太多的数据,就一直扔在mysql里面,后来里面数据上亿之后,就查不到了,而且数据还在以指数级增长方式上报,后来,这部分业务单独迁移到hbase集群去存放,之前页面的查询也改查hbase了。但是hbase对分页查询这种东西支持不好,如果按照以往查询mysql的思路,查询出一个总的count,再查询出这一页的数据,这种方式去查询hbase,那么如果你仔细去跟代码计算时间的话,你会发现hbase去查count,无论哪种方式,都会引起全表扫描,是非常慢的。整个页面加载出来,看了下响应事件,大概要45s,等的我都喝了两杯茶了。 so,我想了个比较伪的分页查询方法,去掉查询count操作,值查询一页数据: public Page<BatteryData> findBatterHisData(BatteryHisDto dto)throws Exception { Page<BatteryData> dataPage=new Page<BatteryData>(); List<BatteryData> dataList=new ArrayList<>(); int totalSize=0; Table table=runner.getTable(tableName); Scan dataScan=new Scan(); ResultScanner dataScanner=null; List<Filter> dataFilters = new ArrayList<Filter>(); if(StringUtils.isNotBlank(dto.getBatteryNo())){//电池组编号过滤 Filter filter=new RowFilter(CompareFilter.CompareOp.EQUAL, new SubstringComparator(dto.getBatteryNo()+"_")); dataFilters.add(filter); } Filter pageFilter=new PageFilter(dto.getPage()+dto.getPageSize()); dataFilters.add(pageFilter); FilterList dataFilterList = new FilterList(FilterList.Operator.MUST_PASS_ALL, dataFilters); dataScan.setFilter(dataFilterList); dataScanner=table.getScanner(dataScan); dataList= rsh.handle(tableName,dataScanner); if(dataList==null || dataList.size()<1){ dataPage.setTotalCount(0); dataPage.setResult(null); return dataPage; } int startNo = dto.getPage(); int endNo=startNo+dto.getPageSize(); dataPage.setTotalCount(dto.getPage()+dto.getPageSize()+1); dataPage.setResult(dataList.subList(startNo,endNo)); table.close(); return dataPage; } 因为用户关注的,通常是前几页的数据,所有我每次查询的时候,返回总页数,都返回个随便的数(跟前端的分页表格配合,实际上,我的前端只提供了上下分页,哈哈),然后查询有限条的数据,通常hbase表都是上亿甚至是百亿的,所以,用户时不太可能通过只点击上一页下一页,这样点到我最后一页的,可以放心了。最多他点个几千页,也就手疼到不行了。这样下来,响应速度控制在800ms内,无压力。 PS,看到很多网友通过rowkey去做分页,具体思路是,每次记录下起始的rowkey和结束的rowkey,然后根据rowkey搜索,这样也是很快的,个人认为,也ok。

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

Centos 7 快速安装 Docker

安装 Docker [root@localhost~]# yum install docker 启动 docker 服务 [root@localhost~]# systemctl start docker.service [root@localhost~]# systemctl enable docker.service 安装 centos 镜像 [root@localhost~]# docker pull centos Using default tag: latest Trying to pull repository docker.io/library/centos ... latest: Pulling from docker.io/library/centos 6bbedd9b76a4: Downloading 2.531 MB/49.87 MB fc19d60a83f1: Download complete de413bb911fd: Download complete 2879a7ad3144: Download complete 668604fde02e: Download complete 668604fde02e: Pulling fs layer* 检查 centos 镜像安装状态 [root@localhost~]# docker images centos REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/centos latest 980e0e4c79ec 7 weeks ago 196.7 MB 运行一个新的容器 [root@localhost~]# docker run -i -t centos /bin/bash [root@bd1a482d44f5 /]# 参数解释 -i, --interactive Keep STDIN open even if not attached -t, --tty Allocate a pseudo-TTY PS:“[root@bd1a482d44f5 /]#” 这行出现证明已进入容器 退出容器 [root@localhost~]# exit exit 友情连接 Ubuntu上docker安装~~小鱼鱼

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

hive 结合mysql快速安装

系统使用centos7.1 官方下载hadoop,hive,jdk的安装包,解压在新建用户hive的目录下,安装mariadb-server(mysql-server) [hive@localhost ~]$ ll total 544900 drwxrwxr-x 9 hive hive 4096 Sep 10 07:31 apache-hive-2.1.0-bin -rw-rw-r-- 1 hive hive 149599799 Jun 21 01:26 apache-hive-2.1.0-bin.tar.gz drwxrwxr-x 9 hive hive 149 Sep 9 10:45 apache-tomcat-7.0.70 -rw-r--r-- 1 hive hive 8924465 Sep 9 10:29 apache-tomcat-7.0.70.tar.gz drwxr-xr-x 9 root root 139 Aug 18 01:49 hadoop-2.7.3 -rw-r--r-- 1 root root 214092195 Aug 25 19:25 hadoop-2.7.3.tar.gz lrwxrwxrwx 1 hive hive 12 Sep 9 08:28 hadoop-last -> hadoop-2.7.3 lrwxrwxrwx 1 hive hive 21 Sep 9 09:08 hive-last -> apache-hive-2.1.0-bin drwxr-xr-x 8 hive hive 4096 Jun 23 01:56 jdk1.8.0_102 -rw-r--r-- 1 root root 181435897 Sep 9 06:57 jdk-8u102-linux-x64.tar.gz drwxr-xr-x 4 hive hive 143 May 4 11:11 mysql-connector-java-5.1.39 -rw-r--r-- 1 hive hive 3899019 Sep 10 07:18 mysql-connector-java-5.1.39.tar.gz -rw-rw-r-- 1 hive hive 11183 Sep 9 10:18 wc.txt 修改用户的环境 [hive@localhost ~]$ cat .bash_profile # .bash_profile # Get the aliases and functions if [ -f ~/.bashrc ]; then . ~/.bashrc fi # User specific environment and startup programs export JAVA_HOME=/home/hive/jdk1.8.0_102 export HADOOP_HOME=/home/hive/hadoop-last export HIVE_HOME=/home/hive/hive-last PATH=$PATH:$HOME/.local/bin:$HOME/bin:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HIVE_HOME/bin:$HIVE_HOME/conf export PATH 启动mysql数据库,为hadoop/hive添加一个用户 [root@localhost ~]# systemctl start mariadb [root@localhost ~]# mysql Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 3 Server version: 5.5.50-MariaDB MariaDB Server Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> CREATE USER 'hadoop'@'localhost' IDENTIFIED BY 'hadoop'; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'hadoop'@'localhost' WITH GRANT OPTION; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> EXIT Bye MariaDB [(none)]> CREATE USER 'hive'@'localhost' IDENTIFIED BY 'hive'; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'hive'@'localhost' WITH GRANT OPTION; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> exit Bye 进入$HIVE_HOME/conf,去掉以下三个文件的后辍.template -rw-r--r-- 1 hive hive 2378 Sep 10 06:24 hive-env.sh -rw-r--r-- 1 hive hive 2299 Jun 3 10:43 hive-exec-log4j2.properties -rw-r--r-- 1 hive hive 2950 Sep 10 06:25 hive-log4j2.properties 重命令hive-default.xml.template为hive-site.xml -rw-r--r-- 1 hive hive 225729 Sep 10 03:21 hive-site.xml 添加hive-env.sh两行 export HADOOP_HOME=/home/hive/hadoop-last export HIVE_CONF_DIR=/home/hive/hive-last/conf 修改hive-site.xml 默认hive.metastore.warehouse.dir是/user/hive/warehouse hive.exec.scratchdir是/tmp/hive 创建这个目录 如果是使用内置的derby存储metadata [hive@localhost hive-last]$ schematool -dbType derby -initSchema which: no hbase in (/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/hive/.local/bin:/home/hive/bin:/home/hive/jdk1.8.0_102/bin:/home/hive/hadoop-last/bin:/home/hive/hive-last/bin:/home/hive/hive-last/conf) SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/home/hive/apache-hive-2.1.0-bin/lib/log4j-slf4j-impl-2.4.1.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found binding in [jar:file:/home/hive/hadoop-2.7.3/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory] Metastore connection URL: jdbc:derby:;databaseName=metastore_db;create=true Metastore Connection Driver : org.apache.derby.jdbc.EmbeddedDriver Metastore connection User: APP Starting metastore schema initialization to 2.1.0 Initialization script hive-schema-2.1.0.derby.sql Initialization script completed schemaTool completed 修改 chmod a+rw /tmp/hive/ 下面修改为使用mysql hive-site.xml 480: javax.jdo.option.ConnectionPassword 481- hive 498: javax.jdo.option.ConnectionURL 499- jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true 932: javax.jdo.option.ConnectionDriverName 933- com.mysql.jdbc.Driver 960: javax.jdo.option.ConnectionUserName 961- hive 下载mysql-connector [hive@localhost mysql-connector-java-5.1.39]$ cp mysql-connector-java-5.1.39-bin.jar ~/hive-last/lib/ -v ‘mysql-connector-java-5.1.39-bin.jar’ -> ‘/home/hive/hive-last/lib/mysql-connector-java-5.1.39-bin.jar’ [hive@localhost hive-last]$ schematool -dbType mysql -initSchema which: no hbase in (/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/hive/.local/bin:/home/hive/bin:/home/hive/jdk1.8.0_102/bin:/home/hive/hadoop-last/bin:/home/hive/hive-last/bin:/home/hive/hive-last/conf) SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/home/hive/apache-hive-2.1.0-bin/lib/log4j-slf4j-impl-2.4.1.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found binding in [jar:file:/home/hive/hadoop-2.7.3/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory] Metastore connection URL: jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true Metastore Connection Driver : com.mysql.jdbc.Driver Metastore connection User: hive Starting metastore schema initialization to 2.1.0 Initialization script hive-schema-2.1.0.mysql.sql Initialization script completed schemaTool completed 修改hive-site.xml的system变量,解决变量无法识别的问题,使用绝对路径 :%s#${system:java.io.tmpdir}#/tmp/javaiotmp# :%s#${system:user.name}#hive#

资源下载

更多资源
Mario

Mario

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

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

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部分的功能。

用户登录
用户注册