1. 程式人生 > >通過sqoop將MySQL資料庫中的資料匯入Hbase

通過sqoop將MySQL資料庫中的資料匯入Hbase

從接觸到大資料到成功的實現一個功能期間走了不少彎路也踩了不少坑,這裡作為我的學習筆記也可以作為小白們的前車之鑑,少走彎路,有不正確之處,望指出

環境準備:

hadoop、hbase、sqoop、mysql

hbase和hadoop版本存在相容問題,具體相容資訊參照官網和相關資料

一、sqoop安裝配置

1.下載 下載地址

2.解壓

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

mv sqoop-1.4.6.bin__hadoop-2.0.4-alpha/ /home/sqoop
3.環境變數配置
vi /etc/profile
新增以下內容
export SQOOP_HOME=/home/sqoop

export PATH=$PATH:$SQOOP_HOME/bin
使其生效 source /etc/profile

4.配置sqoop引數 

在${SQOOP_HOME}/conf中執行命令

mvsqoop-env-template.sh sqoop-env.sh

5. 修改配置檔案sqoop-env.sh
#Set path to where bin/hadoop is available
export HADOOP_COMMON_HOME=/home/hadoop/
                                              
#Set path to where hadoop-*-core.jar is available

export HADOOP_MAPRED_HOME=/home/hadoop/
                                              
#set the path to where bin/hbase is available
export HBASE_HOME=/home/hbase/
                                              
#Set the path to where bin/hive is available
export HIVE_HOME=/home/hive/
                                              
#Set the path for where zookeper config dir is

export ZOOCFGDIR=/home/zookeeper
路徑根據使用者實際路徑配置 6. 將mysql的驅動jar複製到lib目錄下
mysql-connector-java-5.1.31-bin.jar
7.測試sqoop是否安裝成功
sqoop version
看到以上資訊說明sqoop就安裝成功啦,下面進行資料同步

二、Mysql資料定時匯入Hbase

1.示例語句

/home/sqoop/bin/sqoop import --connect jdbc:mysql://localhost:3306/yqm --username root --password root --table user --hbase-table user --hbase-create-table --column-family userinfo --hbase-row-key userid

引數解釋: --connect              為資料庫連線
localhost:3306/yqm       localhost為資料庫地址,yqm為資料庫名
--table                為資料庫表名
--username         
 資料庫連線使用者名稱
--password 資料庫連線密碼
--hbase-table user 在hbase新建表user
--column-family列族
--column-family userid 資料庫中userid作為hbase中的row-key
   2.建立job
sqoop job --create myjob --import --connect jdbc:mysql://localhost:3306/yqm --username root --password root --table user --hbase-table user --hbase-create-table --column-family userinfo --hbase-row-key userid
解釋:
--create myjob建立一個名為myjob的job
3.執行job
sqoop job --exec myjob
4.配置sqoop-site.xml
在執行job時會有資料庫密碼的校驗:
sqoop job --exec myjob  
Enter password:  
...  
所以要更改配置在sqoop-site.xml中:

<property>  
    <name>sqoop.metastore.client.record.password</name>  
    <value>true</value>  
    <description>
    If true, allow saved passwords in the metastore.  
    </description>  
</property> 

當這個值為的時候才會儲存密碼。
配置更改過要重新建任務才會生效,把之前的任務刪除:
sqoop job --delete myjob  

重複上述操作,執行時不用輸入資料庫密碼校驗。
5.Hbase檢視是否同步成功
hbase shell進入hbaseshell介面
list 列出hbase所有的表
scan ‘user’檢視user表

6.建立定時任務
在 /home/sqoop下新建job.sh指令碼,內容如下
#!/bin/sh
. /etc/profile
. ~/.bash_profile
sqoop job --exec hjob
輸入 crontab -e新增任務,內容如下
*/1 * * * * /bin/sh /home/sqoop/a.sh>/home/sqoop/job.txt 2>&1
儲存即可

此例設定為每一分鐘執行一次,設定定時可參考crontab定時任務
解釋:crontab為非登入使用者下執行,不能讀取環境變數,所以加入. /etc/profile和. ~/.bash_profile讀取系統環境變數和使用者環境變數,crontab因使用者許可權無法讀取指令碼,所以加入/bin/sh賦予許可權
至此,sqoop安裝配置和mysql資料定時匯入hbase已完成;如有疑惑或不正之處 qq:1506852741