1. 程式人生 > >kettle案例七連線hive--抽取mongodb的資料儲存到hive

kettle案例七連線hive--抽取mongodb的資料儲存到hive

hive作為資料倉庫的載體,一般情況下我們會經常把資料儲存到hive中。

本章通過抽取mongodb的資料儲存到hive的案例來學習連線hive。

kettle把資料匯入hive有兩種思路
一種是通過hiveserver2使用JDBC的連線方式,這種是一條一條的進行寫入,可能速度上要慢一些。
一種是使用Hadoop File Input方式把檔案放入hdfs,然後使用hive命令來載入。適合大塊批量的資料儲存到hive。

方式一hiveserver2模式

在hive中啟動hiveserver2

在使用JDBC方式連線hive之前需要啟動hiveserver2。
使用命令

hive
--service hiveserver2

下載對應的hive jar包

在kettle的安裝目錄中找到hadoop-configurations資料夾,如下:
D:\kettle\data-integration\plugins\pentaho-big-data-plugin\hadoop-configurations

在伺服器上找到所有hive的相關jar包,下載下來放入hadoop-configurations目錄下的hdp25的lib資料夾中。
如何找到伺服器上找到所有hive的相關jar包,如果是自己安裝的原生hive,那麼在hive的安裝目錄中查詢。
如果是通過CDH來安裝的,可以參考文章:

hadoop基礎—-hadoop實戰(十一)—–hadoop管理工具—CDH的目錄結構瞭解
通過CDH安裝的hive jar包一般儲存在/opt/cloudera/parcels/CDH/lib/hive中。
使用命令
cd /opt/cloudera/parcels/CDH/lib/hive
ls
如下圖:

下載的包如下,都是hive開頭的jar包:

放入D:\kettle\data-integration\plugins\pentaho-big-data-plugin\hadoop-configurations\hdp25\lib路徑中如下圖:

修改plugin.properties檔案

找到kettle安裝目錄下的plugins/pentaho-big-data-plugin/plugin.properties檔案,我的路徑是:
D:\kettle\data-integration\plugins\pentaho-big-data-plugin。
如下圖:

內容如下:

這裡hdp25與path引數hadoop-configurations需要與自己的安裝目錄路徑對應如下:

重啟kettle新建DB連線

修改配置後以及新增jar包後需要重啟kettle才生效。
重啟後嘗試建立DB連線如下:
主物件樹–》DB連線右鍵新建—》填寫相關引數(引數與自己的hivesever2的ip埠資料庫名以及可登陸linux系統訪問hiveserver2的使用者名稱對應)
如圖:

新建流程

新建流程如下:
MongoDB Input—》表輸出

MongoDB Input輸入ip和埠以及資料庫集合和獲取欄位。


表輸出
表輸出選擇新建的DB連線hive2以及瀏覽選擇資料庫和表。
如果表還沒新建則需要先在hive shell中新建表,資料結構需要與輸出對應。
我這裡使用命令如下:

