mysql資料移轉hbase問題

來源:互聯網
上載者:User

無法直接dump,寫了java多線程程式做遷移

問題1:Operation not allowed after ResultSet closed

裸jdbc語句,一個線程跑7個表,只有第一個表時候出這個問題,方法改為static synchronized可以解決,但速度慢的不能忍受,最終在同事建議下,換用spring jdbctemplate,解決

問題2:SELECT `token`, `count` FROM {TABLE_NAME}  ORDER BY `token` DESC LIMIT ?, ?  到100w後速度不能忍受的慢

問題情境為遍曆資料庫,可以記錄上次的最大token,然後 where token>? limit ? 

limit單值相當於 limit 0,? 速度會很快。 真正的分頁大於100萬時該如何取是個問題,還沒想到解決方案

mysql> explain select token,count from `trackurl_0`.`click_count_00` order by token limit 1000000,10000;
+----+-------------+----------------+-------+---------------+---------+---------+------+---------+-------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+----------------+-------+---------------+---------+---------+------+---------+-------+
| 1 | SIMPLE | click_count_00 | index | NULL | PRIMARY | 30 | NULL | 1010000 | |
+----+-------------+----------------+-------+---------------+---------+---------+------+---------+-------+

 

explain select token,count from `trackurl_0`.`click_count_00` where token > "asdf" limit 10000;
+----+-------------+----------------+-------+---------------+---------+---------+------+---------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+----------------+-------+---------------+---------+---------+------+---------+-------------+
| 1 | SIMPLE | click_count_00 | range | PRIMARY | PRIMARY | 30 | NULL | 2865959 | Using where |
+----+-------------+----------------+-------+---------------+---------+---------+------+---------+-------------+

 

type: 聯結類型,從這個選項我們可以初步判斷查詢效率,有以下幾種不同的類型(按從最佳到最壞排序):
    (1).system: 表中僅有一行記錄,這是const的一個特例。
    (2).const: 表中最多有一行符合查詢條件,它在查詢開始時被讀取。因為只有一行,這行的列值可被最佳化器剩餘部分認為是常數。const表很快,因為它們只被讀取一次!(如上面的查詢)
    (3).eq_ref: 對於每個來自於前面的表的行組合,從該表中讀取一行。例如:select * from A,B where A.id=B.id,如果id在B表中是unique或primary key,會返回這個類型。它是說對於A表中的每一行,在B表中讀取符合記錄的一行。除了const之外,這是最好的聯結類型。
    (4).ref: 這個類型跟eq_ref類似,不同的是eq_ref能根據unique或主鍵在後面的表中選擇出唯一的行,而不能確定唯一行,則使用這個類型。
    (5).ref_or_null: 該聯結類型如同ref,但是添加了MySQL 可以專門搜尋包含NULL值的行。在解決子查詢中經常使用該聯結類型的最佳化。
    (6).index_merge: 索引合并方法用於通過range掃描搜尋行並將結果合成一個。合并會產生並集、交集或者進行中的掃描的交集的並集。在EXPLAIN輸出中,該方法表現 為type列內的index_merge。在這種情況下,key列包含一列使用的索引,key_len包含這些索引的最長的關鍵元素。
    (7).unique_subquery: unique_subquery是一個索引尋找函數,可以完全替換子查詢,效率更高。explain select * from jos_content where id in (select id from jos_categories);會使用這個類型。
    (8).index_subquery: 該聯結類型類似於unique_subquery。可以替換IN子查詢,但只適合子查詢中的非唯一索引。
    (9).range: 只檢索給定範圍的行,使用一個索引來選擇行。key列顯示使用了哪個索引。key_len包含所使用索引的最長關鍵元素。在該類型中ref列為NULL。 當使用=、<>、>、>=、<、<=、IS NULL、<=>、BETWEEN或者IN操作符,用常量比較關鍵字列時,可以使用這個類型。
    (10).index: 這與ALL相同,除了只有索引樹被掃描。這通常比ALL快,因為索引檔案通常比資料檔案小。
    (11).all: 對於每個來自於先前的表的行組合,將要做一個完整的表掃描。如果表格是第一個沒標記const的表,效果不是很好,並且在所有的其他情況下很差。你可以通過增加更多的索引來避免ALL,使得行能從早先的表中基於常數值或列值被檢索出來。

(原文:http://www.linlook.com/detail_MTE3MA==.html)

問題3:ArrayBlockingQueue 阻塞丟資料

offer(E e) 
          Inserts the specified element at the tail of this queue if it is possible to do so immediately without exceeding the queue's capacity, returning true upon success and false if this queue is full.

隊列滿時offer會返回false,設定時間的話等到逾時時間會返回false,所以不能讓隊列滿,滿了就會丟資料

問題4:hbase單線程插入只有500左右

多線程方式或批量插入方式解決,測速大概在50000條每秒,大概50MB左右的資料量,占頻寬的一半。

 

hbase shell wiki: http://wiki.apache.org/hadoop/Hbase/Shell

 

hbase依賴的jar包:

hadoop core 需要使用 commons.logging

zookeeper 卻使用log4j

其實hbase用戶端只需要幾個jar包即能完成常用功能

commons-configuration-1.6

commons-lang-2.6

commons-logging-1.1.1

hadoop-core-1.0.0

hbase-0.92.1

log4j-1.2.16

slf4j-api-1.6.1

slf4j-log4j12-1.5.8

zookeeper-3.4.3

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.