环境:window XP + tomcat6.08 + jdk6
步骤:
1.修改Tomcat目录下的bin/catalina.bat。
2.在该文件中查找set JAVA_OPTS=%JAVA_OPTS%,下面有一行为:
rem ----- Execute The Requested Command ---------------------------------------
在这一行的下面加
set JAVA_OPTS=-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9009 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false
3. 双击bin/startup.bat,启动Tomcat
4. 在cmd中执行netstat -an,可查看到9008端口已经启用,说明Tomcat的JMX配置成功
5. 在cmd中敲入命令:jconsole(这个exe令在%JAVA_HOME%/bin,即安装目录的bin下),即可启动jconsole的管理界面,在界面中输入如下内容:
service:jmx:rmi:///jndi/rmi://localhost:9008/jmxrmi
资源所限,只能先在本机上模拟hadoop集群。(见文章:http://blackwing.iteye.com/admin/blogs/1502476)
开动之前,需要启动hadoop,并且创建好一个hbase目录:
hadoop fs -mkdir hbase
这样就能在hadoop中开辟一个hbase存放数据的地方。
可以通过命令
hadoop fs -ls /
查看到刚才创建的目录。
hbase的主要配置文件:
1. hbase-site.xml
<configuration> <property> <name>hbase.rootdir</name> <value>hdfs://namenode.blackwing.com:8020/hbase/</value> </property> <property> <name>hbase.cluster.distributed</name> <value>true</value> </property> <property> <name>hbase.zookeeper.property.clientPort</name> <value>2181</value> </property> <property> <name>hbase.zookeeper.quorum</name> <value>namenode.blackwing.com</value> </property> </configuration>
其中的fs.default.name,指向hadoop的namenode所在uri。当然,后面的/hbase是我们希望在hdfs的哪个路径下保存数据。fs.default.name需要跟hadoop中的fs.default.name配置一样。也就是说这部分要一样:
hdfs://namenode.blackwing.com:8020/
zookeeper的集群列表:hbase.zookeeper.quorum,因为要对外,所以这里不能填localhost。
2. hbase和hadoop都配置好后,需要在程序中进行访问地址设置:
public InsertData(String tableName) { rowList = new ArrayList<Row>(); this.conf = HBaseConfiguration.create(); this.conf.set("hbase.zookeeper.quorum","192.168.128.140"); System.out.println("hbase.master = "+conf.get("hbase.master")); System.out.println("hbase.zookeeper.quorum = "+conf.get("hbase.zookeeper.quorum")); try { this.table=new HTable(this.conf,tableName.getBytes()); } catch (IOException e) { e.printStackTrace(); logger.info("errors occur while creating table : "+tableName); } }
其中的192.168.128.140,就是hbase中zookeeper的运行地址,因为zookeeper会根据.META.和ROOT得到hbase的所在等信息,所以只需设置hbase.zookeeper.quorum程序就能工作。
当然,也可以把hbase-site.xml拷贝到项目的src目录下,在HBaseConfiguration.create()的时候,程序会自动读取src下的hbase-site.xml。
3. 一些莫名其妙的小问题集合
1)windows能ping通虚拟机,但不能访问虚拟机hbase,或者打不开hbase的web界面。
原因:因为linux的防火墙缘故,暴力点的解决办法是chkconfig iptables off。而最好是修改/etc/sysconfig/iptables添加允许访问的规则。
2)jps时,发现少了某个(某些)进程,例如本应该有tasktracker好datanode进程的,却只有datanode。
先检查hadoop中slaves中是否正确列出主机名,一行一个。
我遇到这个问题,是因为hadoop的fs.default.name设置成了跟hbase的hbase.rootdir一样了,也就是:
hdfs://namenode.blackwing.com:8020/hbase/
正确来说,hadoop中的配置应该是这样的:
hdfs://namenode.blackwing.com:8020/
3)在windows下,eclipse后台输出显示连接不到namenode
原因:很大程度上是因为windows中没写host。解决办法是在:
C:\WINDOWS\system32\drivers\etc\hosts
中,添加vm中3台机器的ip及名称:
192.168.128.140 namenode.blackwing.com 192.168.128.136 jobtracker.blackwing.com 192.168.128.141 datanode.blackwing.com
PS:为了确定hbase的数据是否真的保存到hadoop中,可以通过:
hadoop fs -ls /hbase
查看到在通过hbase创建的表,都会在hadoop的hbase目录下生成对应文件夹。
使用SC命令来创建windows服务
命令格式:
sc [servername] create Servicename [Optionname= Optionvalues]
servername
可选,可以使用双斜线,如\\\\myserver,也可以是\\\\192.168.0.1来操作远程计算机。如果在本地计算机上操作就不用添加任何参数。
Servicename
在注册表中为service key制定的名称。注意这个名称是不同于显示名称的(这个名称可以用net start和服务控制面板看到),而SC是使用服务键名来鉴别服务的。
Optionname
这个optionname和optionvalues参数允许你指定操作命令参数的名称和数值。注意,这一点很重要在操作名称和等号之间是没有空格的。
如果你想要看每个命令的可以用的optionvalues,你可以使用sc command这样的格式。这会为你提供详细的帮助。
Optionvalues
为optionname的参数的名称指定它的数值。有效数值范围常常限制于哪一个参数的optionname。如果要列表请用sc command来询问每个命令。
Optionname--Optionvalues描述
type=----own, share, interact, kernel, filesys
关于建立服务的类型,选项值包括驱动程序使用的类型,默认是share。
start=----boot, sys tem, auto, demand, disabled
关于启动服务的类型,选项值包括驱动程序使用的类型,默认是demand(手动)。
error=----normal, severe, critical, ignore
当服务在导入失败错误的严重性,默认是normal。
binPath=--(string)
服务二进制文件的路径名,这里没有默认值,这个字符串是必须设置的。
group=----(string)
这个服务属于的组,这个组的列表保存在注册表中的ServiceGroupOrder下。默认是nothing。
tag=----(string)
如果这个字符串被设置为yes,sc可以从CreateService call中得到一个tagId。然而,SC并不显示这个标签,所以使用这个没有多少意义。默认是nothing
depend=----(space separated string)有空格的字符串。
在这个服务启动前必须启动的服务的名称或者是组。
obj=----(string)
账号运行使用的名称,也可以说是登陆身份。默认是localsys tem
Displayname=--(string)
一个为在用户界面程序中鉴别各个服务使用的字符串。
password=--(string)
一个密码,如果一个不同于localsys tem的账号使用时需要使用这个。
Optionvalues
Optionname参数名称的数值列表。参考optionname。当我们输入一个字符串时,如果输入一个空的引用这意味着一个空的字符串将被导入。
需要注意的是:
1. 在option= xxxxx格式中,“=”号和后面的内容一定要有空格,如depend= Tcpip
2. 如果命令中的需要进行双引号的嵌套,使用反斜杠加引号 " \" " 来进行转义处理。
示例
sc create svnservice binpath= "\"D:\Servers\Subversion\bin\svnserve.exe\" --service -r E:\SVN\repository" displayname= "SVNService" depend= Tcpip start= auto
使用SC命令删除windows服务
sc delete
从注册表中删除服务子项。如果服务正在运行或者另一个进程有一个该服务的打开句柄,那么此服务将标记为删除。
语法
sc [ServerName] delete [ServiceName]
参数
ServerName
指定服务所在的远程服务器名称。该名称必须使用 UNC 格式(“\\myserver”)。要在本机上运行 SC.exe,请忽略此参数。
ServiceName
指定由 getkeyname 操作返回的服务名。
示例
sc delete svnservice失败提示:DeleteService FAILED 1072
在删除服务时可能会遇上一个失败提示“DeleteService FAILED 1072: The specified service has been marked for deletion.”,或者运行没报错,但服务仍然在服务管理列表中。
这是因为server被卸载掉时,会检查状态(实际是标记状态,启动服务时检查,确定定启动或是卸载)。如果是启动状态,则在服务停止时自动卸载;否则立即卸载。所以报错的原因可能是因为服务处于启动状态,所以无法删除,如果需要立即删除,需要使用命令终止服务,命令格式如下:
sc stop ServiceName
示例:
sc stop svnservice
参考资料:http://www.cnblogs.com/rainbowzc/archive/2008/10/04/1303731.html