hive shell
CREATE TABLE family (date string,id string,type string,code string,userId string,createDate string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';

最終表輸出設定如圖:

執行測試

點選kettle執行。
執行情況如下:

在hive的叢集中使用命令檢視資料:

hive shell
select * from family;

輸出如圖:
可以看到已經有資料寫入了:

我們發現記錄是一條一條插入hive的,因為hive的insert也會執行mapreduce,所以一條一條的插入速度非常慢。
這就是我們需要第二種方式Hadoop File Input匯入的原因。

方式二Hadoop File Input

我們發現使用JDBC方式進行匯入是一條一條記錄進行匯入的,速度非常尷尬,幾乎不可用。
我們還有另外一種思路可以大資料量的進行處理。
通過kettle提供的Hadoop File Output 元件將資料以資料檔案的方式匯入到hadoop的hdfs。然後通後通過執行sql指令碼,使用hive 支援的 load data inpath into table 的方式,將hdfs的資料檔案,載入到hive表中。

詳細步驟如下:

下載hadoop cluster配置檔案

從伺服器hadoop etc的配置檔案中下載如下4個配置檔案,覆蓋kettle的plugins\pentaho-big-data-plugin\hadoop-configurations\hdp25中的4個同名檔案。
core-site.xml
hdfs-site.xml
mapred-site.xml
yarn-site.xml

如果是CDH安裝的Hadoop,hadoop etc的配置檔案在伺服器中的路徑是/etc/hadoop/。如下:

ls /etc/hadoop

放入路徑如下:
D:\kettle\data-integration\plugins\pentaho-big-data-plugin\hadoop-configurations\hdp25

重啟kettle新建hadoop cluster 連線

主物件樹–》Hadoop clusters—》填寫相關引數(根據上面4個配置檔案填寫配置的hostname 和埠號以及使用者名稱密碼,其中:Cluster Name 自定義叢集名字;Hdfs Hostname為叢集active Namenode ip,埠預設為8020;JobTracker為叢集運用resource manager 許可權的節點ip,埠預設為8032;ZooKeeper Hostname為對應節點ip,預設埠為2181;Oozie可不填。)
如圖:

HDFS的Hostname和Port在core-site.xml中,節點為fs.defaultFS。
如圖:

使用者名稱密碼使用可訪問hdfs的使用者名稱密碼。

JobTracker的Hostname和Port在yarn-site.xml中,節點為yarn.resourcemanager.address.rm187。
如圖:

Zookeeper的Hostname和Port在yarn-site.xml中,節點為yarn.resourcemanager.zk-address。
如圖:

可能遇到的問題

the hadoop file system url does not match the url in the shims core-site.xml

警告的原因是因為 配置的 url 與 xml 配置檔案裡面的 url 不一樣
xml 裡面用的 hostname 連線的,而我們配置的時候用的 ip,
將 ip 改為 hostname即可測試用過。
注意,用 hostname時,本地需要 新增 hosts 配置。
以windows新增hosts為例:
開啟c:\windows\system32\drivers\etc資料夾找到hosts,右鍵使用管理員許可權開啟hosts檔案,新增對應關係如下:
192.168.30.217 host217
192.168.30.250 host250
192.168.30.252 host252
192.168.30.251 host251
如圖:

win+R輸入cmd執行進入cmd模式檢測host對應是否生效:

ping host250

如圖已生效

最終配置修改如下,測試成功:

有一部分因為沒有root賬戶密碼許可權的問題仍然錯誤,不過不影響,只要Hadoop File System Connection 沒報錯就行。
Ping Job Tracker/Resource Manager報錯如果確認地址埠正確可以多測試幾次,受網路影響。

新建流程

新建流程如下:
MongoDB Input—》Hadoop File Output—》執行SQL指令碼
MongoDB Input在核心物件-Big Data目錄。
Hadoop File Output在核心-物件Big Data目錄。
執行SQL指令碼在核心物件-指令碼目錄。

通過MongoDB Input的方式,從mongodb資料庫讀取資料,然後通過Hadoop File Output將mongodb資料庫的資料以資料檔案的方式,輸出到hadoop的hdfs,然後執行SQL指令碼,將資料檔案載入到hive的表中。

MongoDB Input輸入ip和埠以及資料庫集合和獲取欄位。


Hadoop File Output
hadoop file output元件在配置如下:
檔案欄選擇 叢集和瀏覽選中存放資料資料夾和檔名

如圖,存放的路徑是/user/hive/warehouse,檔名是family.txt。
完整路徑是/user/hive/warehouse/family.txt。
注意,儘量選擇/user/hive/warehouse下的路徑,否則可能因為許可權原因建立不成功。

在內容欄裡面注意標紅的幾個配置

分隔符選擇要與hive外表欄位分割符相對應(row format delimited fields terminated by ‘\t’ loaction ‘/../../檔案位置’),所以我們的分隔符使用Tab。
封閉符去掉。
頭部表示是否顯示列名,我們這裡去掉勾選。
格式選擇Unix,因為我們的hadoop是安裝在linux系統的。
編碼選擇UTF-8。
選中快速資料儲存。

在欄位欄裡面獲取欄位

執行SQL指令碼
使用SQL指令碼之前需要新建hive表連線,步驟如下:
主物件樹–》DB連線右鍵新建—》填寫相關引數(引數與自己的hivesever2的ip埠資料庫名以及可訪問hdfs檔案儲存路徑的使用者名稱對應,這裡使用hdfs)
如圖:

我們這裡使用SQL指令碼新建表並且載入資料,資料結構需要與輸出對應。
我這裡使用命令如下:

DROP TABLE family;
CREATE TABLE family (date string,id string,type string,code string,userId string,createDate string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
LOAD DATA INPATH '/user/hive/warehouse/family.txt' OVERWRITE INTO TABLE family;

這裡路徑和檔名與Hadoop File Output檔案欄中的Folder/File對應。
SQL指令碼設定如下:

測試執行

點選執行。
執行情況如圖:

使用命令檢視hdfs中的檔案

hdfs dfs -ls /user/hive/warehouse
hdfs dfs -cat /user/hive/warehouse/family.txt

如圖:

使用命令檢視hdfs中的檔案中的資料數量,確保完整性。

hdfs dfs -cat /user/hive/warehouse/family.txt|wc -l

檢視family表裡的資料使用命令

hive shell;
select * from family;
select count(1) from family;

kettle執行順序之可能存在的問題

在上面的測試中我們發現Hadoop File Output輸出的檔案family.txt並沒有包含所有的資料。hive的family表格中資料為空。
這是因為kettle的執行順序導致的。
kettle中轉換和作業的執行順序:
1、一個作業內的轉換,是順序執行的。
2、一個轉換內的步驟是並行執行的。
3、作業內不支援事務,轉換內支援事務。
根據業務需要,通常需要在轉換內順序執行,小技巧如下:
1、執行SQL是優先於所有步驟。
2、使用“阻塞資料直到步驟都完成”,確保其他資料步驟都完成再進行下一步驟。
事務:
1、設定轉換隻使用一個事務。轉換設定–>夾項–>使用唯一連線。
2、設定轉換內的表插入等資料庫的操作不進行批量提交。”提交記錄數量”–>0

也就是說 轉換中的執行SQL會先執行,所以Hadoop File Output輸出沒有完成時,我們就進行載入了,這樣會有問題。
解決方法加入阻塞資料流程。
阻塞資料在核心物件-流程目錄。
如圖:

重新執行測試。

3秒鐘完成匯入hive成功!!!

相關推薦

kettle案例連線hive--抽取mongodb資料儲存hive

hive作為資料倉庫的載體,一般情況下我們會經常把資料儲存到hive中。 本章通過抽取mongodb的資料儲存到hive的案例來學習連線hive。 kettle把資料匯入hive有兩種思路 一種是通過hiveserver2使用JDBC的連線方式,這種是一條

kettle案例連線hive--抽取hive資料儲存excel

我們在上篇文章已經學習瞭如何把資料放入hive中。 本章學習如何把資料從hive中匯出來。 在hive中啟動hiveserver2 在使用JDBC方式連線hive之前需要啟動hiveserver2。 使用命令 hive --servic

程式碼 | Spark讀取mongoDB資料寫入Hive普通表和分割槽表

版本: spark 2.2.0  hive 1.1.0  scala 2.11.8  hadoop-2.6.0-cdh5.7.0  jdk 1.8  MongoDB 3.6.4 一 原始資料及Hive表  MongoDB資

匯入 Mongodb 資料Hive 方法一

wechat:812716131 ------------------------------------------------------ 技術交流群請聯絡上面wechat ----------------------------------------------

React-Native開發 react-navigation之AsyncStorage資料儲存

1 前言 我們都知道,在Android和IOS中分別有不同的持久化資料方式,例如Android中的檔案,資料庫,SharePrefences等。AsyncStorage是一個簡單的key-value儲存系統,是RN官方推薦的。它儲存的都是String型別的資料,是一個RN中輕量級的資

Python + Mongodb資料儲存

導言:一直在用MySQL,聽說Mongodb非常不錯,一直在工作中沒用到,這個週末來玩玩 Mongodb安裝 window平臺安裝 MongoDB: MongoDB提供了可用於32位和64位系統的

sparksql讀取hive中的資料儲存到hdfs中

package wondersgroup_0905_Test import org.apache.spark.sql.SparkSession object sparkHive { def main(args: Array[String]): Unit = { //資料庫名稱

案例】Danone依靠Matrikon進行資料儲存和分析

Matrikon是基於OPC UA和基於OPC的控制自動化資料互操作性產品的供應商,提供自動化廠商的高階OPC UA開發工具包,適用於從嵌入式裝置到雲應用的所有產品線。對於終端使用者客戶,Matrikon提供了關鍵資料工具,以最好地促進企業廣泛的資料共享。 Danone是一家致力於通過保證食品安

Hive-JSON 原始資料對映 Hive 表結構

參考文件  https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-RowFormats&SerDe   建立 HIVE-JSON 表

HIVE學習筆記----資料儲存

  -基於HDFS   -沒有專門的資料儲存格式   -儲存結構主要包括:資料庫、檔案、表、檢視   -可以直接載入文字檔案(txt  csv等)   -建立表時,指定Hive資料的列分隔符與行分隔符 表: 內部表 /分割槽表 /外部表 /桶表   -內部表:

kettle案例資料表關聯--排序記錄-記錄集連線-過濾記錄

如果我們清洗的資料是多個維度的,那麼很有可能對資料進行關聯得到一張最終表進行分析。 比如 回答集合的資料裡有如下欄位 id optionId user 包含了 誰 回答了哪個問題,選項是什麼。 選項集合的資料裡有如下欄位 id question

kettle案例抽取gz格式文字內容儲存mongodb

版本和啟動 我們這裡使用的7.1版本,官網下載的安裝包為pdi-ce-7.1.0.0-12.zip。 安裝目錄下非常多的執行程式,但沒有明顯的啟動圖示。 Kettle常用三大家族:Spoon、Pan、Kitchen。 Spoon:通過圖形介面方式

Kettle案例總結一—多表連線(記錄集連線)

Kettle是一款國外開源的ETL工具,純java編寫,可以在Window、Linux、Unix上執行,資料抽取高效穩定。 Kettle這個ETL工具集,它允許你管理來自不同資料庫的資料,通過提供一個圖形化的使用者環境來描述你想做什麼,而不是你想怎麼做。 Kettle中有兩種

使用spark將hive中的資料匯入到mongodb

import com.huinong.truffle.push.process.domain.common.constant.Constants; import com.mongodb.spark.MongoSpark; import com.mongodb.spark.config.WriteConf

Mongodb資料同步到Hive

思路:利用Mongodb的export工具匯出資料成json格式;              load該json資料到臨時hive表的一個欄位;  

[shell]shell指令碼實現每天自動抽取資料插入hive

#!/bin/bash source /etc/profile source ~/.bashrc M_DATE=$(date -d'-1 day' +%m) #取系統日期前一天的月份 spark-sql -e" insert overwrite table db.t

kettlemongodb資料同步

需求: 1.源資料庫新增一條記錄,目標庫同時新增一條記錄; 2.源資料庫修改一條記錄,目標庫同時修改該條記錄; 示例用到三個Kettle元件   下面詳細說下每個元件的配置 Source: 本示例連線的是Mongodb資料庫,四個欄位,ID預設為主鍵,_

kettle案例五使用js指令碼進行json資料處理新增行

我們通過兩個例子來學習Js處理資料新增行: 例子一字串拆分 按照原始資料列”aaa bbb ccc ddd”把資料分成4行。 比如我們有原始資料行如下: id group person 1 A aaa bbb ccc ddd 我們需

hivemongodb連線

1.下載 wget http://repo1.maven.org/maven2/org/mongodb/mongo-hadoop/mongo-hadoop-hive/2.0.2/mongo-hadoop-hive-2.0.2.jar wget http://repo1.ma

MongoDB資料建模小案例:朋友圈評論內容管理

需求 社交類的APP需求,一般都會引入“朋友圈”功能,這個產品特性有一個非常重要的功能就是評論體系。 先整理下需求: 這個APP希望點贊和評論資訊都要包含頭像資訊: 點贊列表,點贊使用者的暱稱,頭像;評論列表,評論使用者的暱稱,頭像; 資料查詢則相對簡單: 根據分享ID,批量的查詢出10條分享裡的