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方面工作的人一點點幫助,大家在研究的過程當中若是有什麼問題,可以加群討論或是傳送郵件給我,我會盡我所能為您解答,與君共勉!