Sqoop系列(一)通過sqoop將關係型數據遷移到HBase和Hive上

Sqoop數據遷移:

什麼是sqoop?

sqoop是用在Hadoop和關係數據庫之間傳輸數據的工具

  • 將數據從RDBMS導入到HDFS
  • HDFS導出數據RDBMS
  • 使用MapReduce導入和導出數據,提供並行操作和容錯

從RDBMS導入數據到HDFS-1

  • 導入表到HDFS

    sqoop import
    	connect jdbc:mysql://localhost:3306/hr
    	driver com.mysql.jdbc.
    

Sqoop安裝:

第一步: sqoop解壓

將sqoop壓縮包放到/opt目錄文件下

 tar -zxf sqoop-1.4.6-cdh5.14.2.tar.gz
 mv sqoop-1.4.6-cdh5.14.2 /opt/soft/sqoop146

第二步: 複製hadoop的jar包和連接mysql驅動包到sqoop的lib文件夾下

cp /opt/soft/hadoop260/share/hadoop/common/hadoop-common-2.6.0-cdh5.14.2.jar /opt/soft/sqoop146/lib/

cp /opt/soft/hadoop260/share/hadoop/hdfs/hadoop-hdfs-2.6.0-cdh5.14.2.jar /opt/soft/sqoop146/lib/

cp /opt/soft/hadoop260/share/hadoop/mapreduce/hadoop-mapreduce-client-core-2.6.0-cdh5.14.2.jar /opt/soft/sqoop146/lib

第三步: 配置sqoop-env.sh文件

vi /opt/soft/sqoop146/conf/sqoop-env.sh
export HADOOP_COMMON_HOME=/opt/soft/hadoop260

export HAOOP_MAPRED_HOME=/opt/soft/hadoop260

export HABSE_HOME=/opt/soft/hbase120

export HIVE_HOME=/opt/soft/hive110

export ZOOCFGDIR=/opt/soft/zk345/conf

在這裏插入圖片描述
第四步: 配置全局變量

vi /etc/profile
export SQOOP_HOME=/opt/soft/sqoop146
export PATH=$PATH:$SQOOP_HOME/bin
source /etc/profile

完成`Sqoop安裝

Sqoop命令:

sqoop list命令–顯示數據庫名

sqoop list-databases --username root --password root --connect jdbc:mysql://192.168.43.24:3306/
 
sqoop list-tables --username root --password root --connect jdbc:mysql://192.168.43.24:3306/

sqoop import命令–將關係型數據導入到HDFS上

  • 將整表導入hdfs上
# 加\是爲了多行輸入
sqoop import \ 
--connect jdbc:mysql://192.168.56.101:3306/mydemo \
--username root --password 123456 \
--incremental append \ # 增量導入方式append追加數據至已經存在的HDFS數據集上
--check columns
--delete-target-dir \ # 存在文件夾就刪除
--table userinfos \
--target-dir /tmp/viewscore6 \  # 導入到hdfs的文件位置
--fields-terminated-by '/' \  # 在hdfs上以對應的空格符
-m 3
  • 將查詢好的數據導入到hdfs上
sqoop import \
--connect jdbc:mysql://192.168.56.101:3306/mydemo \
--username root --password 123456 \
--query "select * from xxx where xxx and \$CONDITITONS" \
--target-dir /tmp/viewscore4 \
--fields-terminated-by ',' \
--split by usrid \ # 堆某一列進行設定邏輯分片的規則,通過hash值劃分邏輯片
-m 3 # 設置mapper的數量,也就是文件分片的數量
--as sequencefile # 將其轉化爲序列化文件
connect jdbc:oracle:thin:@192.168.56.101:1521:ORCL # oracle 的遷移驅動包名爲oracle.jdbc.OracleDriver

增量將數據遷移到HBase上,並在Hive上做分析:

寫出mysql數據導入HBase的腳本:

! /bin/bash
#獲取當前日期
nowdate=$(date --date='1 day ago' "+%Y-%m-%d")
echo $nowdate
# 如果存在mydata,就刪除沒有8位數字的文件夾
hdfs dfs -test -e /mydata1
if [ $? -eq 0 ];then
        files=`hdfs dfs -ls /mydata1 | awk '{print $8}'| cut -d '/' -f3 | grep -v "[0-9]\{4\}"`
        for fl in $files
        do
                hdfs dfs -rmr /mydata1/$fl
        done
else
        hdfs dfs -mkdir -p /mydata1/
fi




#sqoop執行路徑
#連接配置
# 將mysql數據導入hdfs
foldername=`echo $nowdate | sed 's/-//g'`

sqoop import \
--connect jdbc:mysql://192.168.56.101:3306/mydemo \
--driver com.mysql.jdbc.Driver \
--username root --password 123456 \
--query "select * from myorder where orderdate="\'${nowdate}\'"  and \$CONDITIONS" 
--incremental append \
--check-column orderdate \
--target-dir /mydata1/$foldername -m 1

Hive中建立外部表將地址指向對應HBase在HDFS存放的地址

create external table myhbtab(
    kw string, 
    stuno string, 
    username string,
    age string, 
    likes string) 
    stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' 
    with serdeproperties("hbase.columns.mapping"=":key,base:stuno,base:username,base:age,externals:likes") 
    tblproperties("hbase.table.name"="mydemo:userinfos");
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章