source: other-projects/hathitrust/solr-extracted-features/trunk/src/main/java/org/hathitrust/PrepareForIngest.java@ 30975

Last change on this file since 30975 was 30975, checked in by davidb, 8 years ago

Introduction of new solr-url command line argument, leading to some other adjustments in RUN scripts

  • Property svn:executable set to *
File size: 5.3 KB
RevLine 
[30898]1package org.hathitrust;
2
3import java.io.Serializable;
4import org.apache.commons.cli.*;
5
6import org.apache.spark.api.java.*;
7import org.apache.spark.SparkConf;
8
9public class PrepareForIngest implements Serializable
10{
11 private static final long serialVersionUID = 1L;
12
[30945]13 public static final int NUM_PARTITIONS = 6; // default would appear to be 2
14
[30937]15 protected String _input_dir;
16 protected String _json_list_filename;
[30975]17 protected String _solr_url;
[30937]18 protected String _output_dir;
19
20 protected int _verbosity;
21
[30975]22 public PrepareForIngest(String input_dir, String json_list_filename,
23 String solr_url, String output_dir, int verbosity)
[30898]24 {
25 _input_dir = input_dir;
[30918]26 _json_list_filename = (json_list_filename != null) ? json_list_filename : input_dir;
[30898]27 _output_dir = output_dir;
[30934]28 _verbosity = verbosity;
[30898]29 }
30
31 public void exec()
32 {
[30937]33 String spark_app_name = "HathiTrust Extract Features: Prepare for Solr Ingest";
[30941]34 spark_app_name += " [" + _json_list_filename + "]";
[30898]35
[30937]36 SparkConf conf = new SparkConf().setAppName(spark_app_name);
37 JavaSparkContext jsc = new JavaSparkContext(conf);
38
[30945]39 if (_verbosity >= 2) {
[30943]40 System.out.println("Default Minimum Partions: " + jsc.defaultMinPartitions());
41 System.out.println("Default Parallelism: " + jsc.defaultParallelism());
42 }
[30937]43
[30945]44 JavaRDD<String> json_list_data = jsc.textFile(_json_list_filename,NUM_PARTITIONS).cache();
[30898]45
[30975]46 PagedJSON paged_json = new PagedJSON(_input_dir,_solr_url, _output_dir,_verbosity);
[30945]47 JavaRDD<String> json_ids = json_list_data.flatMap(paged_json).cache();
[30898]48
49 long num_ids = json_ids.count();
[30934]50 System.out.println("");
51 System.out.println("############");
[30942]52 System.out.println("# Number of page ids: " + num_ids);
[30934]53 System.out.println("############");
54 System.out.println("");
[30937]55
[30951]56 String rdd_save_file = "rdd-solr-json-page-files";
57 json_ids.saveAsTextFile(rdd_save_file);
[30975]58 System.out.println("############");
[30951]59 System.out.println("# Saved RDD of Solr JSON page files, top-level, as:");
60 System.out.println("# " + rdd_save_file);
61 System.out.println("############");
62 System.out.println("");
63
[30937]64 jsc.close();
[30898]65 }
66
[30975]67 public static void print_usage(HelpFormatter formatter, Options options)
68 {
69 formatter.printHelp("RUN.bash [options] input-dir json-filelist.txt", options);
70 }
[30898]71 public static void main(String[] args) {
72
73
74 Options options = new Options();
75
76 //.withType(Integer.class)
[30945]77/*
[30934]78 options.addOption(OptionBuilder.withLongOpt("verbosity")
79 .withDescription("Set to control the level of debugging output [0=none, 1=some, 2=lots]")
[30898]80 .hasArg()
[30934]81 .withArgName("v")
[30898]82 .isRequired(false)
83 .create());
[30945]84*/
[30898]85 //Option num_cores_opt = new Option("n", "num-cores", true, "Number of cores to use");
86 //num_cores_opt.setRequired(false);
87 //options.addOption(num_cores_opt);
88
[30945]89 Option verbosity_opt = new Option("v", "verbosity", true,
90 "Set to control the level of debugging output [0=none, 1=some, 2=lots]");
91 verbosity_opt.setRequired(false);
92 options.addOption(verbosity_opt);
93
[30975]94 Option output_dir_opt = new Option("o", "output-dir", true,
95 "If specified, save BZipped Solr JSON files to this directory");
96 output_dir_opt.setRequired(false);
97 options.addOption(output_dir_opt);
[30945]98
[30975]99 Option solr_url_opt = new Option("u", "solr-url", true,
100 "If specified, the URL to post the Solr JSON data to");
101 solr_url_opt.setRequired(false);
102 options.addOption(solr_url_opt);
103
104 Option dry_run_opt = new Option("r", "dry-run", false,
105 "Used to initiate a 'dry-run' where the files are all read in, but nothing is ingested/saved");
106 dry_run_opt.setRequired(false);
107 options.addOption(dry_run_opt);
108
[30945]109 // need to work with CLI v1.2 as this is the JAR that is bundled with Hadoop/Spark
110 CommandLineParser parser = new GnuParser();
[30975]111 //CommandLineParser parser = new DefaultParser(); // if working with CLI v1.3 and above
112
[30898]113 HelpFormatter formatter = new HelpFormatter();
[30975]114 CommandLine cmd = null;
[30898]115
116 try {
117 cmd = parser.parse(options, args);
118 }
119 catch (ParseException e) {
120 System.err.println(e.getMessage());
[30975]121 print_usage(formatter,options);
[30898]122 System.exit(1);
[30975]123 //return; // prevents 'cmd may not be assigned' compiler error in Eclipse
[30898]124 }
125
126 //value = ((Integer)cmdLine.getParsedOptionValue("num-cores")).intValue();
127 //value = ((Integer)cmdLine.getOptionValue("num-cores","2")).intValue();
128
129 //cmd.hasOption("json-filelist")
[30945]130
[30934]131 String verbosity_str = cmd.getOptionValue("verbosity","0");
132 int verbosity = Integer.parseInt(verbosity_str);
[30898]133
[30975]134 String output_dir = cmd.getOptionValue("output-dir",null);
135 String solr_url = cmd.getOptionValue("solr-url",null);
136 boolean dry_run = cmd.hasOption("dry-run");
137
[30937]138 String[] filtered_args = cmd.getArgs();
[30898]139
[30975]140 if (filtered_args.length != 2) {
141 print_usage(formatter,options);
[30937]142 System.exit(1);
[30898]143 }
[30975]144
145 if (!dry_run && ((output_dir == null) && (solr_url==null))) {
146 System.err.println("Need to specify either --solr-url or --output-dir otherwise generated files are not ingested/saved");
147 print_usage(formatter,options);
148 }
[30934]149 String json_list_filename = filtered_args[0];
150 String input_dir = filtered_args[1];
[30975]151 //String output_dir = filtered_args[2];
[30898]152
[30975]153 PrepareForIngest prep_for_ingest
154 = new PrepareForIngest(input_dir,json_list_filename,solr_url,output_dir,verbosity);
[30898]155 prep_for_ingest.exec();
156
157 }
158}
Note: See TracBrowser for help on using the repository browser.