高可用Hadoop平臺-實戰尾聲篇

smartloli發表於2016-04-19

1.概述

  今天這篇部落格就是《高可用Hadoop平臺》的尾聲篇了,從搭建安裝到入門執行 Hadoop 版的 HelloWorld(WordCount 可以稱的上是 Hadoop 版的 HelloWorld ),在到開發中需要用到的各個套件以及對套件的安裝使用,在到 Hadoop 的實戰,一路走來我們對在Hadoop平臺下開發的基本流程應該都熟悉了。今天我們來完成在高可用Hadoop平臺開發的最後一步,匯出資料。

2.匯出資料目的

  首先,我來說明下為什麼要匯出資料,匯出資料的目的是為了幹嘛?

  我們都知道,我們當初統計這些資料的目標,就是為了來視覺化這些資料結果;雖然結果我們是統計出來儲存在 HDFS 上,但是,前段同學需要拿到這些資料,直接操作 HDFS 讀取統計結果,這樣的做法是不明智的,撇開安全性不說,時延就是一個很大的問題。所以,這裡我們需要有一個步驟去完成資料的匯出,將資料匯出到 Mysql 之類的關係型資料庫。這裡我們用到的匯出套件是Sqoop。

3.Sqoop

3.1安裝包

  sqoop 下載地址

3.2配置

  開啟配置環境檔案:

sudo vi /etc/profile

  編輯 Sqoop 的環境,內容如下所示:

export SQOOP_HOME=/home/hadoop/sqoop-1.4.5
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$ZK_HOME/bin:$HIVE_HOME/bin:$SQOOP_HOME/bin

3.3sqoop-env.sh

  變動內容如下:

#Set path to where bin/hadoop is available
export HADOOP_COMMON_HOME=/home/hadoop/hadoop-2.6.0

#Set path to where hadoop-*-core.jar is available
export HADOOP_MAPRED_HOME=/home/hadoop/hadoop-2.6.0

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

#Set the path to where bin/hive is available
export HIVE_HOME=/home/hadoop/hive-0.14.0

#Set the path for where zookeper config dir is
#export ZOOCFGDIR=

  注:這裡使用 Sqoop 自帶的 ZooKeeper ,另外由於沒有使用到 HBase ,故這裡未配置 HBase 的路徑指向。

3.4異常

  Streaming result set com.mysql.jdbc.RowDataDynamic@12e9d40f is still active

  執行sqoop指令碼時,出現這個異常是因為mysql的驅動的原因,使用最新的mysql驅動包。

  解決方案:

wget http://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.32.tar.gz

  然後解壓到sqoop目錄的lib目錄下,重新執行指令碼正常。

  至此,sqoop的安裝配置以及使用到此完成。

4.匯出流程

  流程圖如下所示:

  將hive資料庫的TBLS表匯入到hdfs,命令內容如下:

sqoop import 
--connect jdbc:mysql://10.211.55.26:3306/hive
--username root
--password root
--table TBLS
--fields-terminated-by '\t'

  這裡 JDBC 的連結地址指向 Mysql 庫的連結地址。

  注:--fields-terminated-by '\t' 以tab分割

  --null-string '**'  將null用**替代(--是sqoop保留字元,不能使用)

  -m 1  指定一個map任務

 

  將hdfs上的檔案匯入到mysql資料庫:

sqoop export 
-D sqoop.export.records.per.statement=100
--connect jdbc:mysql://10.211.55.26:3306/sqoop
--username root
--password root
--table portal
--fields-terminated-by ','
--export-dir "/home/hive/warehouse/logdfs_${yesterday}"
--batch --update-key date,appkey
--update-mode allowinsert;

  接下來,在我們匯出資料成功後,我們可以將臨時使用 hive 統計的結果表刪除,若資源充足,我們可以保留最近 7 天的統計結果。

  刪除指令碼命令如下所示:

hive -e "drop table pv_${yesterday};drop table reguser_${yesterday};drop table ip_${yesterday};drop table jumper_${yesterday};drop table logdfs_${yesterday};"

5.總結

  在匯出的時候,我們需要注意匯出欄位的分隔符,匯出到目的地表名是否存在,書寫匯出命令是否正確。在匯出異常時,根據具體的異常資訊做相應的處理。

6.結束語

  《高可用Hadoop平臺》系列就和大家分享到這裡,這一系列文章給對Hadoop方面感興趣,以及打算從事Hadoop方面工作的人一點點幫助,大家在研究的過程當中若是有什麼問題,可以加群討論或是傳送郵件給我,我會盡我所能為您解答,與君共勉!

 

相關文章