OraclePropertyGraphDataLoader从HDFS加载数据

OraclePropertyGraphDataLoader从HDFS加载数据,oracle,bigdata,graph-theory,cloudera,oracle-spatial,Oracle,Bigdata,Graph Theory,Cloudera,Oracle Spatial,我正在使用Spark+Hive构建图形和关系,并将平面OPV/OPE文件导出到HDFS,每个减速机一个OPV/OPE CSV。 我们所有的图形数据库都已准备好加载到OPG/PGX上,以便进行分析,这是一个非常有用的工具 现在,我们要在Oracle属性图上加载这些顶点/边 我以这种方式从hdfs转储文件名: $ hadoop fs -find '/user/felipeferreira/dadossinapse/ops/*.opv/*.csv' | xargs -I{} echo 'hdfs:/

我正在使用Spark+Hive构建图形和关系,并将平面OPV/OPE文件导出到HDFS,每个减速机一个OPV/OPE CSV。 我们所有的图形数据库都已准备好加载到OPG/PGX上,以便进行分析,这是一个非常有用的工具

现在,我们要在Oracle属性图上加载这些顶点/边

我以这种方式从hdfs转储文件名:

$ hadoop fs -find '/user/felipeferreira/dadossinapse/ops/*.opv/*.csv' | xargs -I{}  echo 'hdfs://'{} > opvs.lst
$ hadoop fs -find '/user/felipeferreira/dadossinapse/ops/*.ope/*.csv' | xargs -I{}  echo 'hdfs://'{} > opes.lst
我在groovy shell上进行实验,遇到了一些问题和疑问:

opvs = new File('opvs.lst') as String[]
opes = new File('opes.lst') as String[]

opgdl.loadData(opg, opvs, opes, 72)
这不是开箱即用的,我收到的错误如下

java.lang.IllegalArgumentException: loadData: part-00000-f97f1abf-5f69-479a-baee-ce0a7bcaa86c-c000.csv flat file does not exist
我将使用loadData接口中可用的InputStream方法来管理此问题,希望能解决此问题,但我有一些问题/建议:

  • loadData是否支持vfs以便我可以加载'hdfs://...'直接存档
  • 在文件名中使用glob语法并不好,因此我们可以执行以下操作:
opgdl.loadData(opg,'hdfs:///user/felipeferreira/opvs/**/*.csv'…


提前感谢!

为了便于跟踪,以下是我们采用的解决方案:

通过NFS网关将hdfs装载到groovy shell下面的文件夹中

将文件名导出到OPV/OPE文件列表:

$ find ../hadoop/user/felipeferreira/dadossinapse/ -iname "*.csv" | grep ".ope" > opes.lst
$ find ../hadoop/user/felipeferreira/dadossinapse/ -iname "*.csv" | grep ".opv" > opvs.lst
然后,在opg/hbase上加载数据就这么简单:

cfg = GraphConfigBuilder.forPropertyGraphHbase().setName("sinapse").setZkQuorum("bda1node05,bda1node06").build()

opg = OraclePropertyGraph.getInstance(cfg)
opgdl = OraclePropertyGraphDataLoader.getInstance()

opvs = new File("opvs.lst") as String[]
opes = new File("opes.lst") as String[]

opgdl.loadData(opg, opvs, opes, 100)
这似乎受到nfs网关的限制,但我们将在下周对此进行评估

到目前为止,图形数据加载运行良好。
如果有人建议更好的方法,请告诉我!

您可以使用
OraclePropertyGraphDataLoader
中的替代API,其中可以指定用于加载的opv/ope文件的
InputStream
对象。这样,您可以使用
FsDataInputStream
对象从HDFS环境读取文件新界

以下是一个小样本:

// ====== Init HDFS File System Object
Configuration conf = new Configuration();
// Set FileSystem URI
conf.set("fs.defaultFS", hdfsuri);
conf.set("fs.hdfs.impl", org.apache.hadoop.hdfs.DistributedFileSystem.class.getName());
conf.set("fs.file.impl", org.apache.hadoop.fs.LocalFileSystem.class.getName());
// Set HADOOP user
System.setProperty("HADOOP_USER_NAME", "hdfs");
System.setProperty("hadoop.home.dir", "/");

//Get the filesystem - HDFS
FileSystem fs = FileSystem.get(URI.create(hdfsuri), conf);`

// Read files into InputStreams using HDFS FsDataInputStream Java APIs
**Path pathOPV = new Path("/path/to/file.opv");
FSDataInputStream inOPV = fileSystem.open(pathOPV);
Path pathOPV = new Path("/path/to/file.ope");
FSDataInputStream inOPE = fileSystem.open(pathOPE);**

cfg = GraphConfigBuilder.forPropertyGraphHbase().setName("sinapse").setZkQuorum("bda1node05,bda1node06").build()

opg = OraclePropertyGraph.getInstance(cfg)
opgdl = OraclePropertyGraphDataLoader.getInstance();
opgdl.loadData(opg, **inOPV, inOPE**, 100);

让我们知道这个问题是否适合您。

这是一个很好的问题!它无疑会增加我们对Oracle Spatial和Graph的了解。我还想了解更多关于这个问题的信息,因为使用变通方法加载文件可能会非常不方便。我正在使用一个适合现在的变通方法,使用hdfs nfs网关。如果有是一种更合适且可分发的方式(因为nfs网关不使用仲裁),我们想知道!:d谢谢你,Gabriela!Web仍在SFO参加分析数据峰会,下周我将去untol度假。回来的第一天我会尝试一下并向你反馈!再次,为了跟踪:我们实际上不需要向hbase写入opv/ope文件。@korbi刚刚建议我可以直接加载PGX来自flatfiles。我为没有仔细阅读手册而道歉。无论如何,既然你花了时间回答我,我将测试此方法以备将来参考。提前谢谢。