真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Sqoop筆記整理

[toc]

創(chuàng)新互聯(lián)建站10多年企業(yè)網(wǎng)站建設(shè)服務(wù);為您提供網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)頁(yè)設(shè)計(jì)及高端網(wǎng)站定制服務(wù),企業(yè)網(wǎng)站建設(shè)及推廣,對(duì)成都生料攪拌車等多個(gè)行業(yè)擁有豐富的網(wǎng)站運(yùn)維經(jīng)驗(yàn)的網(wǎng)站建設(shè)公司。


Sqoop筆記整理

概述

SQOOP   ---數(shù)據(jù)搬用工
    可以將外部數(shù)據(jù)遷移到hdfs目錄或者h(yuǎn)ive表或者h(yuǎn)base表

import原理

從傳統(tǒng)數(shù)據(jù)庫(kù)獲取元數(shù)據(jù)信息(schema、table、field、field type),把導(dǎo)入功能轉(zhuǎn)換為只有Map的Mapreduce作業(yè),
在mapreduce中有很多map,每個(gè)map讀一片數(shù)據(jù),進(jìn)而并行的完成數(shù)據(jù)的拷貝。

export原理

獲取導(dǎo)出表的schema、meta信息,和Hadoop中的字段match;多個(gè)map only作業(yè)同時(shí)運(yùn)行,完成hdfs中數(shù)據(jù)導(dǎo)出到關(guān)系型數(shù)據(jù)庫(kù)中。

Sqoop安裝

下載地址:https://mirrors.tuna.tsinghua.edu.cn/apache/sqoop/1.4.7/
下載之后進(jìn)行解壓:
   tar -zxvf sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz -C /home/uplooking/app
重命名:
   [uplooking@uplooking01 ~]$ mv app/sqoop-1.4.7.bin__hadoop-2.6.0/ app/sqoop
配置SQOOP_HOME到環(huán)境變量中
  export SQOOP_HOME=/home/uplooking/app/sqoop
  export PATH=$PATH:$SQOOP_HOME
配置$SQOOP_HOME/conf/sqoop-env.sh
   export HADOOP_COMMON_HOME=/home/uplooking/app/hadoop
   export HADOOP_MAPRED_HOME=/home/uplooking/app/hadoop
   export HBASE_HOME=/home/uplooking/app/hbase
   export HIVE_HOME=/home/uplooking/app/hive
   export ZOOCFGDIR=/home/uplooking/app/zookeeper/conf

   下面這個(gè)在1.4.7中需要配置,否則在執(zhí)行數(shù)據(jù)導(dǎo)入到hive時(shí)會(huì)報(bào)錯(cuò)
   export HIVE_CONF_DIR=/home/uplooking/app/hive/conf
注意:
1、數(shù)據(jù)庫(kù)驅(qū)動(dòng):
  在執(zhí)行sqoop命里的受需要拷貝相關(guān)數(shù)據(jù)庫(kù)驅(qū)動(dòng)jar包到$SQOOP_HOME/lib目錄下,例如MySQL需要mysql-connector-java-5.1.32-bin.jar以上版本支持。
2、JDK版本
  JDK版本最好1.7以上。
3、hive的核心包拷貝(這個(gè)在1.4.7中需要配置,否則在執(zhí)行數(shù)據(jù)導(dǎo)入到hive時(shí)會(huì)報(bào)錯(cuò))
    將$HIVE_HOME/lib/hive-exec.jar拷貝到$SQOOP_HOME/lib目錄下,不然會(huì)報(bào)
    18/03/15 15:50:54 ERROR hive.HiveConfig: Could not load org.apache.hadoop.hive.conf.HiveConf. Make sure HIVE_CONF_DIR is set correctly.
    18/03/15 15:50:54 ERROR tool.ImportTool: Import failed: java.io.IOException: java.lang.ClassNotFoundException: org.apache.hadoop.hive.conf.HiveConf

數(shù)據(jù)導(dǎo)入import

由mysql導(dǎo)入數(shù)據(jù)到HDFS

people表中的數(shù)據(jù):

