當前位置:首頁 » 編程軟體 » hive腳本

hive腳本

發布時間: 2022-01-09 17:42:46

1. sqoop2如何寫自動化腳本到hive,或者hbase

Hbase不支持sql語句查詢,如果要實現count\group等操作需要藉助Maprece程序,門檻較高;
Hive對於SQL的支持有強大的功能,我們不需要寫過多的自定義函數就能實現較為復雜的查詢
優點:
1、Hive方便地提供了Hive QL的介面來簡化MapRece的使用,而HBase提供了低延遲的資料庫訪問。如果兩者結合,可以利用MapRece的優勢針對HBase存儲的大量內容進行離線的計算和分析;
2、操作方便,hive提供了大量系統功能;
3、降低業務開發人員技術門檻,只需要掌握SQL即可;
缺點:
性能的損失,hive有這樣的功能, 他支持通過類似sql語句的語法來操作hbase中的數據, 但是速度慢;
限制條件:
Hbase表需要有多個欄位,如果是單列,欄位採用特殊字元分隔,那麼導入
1、將以下jar包拷貝到$HIVE_HOME/lib/目錄中
cp hbase-common-1.0.0-cdh5.5.0.jar$HIVE_HOME/lib/
cp hbase-server-1.0.0-cdh5.5.0.jar$HIVE_HOME/lib/
cp hbase-client-1.0.0-cdh5.5.0.jar$HIVE_HOME/lib/
cp hbase-protocol-1.0.0-cdh5.5.0.jar$HIVE_HOME/lib/
cp hbase-hadoop2-compat-1.0.0-cdh5.5.0.jar $HIVE_HOME/lib/
cp hbase-hadoop-compat-1.0.0-cdh5.5.0.jar$HIVE_HOME/lib/
cp htrace-core-3.2.0-incubating.jar$HIVE_HOME/lib/
cp netty-all-4.0.23.Final.jar$HIVE_HOME/lib/
cp metrics-core-2.2.0.jar $HIVE_HOME/lib/
2、在hive-site.xml中增加以下配置
<property>
<name>hbase.zookeeper.quorum</name>
<value>master:2181,slave1:2182,slave2:2183</value>
</property>
<property>
<name>hive.aux.jars.path</name>
<value>file:///cdh550/hive/lib/hive-hbase-handler-1.1.0-cdh5.5.0.jar,file:///cdh550/hive/lib/hbase-common-1.0.0-cdh5.5.0.jar,file:///cdh550/hive/lib/hbase-server-1.0.0-cdh5.5.0.jar,file:///cdh550/hive/lib/hbase-client-1.0.0-cdh5.5.0.jar,file:///cdh550/hive/lib/hbase-protocol-1.0.0-cdh5.5.0.jar,file:///cdh550/hive/lib/zookeeper-3.4.5-cdh5.5.0.jar</value>
</property>
3、啟動Hive服務端
ohup hive --service metastore > metastore.log
ohup hive --service hiveserver2>hiveserver2.log
4、啟動hive客戶端
hive [-hiveconf hive.root.logger=DEBUG,console]
CREATE EXTERNAL TABLE hive_hbase_1(keystring, value string)
STORED BY'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES("hbase.columns.mapping" = "c1:d1")
TBLPROPERTIES("hbase.table.name"= "platjava_test_20170401", "hbase.mapred.output.outputtable"= " platjava_test_20170401")
--hbase.columns.mapping指向對應的列族;多列時,data:1,data:2;多列族時,data1:1,data2:1;
--hbase.table.name指向對應的表;hbase_table_2(keystring, value string),這個是關聯表。
注意:
建表或映射表的時候如果沒有指定:key則第一個列默認就是行鍵
HBase對應的Hive表中沒有時間戳概念,默認返回的就是最新版本的值
由於HBase中沒有數據類型信息,所以在存儲數據的時候都轉化為String類型
CREATE TABLE hbase_table_1(key int, valuestring)
STORED BY'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES("hbase.columns.mapping" = ":key,cf1:val")
TBLPROPERTIES ("hbase.table.name"= "xyz", "hbase.mapred.output.outputtable" ="xyz")
hbase.table.name:參數是可選的,是Hbase可識別的名字,如果不設置則和Hive表名一致;
在Hive中創建的和Hbase整合的表不支持load data導入數據,需要在Hive中創建中間表導入數據後採用insert方式導入數據。
例:INSERTOVERWRITE TABLE hbase_table_1 SELECT * FROM pokes WHERE foo=98
當有大量數據導入Hbase時,建議將WAL關閉:sethive.hbase.wal.enabled=false
FAILED: Execution Error, return code 1 fromorg.apache.hadoop.hive.ql.exec.DDLTask. java.lang.RuntimeException: MetaException(message:org.apache.hadoop.hive.serde2.SerDeExceptionorg.apache.hadoop.hive.hbase.HBaseSerDe: columns has 1 elements whilehbase.columns.mapping has 2 elements (counting the key if implicit))
在創建hive/hbase相關聯的表時,hbase表結構默認會有一個欄位key,如果沒有一個顯示的欄位'key'那麼在創建表時,會自己創建,這樣hive對應的表就會出現問題,所以在hive對應的表裡一定要加上key這個欄位,為了避免這個問題,在hbase表結構里可以顯示的添加'key'欄位,這樣不容易出問題。
1、 Hive SQL在執行過程中是否會對Hbase的實時數據讀寫造成影響?(不考慮主機資源情況下)

