HBase導(dǎo)入SQL Server數(shù)據(jù)庫(kù)數(shù)據(jù)

[HBase導(dǎo)入SQL Server數(shù)據(jù)庫(kù)數(shù)據(jù)]

在先前的幾篇隨筆中已經(jīng)介紹了Hadoop驻债、Zookeeper矗愧、Hbase的分布式框架搭建方案柱徙,目前已經(jīng)搭建完成了一個(gè)包含11個(gè)節(jié)點(diǎn)的分布式集群席怪。而對(duì)于HBase數(shù)據(jù)庫(kù)的使用僅限于測(cè)試性質(zhì)的增刪改查指令澎粟,為了進(jìn)一步熟悉分布式框架的使用蛀序,本文介紹將已有的數(shù)據(jù)從關(guān)系型數(shù)據(jù)庫(kù)SQL Server中導(dǎo)入到HBase中的方法。

要完成從關(guān)系型數(shù)據(jù)庫(kù)到HBase數(shù)據(jù)的遷移活烙,我們需要使用Sqoop工具徐裸,Sqoop是Apache的一個(gè)獨(dú)立項(xiàng)目,設(shè)計(jì)目的即是在Hadoop(Hive)和傳統(tǒng)數(shù)據(jù)庫(kù)(MySQL啸盏、postgresql)之間進(jìn)行數(shù)據(jù)的傳遞倦逐。Sqoop工具基于數(shù)據(jù)倉(cāng)庫(kù)工具Hive,通過(guò)Hive來(lái)將數(shù)據(jù)查詢轉(zhuǎn)換成MapReduce任務(wù)實(shí)現(xiàn)數(shù)據(jù)的傳遞宫补。因此檬姥,要完成本次數(shù)據(jù)的遷移,我們需要以下幾個(gè)準(zhǔn)備:

①Hive:apache-hive-2.1.1-bin.tar.gz

②Sqoop:sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz

③JDBC for SQL Server:sqljdbc_3.0.1301.101_enu.tar.gz

④Connector between SQL Server and Sqoop:sqoop-sqlserver-1.0.tar.gz

======================以下所有操作均在Master主機(jī)上并且以root用戶執(zhí)行======================

1粉怕、安裝Hive

①建立hive目錄

cd /home

mkdir hive

②解壓安裝包(安裝包移至/home/hive下)

tar -zxvf apache-hive-2.1.1-bin.tar.gz

③設(shè)置環(huán)境變量

vi /etc/profile

追加以下:

export HIVE_HOME=/home/hive/apche-hive-2.1.1-bin

export PATH=$HIVE_HOME/bin:$PATH

export PATH

追加以下:

export HCAT_HOME=$HIVE_HOME/hcatalog

④使配置生效

source /etc/profile

2健民、安裝sqoop

①建立sqoop目錄

cd /home

mkdir sqoop

②解壓安裝包(安裝包移至/home/sqoop下)

tar -zxvf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz

③設(shè)置環(huán)境變量

vi /etc/profile

追加以下:

export SQOOP_HOME=/home/sqoop/sqoop-1.4.6.bin__hadoop-2.0.4-alpha

export SQOOP_CONF_DIR=$SQOOP_HOME/conf

export PATH=$SQOOP_HOME/bin:$PATH

export PATH

④使配置生效

source /etc/profile

3、配置JDBC

①解壓(位置隨意)

tar -zxvf sqljdbc_3.0.1301.101_enu.atr.gz

②復(fù)制jdbc到sqoop下

cp sqljdbc_3.0/enu/sqljdbc4.jar /home/sqoop/sqoop-1.4.6.bin__hadoop-2.0.4-alpha/lib

4贫贝、配置SQL Server sqoop Connector

①解壓(位置隨意秉犹,這里是/home)

tar -zxvf sqoop-sqlserver-1.0.tar.gz

②設(shè)置環(huán)境變量

vi /etc/profile

追加以下:

export MSSQL_CONNECTOR_HOME=/home/sqoop-sqlserver-1.0/

配置生效:

source /etc/profile

③配置到sqoop

cd sqoop-sqlserver-1.0

./install.sh

5蛉谜、 配置sqoop

存在這部分工作的原因是sqoop的默認(rèn)配置會(huì)有一些我們不需要用到的東西,在其配置文件$SQOOP_HOME/bin/configure-sqoop文件中崇堵,定義了許多需要預(yù)先配置的參數(shù)與環(huán)境型诚,有些我們已經(jīng)配置完成,但是另外有些是不需要用到的(目前還沒(méi)意識(shí)到有什么作用)鸳劳,因此狰贯,為了防止運(yùn)行時(shí)檢查配置不通過(guò),我們直接的處理辦法就是取消這部分的配置檢查赏廓。

