Hadoop 之 Sqoop 安裝配置與示例

来源:https://www.cnblogs.com/kcen/archive/2018/01/05/8205334.html
-Advertisement-
Play Games

Sqoop是一個用來將Hadoop和關係型資料庫中的數據相互轉移的工具,可以將一個關係型資料庫(例如 : MySQL ,Oracle ,Postgres等)中的數據導進到Hadoop的HDFS中,也可以將HDFS的數據導進到關係型資料庫中。Sqoop是為大數據集設計的。Sqoop支持增量更新,將新記 ...


Sqoop是一個用來將Hadoop和關係型資料庫中的數據相互轉移的工具,可以將一個關係型資料庫(例如 : MySQL ,Oracle ,Postgres等)中的數據導進到Hadoop的HDFS中,也可以將HDFS的數據導進到關係型資料庫中。Sqoop是為大數據集設計的。Sqoop支持增量更新,將新記錄添加到最近一次的導出的數據源上,或者指定上次修改的時間戳。

接下來我們看一下如何安裝與做簡單示例

要安裝Sqoop與簡單應用,當然需要先安裝好Hadoop,Hive, 相關的資料庫,如Mysql,Sql Server

一、下載安裝包

1、 下載地址:選擇CDH相應版本下的

http://archive.cloudera.com/cdh5/cdh/5/

下載sqoop-1.4.5-cdh5.3.6.tar.gz安裝包

2、解壓sqoop-1.4.5-cdh5.3.6.tar.gz至指定目錄,如:/opt

       mv sqoop-1.4.5-cdh5.3.6.tar.gz  /opt

       tar -zxvf sqoop-1.4.5-cdh5.3.6.tar.gz

二、配置環境變數

      /etc/profile

#sqoop enviroment 
export SQOOP_HOME=/opt/sqoop-1.4.5-cdh5.3.6
export PATH=$PATH:$SQOOP_HOME/bin

三、Sqoop配置項更改

 1、$HIVE_HOME/conf/hive-env.sh

  example,這裡具體值是我本地測試目錄,可自行更改,如果數據操作不涉及Hbase,那麼相關Hbase的配置可以不配,如果沒有獨立的ZooKeeper集群,那麼ZooKeeper不用配置

export HADOOP_COMMON_HOME=/opt/hadoop/hadoop-2.7.3
#Set path to where hadoop-*-core.jar is available
#export HADOOP_MAPRED_HOME=
export HADOOP_MAPRED_HOME=/opt/hadoop/hadoop-2.7.3

#set the path to where bin/hbase is available
#export HBASE_HOME=

#Set the path to where bin/hive is available
#export HIVE_HOME=
export HIVE_HOME=/opt/hive/apache-hive-2.1.1.bin

2、配置jdbc驅動包

下載mysql的jdbc驅動包mysql-connector-java-5.1.6-bin.jar放入sqoop的lib目錄下$SQOOP_HOME/lib

下載sqlserver的jdbc驅動包sqljdbc4.jar放入sqoop的lib目錄下$SQOOP_HOME/lib

四、連接資料庫與表命令

    因本地Sql server資料庫的表有數據,就以Sql Server為例,mysql相似

    1、連接資料庫,查看資料庫列表  

sqoop list-databases
 --connect 'jdbc:sqlserver://10.10.0.1:1433;instanceName=SQL2008;username=test;password=test;database=testDB'

  2、連接sqlserver列出資料庫在表    

sqoop list-tables \
--connect
'jdbc:sqlserver:// 10.0.0.1:1433;instanceName=SQL2008;username=test;password=test;database=testDB’

  3、導入資料庫中查詢的結果到指定的hdfs中目錄 

sqoop import \
--connect 'jdbc:sqlserver://10.0.0.1:1433;instanceName=SQL2008;username=test;password=test;database=TestDB' \
- -query 'select CustomerID,UserName from Customer where $CONDITIONS  ' \
--target-dir /user/hive/warehouse/tmp2 \
--num-mappers 1

 

可選參數

--table  //指定表名

--as-parquetfile //指定文件格式

--columns id,account  //指定表的列

指定壓縮

--compress

--compression-codec org.apache.hadoop.io.compress.SnappyCodec

 --fields-terminated-by '\t'   //指定列的分隔符,這個很關鍵,在導入導出時最好指定

#增量導入

--incremental append

- -check-column id  //以哪個欄位為依據,如id欄位

--last-value 4

 

4、從sql server中導入到hive資料庫中

sqoop import \
--connect 'jdbc:sqlserver://10.0.0.1:1433;instance=SQL2008;username=test;password=test;database=TestDB' \
--table Customer \
--fields-terminated-by ',' \
--num-mappers 1 \
--hive-import \
--hive-database mydatabase \
--hive-table test_table

 