2. 如何提升hive腳本的map數

一、 控制hive任務中的map數:

1. 通常情況下,作業會通過input的目錄產生一個或者多個map任務。
主要的決定因素有: input的文件總個數,input的文件大小,集群設置的文件塊大小(目前為128M, 可在hive中通過set dfs.block.size;命令查看到,該參數不能自定義修改);

2. 舉例:
a) 假設input目錄下有1個文件a,大小為780M,那麼hadoop會將該文件a分隔成7個塊(6個128m的塊和1個12m的塊),從而產生7個map數
b) 假設input目錄下有3個文件a,b,c,大小分別為10m,20m,130m,那麼hadoop會分隔成4個塊(10m,20m,128m,2m),從而產生4個map數
即,如果文件大於塊大小(128m),那麼會拆分,如果小於塊大小,則把該文件當成一個塊。

3. hue/oozie 調度shell執行hive腳本

前面已經有篇文章介紹如何編譯包含hive的spark-assembly.jar了,不清楚的可以翻看一下前面的文章。clouderamanager裝好的spark,直接執行spark-shell進入命令行後,寫入如下語句:valhiveContext=neworg.apache.spark.sql.hive.HiveContext(sc)你會發現沒法執行通過,因為cm裝的原生的spark是不支持sparkhql的,我們需要手動進行一些調整:第一步,將編譯好的包含hive的JAR包上傳到hdfs上配置的默認的spark的sharelib目錄:/user/spark/share/lib第二步:在你要運行spark-shell腳本的節點上的/opt/cloudera/parcels/CDH-5.3.0-1.cdh5.3.0.p0.30/lib/spark/lib/目錄下面,下載這個jar到這個目錄:hadoopfs-gethdfs://n1:8020/user/spark/share/lib/spark-assembly-with-hive-maven.jar(具體路徑替換成你自己的)。然後這個目錄下面原來會有個軟鏈接spark-assembly.jar指向的是spark-assembly-1.2.0-cdh5.3.0-hadoop2.5.0-cdh5.3.0.jar,我們把這個軟鏈接刪除掉重新創建一個同名的軟鏈接:ln-sspark-assembly-with-hive-maven.jarspark-assembly.jar,指向我們剛下載下來的那個JAR包,這個JAR包會在啟動spark-shell腳本時裝載到driverprogram的classpath中去的,sparkContext也是在driver中創建出來的,所以需要將我們編譯的JAR包替換掉原來的spark-assembly.jar包,這樣在啟動spark-shell的時候,包含hive的spark-assembly就被裝載到classpath中去了。第三步:在/opt/cloudera/parcels/CDH/lib/spark/conf/目錄下面創建一個hive-site.xml。/opt/cloudera/parcels/CDH/lib/spark/conf目錄是默認的spark的配置目錄,當然你可以修改默認配置目錄的位置。hive-site.xml內容如下:hive.metastore.localfalsehive.metastore.uristhrift://n1:9083hive.metastore.client.socket.timeout300hive.metastore.warehouse.dir/user/hive/warehouse這個應該大家都懂的,總要讓spark找到hive的元數據在哪吧,於是就有了上面一些配置。第四步:修改/opt/cloudera/parcels/CDH/lib/spark/conf/spark-defaults.conf,添加一個屬性:spark.yarn.jar=hdfs://n1:8020/user/spark/share/lib/spark-assembly-with-hive-maven.jar。這個是讓每個executor下載到本地然後裝載到自己的classpath下面去的,主要是用在yarn-cluster模式。local模式由於driver和executor是同一個進程所以沒關系。以上完事之後,運行spark-shell,再輸入:valhiveContext=neworg.apache.spark.sql.hive.HiveContext(sc)應該就沒問題了。我們再執行一個語句驗證一下是不是連接的我們指定的hive元資料庫:hiveContext.sql("showtables").take(10)//取前十個表看看最後要重點說明一下這里的第二步第三步和第四步,如果是yarn-cluster模式的話,應該替換掉集群所有節點的spark-assembly.jar集群所有節點的sparkconf目錄都需要添加hive-site.xml,每個節點spark-defaults.conf都需要添加spark.yarn.jar=hdfs://n1:8020/user/spark/share/lib/spark-assembly-with-hive-maven.jar。可以寫個shell腳本來替換,不然手動一個一個節點去替換也是蠻累的。

4. hive SQL裡面如何調用shell腳本

hive sql && maprece job
你的採納是我前進的動力,記得好評和採納,答題不易,互相幫助,
手機提問的朋友在客戶端右上角評價點滿意即可.

5. shell腳本里如何保存hive的結果

比如mysql xxx -e "select * from table">file 寫入文件
hive只要有終端命令都可以保存

6. 如何hadoop 看hive執行日誌

Hadoop archive 唯一的優勢可能就是將眾多的小文件打包成一個har 文件了,那這個文件就會按照dfs.block.size 的大小進行分塊,因為hdfs為每個塊的元數據大小大約為150個位元組,如果眾多小文件的存在(什麼是小文件內,就是小於dfs.block.size 大小的文件,這樣每個文件就是一個block)佔用大量的namenode 堆內存空間,打成har 文件可以大大降低namenode 守護節點的內存壓力。但對於MapRece 來說起不到任何作用,因為har文件就相當一個目錄,仍然不能講小文件合並到一個split中去,一個小文件一個split ,任然是低效的,這里要說一點<<hadoop 權威指南 中文版>>對這個翻譯有問題,上面說可以分配到一個split中去,但是低效的。
既然有優勢自然也有劣勢,這里不說它的不足之處,僅介紹如果使用har 並在hadoop中更好的使用har 文件
首先 看下面的命令
hadoop archive -archiveName 20131101.har /user/hadoop/login/201301/01 /user/hadoop/login/201301/01
我用上面的命令就可以將 /user/hadoop/login/201301/01 目錄下的文件打包成一個 20131101.har 的歸檔文件,但是系統不會自動刪除源文件,需要手動刪除
hadoop fs -rmr /user/hadoop/login/201301/01/*.*.* 我是用正則表達式來刪除的,大家根據自己的需求刪除原始文件

7. 如何在shell腳本中判斷hive已經執行完畢

舉個例子,執行一條基本語句建立一個文件 #!/bin/bashtouch test.txtif [ $? -eq 0 ]then echo "執行成功"else echo "執行失敗"fi$?可以判斷上一條命令是否成功,成功為0,不成功為非0

8. 如何通過腳本的方法,批量執行hive sql語句

操作方法如下:
把SQL語句寫成存儲過程,這樣以後每次只需要調用存儲過程就行了

9. python如何增量讀取hive數據,每次執行腳本把上次的結果做基準,列印出新增的部分

1.讀取文本文件數據(.txt結尾的文件)或日誌文件(.log結尾的文件)list0與list1分別為文檔中的第一列數據與第二列數據。

10. hadoop hive 操作 是封裝在shell腳本好還是java中好

其實把hive做到shell裡面最大的優勢是可以定時執行,比如之前做一個論壇用戶日誌分析的時候,需要定時對hive導入數據,並在hive裡面對數據做預處理,最後把hive處理的數據導入到hbase中 這樣的實現起來用java顯然就沒有用shell有優勢,因為shell寫好了丟那 執行linux定時任務就好了,但是shell有個明顯的缺陷就是不靈活,不能根據需求和功能做靈活調用,這時候做到java裡面就比用shell寫死的好很多,比如做即時需求,點某個功能按鍵的時候就需要跑hive,明顯就是java更好嘛

熱點內容
db2新建資料庫 發布:2024-09-08 08:10:19 瀏覽:171
頻率計源碼 發布:2024-09-08 07:40:26 瀏覽:778
奧迪a6哪個配置帶後排加熱 發布:2024-09-08 07:06:32 瀏覽:100
linux修改apache埠 發布:2024-09-08 07:05:49 瀏覽:208
有多少個不同的密碼子 發布:2024-09-08 07:00:46 瀏覽:566
linux搭建mysql伺服器配置 發布:2024-09-08 06:50:02 瀏覽:995
加上www不能訪問 發布:2024-09-08 06:39:52 瀏覽:811
銀行支付密碼器怎麼用 發布:2024-09-08 06:39:52 瀏覽:513
蘋果手機清理瀏覽器緩存怎麼清理緩存 發布:2024-09-08 06:31:32 瀏覽:554
雲伺服器的優點與缺點 發布:2024-09-08 06:30:34 瀏覽:735