注釋ACCUMULO相關(guān)配置:在configure-sqoop文件中涵紊,注釋掉與ACCUMULO_HOME相關(guān)的所有命令行,并保存退出幔摸。

6摸柄、目前的環(huán)境變量

值得注意的是,之前并沒(méi)有加入HBase的環(huán)境變量既忆,在這里是需要把HBase相關(guān)的環(huán)境變量加入的驱负。

<pre style="margin: 0px; padding: 0px; white-space: pre-wrap; word-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;"># /etc/profile

System wide environment and startup programs, for login setup # Functions and aliases go in /etc/bashrc

It's NOT a good idea to change this file unless you know what you # are doing. It's much better to create a custom.sh shell script in # /etc/profile.d/ to make custom changes to your environment, as this # will prevent the need for merging in future updates.

pathmunge () {
case ":${PATH}:" in
:"$1":)
;; *) if [ "$2" = "after" ] ; then
PATH=$PATH:$1
else PATH=$1:$PATH fi
esac
} if [ -x /usr/bin/id ]; then if [ -z "$EUID" ]; then # ksh workaround
EUID=id -u
UID=id -ru
fi
USER="id -un"
LOGNAME=$USER
MAIL="/var/spool/mail/$USER" fi

Path manipulation

if [ "$EUID" = "0" ]; then
pathmunge /sbin
pathmunge /usr/sbin
pathmunge /usr/local/sbin
else
pathmunge /usr/local/sbin after
pathmunge /usr/sbin after
pathmunge /sbin after
fi

HOSTNAME=/bin/hostname 2>/dev/null
HISTSIZE=1000
if [ "$HISTCONTROL" = "ignorespace" ] ; then
export HISTCONTROL=ignoreboth
else
export HISTCONTROL=ignoredups
fi

export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL

By default, we want umask to get set. This sets it for login shell

Current threshold for system reserved uid/gids is 200

You could check uidgid reservation validity in

/usr/share/doc/setup-*/uidgid file

if [ $UID -gt 199 ] && [ "id -gn" = "id -un" ]; then
umask 002
else
umask 022
fi

for i in /etc/profile.d/.sh ; do
if [ -r "$i" ]; then
if [ "${-#
i}" != "$-" ]; then
. "$i"
else . "$i" >/dev/null 2>&1 fi
fi
done

unset i
unset -f pathmunge

export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.131.x86_64
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin #hadoop
export HADOOP_HOME=/home/hadoop/hadoop-2.7.3 export PATH=$PATH:$HADOOP_HOME/sbin
export PATH=$PATH:$HADOOP_HOME/bin #zookeeper
export ZOOKEEPER_HOME=/home/zookeeper/zookeeper-3.4.6/ export PATH=$ZOOKEEPER_HOME/bin:$PATH export PATH #HBase
export HBASE_HOME=/home/hbase/hbase-1.2.4 export PATH=$HBASE_HOME/bin:$PATH export PATH #hive
export HIVE_HOME=/home/hive/apache-hive-2.1.1-bin
export PATH=$HIVE_HOME/bin:$PATH export PATH

export HCAT_HOME=$HIVE_HOME/hcatalog #sqoop
export SQOOP_HOME=/home/sqoop/sqoop-1.4.6.bin__hadoop-2.0.4-alpha
export SQOOP_CONF_DIR=$SQOOP_HOME/conf
export PATH=$SQOOP_HOME/bin:$PATH export PATH

export MSSQL_CONNECTOR_HOME=/home/sqoop-sqlserver-1.0/</pre>

7、數(shù)據(jù)遷移實(shí)驗(yàn)

在執(zhí)行遷移命令之前患雇,需要在Hbase中建立好對(duì)應(yīng)的表

#hbase shell

進(jìn)入hbase shell后執(zhí)行

>create 'test', 'cf'

然后在Terminal中執(zhí)行

#sqoop import --connect 'jdbc:sqlserver://<IP Address>;username=<username>;password=<password>;database=<database>' --table <sql server table name> --hbase-table <hbase table name> --column-family <hbase table column family name> --hbase-row-key <sql server table primary key>

需要注意:

①如果SQL Server的表是正常的單一主鍵的表結(jié)構(gòu)电媳,那么可以直接指定hbase-row-key執(zhí)行上述命令,此時(shí)該命令會(huì)默認(rèn)以多個(gè)mapreduce任務(wù)執(zhí)行該指令

②如果SQL Server的表是聯(lián)合主鍵庆亡,那么這樣導(dǎo)入就會(huì)存在一個(gè)問(wèn)題,無(wú)法根據(jù)主鍵分解查詢?nèi)蝿?wù)捞稿,也就沒(méi)有辦法進(jìn)行MapReduce又谋,那么此時(shí)必須指定參數(shù) '-m 1'只用一個(gè)mapreduce任務(wù)

