2016-06-15 2 views
1

Я пытался создать таблицу в Hbase из Spark и вставить данные, прочитать данные из нее.Spark to Hbase using Oozie

Он отлично работает, когда я запускаю искровое задание из командной строки. Но он бросает разные типы исключений каждый раз, когда я пытаюсь запустить его с помощью oozie.

Вот моя искра кода HBase

val sc = new SparkContext("local", "Hbase spark") 

    val tableName = "Morbidity_Dummy2" 

    val conf = HBaseConfiguration.create() 
    // Add local HBase conf 
    conf.addResource(new Path("file:///opt/cloudera/....../hbase-site.xml")) 
    conf.set(TableInputFormat.INPUT_TABLE, tableName) 

//  create m7 table with column family 
    val admin = new HBaseAdmin(conf) 
    if(!admin.isTableAvailable(tableName)) { 
     print("Creating GHbase Table") 
     val tableDesc = new HTableDescriptor(tableName) 
     tableDesc.addFamily(new HColumnDescriptor("cf1" 
            .getBytes())) 
     admin.createTable(tableDesc) 

    }else{ 
     print("Table already exists!!") 
    } 

    //put data into table 
    val myTable = new HTable(conf, tableName) 
    for (i <- 414540 to 414545) { 

     var p = new Put(Bytes.toBytes(""+i)) 
     p.add("cf1".getBytes(), "morbidity_score".getBytes(), Bytes.toBytes(""+(i*5))) 
     p.add("cf1".getBytes(), "effective_date".getBytes(), Bytes.toBytes("2016-07-01")) 
     p.add("cf1".getBytes(), "cmi_id".getBytes(), Bytes.toBytes(""+i)) 

     myTable.put(p) 
    } 

    myTable.flushCommits() 
// create rdd 
    val hBaseRDD = sc.newAPIHadoopRDD(conf, classOf[TableInputFormat], 
     classOf[org.apache.hadoop.hbase.io.ImmutableBytesWritable], 
     classOf[org.apache.hadoop.hbase.client.Result]) 

    //get the row count 
    val count = hBaseRDD.count() 
    print("HBase RDD count:"+count) 
    System.exit(0) 

Вот исключение, которые я получил

Exception1: org.apache.hadoop.hbase.ZooKeeperConnectionException: org.apache.hadoop.hbase.ZooKeeperConnectionException: org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss for /hbase 
Exception2: java.lang.NoClassDefFoundError: org/apache/hadoop/hbase/exceptions/TimeoutIOException 
Exception3: java.lang.NoClassDefFoundError: org/apache/hadoop/hbase/HBaseIOException 

Я также включал hbase-0.90.2.jar и hbase-client-1.2.1.jar в Lib папки вместе с искровой баночкой. Я не понимаю, почему он работает из командной строки, но не из oozie.

+0

Я думаю, что у вас проблемы с работой oozie ... Вы пытались использовать свойство sharelib рабочего процесса oozie, oozie.action.sharelib.for.java = spark, hcatalog, hive, pig, atlas, hbase – shahjapan

ответ

1

Exception2: java.lang.NoClassDefFoundError: org/apache/hadoop/hbase/exceptions/TimeoutIOException

Exception3: java.lang.NoClassDefFoundError: org/apache/hadoop/hbase/HBaseIOException

Вам нужно добавить общую баночку hbase. (Попробуйте вариант 1.1.2)

Можете ли вы убедиться, что у вас есть эти банки.

hbase-procedure-1.1.2.jar 
hbase-server-1.1.2.jar 
hbase-common-1.1.2.jar 
hbase-client-1.1.2.jar 
hbase-protocol-1.1.2.jar 

Это процесс проб и ошибок. Вам нужно найти соответствующий jar для класса и добавить в classpath.

+0

I добавлен hbase-common jar. Теперь я получил новое исключение java.lang.NoClassDefFoundError: org/apache/hadoop/hbase/protobuf/generated/MasterProtos $ MasterService $ BlockingInterface – yAsH

+0

обновил ответ. пожалуйста, проверьте. – YoungHobbit

+0

Я добавил все вышеперечисленные банки. Но все же я получаю другие исключения – yAsH

0

Я бы порекомендовал вам добавить все * .jar в папку HBASE_HOME в папку библиотеки в Oozie. (JARs присутствуют в папке HBASE_HOME и папке HBASE_HOME/lib -> в lib в Oozie)

Причина, по которой он должен работать в вашей командной строке, заключается в том, что среда HBASE_HOME должна быть уже настроена.