Hive是什麼
Hive是由Facebook開源,基于Hadoop的一個資料倉庫工具,可以将結構化的資料檔案映射為一張表,并提供類SQL查詢功能。
本質:Hive是一個Hadoop用戶端,用于将HQL(Hive SQL)轉化成MapReduce程式。
Hive架構原理
Hive的資料的寫入寫出都在HDFS,執行過程就是MR程式的執行,通過yarn排程器排程,提供CLI和JDBC/ODBC用戶端。
Hive的優缺點
1)優點
(1)操作接口采用類SQL文法,提供快速開發的能力(簡單、容易上手)。
(2)避免了去寫MapReduce,減少開發人員的學習成本。
2)缺點
(1)Hive的執行延遲比較高,是以Hive常用于資料分析,對實時性要求不高的場合。
(2)Hive分析的資料是存儲在HDFS上,HDFS不支援随機寫,隻支援追加寫,是以在Hive中不能高效update和delete。
資料庫和資料倉庫的差別
資料庫Database(Oracle, Mysql, PostgreSQL)主要用于事務處理。
資料倉庫Datawarehouse(Amazon Redshift, Hive)主要用于資料分析。
用途上的不同決定了這兩種架構的特點不同。
資料庫(Database)的特點是:
相對複雜的表格結構,存儲結構相對緊緻,少備援資料。
讀和寫都有優化。
相對簡單的read/write query,單次作用于相對的少量資料。
資料倉庫(Datawarehouse)的特點是:
相對簡單的(Denormalized)表格結構,存儲結構相對松散,多備援資料。
一般隻是讀優化。
相對複雜的read query,單次作用于相對大量的資料(曆史資料)。
Linux中安裝MySQL
1)檢視系統之前是否已安裝MySQL
rpm -qa | grep mysql
有的話,解除安裝:
rpm -e mysql-libs-5.1.66-2.el6_3.i686 --nodeps
2)安裝Mysql:yum install mysql mysql-server mysql-devel
3)安裝完成後修改/etc/my.cnf檔案,添加内容如下:
[mysql]
default-character-set=utf8
[mysqld]
default-character-set=utf8
lower_case_table_names=1
4)啟動服務驗證是否已啟動
service mysqld start
5)停掉服務
service mysql stop
設定MySql使用者:mysqladmin -u root password 123
6)登入
mysql -uroot –p
7)進行重置密碼(可做可不做)
set password=password('123456');
檢視使用者:select user,host from user;(可不用檢視)
--設定root賬戶的host位址(修改了才可以遠端連接配接)
mysql>grant all privileges on *.* to 'root'@'%' identified by 'root'
with grant option ;
8)重新整理
flush privileges
安裝Hive
第一步:確定Mysql已經安裝成功(Mysql安裝詳見第4點)
第二步:複制Mysql驅動jar包到hive的lib路徑下
第三步:修改hive-env.sh檔案,添加如下内容:
export HIVE_CONF_DIR=/usr/local/hive/hive-0.13.1-cdh5.3.6/conf
export JAVA_HOME=/usr/local/java/jdk1.8.0_161
export HIVE_HOME=/usr/local/hive/hive-0.13.1-cdh5.3.6
export HADOOP_HOME=/usr/local/hadoop/hadoop-2.5.1
第四步:修改hive-site.xml檔案
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://192.168.100.110:3306/hive?createDatabaseIfNotExist=true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123</value>
</property>
<property>
<name>hive.querylog.location</name>
<value>/usr/local/hive/hive-0.13.1-cdh5.3.6/hive_tmp</value>
</property>
<property>
<name>hive.downloaded.resources.dir</name>
<value>/usr/local/hive/hive-0.13.1-cdh5.3.6/hive_tmp</value>
</property>
<property>
<name>hive.exec.local.scratchdir</name>
<value>/usr/local/hive/hive-0.13.1-cdh5.3.6/hive_tmp</value>
</property>
<property>
<name>datanucleus.schema.autoCreateAll</name>
<value>true</value>
</property>
第五步:分發hive檔案至各個節點
例:scp -r /usr/local/hive/hive-0.13.1-cdh5.3.6 slave1:/usr/local/hive
進入Hive指令行
確定hadoop叢集啟動,且節點正常的前提下,直接在Linux的指令行輸入hive即可。