③針對(duì)沒(méi)有主鍵的情況,若數(shù)據(jù)量巨大娱局,必須分為多個(gè)mapreduce任務(wù)彰亥,那么需要找到一個(gè)拆分字段,從而hive可以根據(jù)該字段拆分任務(wù)衰齐。此時(shí)我們須在導(dǎo)入指令中添加'--split-by <id>'

在我實(shí)際的操作中任斋,SQL Server中的表結(jié)構(gòu)是聯(lián)合主鍵,第一次導(dǎo)入表中100條數(shù)據(jù)記錄耻涛,根據(jù)這篇博客的介紹废酷,配置了$SQOOP_HOME/conf/sqoop-site.xml,我指定了'--hbase-row-key <id1>,<id2>'抹缕,并指定'-m 1'澈蟆,導(dǎo)入數(shù)據(jù)成功。(耗時(shí)22sec)

image

第二次嘗試將數(shù)據(jù)庫(kù)中的近160W條數(shù)據(jù)記錄導(dǎo)入到HBase中卓研,添加參數(shù)'--split-by <id>'趴俘,并指定'-m 12'睹簇,數(shù)據(jù)同樣導(dǎo)入成功。(耗時(shí)17min25sec)

image

8寥闪、存在問(wèn)題

對(duì)sqoop拆分任務(wù)的理解仍然不夠深入太惠,自己完成的實(shí)驗(yàn)雖然成功,但是并沒(méi)有做對(duì)比實(shí)驗(yàn)確定真正的影響因素

9疲憋、參考文章

Sqoop User Guide (v1.4.6)

利用SQOOP將數(shù)據(jù)從數(shù)據(jù)庫(kù)導(dǎo)入到HDFS - 我喂自己袋鹽 - 博客頻道 - CSDN.NET

Sqoop將SQLServer數(shù)據(jù)導(dǎo)入HBase - nma_123456的專欄 - 博客頻道 - CSDN.NET

Centos 利用sqoop從sqlserver導(dǎo)入數(shù)據(jù)到HDFS或Hive - 王偉挺的專欄 - 博客頻道 - CSDN.NET

sqoop并行導(dǎo)入數(shù)據(jù) - 東杰書屋 - 博客頻道 - CSDN.NET

sqoop針對(duì)聯(lián)合主鍵的表導(dǎo)入hbase的簡(jiǎn)單控制技巧 - 黃剛的技術(shù)博客 - 博客頻道 - CSDN.NET

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末凿渊,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子柜某,更是在濱河造成了極大的恐慌嗽元,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,635評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件喂击,死亡現(xiàn)場(chǎng)離奇詭異剂癌,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)翰绊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門佩谷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人监嗜,你說(shuō)我怎么就攤上這事谐檀。” “怎么了裁奇?”我有些...
    開封第一講書人閱讀 168,083評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵桐猬,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我刽肠,道長(zhǎng)溃肪,這世上最難降的妖魔是什么胧华? 我笑而不...
    開封第一講書人閱讀 59,640評(píng)論 1 296
  • 正文 為了忘掉前任慨绳,我火速辦了婚禮匆篓,結(jié)果婚禮上眶拉,老公的妹妹穿的比我還像新娘甜橱。我一直安慰自己葵腹,他們只是感情好咆畏,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評(píng)論 6 397
  • 文/花漫 我一把揭開白布燃异。 她就那樣靜靜地躺著坚嗜,像睡著了一般夯膀。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上苍蔬,一...
    開封第一講書人閱讀 52,262評(píng)論 1 308
  • 那天棍郎,我揣著相機(jī)與錄音,去河邊找鬼银室。 笑死涂佃,一個(gè)胖子當(dāng)著我的面吹牛励翼,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播辜荠,決...
    沈念sama閱讀 40,833評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼汽抚,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了伯病?” 一聲冷哼從身側(cè)響起造烁,我...
    開封第一講書人閱讀 39,736評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎午笛,沒(méi)想到半個(gè)月后惭蟋,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,280評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡药磺,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評(píng)論 3 340
  • 正文 我和宋清朗相戀三年告组,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片癌佩。...
    茶點(diǎn)故事閱讀 40,503評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡木缝,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出围辙,到底是詐尸還是另有隱情我碟,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布姚建,位于F島的核電站矫俺,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏掸冤。R本人自食惡果不足惜厘托,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望贩虾。 院中可真熱鬧,春花似錦沥阱、人聲如沸缎罢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)策精。三九已至,卻和暖如春崇棠,著一層夾襖步出監(jiān)牢的瞬間咽袜,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工枕稀, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留询刹,地道東北人谜嫉。 一個(gè)月前我還...
    沈念sama閱讀 48,909評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像凹联,于是被迫代替她去往敵國(guó)和親沐兰。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容