Hadoop系列四:Hadoop之Hive篇
Hive安裝和運行
Pig與RDBMS、Hive比較
Pig Latin是一種數(shù)據(jù)流編程語言,而SQL是一種描述性編程語言。換句話說,Pig程序是相對于輸入的一步步操作,其中每一步是對數(shù)據(jù)的一個簡答的變換。相反,SQL語句是一個約束的集合,這些約束的集合在一起,定義了輸出。
Hive介于Pig和傳統(tǒng)RDBMS(關(guān)系數(shù)據(jù)庫管理系統(tǒng)Relational DatabaseManagement System)之間,Hive的設(shè)計目的是讓精通SQL既能的分析師能夠在存放在HDFS的大規(guī)模數(shù)據(jù)集上運行查詢。Hive在很多方面和傳統(tǒng)數(shù)據(jù)庫類似,但是它底層對HDFS和MapReduce的依賴意味著它的體系結(jié)構(gòu)有別于傳統(tǒng)數(shù)據(jù)庫。
Hive本身不存儲數(shù)據(jù),完全依賴于HDFS和MapReduce,Hive可以將結(jié)構(gòu)化的數(shù)據(jù)文件映射為一張數(shù)據(jù)庫表,Hive中表純邏輯,就是表的元數(shù)據(jù)。而HBase是物理表,定位是NoSQL。
Ubuntu操作系統(tǒng),主機名hp,已部署Hadoop單節(jié)點偽分布,集成mysql作為元數(shù)據(jù)庫。Hive默認的安裝方式是Apache Derby,將元數(shù)據(jù)存儲在Derby數(shù)據(jù)庫中。Derby是一個完全用java編寫的數(shù)據(jù)庫,可跨平臺在JVM中運行。
1)mysql安裝
$sudo apt-get installmysql-server
登錄mysql:$mysql -u root -p?
建立數(shù)據(jù)庫hive:mysql>create?database?hive;
??????????????? mysql>show databases;//查看創(chuàng)建;
創(chuàng)建hive用戶,并授權(quán):mysql>grant?all?on?hive.*?to?hive@'%'??identified?by?'hive';?
mysql>flush?privileges;?
???? 查詢mysql的版本:mysql>select version();//這里是5.6.28
下載mysql的JDBC驅(qū)動包:
http://dev.mysql.com/downloads/connector/j/
下載mysql-connector-java-5.1.38.tar.gz
復(fù)制msyql的JDBC驅(qū)動包到Hive的lib目錄下。
2)Hive安裝
官網(wǎng)http://hive.apache.org/下載apache-hive-2.0.0-bin.tar.gz并解壓在home/hp路徑下。
環(huán)境配置
$sudo gedit/etc/profile
添加如下:
#Hive
exportHIVE_HOME=/home/hp/hive
exportPATH=$PATH:${HIVE_HOME}/bin
exportCLASSPATH=$CLASSPATH.:{HIVE_HOME}/lib
3)配置hive-env.sh文件
復(fù)制hive-env.sh.template,修改hive-env.sh文件
指定HADOOP_HOME及HIVE_CONF_DIR的路徑如下:?
HADOOP_HOME=/home/hp/hadoop?
export HIVE_CONF_DIR=/home/hp/hive/conf
4)配置hive-site.xml文件
#sudo gedit/home/hp/conf/hive-site.xml?//hive-site.xml新建
<?xmlversion="1.0"?>
<?xml-stylesheettype="text/xsl" href="configuration.xsl"?>
<configuration>
<property>?
???<name>javax.jdo.option.ConnectionURL</name>?
???<value>jdbc:mysql://localhost:3306/hive</value>?
</property>?
<property>?
???<name>javax.jdo.option.ConnectionDriverName</name>?
???<value>com.mysql.jdbc.Driver</value>?
</property>
<property>?
???<name>javax.jdo.option.ConnectionUserName</name>?
???<value>hive</value>?
</property>?
<property>?
???<name>javax.jdo.option.ConnectionPassword</name>?
???<value>hive</value>?
</property>?
</configuration>
<property>
? <name>hive.metastore.local</name>
? <value>true</value>
? <description></description>
</property>
5)運行hive
這里Hive中metastore(元數(shù)據(jù)存儲)采用Local方式,非remote方式。
第一次需執(zhí)行初始化命令$schematool-dbType mysql –initSchema
查看初始化后信息$ schematool -dbTypemysql –info
啟動Hadoop服務(wù):$sbin/start-dfs.sh和$sbin/start-yarn.sh
執(zhí)行$hive
hive>show tables;
6)驗證配置
Hive新建表:
hive>hive> CREATETABLE xp(id INT,name string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
mysql中查看元數(shù)據(jù)信息
$mysql –u hive –p
mysql>showtables; //顯示 hive 數(shù)據(jù)庫中的數(shù)據(jù)表
mysql> select* from TBLS;//查看 hive 的元數(shù)據(jù)信息
Hadoop中查看生成的文件
$hadoop fs –ls/user/hive/warehouse/??? //可以看到xp目錄。
7)應(yīng)用案例
?? 場景:統(tǒng)計每日用戶登陸總數(shù)。
每分鐘的原始日志內(nèi)容如下:http://www.blue.com/uid=xxxxxx&ip=xxxxxx
假設(shè)只有兩個字段,uid和ip,其中uid是用戶的uid,是用戶的唯一標識,ip是用戶的登陸ip,每日的記錄行數(shù)是10億,要統(tǒng)計出一天用戶登陸的總數(shù)。
?? Hive建表
hive>CREATE TABLElogin (uid? STRING, ip? STRING)
PARTITIONEDBY (dt STRING)
ROW FORMATDELIMITED
FIELDSTERMINATED BY ','
STORED ASTEXTFILE;
表名是login,字段之間以,隔開,存儲是TEXT,其次還以dt這個字段作為分區(qū)。創(chuàng)建成功之后,在hdfs上新建了/user/hive/warehouse/login目錄。
?? 格式化原始日志
將每天的每分鐘的原始日志,轉(zhuǎn)換成以下文件格式
123,17.6.2.6
112,11.3.6.2
………..
?根據(jù)文件大小,合并文件,例如合并為24個文件。
?? 數(shù)據(jù)入庫到hive
hive>LOADDATA LOCAL? INPATH'/data/login/20120713/*' OVERWRITE INTO TABLE login PARTITION (dt='20120713');
執(zhí)行成功,轉(zhuǎn)換過的文件會上傳到hdfs的/user/hive/warehouse/login/dt=20120713目錄里。
?? 在hive上統(tǒng)計分析
hive>selectcount(distinct uid) from login where dt=’20120713’;
使用dt這個分區(qū)條件查詢,就可以避免hive去查詢其他分區(qū)的文件,減少IO操作,這個是hive分區(qū)很重要的特性,也是以天為單位,作為login表分區(qū)的重要意義。
執(zhí)行完畢后,就可以在命令里出現(xiàn)結(jié)果,一般通過管道執(zhí)行hive shell命令,讀取管道的內(nèi)容,把結(jié)果入庫到mysql里就完成分析。
???? 該案例通過網(wǎng)上復(fù)制而來,作為理解hive的應(yīng)用流程來理解。整個hive過程主要:Hive建表-Hive上傳文件到hdfs-Hive基于Hadoop執(zhí)行統(tǒng)計分析-Hive輸出結(jié)果。這個案例比較清晰地理解了Hive的價值。 《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的Hadoop系列四:Hadoop之Hive篇的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Hadoop系列三:Hadoop之Pig
- 下一篇: Hadoop系列五:Hadoop之Zoo