如果使用RGW下层的librados操作ceph,Java代码必须要用到rados.jar这个库,并且要安装jna,sudo yum install jna -y。 在Linux里,复制该JAR文件到公共目录 (例如 /usr/share/java) ,设置这两个 JAR 链接 JVM Class path,连接操作如下:
#安装rados-java,或者直接把编译好的rados.jar拷贝过来 sudo yum install jna git clone --recursive https://github.com/ceph/rados-java.git cd rados-java-master mvn install -Dmaven.test.skip=true #复制该JAR文件到公共目录 (例如 /usr/share/java) ,并且确认该文件和JNA JAR在你的JVM’s classpath目录中. sudo cp target/rados-0.6.0.jar /usr/share/java/rados-0.6.0.jar sudo ln -s /usr/share/java/jna.jar /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.242.b08-0.el7_7.x86_64/jre/lib/ext/jna.jar sudo ln -s /usr/share/java/rados-0.6.0.jar /usr/lib/jvm/default-java/jre/lib/ext/rados-0.6.0.jarrados.jar不太好下载,我从GitHub上下载了源码,用maven编译出了jar,直接用就行
csdn rados-0.7.0.jar下载地址
maven依赖如下,jna的依赖要和通过yum安装的版本(3.5.2)一致,否则会报错
<dependency> <groupId>net.java.dev.jna</groupId> <artifactId>jna</artifactId> <version>3.5.2</version> </dependency> <dependency> <groupId>com.ceph</groupId> <artifactId>rados</artifactId> <version>0.7.0</version> </dependency>代码功能是显示创建集群句柄,读取配置文件,连接集群,打印之前存进去的对象名。 运行:java -jar java-rados.jar cug.CephClient 新存的对象之一是kyle-say:Hello World!,输入命令限制kyle-say的value结果如图,可见存储成功。 查看刚才存进去的对象kyle-say的内容:sudo rados -p data get kyle-say -
import com.ceph.rados.IoCTX; import com.ceph.rados.Rados; import com.ceph.rados.exceptions.RadosException; import java.io.File; public class CephClient { public static void main (String args[]){ try { //创建集群句柄 Rados cluster = new Rados("admin"); System.out.println("Created cluster handle."); //读取配置文件 File f = new File("/etc/ceph/ceph.conf"); cluster.confReadFile(f); System.out.println("Read the configuration file."); //连接集群 cluster.connect(); System.out.println("Connected to the cluster."); //创建上下文 IoCTX io = cluster.ioCtxCreate("data"); //存一个字符串对象 String oidone = "kyle-say"; String contentone = "Hello World!"; io.write(oidone, contentone); //存一个字符串对象 String oidtwo = "my-object"; String contenttwo = "This is my object."; io.write(oidtwo, contenttwo); //打印之前存进去的对象名字 String[] objects = io.listObjects(); for (String object: objects) System.out.println("Put " + object); /* io.remove(oidone); io.remove(oidtwo); */ cluster.ioCtxDestroy(io); } catch (RadosException e) { System.out.println(e.getMessage() + ": " + e.getReturnValue()); } } }代码里的access_key,secret_key是你创建rgw子用户时候生成的,
import boto import boto.s3.connection from boto.s3.key import Key access_key = 'S2WEB1BIYXW35EX1YANG' secret_key = 'bgp5OvRJ640LJ46x5m6UANoEMQ5WSyImou8AFJPv' conn = boto.connect_s3( aws_access_key_id = access_key, aws_secret_access_key = secret_key, host = 'ceph', port = 7480, is_secure=False, calling_format = boto.s3.connection.OrdinaryCallingFormat(), ) bucket = conn.get_bucket('lt1_bucket') k = Key(bucket) k.key = 'test_file' filename = '004.jpg' k.set_contents_from_filename(filename)