大資料學習(hbase,hive,sqoop2對資料的簡單操作)

weixin_33935777發表於2017-09-02

我們就簡單用一組資料來使用這三個元件

首先自己隨便準備一組測試資料,匯入資料到mysql

7106894-284a8636eca79846.png
7106894-ef8dbccb147f69f5.png

匯入完成。

一、用Sqoop1.99.7將mysql資料匯入hdfs

強烈推薦這篇部落格 blog.csdn.net/m_signals/article/details/53190965

執行sqoop2-shell進入shell介面

setoption--name verbose --valuetrue  這個可以使操作輸出更多的資訊

setserver--host master --port 12000--webapp sqoop 設定埠號12000

1.執行show version -all,檢視sqoop2是否正常運作

7106894-22c4d32961019640.png

2.1執行show connector,檢視有哪些註冊了的聯結器

7106894-3d8dd3f77e0d896b.png

2.2建立連線

首先建立jdbc

create link -connector generic-jdbc-connector

Name:標示這個link的字串,可以是一個自己喜歡的名稱。

Driver Class:指定jdbc啟動時所需要載入的driver類,這個類實現了Java.sql.Driver介面。對本文來說,這個值是com.mysql.jdbc.Driver。

Connection String:資料庫連結字串

Username:連結資料庫的使用者名稱,也就是mysql客戶端傳入的-u引數。

Password:連結資料庫的使用者密碼。

FetchSize:這個屬性並沒有在官方文件上描述,直接回車了,使用的預設值。

Identifier enclose:指定SQL中識別符號的定界符,也就是說,有的SQL標示符是一個引號:select * from "table_name",這種定界符在MySQL中是會報錯的。這個屬性預設值就是雙引號,所以不能使用回車,必須將之覆蓋,使用空格覆蓋這個值。

7106894-ad456611fea4cf91.png

再建立HDFS

create link -connector hdfs-connector

其中URI是我們Hadoop配置檔案中fs.defaultFS的值

Conf derectory使我們Hadoop配置檔案的目錄

7106894-f329500736d84d9b.png

檢視我們建立的link,完成

7106894-1ac80cb42fa1ad18.png

3.接下來就是job

3.1 建立job

create job -f jdbcEmp -t hdfsEmp

-f指定from,即是資料來源位置,-t指定to,即是目的地位置。本例是從MySQL傳遞資料到HDFS,所以就是from mysql to HDFS。引數值就是在建立連結(link)時指定的Name。

3.2 提交job

首先檢視我們建立成功的的job

7106894-1ebd4ba30f17e826.png

提交Job

start job -n EmployeeToHdfs

7106894-2e62c1f4df48f609.png

我們也可以在WebUI上檢視程式

7106894-98f8564905b16e79.png

如果你發現如果最後WebUI上報錯 ..Exception from container-launch...

那麼可以嘗試在hadoop的配置檔案mapred-site.xml中加上兩段話,對JVM的記憶體進行處理

mapreduce.admin.map.child.java.opts

-Xmx1024m

mapreduce.admin.reduce.child.java.opts

-Xmx5120m

7106894-931b846abed003d4.png

(這就是我從執行JOB到JOB FINISHED花了四天的原因之一...)

檢視我們的資料

hadoop fs  -cat /sqoop2/*

7106894-04d00b4b12717eba.png

成功。


二、將資料從hdfs匯入hbase並顯示

啟動Hadoop之後,首先在各個節點上啟動zookeeper,然後再啟動Hbase

主節點有HMaster和QuorumPeerMain

7106894-4af0d48877ea1a06.png

分節點有HRegionServer和QuorumPeerMain

7106894-7b8fc64347da918b.png

(如果HMaster啟動不久就消失,那就是Hbase配置檔案的問題,回頭好好檢查)

我們使用hbase提供的important工具來匯入

首先執行hbase org.apache.hadoop.hbase.mapreduce.Import檢視用法

7106894-f8d9731aacf8bf85.png

看起來大概就是剛才的命令+表名+檔案

執行start-hbase.sh

執行hbase shell進入hbase,首先建立我們的表

7106894-fee842ea045351c4.png

建立之後我們回命令列執行我們剛才所說的命令

7106894-f0d8dac7db662e12.png

但是報錯:不是序列化檔案。所以就得換個方法了,於是我就找到下面這個命令

hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.separator="," -Dimporttsv.columns=HBASE_ROW_KEY,**列名1**,**列名2**  **表名**  **檔案路徑**

這個命令就是先執行檔案序列化,再匯入HBase,我們實際操作下

hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.separator="," -Dimporttsv.columns=HBASE_ROW_KEY,emp_no,birth_date,first_name,last_name,gender,hire_date  employees sqoop2/*

7106894-faf311d6ad496b68.png

然後就開始執行MapReduce程式,同樣可以通過WebUI查詢。

最後跑完,我們回hive檢視下

執行scan‘employees’

7106894-11e419fb42f4f67d.png

大概就是這樣了,因為資料比較多,我沒等重新整理完,但已經說資料已經成功從HDFS匯入到HBase中了。



三、將資料從hdfs匯入hive並顯示

在匯入資料之前,我們首先得根據源資料的型別來建立一個表

7106894-21fe08b71a04d8c7.png

通過mysql可以看到有哪些資料和型別

所以我們進入到我們的hive介面,執行下面的操作建立一個新表

7106894-09410e9442533771.png

(hive中沒有enum,所以我直接替換成了string;date型別我查了,hive應該是自帶了的,但我始終列印出來的是NULL,所以暫時也用string代替)

然後執行

load data inpath‘**HDFS上的路徑***’into table **表名稱**;

將HDFS上的資料匯入到hive中。

成功之後執行select * from  **表名**  ;

7106894-ab27da45dfbcba47.png

我們就可以看到已經成功的把資料匯入到了hive中


四.hive和hbase的基本shell操作

這個在網上就隨便搜搜就一大堆的,我再囉嗦就不好了....


至此結束,如果有任何錯誤地方歡迎指出(╯‵□′)╯︵┻━┻

相關文章