+----+-----------+------+--------+
| id | name      | age  | height |
+----+-----------+------+--------+
|  1 | 小甜甜    |   18 |    168 |
|  2 | 小丹丹    |   19 |    167 |
|  3 | 大神      |   25 |    181 |
|  4 | 團(tuán)長(zhǎng)      |   38 |    158 |
|  5 | 記者      |   22 |    169 |
+----+-----------+------+--------+

數(shù)據(jù)導(dǎo)入:

sqoop import --connect jdbc:mysql://192.168.43.116:3306/test --username root --password root --table people
將msyql數(shù)據(jù)test中的表people,導(dǎo)入到hdfs目錄,該目錄在/user/用戶/people下面,其中people為導(dǎo)入的表名,

這是sqoop導(dǎo)入到的默認(rèn)目錄,如果要想導(dǎo)入到指定的目錄,添加一個(gè)選項(xiàng)--target-dir:

sqoop import --connect jdbc:mysql://192.168.43.116:3306/test --username root --password root --table people --target-dir /output/sqoop/people

因?yàn)槟J(rèn)執(zhí)行sqoop會(huì)有4個(gè)maptasks任務(wù),為了滿足業(yè)務(wù)的需要,可以進(jìn)行修改,只需要在命令后面加一個(gè)選項(xiàng)-m:

sqoop import --connect jdbc:mysql://192.168.43.116:3306/test --username root --password root --table people --target-dir /output/sqoop/people -m 2

執(zhí)行的過(guò)程中,如果輸出目錄已經(jīng)存在,報(bào)錯(cuò),要想輸出到該目錄 使用選項(xiàng)--delete-target-dir:

sqoop import --connect jdbc:mysql://192.168.43.116:3306/test --username root --password root --table people --target-dir /output/sqoop/people -m 2 --delete-target-dir

如果想在原來(lái)的基礎(chǔ)之上追加新的數(shù)據(jù),只需要添加一個(gè)選項(xiàng)--append,但是注意,--append和--delete-target-dir不能同時(shí)存在:

sqoop import --connect jdbc:mysql://192.168.43.116:3306/test --username root --password root --table people --target-dir /output/sqoop/people -m 2 --append

條件導(dǎo)入:

sqoop import --connect jdbc:mysql://192.168.43.116:3306/test --username root --password root --table people --target-dir hdfs://ns1/input/sqoop/people --append -m 1 --where "age < 20 and height > 167"

通過(guò)sql導(dǎo)入:

#!/bin/bash

SQOOP_HOME=/home/uplooking/app/sqoop

sqoop import \
--connect jdbc:mysql://192.168.43.116:3306/test \
--username root \
--password root \
--target-dir hdfs://ns1/input/sqoop/people \
--query "select id, name, age, height from people where age < 30 and height > 168 and \$CONDITIONS" \
--append -m 1 \

由mysql導(dǎo)入到hive

sqoop import --connect jdbc:mysql://192.168.43.116:3306/test --username 'root' --password 'root' --table people --hive-import -m 1

覆蓋數(shù)據(jù)(只覆蓋數(shù)據(jù),不覆蓋表結(jié)構(gòu))
sqoop import --connect jdbc:mysql://192.168.43.116:3306/test --username 'root' --password 'root' --table people --hive-import -m 1 --hive-overwrite

創(chuàng)建表名
sqoop import --connect jdbc:mysql://192.168.43.116:3306/test --username 'root' --password 'root' --table people --hive-import -m 1 --hive-table "hpeople" --hive-overwrite

導(dǎo)出所有的表到hive中
sqoop import-all-tables --connect jdbc:mysql://192.168.43.116:3306/test --username root --password root --hive-import --fields-terminated-by "\001" --lines-terminated-by "\n"
# 這里指定了行和列的分隔符,因?yàn)槟J(rèn)情況下,MySQL導(dǎo)入到hive的數(shù)據(jù)是以逗號(hào)作為分隔符的,
# 數(shù)據(jù)從hive(準(zhǔn)確說(shuō)應(yīng)該是HDFS)導(dǎo)出到mysql時(shí)默認(rèn)也是以逗號(hào)作為列分隔符的,這點(diǎn)尤其需要注意

