sql >> データベース >  >> NoSQL >> HBase

Sparkシェルを使用したHBase上のSpark

    SparkコンテキストからHBaseテーブルを攻撃するには、いくつかの小さな調整が必要です。

    まず、40行の「t1」HBaseサンプルテーブルを簡単に作成しましょう

    [root@sandbox ~]# cat hbase_load.txt
    create 't1', 'f1'
    for i in '1'..'10' do \
    for j in '1'..'2' do \
    for k in '1'..'2' do \
    rnd=(0...64).map { (65 + rand(26)).chr }.join
    put 't1', "#{i}-#{j}-#{k}", "f1:#{j}#{k}", "#{rnd}"
    end \
    end \
    end
    [root@sandbox ~]# cat hbase_load.txt |hbase shell

    Sparkクラスパスを調整する必要があります(グアバ14が必要なので、最初に見つけたものが含まれています):

    [root@sandbox ~]# export SPARK_CLASSPATH=/usr/hdp/current/spark-client/lib/hbase-common.jar:/usr/hdp/current/spark-client/lib/hbase-client.jar:/usr/hdp/current/spark-client/lib/hbase-protocol.jar:/usr/hdp/current/spark-client/lib/hbase-server.jar:/etc/hbase/conf:/usr/hdp/2.3.2.0-2950/oozie/share/lib/spark/guava-14.0.1.jar
    
    [root@sandbox ~]# spark-shell --master yarn-client

    補足として、SPARK_CLASSPATHはSpark 1.5.x +で非推奨になっているため、代わりに
    [root@sandbox ~]# spark-shell --master yarn-client --driver-class-path=/usr/hdp/current/spark-client/lib/hbase-common.jar:/usr/hdp/current/spark-client/lib/hbase-client.jar:/usr/hdp/current/spark-client/lib/hbase-protocol.jar:/usr/hdp/current/spark-client/lib/hbase-hadoop2-compat.jar:/usr/hdp/current/spark-client/lib/hbase-server.jar:/etc/hbase/conf:/usr/hdp/2.3.2.0-2950/oozie/share/lib/spark/guava-14.0.1.jar

    以前のバージョンを使用してバグに遭遇しました:[…]原因:java.lang.IllegalStateException:未読のブロックデータなので、最初のバージョンを使用しました(SPARK_CLASSPATHを使用)。今度はScalaの時間です!
    scala>
    
    import org.apache.hadoop.hbase.{HBaseConfiguration, HTableDescriptor}
    import org.apache.hadoop.hbase.client.{HBaseAdmin, Result}
    import org.apache.hadoop.hbase.io.ImmutableBytesWritable
    import org.apache.hadoop.hbase.mapreduce.TableInputFormat
    
    val tableName = "t1"
    val hconf = HBaseConfiguration.create()
    hconf.set(TableInputFormat.INPUT_TABLE, "t1")
    
    val hBaseRDD = sc.newAPIHadoopRDD(hconf, classOf[TableInputFormat], classOf[ImmutableBytesWritable], classOf[Result])
    println("records found : " + hBaseRDD.count())
    
    
    [...]
    2016-04-07 18:44:40,553 INFO [main] scheduler.DAGScheduler: Job 0 finished: count at <console>:30, took 2.092481 s
    Number of Records found : 40
    HBase Adminを使用してテーブルリスト、スナップショット、または管理関連の操作を表示する場合は、
    scala> val admin = new HBaseAdmin(hconf)
    
    admin.listTables
    また、テーブルを作成する場合:
    val tableDesc = new HTableDescriptor(tableName)
    admin.createTable(tableDesc)

    1. 期間ではなく特定の時間にredisキャッシュキーを期限切れにする

    2. mongoDBアグリゲーション内のフィールドのタイプを変更し、$ lookupはフィールドのインデックスを利用しますか?

    3. Redisはシングルスレッドです。では、なぜレタスを使うべきなのですか?

    4. Mongodbの埋め込みドキュメントプロパティを更新しています