為了調(diào)試hive洲愤,我們使用docker來制作一個(gè)鏡像摇幻『嵴欤可以在鏡像中啟動(dòng)hive的相關(guān)服務(wù),在本地ide(intellij)中進(jìn)行遠(yuǎn)程調(diào)試绰姻。
先放出最后制作好的鏡像: docker pull limengjiao029/hive:v0.1
使用方法:
啟動(dòng)鏡像:
docker run --privileged -tid -p 8000:8000 -p 8088:8088 -p 8042:8042 -p 50070:50070 limengjiao029/hive:v0.1
登陸鏡像:
containerID 為上一步啟動(dòng)鏡像后得到的容器id枉侧。
docker exec -ti containerID /bin/bash
啟動(dòng)服務(wù):
登陸后可以根據(jù)需要啟動(dòng)各組件的服務(wù)。
- 環(huán)境變量:JAVA_HOME, HADOOP_HOME, HIVE_HOME 已設(shè)置
- mysql:已經(jīng)默認(rèn)啟動(dòng)狂芋。已建立root與hadoop用戶榨馁,密碼均為
123!@#qweQWE
- Hadoop:已經(jīng)配置為yarn模式。namenode已經(jīng)格式化帜矾。直接啟動(dòng)即可翼虫。
$HADOOP_HOME\sbin\start-all.sh
- Hive: metastore 使用的數(shù)據(jù)已經(jīng)配置為mysql.
-- 啟動(dòng)metastore服務(wù):hive --service metastore
-- 使用cli:hive
-- 啟動(dòng)hiveserver2:hiveserver2
-- 連接hiveserver2:beeline -u "jdbc:hive2://127.0.0.1:10000"
- UI界面:
- yarn:
http://127.0.0.1:8088
- 遠(yuǎn)程調(diào)試:
- 啟動(dòng)cli:
hive --debug
此時(shí)程序會(huì)監(jiān)聽8000端口屑柔,等待ide連接 -
intellj: 配置遠(yuǎn)程模式,端口填寫為8000珍剑,在cli模塊代碼中打好斷點(diǎn)掸宛,點(diǎn)擊運(yùn)行。
Screen Shot 2018-09-01 at 9.58.42 AM.png
搭建過程:
- 創(chuàng)建dockerfile:
> mkdir hivedocker
> cd hivedocker
> touch Dockerfile
- 編輯Dockerfile:
FROM centos:7
ENV container docker
RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == \
systemd-tmpfiles-setup.service ] || rm -f $i; done); \
rm -f /lib/systemd/system/multi-user.target.wants/*;\
rm -f /etc/systemd/system/*.wants/*;\
rm -f /lib/systemd/system/local-fs.target.wants/*; \
rm -f /lib/systemd/system/sockets.target.wants/*udev*; \
rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \
rm -f /lib/systemd/system/basic.target.wants/*;\
rm -f /lib/systemd/system/anaconda.target.wants/*;
VOLUME [ "/sys/fs/cgroup" ]
RUN yum -y install net-tools
RUN yum -y install wget
RUN yum -y install vim-common
RUN yum -y install openssh*
RUN yum -y install initscripts
RUN yum -y install which
CMD ["/usr/sbin/init"]
- 生成鏡像:
> docker build -t local/base
--
- 環(huán)境配置:
按照上文的方法啟動(dòng)并登入 local/base 鏡像招拙。假設(shè)得到的container id 是 baseContainerID唧瘾,后續(xù)會(huì)用到這個(gè)id。
-- 安裝jdk
> wget http://~/jdk-8u181-linux-x64.tar.gz
> tar -zxf jdk-8u181-linux-x64.tar.gz
> export JAVA_HOME=
> export PATH=$JAVA_HOME/bin:$PATH
-- 安裝mysql:
wget http://repo.mysql.com/mysql57-community-release-el7-10.noarch.rpm
rpm -Uvh mysql57-community-release-el7-10.noarch.rpm
yum install -y mysql-community-server
-- 配置mysql:
mysql安裝后重設(shè)密碼
> vi /etc/my.cnf # 最后一行增加 skip-grant-tables
> service mysqld start
> mysql
mysql > use mysql;
mysql > update user set authentication_string = password("root") where user='root';
mysql > exit;
> vi /etc/my.cnf # 去掉最后一行
> service mysqld stop
> service mysqld start
> mysql -uroot -proot
mysql > alter user 'root'@'localhost' identified by '123!@#qweQWE';
mysql > flush privileges;
mysql > exit;
創(chuàng)建hadoop賬戶迫像,并創(chuàng)建hive數(shù)據(jù)庫
mysql > create user 'hadoop'@'localhost' identified by '123!@#qweQWE';
mysql > grant all privileges on *.* to hadoop;
mysql > create database hive;
-- 配置hadoop:
下載hadoop,編輯 hadoop-env.sh, core-site.xml, hdfs-site.xml劈愚。 如果使用yarn模式,還需要編輯mapred-site.xml和yarn-site.xml.
hadoop-env.sh
export JAVA_HOME=/***/jdk1.8.0_181
core-site.xml
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:8020</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/data/tmp</value>
</property>
hdfs-site.xml
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
mapred-site.xml
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
yarn-site.xml
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
環(huán)境變量和初始化
> export HADOOP_HOME=
> export PATH=$HADOOP_HOME/bin:$PATH
> hadoop namenode -format
-- 配置hive:
下載hive闻妓,編輯hive-env.sh,根據(jù)需要編輯hive-site.xml
hive-env.sh
HADOOP_HOME=
HIVE_CONF_DIR=
hive-site.xml
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hadoop</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123!@#qweQWE</value>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://127.0.0.1:3306/hive?createDatabaseIfNotExist=true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
初始化metastore
> schematool -dbType mysql -initSchema
- 提交更改
> docker commit baseContainerID limengjiao/029:v0.1