5、從HDFS中將數據導入Sql Server資料庫

sqoop export \
--connect 'jdbc:sqlserver://10.0.0.1:1433;instanceName=SQL2008;username=test;password=test;database=TestDB' \
--table ken_test \
--export-dir /user/hive/warehouse/tmp1/part-m-00000 \
--num-mappers 1

本人遇到的問題:

  • 導出文件指定到文件名
  • Error :Verify the server and instance names and check that no firewall is blocking UDP traffic to port 1434

          當有多個資料庫實例時,註意開放相應的埠

          如連接實例SQL2008,連接字元串中地址改為 sqlserver://10.0.0.1\SQL2008 

  • 一直報錯,導出不成功
ERROR tool.ExportTool: Error during export: Export job failed!

     最後通過表的每一個欄位類型分析,主鍵的自增類型欄位是否影響數據導入,測試結果,確實如此,不能對自增長類型欄位直接賦值,當然是限於當前的環境

    若是我們在資料庫客戶端是可以這樣操作的

 

附參數說明:

--append

添加到HDFS已存在數據記錄中

 --as-sequencefile

import序列化的文件

 --as-textfile

 plain文件 ,預設

--columns <col,col,col…>

 指定列import,逗號分隔,如:--columns "id,name"

--delete-target-dir

若已存在的import目錄,則刪除

--direct

直連模式,速度更快(HBase不支持)

--fetch-size <n>

一次從資料庫讀取n條數據

-m,--num-mappers <n>

建立 n 個併發執行task import

 -e,--query <statement>

表達式<statement>執行,一般有條件查詢數據時用

 --split-by <column-name>

根據column分隔實例

 --autoreset-to-one-mappe

如果沒有主鍵和split-by參數  one mapper import,此參數與split-by參數二選一

 --target-dir <d>

  HDFS中目標路徑,如/user/hive/warehouse

 --warehouse-dir <d>

HDFS 中表的父級目錄

 --where <where clause>

 指定where從句,如果有雙引號,註意轉義 \$CONDITIONS,一定要加上,不能用or,子查詢,join

 -z,--compress

 開啟壓縮

 --null-string <null-string>

  string列為空指定為此值

 --null-non-string <null-string>

  非string列為空指定為此值,-null這兩個參數可選 , 如果不設置,會指定為"null"

     --export-dir

     指定導出的文件位置,不是目錄,具體化文件名

 

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 第1章 資料庫管理系統 1.1 前言 01.數據的定義:文字、圖像、地理位置信息(坐標、經緯度)等 02.資料庫管理系統的定義:建立、存取和管理數據,保證數據安全和完整性的軟體 03.常見的資料庫管理系統: 關係型:MySQL、Oracle、SQL Server、Db2等 非關係型:MongoDB、 ...
  • 1,下載curl url命令傳輸工具 2,配置curl環境變數 3,在cmd環境中使用 舉例:curl -G http://xxxxxxx.com?+參數 使用:curl -G "www.baidu.com" 使用:curl -G "www.baidu.com" 最原始的批量通訊返回 可以將通訊命令 ...
  • 一、supervisor是什麼 Linux的後臺進程運行有好幾種方法,例如nohup,screen等,但是,如果是一個服務程式,要可靠地在後臺運行,我們就需要把它做成daemon,最好還能監控進程狀態,在意外結束時能自動重啟。 supervisor就是用Python開發的一套通用的進程管理程式,能將 ...
  • VirtualBox安裝CentOS後,再安裝增強功能就可以共用文件夾、粘貼板以及滑鼠無縫移動,主要步驟如下: 1、yum -y update 2、yum -y install g++ gcc gcc-c++ make kernel-* # 主要是在安裝增強工具提示沒有安裝這些軟體 3、yum -y ...
  • 獲取表結構的一些簡要信息,可以生成自己需要的字典,簡單又實用! 以數據表PP_MO為例: ...
  • 學習目標 -理解分層查詢概念 -創建樹形組織報告 -格式化分層數據 -樹形組織排除分支 分層查詢 語法 SELECT [LEVEL],<column>,exper ... FROM <table_name> [WHERE condition(s)] START WITH condition(s) C ...
  • 操作系統 : CentOS7.3.1611_x64 go語言版本:1.8.3 linux/amd64 InfluxDB版本:1.1.0 源碼路徑: github.com/influxdata/influxdb/cmd/influxd 程式入口(main.go): 在main函數中,調用Main.Ru ...
  • 1. 優先安裝軟體1. net framework3.5。2. 在安裝SQL SERVER 2012前需要3.5的支持。在WIN 2012系統可以在系統管理的添加角色和功能中安裝,如下將【.NET Framework 3.5功能】、【.NET Framework 4.5功能】下的組件全部勾選上。3.... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...