Hive是Hadoop生態中的一個重要組成部分,主要用於數據倉庫。前面的文章中我們已經搭建好了Hadoop的群集,下麵我們在這個群集上再搭建Hive的群集。 1.安裝MySQL 1.1安裝MySQL Server 在Ubuntu下麵安裝MySQL的Server很簡單,只需要運行: 系統會把MySQL ...
Hive是Hadoop生態中的一個重要組成部分,主要用於數據倉庫。前面的文章中我們已經搭建好了Hadoop的群集,下麵我們在這個群集上再搭建Hive的群集。
1.安裝MySQL
1.1安裝MySQL Server
在Ubuntu下麵安裝MySQL的Server很簡單,只需要運行:
sudo apt-get install mysql-server
系統會把MySQL下載並安裝好。這裡我們可以把MySQL安裝在master機器上。
安裝後需要配置用戶名密碼和遠程訪問。
1.2配置用戶名密碼
首先我們以root身份登錄到mysql伺服器:
sudo mysql -u root
然後修改root的密碼,並允許root遠程訪問:
GRANT ALL PRIVILEGES ON *.* TO root@'%' IDENTIFIED BY "123456";
我們這裡還可以為hive建立一個用戶,而不是用root用戶:
GRANT ALL PRIVILEGES ON *.* TO hive@'%' IDENTIFIED BY "hive";
運行完成後quit命令即可退出mysql的命令行模式。
1.3配置遠程訪問
預設情況下,MySQL是只允許本機訪問的,要允許遠程機器訪問需要修改配置文件
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
找到bind-address的配置部分,然後改為:
bind-address = 0.0.0.0
保存,重啟mysql服務
sudo service mysql restart
重啟完成後,我們可以在Windows下,用MySQL的客戶端連接master上的MySQL資料庫,看是否能夠遠程訪問。
2.下載並配置Hive
2.1下載Hive
首先我們到官方網站,找到Hive的下載地址。http://www.apache.org/dyn/closer.cgi/hive/ 會給出一個建議的網速快的下載地址。
然後在master伺服器上,wget下載hive的編譯好的文件,我現在最新版是Hive 2.1.1 :
wget http://mirror.bit.edu.cn/apache/hive/hive-2.1.1/apache-hive-2.1.1-bin.tar.gz
下載完成後,解壓這個壓縮包
tar xf apache-hive-2.1.1-bin.tar.gz
按之前Hadoop的慣例,我們還是把Hive安裝到/usr/local目錄下吧,所以移動Hive文件:
sudo mv apache-hive-2.1.1-bin /usr/local/hive
2.2配置環境變數
sudo vi /etc/profile
增加如下配置:
export HIVE_HOME=/usr/local/hive export PATH=$PATH:$HIVE_HOME/bin export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:/usr/local/hive/lib
2.3配置
hive-env.sh
所有Hive的配置是在/usr/local/hive/conf目錄下,進入這個目錄,我們需要先基於模板新建hive-env.sh文件:
cp hive-env.sh.template hive-env.sh vi hive-env.sh
指定Hadoop的路徑,增加以下行:
HADOOP_HOME=/usr/local/hadoop
2.4配置hive-site.xml
cp hive-default.xml.template hive-site.xml vi hive-site.xml
首先增加mysql資料庫的連接配置:
<property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://master:3306/hive?createDatabaseIfNotExist=true</value> <description>JDBC connect string for a JDBC metastore</description> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value> <description>Driver class name for a JDBC metastore</description> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>hive</value> <description>username to use against metastore database</description> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>hive</value> <description>password to use against metastore database</description> </property>
然後需要修改臨時文件夾的路徑,找到以下2個配置,並改為正確的路徑:
<property> <name>hive.exec.local.scratchdir</name> <value>/home/hduser/iotmp</value> <description>Local scratch space for Hive jobs</description> </property> <property> <name>hive.downloaded.resources.dir</name> <value>/home/hduser/iotmp</value> <description>Temporary local directory for added resources in the remote file system.</description> </property>
這裡因為我當前用戶是hduser,所以我在hduser的目錄下創建一個iotmp文件夾,並授權:
mkdir -p /home/hduser/iotmp chmod -R 775 /home/hduser/iotmp
2.5修改hive-config.sh
進入目錄/usr/local/hive/bin
vi hive-config.sh
在該文件的最前面加入以下配置:
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 export HADOOP_HOME=/usr/local/hadoop export HIVE_HOME=/usr/local/hive
2.6下載MySQL JDBC驅動
去MySQL的官網,https://dev.mysql.com/downloads/connector/j/ 下載JDBC驅動到master伺服器上。
wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.40.tar.gz
下載完後解壓
tar xf mysql-connector-java-5.1.40.tar.gz
然後進入解壓後的目錄,把jar包複製到Hive/lib目錄下麵
cp mysql-connector-java-5.1.40-bin.jar /usr/local/hive/lib/
2.7在HDFS中創建目錄和設置許可權
啟動Hadoop,在Hadoop中創建Hive需要用到的目錄並設置好許可權:
hadoop fs -mkdir /tmp hadoop fs -mkdir -p /user/hive/warehouse hadoop fs -chmod g+w /tmp hadoop fs -chmod g+w /user/hive/warehouse
2.8初始化meta資料庫
進入/usr/local/hive/lib目錄,初始化Hive元數據對應的MySQL資料庫:
schematool -initSchema -dbType mysql
3.使用Hive
在命令行下,輸入hive命令即可進入Hive的命令行模式。我們可以查看當前有哪些資料庫,哪些表:
show databases;
show tables;
關於hive命令下有哪些命令,具體介紹,可以參考官方文檔:https://cwiki.apache.org/confluence/display/Hive/Home
3.1創建表
和普通的SQL創建表沒有太大什麼區別,主要是為了方便,我們設定用\t來分割每一行的數據。比如我們要創建一個用戶表:
create table Users (ID int,Name String) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
3.2插入數據
是insert語句可以插入單條數據:
insert into Users values(1,'Devin');
如果要導入數據
我們在Ubuntu下創建一個name.txt文件,然後編輯其中的內容,添加如下內容:
2 Edward
3 Mindy
4 Dave
5 Joseph
6 Leo
列直接我是用Tab隔開的。
如果想把這個txt文件導入hive的Users 表,那麼只需要在hive中執行:
LOAD DATA LOCAL INPATH '/home/hduser/names.txt' into table Users ;
3.3查詢數據
仍然是sql語句:
select * from Users ;
當然我們也可以跟條件的查詢語句:
select * from Users where Name like 'D%';
3.4增加一個欄位
比如我們要增加生日這個欄位,那麼語句為:
alter table Users add columns (BirthDate date);
3.5查詢表定義
我們看看表的結構是否已經更改,查看Users表的定義:
desc Users;
3.6其他
另外還有重名了表,刪除表等,基本也是SQL的語法:
alter table Users rename to Student;
刪除一個表中的所有數據:
truncate table Student;
【另外需要註意,Hive不支持update和delete語句。似乎只有先truncate然後在重新insert。】