hbaseインポートデータのまとめ:
現在、2つの方法でインポートされています.
1.sqoopツールを使用してインポートします.
2.hbase java apiを書くことでインポートします.
まとめ:hbaseの入庫性能はまあまあで、クエリーの効率が高い.
現在、私たちのデータ量は極端なシーンに遭遇するのは難しい.
1.sqoopを使用してcppデータをhbaseにインポート
sqoop思義sql to hadoop.sqoopプロパティ:カラムインポートの指定、フォーマットインポートの指定、インクリメンタルインポートのサポート(更新のみインポート)など、さまざまなインポート方法をサポートします.
次のインポートは、rowkeyがmysqlテーブルの最初のカラムid名であるカラムファミリーを指定します.
104 CPPライブラリhbaseのインポート、各テーブルの使用時間、およびインポートバー数は、次のログを参照してください.
***テーブルのインポート
問題:データ量が100万以上の場合にインポートできますが、データ量が特に大きい場合はプログラムが停止し、sqoopがビッグデータ量にどのようにパラメータを構成するかはまだ検討されていません.CMSDOCUMENT表のように、104 cppライブラリは30 g程度あるので、第2の方式で導入することにしたが、柔軟性が高い.
2.hbase java apiでインポート:
ここで簡単に説明すると、エンジニアリングを構築し、mysqlの構成情報とhbaseの構成情報を記述する構成ファイルを定義し、主な部分はマルチスレッド、マルチタスク並列インポートデータを通じて、インポートする範囲とインポートするたびの本数からタスク数を計算し、nスレッドの輪訓を並列に起動してタスクを実行します.実行が完了したら、次回の実行を続行します.これにより、その後のテーブルのデータインポートに問題はありません.START_NUM,END_NUMはインポートの範囲を定義し、THREAD_NUMはスレッド数を定義し、IMPORT_NUMは、インポートされるたびにエントリ数を定義します.
プロファイルセクション:
実行後に印刷されるログ:
ワークキューにタスクが追加されました.タスク番号は:130です.
ワークキューにタスクが追加されました.タスク番号は:197です.
ワークキューにタスクが追加されました.タスク番号は:198です.
ワークキューにタスクが追加されました.タスク番号は:199です.
スレッド実行開始:worker 3;タスク番号:0実行中
スレッド実行開始:worker 2;タスク番号:2実行中
スレッド実行開始:worker 1;タスク番号:3実行中
スレッド実行開始:worker 7;タスク番号:1実行中
スレッド実行開始:worker 6;タスク番号:5実行中
handle is run;SELECT * from CMSDOCUMENT limit 25000,5000
スレッド実行開始:worker 0;タスク番号:4実行中
handle is run;SELECT * from CMSDOCUMENT limit 5000,5000
handle is run;SELECT * from CMSDOCUMENT limit 15000,5000
handle is run;SELECT * from CMSDOCUMENT limit 10000,5000
スレッド実行開始:worker 8;タスク番号:8実行中
handle is run;SELECT * from CMSDOCUMENT limit 40000,5000
スレッド実行開始:worker 5;タスク番号:7実行中
handle is run;SELECT * from CMSDOCUMENT limit 0,5000
スレッド実行開始:worker 4;タスク番号:6実行中
handle is run;SELECT * from CMSDOCUMENT limit 35000,5000
スレッド実行開始:worker 9;タスク番号:9実行中
handle is run;SELECT * from CMSDOCUMENT limit 20000,5000
handle is run;SELECT * from CMSDOCUMENT limit 45000,5000
handle is run;SELECT * from CMSDOCUMENT limit 30000,5000
1.sqoopツールを使用してインポートします.
2.hbase java apiを書くことでインポートします.
まとめ:hbaseの入庫性能はまあまあで、クエリーの効率が高い.
現在、私たちのデータ量は極端なシーンに遭遇するのは難しい.
1.sqoopを使用してcppデータをhbaseにインポート
sqoop思義sql to hadoop.sqoopプロパティ:カラムインポートの指定、フォーマットインポートの指定、インクリメンタルインポートのサポート(更新のみインポート)など、さまざまなインポート方法をサポートします.
次のインポートは、rowkeyがmysqlテーブルの最初のカラムid名であるカラムファミリーを指定します.
104 CPPライブラリhbaseのインポート、各テーブルの使用時間、およびインポートバー数は、次のログを参照してください.
***テーブルのインポート
./sqoop import --driver com.mysql.jdbc.Driver --connect "jdbc:mysql://172.10.23.104:3306/cpp" --table *** --username root --password root --hbase-table *** --column-family document --hbase-row-key MSGID --hbase-create-table --hbase-bulkload -m 8
14/07/31 16:46:46 INFO mapreduce.ImportJobBase: Transferred 6.8395 MB in 83.6469 seconds (83.7284 KB/sec)
14/07/31 16:46:46 INFO mapreduce.ImportJobBase: Retrieved 13648 records.
問題:データ量が100万以上の場合にインポートできますが、データ量が特に大きい場合はプログラムが停止し、sqoopがビッグデータ量にどのようにパラメータを構成するかはまだ検討されていません.CMSDOCUMENT表のように、104 cppライブラリは30 g程度あるので、第2の方式で導入することにしたが、柔軟性が高い.
2.hbase java apiでインポート:
ここで簡単に説明すると、エンジニアリングを構築し、mysqlの構成情報とhbaseの構成情報を記述する構成ファイルを定義し、主な部分はマルチスレッド、マルチタスク並列インポートデータを通じて、インポートする範囲とインポートするたびの本数からタスク数を計算し、nスレッドの輪訓を並列に起動してタスクを実行します.実行が完了したら、次回の実行を続行します.これにより、その後のテーブルのデータインポートに問題はありません.START_NUM,END_NUMはインポートの範囲を定義し、THREAD_NUMはスレッド数を定義し、IMPORT_NUMは、インポートされるたびにエントリ数を定義します.
プロファイルセクション:
#HBASE CONFIGURE
HBASE_ZOOKEEPER_QUORUM=XAYQ-Test3,XAYQ-Test4,XAYQ-Test5
HBASE_ZOOKEEPER_PROPERTY_CLIENT_PORT=2181
HBASE_MASTER=XAYQ-Test2:60020
HBASE_ROOTDIR=hdfs://XAYQ-Test2:9000/hbase/
DFS_NAME_DIR=/hadoop/dfs/name
DFS_DATA_DIR=/hadoop/dfs/data
FS_DEFAULT_NAME=hdfs://172.22.14.5:9000
HBASE_TABLE_NAME=CMSDOCUMENT4
HBASE_TABLE_FAMILY=document
#SOLR CONFIGURE
SOLR_SERVER=http://172.22.14.5:8080/solr
#MYSQL CONFIGURE
USERNAME=root
PASSWORD=root
JDBC_URL=jdbc:mysql://172.10.23.104:3306/cpp
JDBC_DRIVER=com.mysql.jdbc.Driver
TABLE_NAME=CMSDOCUMENT
#import data range ; example [0-10000]
START_NUM=0
END_NUM=1000000
#THREAD CLIENT
THREAD_NUM=10
#every time import data number
IMPORT_NUM=5000
実行後に印刷されるログ:
ワークキューにタスクが追加されました.タスク番号は:130です.
ワークキューにタスクが追加されました.タスク番号は:197です.
ワークキューにタスクが追加されました.タスク番号は:198です.
ワークキューにタスクが追加されました.タスク番号は:199です.
スレッド実行開始:worker 3;タスク番号:0実行中
スレッド実行開始:worker 2;タスク番号:2実行中
スレッド実行開始:worker 1;タスク番号:3実行中
スレッド実行開始:worker 7;タスク番号:1実行中
スレッド実行開始:worker 6;タスク番号:5実行中
handle is run;SELECT * from CMSDOCUMENT limit 25000,5000
スレッド実行開始:worker 0;タスク番号:4実行中
handle is run;SELECT * from CMSDOCUMENT limit 5000,5000
handle is run;SELECT * from CMSDOCUMENT limit 15000,5000
handle is run;SELECT * from CMSDOCUMENT limit 10000,5000
スレッド実行開始:worker 8;タスク番号:8実行中
handle is run;SELECT * from CMSDOCUMENT limit 40000,5000
スレッド実行開始:worker 5;タスク番号:7実行中
handle is run;SELECT * from CMSDOCUMENT limit 0,5000
スレッド実行開始:worker 4;タスク番号:6実行中
handle is run;SELECT * from CMSDOCUMENT limit 35000,5000
スレッド実行開始:worker 9;タスク番号:9実行中
handle is run;SELECT * from CMSDOCUMENT limit 20000,5000
handle is run;SELECT * from CMSDOCUMENT limit 45000,5000
handle is run;SELECT * from CMSDOCUMENT limit 30000,5000