1. 程式人生 > >Sqoop 匯入資料到hdfs和hive總結

Sqoop 匯入資料到hdfs和hive總結

  • 使用幫助

Sqoop help 檢視所有的sqoop的幫助

Sqoop help import 檢視import命令的幫助

Eg: sqoop匯入到HDFS的一個簡單示例:
sqoop import 
        --connect jdbc:mysql://192.168.56.121:3306/metastore 
        --username hiveuser 
        --password redhat 
        --table TBLS
  • 匯入到HDFS

Eg:

sqoop import 
--connect jdbc:mysql://192.168.56.121:3306/metastore 
--username hiveuser 
--password redhat 
--table TBLS 
--target-dir /user/hive/result

注意:

  •  mysql jdbc url 請使用 ip 地址
  • 如果重複執行,會提示目錄已經存在,可以手動刪除
  • 如果不指定 --target-dir,匯入到使用者家目錄下的 TBLS 目錄

其他引數說明

引數

說明

--append

將資料追加到hdfs中已經存在的dataset中。使用該引數,sqoop將把資料先匯入到一個臨時目錄中,然後重新給檔案命名到一個正式的目錄中,以避免和該目錄中已存在的檔案重名。

--as-avrodatafile

將資料匯入到一個Avro資料檔案中|

--as-sequencefile

將資料匯入到一個sequence檔案中

--as-textfile

將資料匯入到一個普通文字檔案中,生成該文字檔案後,可以在hive中通過sql語句查詢出結果。

--boundary-query <statement>

邊界查詢,也就是在匯入前先通過SQL查詢得到一個結果集,然後匯入的資料就是該結果集內的資料,格式如:

--boundary-query 'select id,no from t where id = 3',表示匯入的資料為id=3的記錄,或者 select min(<split-by>), max(<split-by>) from <table name>,注意查詢的欄位中不能有資料型別為字串的欄位,否則會報錯

--columns<col,col>

指定要匯入的欄位值,格式如:--columns id,username

--direct

直接匯入模式,使用的是關係資料庫自帶的匯入匯出工具。官網上是說這樣匯入會更快

--direct-split-size

在使用上面direct直接匯入的基礎上,對匯入的流按位元組數分塊,特別是使用直連模式從PostgreSQL匯入資料的時候,可以將一個到達設定大小的檔案分為幾個獨立的檔案。

--inline-lob-limit

設定大物件資料型別的最大值

-m,--num-mappers

啟動Nmap來並行匯入資料,預設是4個,最好不要將數字設定為高於叢集的節點數

--query-e <sql>

從查詢結果中匯入資料,該引數使用時必須指定–target-dir–hive-table,在查詢語句中一定要有where條件且在where條件中需要包含 \$CONDITIONS,示例:--query 'select * from t where \$CONDITIONS ' --target-dir /tmp/t –hive-table t

--split-by <column>

表的列名,用來切分工作單元,一般後面跟主鍵ID

--table <table-name>

關係資料庫表名,資料從該表中獲取

--delete-target-dir

刪除目標目錄

--target-dir <dir>

指定hdfs路徑

--warehouse-dir <dir>

 --target-dir 不能同時使用,指定資料匯入的存放目錄,適用於hdfs匯入,不適合匯入hive目錄

--where

從關係資料庫匯入資料時的查詢條件,示例:--where "id = 2"

-z,--compress

壓縮引數,預設情況下資料是沒被壓縮的,通過該引數可以使用gzip壓縮演算法對資料進行壓縮,適用於SequenceFile, text文字檔案, Avro檔案

--compression-codec

Hadoop壓縮編碼,預設是gzip

--null-string <null-string>

可選引數,如果沒有指定,則字串null將被使用

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

可選引數,如果沒有指定,則字串null將被使用|

2.3 建立 hive

Eg:
sqoop 
        create-hive-table 
        --connect jdbc:mysql://192.168.56.121:3306/metastore 
        --username hiveuser 
        --password redhat 
        --table TBLS 

引數

說明

--hive-home <dir>

Hive的安裝目錄,可以通過該引數覆蓋掉預設的hive目錄

--hive-overwrite