由mysql導(dǎo)入到HBase

sqoop import \
--connect jdbc:mysql://192.168.43.116:3306/test \
--username 'root' \
--password 'root' \
--table people \
--hbase-create-table \
--hbase-row-key id \
--hbase-table hpeople \
--column-family cf

導(dǎo)入Hbase的時(shí)候,默認(rèn)使用主鍵做key,沒(méi)有主鍵使用--split-by,暫時(shí)處理不了聯(lián)合主鍵,最好現(xiàn)在hbase中建立相關(guān)的表結(jié)構(gòu)

查看HBase中表的數(shù)據(jù):

hbase(main):002:0> scan 'hpeople'
ROW                           COLUMN+CELL                                                                         
 1                            column=cf:age, timestamp=1521846328316, value=18                                    
 1                            column=cf:height, timestamp=1521846328316, value=168.0                              
 1                            column=cf:name, timestamp=1521846328316, value=\xE5\xB0\x8F\xE7\x94\x9C\xE7\x94\x9C 
 2                            column=cf:age, timestamp=1521846328096, value=19                                    
 2                            column=cf:height, timestamp=1521846328096, value=167.0                              
 2                            column=cf:name, timestamp=1521846328096, value=\xE5\xB0\x8F\xE4\xB8\xB9\xE4\xB8\xB9 
 3                            column=cf:age, timestamp=1521846329182, value=25                                    
 3                            column=cf:height, timestamp=1521846329182, value=181.0                              
 3                            column=cf:name, timestamp=1521846329182, value=\xE5\xA4\xA7\xE7\xA5\x9E             
 4                            column=cf:age, timestamp=1521846328454, value=38                                    
 4                            column=cf:height, timestamp=1521846328454, value=158.0                              
 4                            column=cf:name, timestamp=1521846328454, value=\xE5\x9B\xA2\xE9\x95\xBF             
 5                            column=cf:age, timestamp=1521846330135, value=22                                    
 5                            column=cf:height, timestamp=1521846330135, value=169.0                              
 5                            column=cf:name, timestamp=1521846330135, value=\xE8\xAE\xB0\xE8\x80\x85             
5 row(s) in 0.1620 seconds

數(shù)據(jù)導(dǎo)出export

數(shù)據(jù)導(dǎo)出到mysql,默認(rèn)以逗號(hào)作為分隔符

從HDFS導(dǎo)出到mysql

導(dǎo)出的時(shí)候字段需要一一對(duì)應(yīng)
sqoop export \
--connect jdbc:mysql://192.168.43.116:3306/test \
--username root --password root \
--table people \
--export-dir hdfs://ns1/input/sqoop/people

  中文亂碼:
sqoop export \
--connect "jdbc:mysql://192.168.43.116:3306/test?useUnicode=true&characterEncoding=utf-8" \
--username root \
--password root \
--table people \
--export-dir hdfs://ns1/input/sqoop/people

插入或更新
如果存在就更新,不存在就插入(指的是某一條記錄,而不是表本身)
sqoop export 
--connect "jdbc:mysql://192.168.43.116:3306/test?useUnicode=true&characterEncoding=utf-8" \
--username root \
--password root \
--table people
--export-dir /export -m 1 \
--update-key id \
--update-mode allowinsert

從Hive導(dǎo)出到mysql

和導(dǎo)入類似 -input-fields-terminated-by解析HDFS上面的數(shù)據(jù)到數(shù)據(jù)庫(kù)時(shí)使用參數(shù)

sqoop export \
--connect jdbc:mysql://192.168.43.116:3306/test \
--username root \
--password root \
--table people \
--export-dir /user/hive/warehouse/hpeople
--input-fields-terminated-by '\001'

從HBase導(dǎo)出到mysql

目前沒(méi)有直接從HBase導(dǎo)出的方法,但是可以先將數(shù)據(jù)導(dǎo)出到HDFS中(通過(guò)Hive和HBase的整合),然后再?gòu)腍DFS導(dǎo)出到mysql中。


文章名稱:Sqoop筆記整理
網(wǎng)站URL:http://weahome.cn/article/jjohho.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部