乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      Sqoop學(xué)習(xí)之路 (一)

       HK123COM 2019-02-14

      目錄

       

      正文

      一、概述

      sqoop 是 apache 旗下一款“Hadoop 和關(guān)系數(shù)據(jù)庫(kù)服務(wù)器之間傳送數(shù)據(jù)”的工具。

      核心的功能有兩個(gè):

      導(dǎo)入、遷入

      導(dǎo)出、遷出

      導(dǎo)入數(shù)據(jù):MySQL,Oracle 導(dǎo)入數(shù)據(jù)到 Hadoop 的 HDFS、HIVE、HBASE 等數(shù)據(jù)存儲(chǔ)系統(tǒng)

      導(dǎo)出數(shù)據(jù):從 Hadoop 的文件系統(tǒng)中導(dǎo)出數(shù)據(jù)到關(guān)系數(shù)據(jù)庫(kù) mysql 等 Sqoop 的本質(zhì)還是一個(gè)命令行工具,和 HDFS,Hive 相比,并沒(méi)有什么高深的理論。

      sqoop:

      工具:本質(zhì)就是遷移數(shù)據(jù), 遷移的方式:就是把sqoop的遷移命令轉(zhuǎn)換成MR程序

      hive

      工具,本質(zhì)就是執(zhí)行計(jì)算,依賴于HDFS存儲(chǔ)數(shù)據(jù),把SQL轉(zhuǎn)換成MR程序

      二、工作機(jī)制

      將導(dǎo)入或?qū)С雒罘g成 MapReduce 程序來(lái)實(shí)現(xiàn) 在翻譯出的 MapReduce 中主要是對(duì) InputFormat 和 OutputFormat 進(jìn)行定制

      三、安裝

      1、前提概述

      將來(lái)sqoop在使用的時(shí)候有可能會(huì)跟那些系統(tǒng)或者組件打交道?

      HDFS, MapReduce, YARN, ZooKeeper, Hive, HBase, MySQL

      sqoop就是一個(gè)工具, 只需要在一個(gè)節(jié)點(diǎn)上進(jìn)行安裝即可。

       

      補(bǔ)充一點(diǎn): 如果你的sqoop工具將來(lái)要進(jìn)行hive或者h(yuǎn)base等等的系統(tǒng)和MySQL之間的交互

       

      你安裝的SQOOP軟件的節(jié)點(diǎn)一定要包含以上你要使用的集群或者軟件系統(tǒng)的安裝包

       

      補(bǔ)充一點(diǎn): 將來(lái)要使用的azakban這個(gè)軟件 除了會(huì)調(diào)度 hadoop的任務(wù)或者h(yuǎn)base或者h(yuǎn)ive的任務(wù)之外, 還會(huì)調(diào)度sqoop的任務(wù)

       

      azkaban這個(gè)軟件的安裝節(jié)點(diǎn)也必須包含以上這些軟件系統(tǒng)的客戶端/2、

      2、軟件下載

      下載地址http://mirrors./apache/

      sqoop版本說(shuō)明

      絕大部分企業(yè)所使用的sqoop的版本都是 sqoop1

      sqoop-1.4.6 或者 sqoop-1.4.7 它是 sqoop1

      sqoop-1.99.4----都是 sqoop2

      此處使用sqoop-1.4.6版本sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz

      3、安裝步驟

      (1)上傳解壓縮安裝包到指定目錄

      因?yàn)橹癶ive只是安裝在hadoop3機(jī)器上,所以sqoop也同樣安裝在hadoop3機(jī)器上

      [hadoop@hadoop3 ~]$ tar -zxvf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz -C apps/

      (2)進(jìn)入到 conf 文件夾,找到 sqoop-env-template.sh,修改其名稱為 sqoop-env.sh cd conf

      復(fù)制代碼
      [hadoop@hadoop3 ~]$ cd apps/
      [hadoop@hadoop3 apps]$ ls
      apache-hive-2.3.3-bin  hadoop-2.7.5  hbase-1.2.6  sqoop-1.4.6.bin__hadoop-2.0.4-alpha  zookeeper-3.4.10
      [hadoop@hadoop3 apps]$ mv sqoop-1.4.6.bin__hadoop-2.0.4-alpha/ sqoop-1.4.6
      [hadoop@hadoop3 apps]$ cd sqoop-1.4.6/conf/
      [hadoop@hadoop3 conf]$ ls
      oraoop-site-template.xml  sqoop-env-template.sh    sqoop-site.xml
      sqoop-env-template.cmd    sqoop-site-template.xml
      [hadoop@hadoop3 conf]$ mv sqoop-env-template.sh sqoop-env.sh
      復(fù)制代碼

      (3)修改 sqoop-env.sh

      [hadoop@hadoop3 conf]$ vi sqoop-env.sh 
      復(fù)制代碼
      export HADOOP_COMMON_HOME=/home/hadoop/apps/hadoop-2.7.5
      
      #Set path to where hadoop-*-core.jar is available
      export HADOOP_MAPRED_HOME=/home/hadoop/apps/hadoop-2.7.5
      
      #set the path to where bin/hbase is available
      export HBASE_HOME=/home/hadoop/apps/hbase-1.2.6
      
      #Set the path to where bin/hive is available
      export HIVE_HOME=/home/hadoop/apps/apache-hive-2.3.3-bin
      
      #Set the path for where zookeper config dir is
      export ZOOCFGDIR=/home/hadoop/apps/zookeeper-3.4.10/conf
      復(fù)制代碼

      為什么在sqoop-env.sh 文件中會(huì)要求分別進(jìn)行 common和mapreduce的配置呢???

      在apache的hadoop的安裝中;四大組件都是安裝在同一個(gè)hadoop_home中的

      但是在CDH, HDP中, 這些組件都是可選的。

      在安裝hadoop的時(shí)候,可以選擇性的只安裝HDFS或者YARN,

      CDH,HDP在安裝hadoop的時(shí)候,會(huì)把HDFS和MapReduce有可能分別安裝在不同的地方。

      (4)加入 mysql 驅(qū)動(dòng)包到 sqoop1.4.6/lib 目錄下

      [hadoop@hadoop3 ~]$ cp mysql-connector-java-5.1.40-bin.jar apps/sqoop-1.4.6/lib/

      (5)配置系統(tǒng)環(huán)境變量

      [hadoop@hadoop3 ~]$ vi .bashrc 
      #Sqoop
      export SQOOP_HOME=/home/hadoop/apps/sqoop-1.4.6
      export PATH=$PATH:$SQOOP_HOME/bin

      保存退出使其立即生效

      [hadoop@hadoop3 ~]$ source .bashrc 

      (6)驗(yàn)證安裝是否成功

       sqoop-version 或者 sqoop version

      四、Sqoop的基本命令

      基本操作

      首先,我們可以使用 sqoop help 來(lái)查看,sqoop 支持哪些命令

      復(fù)制代碼
      [hadoop@hadoop3 ~]$ sqoop help
      Warning: /home/hadoop/apps/sqoop-1.4.6/../hcatalog does not exist! HCatalog jobs will fail.
      Please set $HCAT_HOME to the root of your HCatalog installation.
      Warning: /home/hadoop/apps/sqoop-1.4.6/../accumulo does not exist! Accumulo imports will fail.
      Please set $ACCUMULO_HOME to the root of your Accumulo installation.
      18/04/12 13:37:19 INFO sqoop.Sqoop: Running Sqoop version: 1.4.6
      usage: sqoop COMMAND [ARGS]
      
      Available commands:
        codegen            Generate code to interact with database records
        create-hive-table  Import a table definition into Hive
        eval               Evaluate a SQL statement and display the results
        export             Export an HDFS directory to a database table
        help               List available commands
        import             Import a table from a database to HDFS
        import-all-tables  Import tables from a database to HDFS
        import-mainframe   Import datasets from a mainframe server to HDFS
        job                Work with saved jobs
        list-databases     List available databases on a server
        list-tables        List available tables in a database
        merge              Merge results of incremental imports
        metastore          Run a standalone Sqoop metastore
        version            Display version information
      
      See 'sqoop help COMMAND' for information on a specific command.
      [hadoop@hadoop3 ~]$ 
      復(fù)制代碼

      然后得到這些支持了的命令之后,如果不知道使用方式,可以使用 sqoop command 的方式 來(lái)查看某條具體命令的使用方式,比如:

      View Code

      示例

      列出MySQL數(shù)據(jù)有哪些數(shù)據(jù)庫(kù)

      復(fù)制代碼
      [hadoop@hadoop3 ~]$ sqoop list-databases \
      > --connect jdbc:mysql://hadoop1:3306/ \
      > --username root \
      > --password root
      Warning: /home/hadoop/apps/sqoop-1.4.6/../hcatalog does not exist! HCatalog jobs will fail.
      Please set $HCAT_HOME to the root of your HCatalog installation.
      Warning: /home/hadoop/apps/sqoop-1.4.6/../accumulo does not exist! Accumulo imports will fail.
      Please set $ACCUMULO_HOME to the root of your Accumulo installation.
      18/04/12 13:43:51 INFO sqoop.Sqoop: Running Sqoop version: 1.4.6
      18/04/12 13:43:51 WARN tool.BaseSqoopTool: Setting your password on the command-line is insecure. Consider using -P instead.
      18/04/12 13:43:51 INFO manager.MySQLManager: Preparing to use a MySQL streaming resultset.
      information_schema
      hivedb
      mysql
      performance_schema
      test
      [hadoop@hadoop3 ~]$ 
      復(fù)制代碼

      列出MySQL中的某個(gè)數(shù)據(jù)庫(kù)有哪些數(shù)據(jù)表:

      
      

      [hadoop@hadoop3 ~]$ sqoop list-tables \
      > --connect jdbc:mysql://hadoop1:3306/mysql \
      > --username root \
      > --password root

       

      View Code

      創(chuàng)建一張跟mysql中的help_keyword表一樣的hive表hk:

      復(fù)制代碼
      sqoop create-hive-table --connect jdbc:mysql://hadoop1:3306/mysql --username root --password root --table help_keyword --hive-table hk
      復(fù)制代碼

       

      View Code

      五、Sqoop的數(shù)據(jù)導(dǎo)入

      “導(dǎo)入工具”導(dǎo)入單個(gè)表從 RDBMS 到 HDFS。表中的每一行被視為 HDFS 的記錄。所有記錄 都存儲(chǔ)為文本文件的文本數(shù)據(jù)(或者 Avro、sequence 文件等二進(jìn)制數(shù)據(jù)) 

      1、從RDBMS導(dǎo)入到HDFS中

      語(yǔ)法格式

      sqoop import (generic-args) (import-args)

      常用參數(shù)

      復(fù)制代碼
      --connect <jdbc-uri> jdbc 連接地址
      --connection-manager <class-name> 連接管理者
      --driver <class-name> 驅(qū)動(dòng)類
      --hadoop-mapred-home <dir> $HADOOP_MAPRED_HOME
      --help help 信息
      -P 從命令行輸入密碼
      --password <password> 密碼
      --username <username> 賬號(hào)
      --verbose 打印流程信息
      --connection-param-file <filename> 可選參數(shù)
      復(fù)制代碼

      示例

      普通導(dǎo)入:導(dǎo)入mysql庫(kù)中的help_keyword的數(shù)據(jù)到HDFS上

      導(dǎo)入的默認(rèn)路徑:/user/hadoop/help_keyword

      復(fù)制代碼
      sqoop import   --connect jdbc:mysql://hadoop1:3306/mysql   --username root  --password root   --table help_keyword   -m 1
      復(fù)制代碼
      View Code

      查看導(dǎo)入的文件

      [hadoop@hadoop4 ~]$ hadoop fs -cat /user/hadoop/help_keyword/part-m-00000

       

      導(dǎo)入: 指定分隔符和導(dǎo)入路徑

       

      復(fù)制代碼
      sqoop import   --connect jdbc:mysql://hadoop1:3306/mysql   --username root  --password root   --table help_keyword   --target-dir /user/hadoop11/my_help_keyword1  --fields-terminated-by '\t'  -m 2
      復(fù)制代碼

       

      導(dǎo)入數(shù)據(jù):帶where條件

      復(fù)制代碼
      sqoop import   --connect jdbc:mysql://hadoop1:3306/mysql   --username root  --password root   --where "name='STRING' " --table help_keyword   --target-dir /sqoop/hadoop11/myoutport1  -m 1
      復(fù)制代碼

       

      查詢指定列

      復(fù)制代碼
      sqoop import   --connect jdbc:mysql://hadoop1:3306/mysql   --username root  --password root   --columns "name" --where "name='STRING' " --table help_keyword  --target-dir /sqoop/hadoop11/myoutport22  -m 1
      selct name from help_keyword where name = "string"
      復(fù)制代碼

       

      導(dǎo)入:指定自定義查詢SQL

      復(fù)制代碼
      sqoop import   --connect jdbc:mysql://hadoop1:3306/  --username root  --password root   --target-dir /user/hadoop/myimport33_1  --query 'select help_keyword_id,name from mysql.help_keyword where $CONDITIONS and name = "STRING"' --split-by  help_keyword_id --fields-terminated-by '\t'  -m 4
      復(fù)制代碼

       

      在以上需要按照自定義SQL語(yǔ)句導(dǎo)出數(shù)據(jù)到HDFS的情況下:
      1、引號(hào)問(wèn)題,要么外層使用單引號(hào),內(nèi)層使用雙引號(hào),$CONDITIONS的$符號(hào)不用轉(zhuǎn)義, 要么外層使用雙引號(hào),那么內(nèi)層使用單引號(hào),然后$CONDITIONS的$符號(hào)需要轉(zhuǎn)義
      2、自定義的SQL語(yǔ)句中必須帶有WHERE \$CONDITIONS

      2、把MySQL數(shù)據(jù)庫(kù)中的表數(shù)據(jù)導(dǎo)入到Hive中

      Sqoop 導(dǎo)入關(guān)系型數(shù)據(jù)到 hive 的過(guò)程是先導(dǎo)入到 hdfs,然后再 load 進(jìn)入 hive

      普通導(dǎo)入:數(shù)據(jù)存儲(chǔ)在默認(rèn)的default hive庫(kù)中,表名就是對(duì)應(yīng)的mysql的表名:

      復(fù)制代碼
      sqoop import   --connect jdbc:mysql://hadoop1:3306/mysql   \
      --username root  \
      --password root   \
      --table help_keyword   \
      --hive-import \
      -m 1
      復(fù)制代碼

      導(dǎo)入過(guò)程

      第一步:導(dǎo)入mysql.help_keyword的數(shù)據(jù)到hdfs的默認(rèn)路徑
      第二步:自動(dòng)仿造mysql.help_keyword去創(chuàng)建一張hive表, 創(chuàng)建在默認(rèn)的default庫(kù)中
      第三步:把臨時(shí)目錄中的數(shù)據(jù)導(dǎo)入到hive表中

      查看數(shù)據(jù)

      [hadoop@hadoop3 ~]$ hadoop fs -cat /user/hive/warehouse/help_keyword/part-m-00000

      指定行分隔符和列分隔符,指定hive-import,指定覆蓋導(dǎo)入,指定自動(dòng)創(chuàng)建hive表,指定表名,指定刪除中間結(jié)果數(shù)據(jù)目錄

      復(fù)制代碼
      sqoop import  --connect jdbc:mysql://hadoop1:3306/mysql  \
      --username root  \
      --password root  \
      --table help_keyword  \
      --fields-terminated-by "\t"  \
      --lines-terminated-by "\n"  \
      --hive-import  \
      --hive-overwrite  \
      --create-hive-table  \
      --delete-target-dir \
      --hive-database  mydb_test \
      --hive-table new_help_keyword
      復(fù)制代碼

       報(bào)錯(cuò)原因是hive-import 當(dāng)前這個(gè)導(dǎo)入命令。 sqoop會(huì)自動(dòng)給創(chuàng)建hive的表。 但是不會(huì)自動(dòng)創(chuàng)建不存在的庫(kù)

      手動(dòng)創(chuàng)建mydb_test數(shù)據(jù)塊

      hive> create database mydb_test;
      OK
      Time taken: 6.147 seconds
      hive> 

      之后再執(zhí)行上面的語(yǔ)句沒(méi)有報(bào)錯(cuò)

      查詢一下

      select * from new_help_keyword limit 10;

       

      上面的導(dǎo)入語(yǔ)句等價(jià)于

      復(fù)制代碼
      sqoop import  --connect jdbc:mysql://hadoop1:3306/mysql  \
      --username root  \
      --password root  \
      --table help_keyword  \
      --fields-terminated-by "\t"  \
      --lines-terminated-by "\n"  \
      --hive-import  \
      --hive-overwrite  \
      --create-hive-table  \ 
      --hive-table  mydb_test.new_help_keyword  \
      --delete-target-dir
      復(fù)制代碼

      增量導(dǎo)入

      執(zhí)行增量導(dǎo)入之前,先清空hive數(shù)據(jù)庫(kù)中的help_keyword表中的數(shù)據(jù)

      truncate table help_keyword;
      復(fù)制代碼
      sqoop import   --connect jdbc:mysql://hadoop1:3306/mysql   \
      --username root  \
      --password root   \
      --table help_keyword  \
      --target-dir /user/hadoop/myimport_add  \
      --incremental  append  \
      --check-column  help_keyword_id \
      --last-value 500  \
      -m 1
      復(fù)制代碼

      語(yǔ)句執(zhí)行成功

      View Code

       查看結(jié)果

      3、把MySQL數(shù)據(jù)庫(kù)中的表數(shù)據(jù)導(dǎo)入到hbase

       普通導(dǎo)入

      復(fù)制代碼
      sqoop import --connect jdbc:mysql://hadoop1:3306/mysql \
      --username root \
      --password root \
      --table help_keyword \
      --hbase-table new_help_keyword \
      --column-family person \
      --hbase-row-key help_keyword_id
      復(fù)制代碼

       

      此時(shí)會(huì)報(bào)錯(cuò),因?yàn)樾枰葎?chuàng)建Hbase里面的表,再執(zhí)行導(dǎo)入的語(yǔ)句

      hbase(main):001:0> create 'new_help_keyword', 'base_info'
      0 row(s) in 3.6280 seconds
      
      => Hbase::Table - new_help_keyword
      hbase(main):002:0> 

       

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多