覆蓋掉在hive表中已經存在的資料

--create-hive-table

預設是false,如果目標表已經存在了,那麼建立任務會失敗

--hive-table

後面接要建立的hive

--table

指定關係資料庫表名

匯入資料到 hive

執行下面的命令會將 mysql 中的資料匯入到 hdfs 中,然後建立一個hive 表,最後再將 hdfs 上的檔案移動到 hive 表的目錄下面。
sqoop import 
        --connect jdbc:mysql://192.168.56.121:3306/metastore 
        --username hiveuser --password redhat 
        --table TBLS 
        --fields-terminated-by "\t"
        --lines-terminated-by "\n"
        --hive-import 
        --hive-overwrite 
        --create-hive-table 
        --hive-table dw_srclog.TBLS 
        --delete-target-dir

具體可以參照:https://segmentfault.com/a/1190000002532293

關於sqoop的匯出使用從hive中匯出到mysql:

Sqoop export

--connect jdbc:mysql://xxxxxx:3306/bbg_real_data?characterEncoding=utf-8

--username root  #表示資料庫使用者名稱

--password root  #表示資料庫密碼

--table deal_data  #表示資料表名

--hcatalog-database default  #hive中的資料庫名

--hcatalog-table deal_bbg_data_2  #表示hive中的表名

注意匯出的時候,mysql的欄位名要和hive裡面的欄位名一樣,這樣才能對應的匯入和匯出。欄位型別也要一樣,我全部都是varchar(40)。

Mysql表明和欄位名不能是關鍵字例如:all等等

Hive tutorrials

  1. Create schema/table

Create schema[table] schema_name/table_name

  1. Delete schema/table

Drop  database[table] if exists database_name[table_name] 

Detail please look at as follow:

相關推薦

Sqoop 匯入資料到hdfshive總結

使用幫助 Sqoop help 檢視所有的sqoop的幫助 Sqoop help import 檢視import命令的幫助 Eg: sqoop匯入到HDFS的一個簡單示例: sqoop import         --connect jdbc:mysql:

使用Sqoop資料從RDBMS(關係型資料庫) 到hdfsHive匯入匯出

一、RDBMS 到 HDFS/HIVE 1.首先啟動Mysql service mysql start 2.在mysql中新建一張表並插入資料 # mysql -uroot -proot mysql> create table dept(id int pri

Sqoop匯入資料文字格式Sequence File的比較

