Docker實戰(十五):Docker安裝Hive環境
Docker安裝Hive環境
Hive安裝
# Hive必須執行在Hadoop之上,則需要先安裝Hadoop環境,而且還需要MySQL資料庫,具體Hadoop安裝請參考上一篇文章,我們這裡繼承上一篇已經安裝好的Hadoop映象
# 下載Hive
$ wget http://apache.mirrors.ionfish.org/hive/hive-1.2.1/apache-hive-1.2.1-bin.tar.gz
# 解壓Hive壓縮包
$ tar -zxvf apache-hive-1.2.1-bin.tar.gz
# 下載MySQL驅動包
$ wget http://cdn.mysql .com//Downloads/Connector-J/mysql-connector-java-5.1.38.tar.gz
# 解壓MySQL驅動壓縮包
$ tar -zxvf mysql-connector-java-5.1.38.tar.gz
# 需要修改下面Hive相關的配置檔案
Dockerfile檔案
############################################
# version : birdben/hive:v1
# desc : 當前版本安裝的hive
############################################
# 設定繼承自我們建立的 hadoop 映象
FROM birdben/hadoop:v1
# 下面是一些建立者的基本資訊
MAINTAINER birdben (191654006@163.com)
# 設定環境變數,所有操作都是非互動式的
ENV DEBIAN_FRONTEND noninteractive
# 新增 supervisord 的配置檔案,並複製配置檔案到對應目錄下面。(supervisord.conf檔案和Dockerfile檔案在同一路徑)
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
# 複製 hive-1.2.1 檔案到映象中(hive-1.2.1 資料夾要和Dockerfile檔案在同一路徑),這裡直接把上一篇Hadoop環境直接用上了
ADD apache-hive-1.2.1-bin /software/hive-1.2.1
# 複製MySQL的驅動包到映象中
COPY mysql-connector-java-5.1.38/mysql-connector-java-5.1.38-bin.jar /software/hive-1.2.1/lib/mysql-connector-java-5.1.38-bin.jar
# 授權HIVE_HOME路徑給admin使用者
RUN sudo chown -R admin /software/hive-1.2.1
# 執行supervisord來同時執行多個命令,使用 supervisord 的可執行路徑啟動服務。
CMD ["/usr/bin/supervisord"]
Dockerfile原始檔連結:
supervisor配置檔案內容
# 配置檔案包含目錄和程序
# 第一段 supervsord 配置軟體本身,使用 nodaemon 引數來執行。
# 第二段包含要控制的 2 個服務。每一段包含一個服務的目錄和啟動這個服務的命令。
[supervisord]
nodaemon=true
[program:sshd]
command=/usr/sbin/sshd -D
[program:metastore]
command=/software/hive-1.2.1/bin/hive --service metastore
[program:hiveserver2]
command=/software/hive-1.2.1/bin/hive --service hiveserver2
配置HIVE_HOME/conf/hive-env.sh(預設不存在,將hive-env.sh.template複製並改名為hive-env.sh)
HADOOP_HOME=/software/hadoop-2.7.1
配置HIVE_HOME/conf/hive-log4j.properties(預設不存在,將hive-log4j.properties.template複製並改名為hive-log4j.properties)
配置HIVE_HOME/conf/hdfs-site.xml(預設不存在,將hive-default.xml.template複製並改名為hive-site.xml)
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<!-- metastore我的mysql不是在該server上,是在另一臺Docker映象中 -->
<name>hive.metastore.local</name>
<value>false</value>
</property>
<property>
<!-- mysql服務的ip和埠號 -->
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://172.17.0.2:3306/hive</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriveName</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>root</value>
</property>
<property>
<!-- hive的倉庫目錄,需要在HDFS上建立,並修改許可權 -->
<name>hive.metastore.warehouse.dir</name>
<value>/hive/warehouse</value>
</property>
<property>
<!-- 執行hive得主機地址及埠,即本機ip和埠號,啟動metastore服務 -->
<name>hive.metastore.uris</name>
<value>thrift://Ben:9083</value>
</property>
</configuration>
控制檯終端
# 先啟動MySQL的Docker容器
$ sudo docker run -p 9999:22 -p 3306:3306 -t -i -v /docker/mysql/data:/software/mysql-5.6.22/data birdben/mysql:v1
# 然後檢視MySQL的Docker容器的IP地址,Hive連線MySQL的IP地址需要配置這個IP
$ sudo docker inspect --format '{{.NetworkSettings.IPAddress}}' 34b5ac61b8bd
$ 172.17.0.2
# 構建映象
$ docker build -t="birdben/hive:v1" .
# 執行已經構件好的映象,掛載在宿主機器的儲存路徑也不同,-h設定hostname,Hadoop配置檔案需要使用
$ docker run -h Ben -p 9998:22 -p 9083:9083 -p 9000:9000 -p 8088:8088 -p 50020:50020 -p 50070:50070 -p 50075:50075 -p 50090:50090 -t -i 'birdben/hive:v1'
# 然後直接通過ssh遠端連線使用admin賬號遠端登入Hive的Docker容器
$ ssh [email protected]10.211.55.4 -p 9998
# 啟動hive shell,發現如下的錯誤,原因是還沒有啟動Hadoop,所以hive連線Hadoop時,報錯java.net.ConnectException: Call From Ben/172.17.0.3 to Ben:9000 failed on connection exception: java.net.ConnectException: Connection refused;
$ [email protected]:/$ cd /software/hive-1.2.1/bin
$ [email protected]:/$ ./hive shell
16/06/25 10:48:40 WARN conf.HiveConf: HiveConf of name hive.metastore.local does not exist
Logging initialized using configuration in file:/software/hive-1.2.1/conf/hive-log4j.properties
Exception in thread "main" java.lang.RuntimeException: java.net.ConnectException: Call From Ben/172.17.0.3 to Ben:9000 failed on connection exception: java.net.ConnectException: Connection refused; For more details see: http://wiki.apache.org/hadoop/ConnectionRefused
# 所以我們先啟動Hadoop
# 先初始化namenode
$ [email protected]:/$ cd /software/hadoop-2.7.1/bin
$ [email protected]:/software/hadoop-2.7.1/sbin$ ./hdfs namenode -format
# 啟動所有服務
[email protected]:/$ cd /software/hadoop-2.7.1/sbin
[email protected]:/software/hadoop-2.7.1/sbin$ ./start-all.sh
# 執行jps命令之前需要先把$JAVA_HOME/bin新增到PATH環境變數
[email protected]:/$ export PATH=/software/jdk7/bin/:$PATH
# 執行jps命令如果能看到下面的6個程序就說明Hadoop啟動的沒有問題
[email protected]:/software/hadoop-2.7.1/sbin$ jps
985 Jps
282 DataNode
587 ResourceManager
436 SecondaryNameNode
166 NameNode
691 NodeManager
# 此時重新啟動hive shell,就可以成功登入hive了
$ [email protected]:/$ cd /software/hive-1.2.1/bin
$ [email protected]:/$ ./hive shell
hive>
hive> show databases;
OK
default
Time taken: 1.323 seconds, Fetched: 1 row(s)
# 注意:這裡我是使用了之前的MySQL的Docker映象,因為之前的MySQL的Docker映象已經處理了root賬號的更改密碼和遠端登入授權問題,所以這裡沒有涉及這些問題,具體設定可以參考之前的Docker安裝MySQL映象的文章
# 我們需要預先在mysql中建立一個hive的資料庫,因為hive-site.xml是連線到這個hive資料庫的,所有的hive元資料都是存在這個hive資料庫中的
# 我們在hive中建立新的資料庫和表來驗證hive的元資料都儲存在mysql了
# 在hive中建立一個新的資料庫test_hive,test_hive這個資料庫會對應mysql中的hive資料庫中的DBS表中的一條記錄
hive> CREATE DATABASE test_hive;
# 在hive中建立一個新的表test_person,test_person這個表會對應mysql中的hive資料庫中的TBLS表中的一條記錄
hive> USE test_hive;
hive> CREATE TABLE test_person (id INT,name string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
# 在hive建立表的時候可能會遇到如下問題,是因為MySQL資料庫字符集設定的utf-8導致的
# Specified key was too long; max key length is 767 bytes
# 修改MySQL的hive資料庫的字符集為latin1就好用了
$ alter database hive character set latin1;
# 參考:http://blog.163.com/zhangjie_0303/blog/static/990827062013112623615941/
# test_person.txt
1 John
2 Ben
3 Allen
4 Jimmy
5 Will
6 Jackson
# 用scp命令將本地test_person.txt檔案傳到hive的Docker容器中
$ scp -P 9998 /Users/ben/workspace_git/birdDocker/hive/test_person.txt [email protected]10.211.55.4:/software/hive-1.2.1/
# 匯入資料到test_person.txt到test_person表
hive> LOAD DATA LOCAL INPATH '/software/hive-1.2.1/test_person.txt' OVERWRITE INTO TABLE test_person;
Loading data to table test_hive.test_person
Table test_hive.test_person stats: [numFiles=1, numRows=0, totalSize=45, rawDataSize=0]
OK
Time taken: 2.885 seconds
# 檢視test_person表資料
hive> select * from test_person;
OK
1 John
2 Ben
3 Allen
4 Jimmy
5 Will
6 Jackson
Time taken: 0.7 seconds, Fetched: 6 row(s)
# 檢視test_hive資料庫在HDFS中儲存的目錄
$ [email protected]:$ cd /software/hadoop-2.7.1/bin
# 檢視HDFS中/hive/warehouse目錄下的所有檔案,此目錄是在hive-site.xml中hive.metastore.warehouse.dir引數配置的路徑/hive/warehouse
$ [email protected]:/software/hadoop-2.7.1/bin$ ./hdfs dfs -ls /hive/warehouse/
Found 1 items
drwxr-xr-x - admin supergroup 0 2016-06-25 11:39 /hive/warehouse/test_hive.db
# 檢視test_person表在HDFS中儲存的目錄
$ [email protected]:/software/hadoop-2.7.1/bin$ ./hdfs dfs -ls /hive/warehouse/test_hive.db/
Found 1 items
drwxr-xr-x - admin supergroup 0 2016-06-25 11:52 /hive/warehouse/test_hive.db/test_person
# 在深入一層就能看到我們匯入的檔案test_person.txt了
$ [email protected]:/software/hadoop-2.7.1/bin$ ./hdfs dfs -ls /hive/warehouse/test_hive.db/test_person/
Found 1 items
-rwxr-xr-x 3 admin supergroup 45 2016-06-25 11:52 /hive/warehouse/test_hive.db/test_person/test_person.txt
# 檢視test_person.txt檔案裡的內容,就是我們匯入的內容
$ [email protected]:/software/hadoop-2.7.1/bin$ ./hdfs dfs -cat /hive/warehouse/test_hive.db/test_person/test_person.txt
1 John
2 Ben
3 Allen
4 Jimmy
5 Will
6 Jackson
# OK,大功告成了,可以回家了 ^_^
test_hive資料庫在MySQL的hive資料庫中的DBS表中的一條記錄
test_person表在MySQL的hive資料庫中的TBLS表中的一條記錄
元資料解析
在MySQL可以檢視Hive元資料表,除了DBS和TBLS儲存資料庫和表的基本資訊,其他表的說明見下表:
MySQL的表 | 說明 |
---|---|
BUCKETING_COLS | Hive表CLUSTERED BY欄位資訊(欄位名,欄位序號) |
CDS | |
COLUMNS_V2 | 存放表格的欄位資訊 |
DATABASE_PARAMS | |
DBS | 存放hive所有資料庫資訊 |
FUNCS | |
FUNC_RU | |
GLOBAL_PRIVS | |
PARTITIONS | Hive表分割槽資訊(建立時間,具體的分割槽) |
PARTITION_KEYS | Hive分割槽表分割槽鍵(名稱,型別,comment,序號) |
PARTITION_KEY_VALS | Hive表分割槽名(鍵值,序號) |
PARTITION_PARAMS | |
PART_COL_STATS | |
ROLES | |
SDS | 所有hive表、表分割槽所對應的hdfs資料目錄和資料格式。 |
SD_PARAMS | |
SEQUENCE_TABLE | SEQUENCE_TABLE表儲存了hive物件的下一個可用ID,如’org.apache.hadoop.hive.metastore.model.MTable’, 21,則下一個新建立的hive表其TBL_ID就是21,同時SEQUENCE_TABLE表中271786被更新為26(這裡每次都是+5)。同樣,COLUMN,PARTITION等都有相應的記錄 |
SERDES | Hive表序列化反序列化使用的類庫資訊 |
SERDE_PARAMS | 序列化反序列化資訊,如行分隔符、列分隔符、NULL的表示字元等 |
SKEWED_COL_NAMES | |
SKEWED_COL_VALUE_LOC_MAP | |
SKEWED_STRING_LIST | |
SKEWED_STRING_LIST_VALUES | |
SKEWED_VALUES | |
SORT_COLS | Hive表SORTED BY欄位資訊(欄位名,sort型別,欄位序號) |
TABLE_PARAMS | 表級屬性,如是否外部表,表註釋等 |
TAB_COL_STATS | |
TBLS | 所有hive表的基本資訊 |
VERSION |
參考文章:
相關推薦
Docker實戰(十五):Docker安裝Hive環境
Docker安裝Hive環境 Hive安裝 # Hive必須執行在Hadoop之上,則需要先安裝Hadoop環境,而且還需要MySQL資料庫,具體Hadoop安裝請參考上一篇文章,我們這裡繼承上一篇已經安裝好的Hadoop映象 # 下載Hive $
Docker實戰(十六):Docker安裝HBase環境
Docker安裝HBase環境 HBase安裝 # 下載HBase $ wget http://apache.fayea.com/hbase/0.98.19/hbase-0.98.19-hadoop2-bin.tar.gz # 解壓Hive壓縮包
Docker實戰(十一):Docker安裝ELK環境(二)
Docker安裝ELK環境(二) 日誌收集系統架構 日誌收集系統架構簡介 Logstash Agent/Flume:採集各個業務系統的日誌,然後傳送給Redis/Kafka訊息佇列。 Redis/Kafka:接收使用者日誌的訊息佇列,臨時儲存
Android項目實戰(十五):自定義不可滑動的ListView和GridView
con app lis androi color max XP xtend exp 原文:Android項目實戰(十五):自定義不可滑動的ListView和GridView不可滑動的ListView (RecyclweView類似) public class NoSc
Docker系列(十四):Docker Swarm集群
mount dns 容器 water style 請求 兩種 ups task 一、Swarm簡介 Swarm是Docker官方提供的一款集群管理工具,其主要作用是把若幹臺Docker主機抽象為一個整體,並且通過一個入口統一管理這些Docker主機上的各種Docker資源。
Docker(十一):Docker實戰部署HTTPS的Tomcat站點
pos 容器 image avi tor 基礎 oot stat ask 1、選擇基礎鏡像 docker pull tomcat:7.0-jre8 2、生成HTTPS證書 keytool -genkey -alias tomcat -keyalg RSA -key
Docker(十二):Docker集群管理之Compose
png eas version pull 是否 com a star reat volume 1、Compose安裝 curl -L https://github.com/docker/compose/releases/download/1.1.0/docker-com
機器學習筆記(十五):TensorFlow實戰七(經典卷積神經網路:VGG)
1 - 引言 之前我們介紹了LeNet-5和AlexNet,在AlexNet發明之後,卷積神經網路的層數開始越來越複雜,VGG-16就是一個相對前面2個經典卷積神經網路模型層數明顯更多了。 VGGNet是牛津大學計算機視覺組(Visual Geometry Group)和Google
Docker學習筆記(十二):Docker Swarm
1. 什麼是Docker Swarm? 容器叢集管理工具。 通過docker swarm可以將多臺機器連線在一起,通過swarm的排程可以服務的多臺機器的部署,服務的伸縮。 2. Docker Swarm 使用入門 1)節點初始化(manager節點) dock
Docker筆記(十一):Dockerfile詳解與最佳實踐
Dockerfile是一個文字檔案,包含了一條條指令,每條指令對應構建一層映象,Docker基於它來構建一個完整映象。本文介紹Dockerfile的常用指令及相應的最佳實踐建議。 1. 理解構建上下文(build context) Docker映象通過docker build指令構建,該指令執行時當前的工作目
OpenCV2學習筆記(十五):利用Cmake高速查找OpenCV函數源代碼
one 生成 img log 分享 lan 學習筆記 全部 modules 在使用OpenCV時,在對一個函數的調用不是非常了解的情況下,通常希望查到該函數的官方聲明。而假設想進一步研究OpenCV的函數,則必須深入到源碼。在VS中我們能夠選中想要查
Hibernate(十五):QBC檢索和本地SQL檢索
page eight _id div dpa like where sel ati QBC檢索 QBC查詢就是通過使用Hibernate提供的Query By Criteria API來查詢對象,這種API封裝了SQL語句的動態拼裝,對查詢提供了更加面向對象的功能
OpenCV探索之路(十五):角點檢測
回調函數 閾值 source and 類型 幾何 擁有 .com named 角點檢測是計算機視覺系統中用來獲取圖像特征的一種方法。我們都常說,這幅圖像很有特點,但是一問他到底有哪些特點,或者這幅圖有哪些特征可以讓你一下子就識別出該物體,你可能就說不出來了。其實說圖像的特征
x264代碼剖析(十五):核心算法之宏塊編碼中的變換編碼
區域 sse 目的 tor [1] src nco 大小 疊加 x264代碼剖析(十五):核心算法之宏塊編碼中的變換編碼 為了進一步節省圖像的傳輸碼率。須要對圖像進行壓縮,通常採用變換編碼及量化來消除圖像中的相關性以降低圖像編碼的動態範圍。本文主要介
Java學習筆記(十五):import關鍵字
http 技術分享 import logs java學習筆記 .cn 關鍵字 blog ava Java學習筆記(十五):import關鍵字
Java學習筆記(十五):this關鍵字
bsp java image nbsp his this mage 學習筆記 筆記 Java學習筆記(十五):this關鍵字
Android項目實戰(十二):解決OOM的一種偷懶又有效的辦法
建議 是什麽 cat 解決 blog www. android項目 roi acm 原文:Android項目實戰(十二):解決OOM的一種偷懶又有效的辦法在程序的manifest文件的application節點加入android:largeHeap=“true&
Android項目實戰(十四):TextView顯示html樣式的文字
sta ref RR per 使用 一個 title name Go 原文:Android項目實戰(十四):TextView顯示html樣式的文字項目需求: TextView顯示一段文字,格式為:白雪公主(姓名,字數不確定)向您發來了2(消息個數,不確定)條消息 這段文
Android項目實戰(十一):moveTaskToBack(boolean ) 方法的使用
android項目 androi ID cti 項目實戰 htm www style 順序 原文:Android項目實戰(十一):moveTaskToBack(boolean ) 方法的使用當你開發的程序被按後退鍵退出的時候, 你肯定不想讓他就這麽被finish()吧,那麽
Android項目實戰(十六):QQ空間實現(一)—— 展示說說中的評論內容並有相應點擊事件
con toast short demo append 集合 obj parent 自帶 原文:Android項目實戰(十六):QQ空間實現(一)—— 展示說說中的評論內容並有相應點擊事件大家都玩QQ空間客戶端,對於每一個說說,我們都可以評論,那麽,對於某一條評論: