㈠ hive的幾種文件格式
hive文件存儲格式包括以下幾類:
1、TEXTFILE
2、SEQUENCEFILE
3、RCFILE
4、ORCFILE(0.11以後出現)
其中TEXTFILE為默認格式,建表時不指定默認為這個格式,導入數據時會直接把數據文件拷貝到hdfs上不進行處理;
SEQUENCEFILE,RCFILE,ORCFILE格式的表不能直接從本地文件導入數據,數據要先導入到textfile格式的表中, 然後再從表中用insert導入SequenceFile,RCFile,ORCFile表中。
前提創建環境:
hive 0.8
創建一張testfile_table表,格式為textfile。
create table if not exists testfile_table( site string, url string, pv bigint, label string) row format delimited fields terminated by ' ' stored as textfile;
load data local inpath '/app/weibo.txt' overwrite into table textfile_table;
一、TEXTFILE
默認格式,數據不做壓縮,磁碟開銷大,數據解析開銷大。
可結合Gzip、Bzip2使用(系統自動檢查,執行查詢時自動解壓),但使用這種方式,hive不會對數據進行切分,
從而無法對數據進行並行操作。
示例:
總結:
相比TEXTFILE和SEQUENCEFILE,RCFILE由於列式存儲方式,數據載入時性能消耗較大,但是具有較好的壓縮比和查詢響應。數據倉庫的特點是一次寫入、多次讀取,因此,整體來看,RCFILE相比其餘兩種格式具有較明顯的優勢。
㈡ HIVE OS系統對地址加密嗎
加密。Hiveos系統會對飛行表的加密線路設置,飛行表是軟體的整體配置,是使用這開源軟體的前提,必須的設置好,特別是要配置穩定不掉的地址。
㈢ hadoop hue配置文件怎樣設置加密密碼
ue是一個開源的Apache Hadoop UI系統,最早是由Cloudera Desktop演化而來,由Cloudera貢獻給開源社區,它是基於Python Web框架Django實現的。通過使用Hue我們可以在瀏覽器端的Web控制台上與Hadoop集群進行交互來分析處理數據,例如操作HDFS上的數據,運行MapRece Job等等。很早以前就聽說過Hue的便利與強大,一直沒能親自嘗試使用,下面先通過官網給出的特性,通過翻譯原文簡單了解一下Hue所支持的功能特性集合:
默認基於輕量級sqlite資料庫管理會話數據,用戶認證和授權,可以自定義為MySQL、Postgresql,以及Oracle
基於文件瀏覽器(File Browser)訪問HDFS
基於Hive編輯器來開發和運行Hive查詢
支持基於Solr進行搜索的應用,並提供可視化的數據視圖,以及儀錶板(Dashboard)
支持基於Impala的應用進行互動式查詢
支持Spark編輯器和儀錶板(Dashboard)
支持Pig編輯器,並能夠提交腳本任務
支持Oozie編輯器,可以通過儀錶板提交和監控Workflow、Coordinator和Bundle
支持HBase瀏覽器,能夠可視化數據、查詢數據、修改HBase表
支持Metastore瀏覽器,可以訪問Hive的元數據,以及HCatalog
支持Job瀏覽器,能夠訪問MapRece Job(MR1/MR2-YARN)
支持Job設計器,能夠創建MapRece/Streaming/Java Job
支持Sqoop 2編輯器和儀錶板(Dashboard)
支持ZooKeeper瀏覽器和編輯器
支持MySql、PostGresql、Sqlite和Oracle資料庫查詢編輯器
1 Hue安裝(參考官網:http://gethue.com/how-to-build-hue-on-ubuntu-14-04-trusty/)
1.1 在git上下載HUE源碼或者在它的官網下載(如果已經安裝git可省略第一步)
sudo apt-get install git
git clone https://github.com/cloudera/hue.git
1.2 需要安裝一些依賴的軟體包
官網給出了一些,如果環境不一樣,靈活調整,GIT上面給出的依賴文件列表:
㈣ mysql資料庫加密的,sqoop怎麼解密輸出在hive
mysql資料庫加密的,sqoop怎麼解密輸出在hive
直接導入hive表
sqoop import --connect jdbc:postgresql://ip/db_name--username user_name --table table_name --hive-import -m 5
內部執行實際分三部,1.將數據導入hdfs(可在hdfs上找到相應目錄),2.創建hive表名相同的表,3,將hdfs上數據傳入hive表中
sqoop根據postgresql表創建hive表
sqoop create-hive-table --connect jdbc:postgresql://ip/db_name --username user_name --table table_name --hive-table hive_table_name( --hive-partition-key partition_name若需要分區則加入分區名稱)
導入hive已經創建好的表中
sqoop import --connect jdbc:postgresql://ip/db_name --username user_name --table table_name --hive-import -m 5 --hive-table hive_table_name (--hive-partition-key partition_name --hive-partition-value partititon_value);
使用query導入hive表
sqoop import --connect jdbc:postgresql://ip/db_name --username user_name --query "select ,* from retail_tb_order where \$CONDITIONS" --hive-import -m 5 --hive-table hive_table_name (--hive-partition-key partition_name --hive-partition-value partititon_value);
注意:$CONDITIONS條件必須有,query子句若用雙引號,則$CONDITIONS需要使用\轉義,若使用單引號,則不需要轉義。
㈤ hive的數據存儲
首先,Hive 沒有專門的數據存儲格式,也沒有為數據建立索引,用戶可以非常自由的組織 Hive 中的表,只需要在創建表的時候告訴 Hive 數據中的列分隔符和行分隔符,Hive 就可以解析數據。
其次,Hive 中所有的數據都存儲在 HDFS 中,Hive 中包含以下數據模型:表(Table),外部表(External Table),分區(Partition),桶(Bucket)。
Hive 中的 Table 和資料庫中的 Table 在概念上是類似的,每一個 Table 在 Hive 中都有一個相應的目錄存儲數據。例如,一個表 pvs,它在 HDFS 中的路徑為:/wh/pvs,其中,wh 是在 hive-site.xml 中由 ${hive.metastore.warehouse.dir} 指定的數據倉庫的目錄,所有的 Table 數據(不包括 External Table)都保存在這個目錄中。
Partition 對應於資料庫中的 Partition 列的密集索引,但是 Hive 中 Partition 的組織方式和資料庫中的很不相同。在 Hive 中,表中的一個 Partition 對應於表下的一個目錄,所有的 Partition 的數據都存儲在對應的目錄中。例如:pvs 表中包含 ds 和 city 兩個 Partition,則對應於 ds = 20090801, ctry = US 的 HDFS 子目錄為:/wh/pvs/ds=20090801/ctry=US;對應於 ds = 20090801, ctry = CA 的 HDFS 子目錄為;/wh/pvs/ds=20090801/ctry=CA
Buckets 對指定列計算 hash,根據 hash 值切分數據,目的是為了並行,每一個 Bucket 對應一個文件。將 user 列分散至 32 個 bucket,首先對 user 列的值計算 hash,對應 hash 值為 0 的 HDFS 目錄為:/wh/pvs/ds=20090801/ctry=US/part-00000;hash 值為 20 的 HDFS 目錄為:/wh/pvs/ds=20090801/ctry=US/part-00020
External Table 指向已經在 HDFS 中存在的數據,可以創建 Partition。它和 Table 在元數據的組織上是相同的,而實際數據的存儲則有較大的差異。
Table 的創建過程和數據載入過程(這兩個過程可以在同一個語句中完成),在載入數據的過程中,實際數據會被移動到數據倉庫目錄中;之後對數據對訪問將會直接在數據倉庫目錄中完成。刪除表時,表中的數據和元數據將會被同時刪除。 External Table 只有一個過程,載入數據和創建表同時完成(CREATE EXTERNAL TABLE ……LOCATION),實際數據是存儲在 LOCATION 後面指定的 HDFS 路徑中,並不會移動到數據倉庫目錄中。當刪除一個 External Table 時,僅刪除元數據,表中的數據不會真正被刪除。
㈥ Hive的幾種常見的數據導入方式
零.Hive的幾種常見的數據導入方式
常用的的有三種:
1.從本地文件系統中導入數據到Hive表;
2.從HDFS上導入數據到Hive表;
3.在創建表的時候通過從別的表中查詢出相應的記錄並插入到所創建的表中。
Hive配置:
HDFS中Hive數據文件存放目錄(啟動hive後HDFS自動創建):
HDFS: /usr/hive/warehouse
hadoop fs -mkdir /usr/hive/warehouse 命令創立
本地數據存放目錄:
本地:/home/santiago/data/hive
一.從本地文件系統中導入數據到Hive表
1.在hive中建表
hive> show databases;
OKdefaultTime taken: 1.706 seconds, Fetched: 1 row(s)
hive> create table guo_test(Name string,String string)
> row format delimited
> fields terminated by ','
> stored as textfile;
hive> show tables;
OK
guo_test
Time taken: 0.024 seconds, Fetched: 1 row(s)123456789101112
2.在本地文件建立同類型數據表
santi@hdp:~/data/hive$ ls
hive_test.txt
santi@hdp:~/data/hive$ cat hive_test.txt
santi,you are a zhazha.1234
3.導入數據並測試
hive>load data local inpath '/home/santi/data/hive/hive_test.txt' into table guo_test;
hive> select * from guo_test;
hive>dfs -ls /usr/hive/warehouse/guo_test;
#hadoop fs -ls /usr/hive/warehouse
Found 1 items
drwxrwxr-x - santiago supergroup 0 2017-01-14 21:13
/usr/hive/warehouse/guo_test12345678
發現hive-site,xml設置的HDFS文件存儲位置中多了guo_test這個文件夾
#hadoop fs -ls /usr/hive/warehouse/guo_test
Found 1 items-rwxrwxr-x 1 santiago supergroup 24 2017-01-14 21:13
/usr/hive/warehouse/guo_test/hive_test.txt
hive> select * from guo_test;
OK
santi you are a zhazha.12345678
在該文件夾中找到了所寫入hive數據倉庫的文件。
[注]本地數據寫入成功,但是從本地將數據導入到Hive表的過程中,其實是先將數據臨時復制到HDFS的一個目錄下(典型的情況是復制到上傳用戶的HDFS home目錄下,比如/home/santi/),然後再將數據從臨時目錄下移動到對應的Hive表的數據目錄裡面(臨時目錄不保留數據)。
二.從HDFS文件系統中導入數據到Hive表
1.在HDFS文件系統上建立數據文件
hdfs上沒有vim命令,則需要將本地數據文件手動傳入到HDFS上
/data/hive# vim data_HDtoHive/data/hive# cat data_HDtoHivedata from, HDFS to Hive #hadoop fs -put /home/santi/data/hive/data_HDtoHive /usr/data/input//數據傳入# hadoop fs -ls /usr/data/input12345
2導入數據
hive> load data inpath '/usr/data/input/data_HDtoHive' into table guo_test;
hive> select * from guo_test;
OK
data from HDFS to Hive
santi you are a zhazha.
Time taken: 0.172 seconds, Fetched: 2 row(s)123456
數據寫入成功
數據存hive配置的數據存儲位置中。
[注]
從本地導入數據語句為
hive>load data local inpath 『/home/santi/data/hive/hive_test.txt』 into table guo_test;
從HDFS中導入數據的語句為
hive> load data inpath 『/usr/data/input/data_HDtoHive』 into table guo_test;
差距在local這個命令這里。
而從HDFS系統上導入到Hive表的時候,數據轉移。HDFS系統上查找不到相關文件。
三.從HIVE表選取數據插入新的HIVE表
命令為create table 表名 as selecr xxx from 表名。
hive> create table hivedata_test1
> as
> select name
> from guo_test;
hive> select * from hivedata_test1;
OK
data fromsanti
Time taken: 0.116 seconds, Fetched: 2 row(s)123456789
[注]hive是分區表有稍微區別
在Hive中,表的每一個分區對應表下的相應目錄,所有分區的數據都是存儲在對應的目錄中。比表有a和b兩個分區,則對應a=xxx,b=xx對應表的目錄為/user/hive/warehouse/a=xxx
user/hive/warehouse/b=xx,所有屬於這個分區的數據都存放在這個目錄中。
hive> create table hivedata_test2(
> Name string)
> partitioned by
> (String string)
> ROW FORMAT DELIMITED
> FIELDS TERMINATED BY ','> STORED AS TEXTFILE;
hive> insert into table hivedata_test2
> partition(String='best')
> select Name
> from guo_test;
hive> select * from hivedata_test2;
OK
data from best
santi best
Time taken: 1.549 seconds, Fetched: 2 row(s)# hadoop fs -ls /usr/hive/warehouse/hivedata_test2Found 1 items
drwxrwxr-x -santiago supergroup 0 2017-02-14 17:40
/usr/hive/warehouse/hivedata_test2/string=best
㈦ Hive(五)DML數據操作
語法 :
(1)load data:表示載入數據
(2)local:表示從本地載入數據到hive表;否則從HDFS載入數據到hive表
(3)inpath:表示載入數據的路徑
(4)overwrite:表示覆蓋表中已有數據,否則表示追加
(5)into table:表示載入到哪張表
(6)student:表示具體的表
(7)partition:表示上傳到指定分區
案例 :
2)導入本地數據
3)查看person表數據
2)清空 person表數據; truncate table person;
3)查看person表清空情況(已經沒有數據了)
4)導入 HDFS 數據到 person表中
5)重新查詢 person表,查看數據情況
2) 導入HDFS,無需添加 local
3) row format delimited fields terminated by ' ' ;
語法:insert into <table> <表名> <查詢語句>
案例:
創建一張新表:create table if not exists person2(id int,name string,phone string);
將 person 表中id 為 1和3的數據插入到 person2表中。
查詢person2表數據
方式二:into overwrite
語法:insert overwrite table <表名> <查詢語句>
測試之前重新准備一張表
向 person6 表中添加數據。
數據結果
注意:使用 insert overwrite 後面必須加上 table ,否則報錯
注意
語法 :create table [if not exists] <表名> as <查詢語句>
描述 :根據查詢結果創建表(查詢的結果會添加到新創建的表中)
案例 :
按照person表的結果創建person3表
查詢 person3
注意:使用查詢結果創建數據表時,需要加入 關鍵字
管理表
語法 :create table [if not exists] <表名>(欄位信息) row format delimited fields terminated by <分割符>location <載入數據路徑>
案例 :載入person 表的數據。
查詢 person 數據載入的地址
創建 person4 表並設置 person表的數據路徑。
查詢 person4 表信息;person4中的表數據全部來自於person表。
外部表
創建一個管理表 t1
向管理表t1中添加一條數據
創建t2 並指定t1數據的載入地址
查詢 t2 表
刪除 t1 表
再次查詢 t2 表
驗證 t1 為外部表時,刪除t1表時,是否會刪除數據。
重新創建 t1表
向t1中添加數據3
創建 t2(原來的給刪除了)並指定為外部表,並載入 t1的數據路徑
查詢 t1 表結構(驗證是否為外部表
查詢 t2 數據(有數據2)
刪除t1 表
查詢 t2 表(數據並沒有刪除)
更加深刻理解 管理表和外部表之間的區別。
語法 :import table <全新的表名> from '<Export 導出的地址>'
查詢 person_import 表
查看家目錄,生成了 一個 aaa目錄,目錄中有一個 000000_0 文件
查看 000000_0文件;正好是 person表中的數據。
注意:這里的 overwrite 並不是可選項(可加不可加),這里必須加上overwrite ,否則會報錯。
查看 000000_0文件;使用了製表符,對數據進行格式化。
查看 /aaa/000000_0 文件
查看person_bak 文件
語法 :hive -e "<sql語句>" > <輸出路徑>
案例 :
查看家目錄中的 person_bak
語法 :export table <表名> to '<HDFS地址>'
案例 :將 person 表的數據導出到 HDFS /person2中
查看 /person2 的層次結構
查看 /person2/data/person
㈧ Hive 資料庫表的基本操作,必須掌握的基本功
說明:hive 的表存放位置模式是由 hive-site.xml 當中的一個屬性指定的,默認是存放在該配置文件設置的路徑下,也可在創建資料庫時單獨指定存儲路徑。
資料庫有一些描述性的屬性信息,可以在創建時添加:
查看資料庫的鍵值對信息
修改資料庫的鍵值對信息
與mysql查詢語句是一樣的語法
刪除一個空資料庫,如果資料庫下面有數據表,那麼就會報錯
強制刪除資料庫,包含資料庫下面的表一起刪除(請謹慎操作)
[]里的屬性為可選屬性,不是必須的,但是如果有可選屬性,會使 sql 語句的易讀性更好,更標准與規范。
例如:[comment '欄位注釋信息'][comment '表的描述信息']等,[external]屬性除外
1. CREATE TABLE
創建一個指定名字的表,如果相同名字的表已存在,則拋出異常提示:表已存在,使用時可以使用IF NOT EXISTS語句來忽略這個異常。
如果創建的表名已存在,則不會再創建,也不會拋出異常提示:表已存在。否則則自動創建該表。
2. EXTERNAL
顧名思義是外部的意思,此關鍵字在建表語句中讓使用者可以創建一個外部表,如果不加該關鍵字,則默認創建內部表。
外部表在創建時必須同時指定一個指向實際數據的路徑(LOCATION),Hive在創建內部表時,會將數據移動到數據倉庫指向的路徑;
若創建外部表,僅記錄數據所在的路徑,不對數據的位置作任何改變。
內部表在刪除後,其元數據和數據都會被一起刪除。
外部表在刪除後,只刪除其元數據,數據不會被刪除。
3. COMMENT
用於給表的各個欄位或整張表的內容作解釋說明的,便於他人理解其含義。
4. PARTITIONED BY
區分表是否是分區表的關鍵欄位,依據具體欄位名和類型來決定表的分區欄位。
5. CLUSTERED BY
依據column_name對表進行分桶,在 Hive 中對於每一張表或分區,Hive 可以通過分桶的方式將數據以更細粒度進行數據范圍劃分。Hive採用對列值哈希,然後除以桶的個數求余的方式決定該條記錄存放在哪個桶當中。
6. SORTED BY
指定表數據的排序欄位和排序規則,是正序還是倒序排列。
7. ROW FORMAT DELIMITED FIELDS TERMINATED BY ' '
指定表存儲中列的分隔符,這里指定的是' ',也可以是其他分隔符。
8. STORED AS SEQUENCEFILE|TEXTFILE|RCFILE
指定表的存儲格式,如果文件數據是純文本格式,可以使用STORED AS TEXTFILE,如果數據需要壓縮,則可以使用STORED AS SEQUENCEFILE。
9. LOCATION
指定 Hive 表在 hdfs 里的存儲路徑,一般內部表(Managed Table)不需要自定義,使用配置文件中設置的路徑即可。
如果創建的是一張外部表,則需要單獨指定一個路徑。
1. 使用create table語句創建表
例子:
2. 使用create table ... as select...語句創建表
例子:
使用 create table ... as select ...語句來創建新表sub_student,此時sub_student 表的結構及表數據與 t_student 表一模一樣, 相當於直接將 t_student 的表結構和表數據復制一份到 sub_student 表。
注意:
(1). select 中選取的列名(如果是 * 則表示選取所有列名)會作為新表 sub_student 的列名。
(2). 該種創建表的方式會改變表的屬性以及結構,例如不能是外部表,只能是內部表,也不支持分區、分桶。
如果as select後的表是分區表,並且使用select *,則分區欄位在新表裡只是作為欄位存在,而不是作為分區欄位存在。
在使用該種方式創建時,create 與 table 之間不能加 external 關鍵字,即不能通過該種方式創建外部目標表,默認只支持創建內部目標表。
(3). 該種創建表的方式所創建的目標表存儲格式會變成默認的格式textfile。
3.使用like語句創建表
例子:
注意:
(1). 只是將 t_student 的表結構復制給 sub1_student 表。
(2). 並不復制 t_student 表的數據給 sub1_student 表。
(3). 目標表可以創建為外部表,即:
㈨ hive內布表 shared 鎖 怎麼解決
在通過終端查詢hive時,終端結果顯示為亂碼,想必大家都遇到過這種情況。這種情況出現的原因是:hive在將數據寫入hdfs時候,會把數據格式轉換為utf-8格式的。如果你導入hive表的源數據不是utf-8格式的,hive在進行寫hdfs轉換格式的時候會出現亂碼,所有你查詢出來的中文也是亂碼。 解決辦法如下: 1、把源文件,用editplus等編輯軟體打開,將文件轉換為urf-8格式,保存。再重新導入到hive表中,問題解決。 2、源文件只要是文本格式,如csv,txt,log等文本格式,均可用此種方法轉化。前提是你終端也要設置為utf-8格式。
㈩ 有幾點關於hadoop的hive數據倉庫和hbase幾點疑惑,希望有高手可以幫忙解決一下,謝謝了!!!
首先感覺你有點亂。。。
你先明白數據倉庫的作用--存儲歷史數據-進而對數據進行分析,只提供查詢-不提供修改
1。Hive 的目標是做成數據倉庫,所以它提供了SQL,提供了文件-表的映射關系,又由於Hive基於HDFS,所以不提供Update,因為HDFS本身就不支持。
2.HBase 是NoSQL資料庫-所以不要跟傳統混淆並談-NoSQL 提供的是另一種思路來滿足高性能的需求,而這些是傳統資料庫的短板,與傳統資料庫的理念不一樣
3.load data 這個可以自己去查。Hbase要使用自己的API
4.是的。
5.這句話不對。
6.映射就是結構對應-如文件每一行的第一個欄位-映射到Hive表的第一個欄位
類似Hibernate的語法解析。
Hive本身實現了一套語法結構也就是操作符。如掃描文件等,最終記本都會轉換成MapRece來運行