Sqoop可以匯入資料到一些不同的檔案格式。 文字格式: 文字格式(預設格式)提供一種便於人閱讀的資料格式, 這種格式平臺無關性,是最簡單的結構。 但是,這種檔案格式,不可以處理二進位制欄位(例如資

sqoop 匯入mysql資料到hive中,把多個mysql欄位資料型別轉換hive資料型別

如:sqoop import --connect "jdbc:mysql://192.168.2.42:3306/test?useUnicode=true&characterEncoding=utf-8" --username smap --password ****

Java byte資料轉換處理總結

一.byte和int相互轉換的方法 java程式或Android程式的socket資料傳輸,都是通過byte陣列,但是int型別是4個byte組成的,如何把一個整形int轉換成byte陣列,同時如何把一個長度為4的byte陣列轉換為int型別。 /** * int到byte[]

sqoop mysql 導 HDFSHIVE

目錄: 一mysql 匯入 hdfs 1最簡單的匯入 2指定mapTask個數 3匯入到hdfs上指定的目錄 二mysql 匯入 hive 1最簡單的匯入 2匯

Java入門,資料型別運算子總結

Java入門 1.所有的程式語言的最終目的都是提供一種“抽象”方法。抽象的層次越高,越接近人的思維。越接近人的思維,越容易使用。 2.越高階的語言越容易學習;當然,這隻意味著容易入門;不意味著成為高手越容易,高手仍然需要修煉。 3.Java的核心優勢:跨平臺。跨平臺是靠JVM(虛擬機器)實現的。 4.

資料倉庫hive語句中的分割槽表分桶表

    資料倉庫中從各資料來源獲取資料以及在資料倉庫內的資料轉換和流動都可以認為是ETL(抽取Extra,轉化Transfer,裝載Load)的過程,ETL是資料倉庫的流水線.資料倉庫(data warehouse)與資料庫的區別:資料倉庫(data warehouse)--

資料結構演算法總結(一)

任何一位有志於駕馭計算機的學生,都應該從這些方面入手,重點是:不斷學習,反覆練習,勤於總結。 究竟什麼是演算法呢?所謂演算法,是指基於特定的計算機模型,旨在解決某一問題而設計的一個指令序列。 演算法應具有以下流程:輸入與輸出;基本操作即加減乘除;確定性即明確的指令序列,可行性即可在對應計算機

Sqoop 匯入資料報錯:No columns to generate for ClassWriter

使用Sqoop 匯入資料報錯資訊如下: java.sql.SQLException: Streaming result set com.mysql.jdbc 18/09/07 10:09:20 INFO manager.MySQLManager: Preparing to use a MySQL

sqoop匯入資料時間日期型別錯誤

一個問題困擾了很久,用sqoop import從mysql資料庫匯入到HDFS中的時候一直報錯,最後才發現是一個時間日期型別的非法值導致。hive只支援timestamp型別,而mysql中的日期型別是datetime, 當datetime的值為0000-00-00 00:0

sqoop 匯入資料的時候出現Unsupported major.minor version 52.0的問題描述

出現該問題是由於cloudera manager和系統的jdk版本不一致導致的,更具體點是cm使用的是低版本的jdk(我的是1.7),而作業系統通過java -version出來的版本是高版本的jdk(我的是1.8),由於sqoop會自動生成程式碼並編譯程jar然後提交給m

使用neo4j圖資料庫的import工具匯入資料 -方法注意事項

背景 最近我在嘗試儲存知識圖譜的過程中,接觸到了Neo4j圖資料庫,這裡我摘取了一段Neo4j的簡介: Neo4j是一個高效能的,NOSQL圖形資料庫,它將結構化資料儲存在網路上而不是表中。它是一個嵌入式的、基於磁碟的、具備完全的事務特性的Java持

hdfs hive與 partition

home/wangshumin[[email protected] ~]$ hdfs dfs -cat /user/hive/warehouse/hive2_db1.db/stuincat: `/user/hive/warehouse/hive2_db1.db/st

利用Sqoop將MySQL海量測試資料匯入HDFSHBase

宣告:作者原創,轉載註明出處。 一、安裝Sqoop 1、下載sqoop,解壓、資料夾重新命名 wget http://mirror.bit.edu.cn/apache/sqoop/1.4.6/sqoop-1.4.6.bin_

使用sqoop命令把oracle資料匯入hdfs/hbase/hive

(一)匯入HDFS建立Job#!/bin/bash #Oracle的連線字串,其中包含了Oracle的地址,SID,和埠號 CONNECTURL=jdbc:oracle:thin:@10.122.5.2:1521:db #使用的使用者名稱 ORACLENAME=db #使用的

sqoop匯入資料到HIVEHDFS

一:sqoop資料的匯入    1.使用sqoop將:mysql中的資料匯入到HDFS(直接匯入) Step1、確定Mysql服務的正常開啟 service mysql status      

SqoopHDFSHive、Hbase等系統的資料同步操作

Sqoop與HDFS結合         下面我們結合 HDFS,介紹 Sqoop 從關係型資料庫的匯入和匯出。 Sqoop import        

sqoop匯入hive資料時對換行等特殊字元處理

使用場景:  公司大資料平臺ETL操作中,在使用sqoop將mysql中的資料抽取到hive中時,由於mysql庫中默寫欄位中會有換行符,導致資料存入hive後,條數增多(每個換行符會多出帶有null值得一條資料),導致統計資料不準確。 解決辦法: 利用一下兩個引數

Sqoop的安裝與Mysql的資料匯入hdfs框架中

Sqoop簡介 Sqoop(發音:skup)是一款開源的工具,主要用於在Hadoop(Hive)與傳統的資料庫(mysql、postgresql...)間進行資料的傳遞,可以將一個關係型資料庫(例如 : MySQL ,Oracle ,Postgres等)中的資料導進到Hadoop的HDFS中,也