我正在使用Spark + Hive构建图形和关系,并将平面OPV / OPE文件导出到HDFS,每个reducer一个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方法来解决此问题,希望能解决此问题,但是我有一些疑问/建议:
opgdl.loadData(opg, 'hdfs:///user/felipeferreira/opvs/**/*.csv' ...
谢谢!
答案 0 :(得分:2)
您可以使用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);
让我们知道这是否适合您。
答案 1 :(得分:0)
为了进行跟踪,这是我们采用的解决方案:
通过groovy shell下方文件夹中的NFS网关安装hdfs。
将文件名导出到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网关的瓶颈,但是我们将在下周对此进行评估。
到目前为止,图形数据加载运行良好。 如果有人建议采用更好的方法,请告诉我!