2016-06-15 3 views
1

SparkからHbaseにテーブルを作成してデータを挿入しようとしましたが、そこからデータを読み込みました。Oozieを使用してHbaseにスパークする

コマンドラインからsparkジョブを実行するとうまく動作します。しかし、それは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) 

である私は火花ジャーと一緒にlibフォルダ内hbase-0.90.2.jarhbase-client-1.2.1.jarをも含めた、私は

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 

を得た例外があります。私はなぜそれがコマンドラインから作業していますが、おっとからではないのか分かりません。

+0

あなたはoozieジョブに問題があると思います... oozieワークフローoozie.action.sharelib.for.java = spark、hcatalog、hive、pig、atlas、hbaseのsharelibプロパティを使用しようとしましたか? – shahjapan

答えて

1

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

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

hbase-common jarを追加する必要があります。 (バージョン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を見つけてクラスパスに追加する必要があります。

+0

hbase-common jarを追加しました。 org/apache/hadoop/hbase/protobuf/generated/MasterProtos $ MasterService $ BlockingInterface – yAsH

+0

は答えを更新しました。チェックしてください。 – YoungHobbit

+0

上記のすべてのジャーを追加しました。しかし、まだ私は他の例外を受けている – yAsH

0

すべての* .jarをHBase_HOMEフォルダにOozieのライブラリフォルダに追加することをお勧めします。 (HBase_HOMEフォルダにあるJARと、OozieのlibbaseフォルダにあるHBASE_HOME/lib-> libフォルダ)

コマンドラインで動作させる必要がある理由は、HBASE_HOME環境が既に設定されている必要があるためです。

関連する問題