安装centos7
docker run -it -h hive --name hive -v /dp/docker/file/hive:/usr/local/install --privileged=true -p 9870:9870 -p 8088:8088 -p 9083:9083 -p 1001:1001 centos:centos7 /usr/sbin/init
下载jdk8
进入Oracle官网:http://www.oracle.com/
依次点击 “Products” > “Java” > “Download Java” ,往下翻,找到“Java 8” > “Linux”,当前版本是JDK 8u401 可能需要登录
wget http://download.oracle.com/otn/java/jdk/8u401-b09/8c876547113c4e4aab3c868e9e0ec572/jdk-8u401-linux-x64.tar.gz
如果没有wget可以安装一个 yum install wget
或从宿主机复制JDK docker cp jdk-8u401-linux-x64.tar.gz hive:/usr/local
或从宿主机复制JDK到/dp/docker/file/install下
登录容器 docker exec -it hive /bin/bash
yum异常参考【yum源配置】
创建目录mkdir /usr/local/java/
解压
cd /usr/local/java
tar -zxvf jdk-8u401-linux-x64.tar.gz
vi /etc/profile
# 按 i 键,进入文本输入模式
export JAVA_HOME=/usr/local/java/jdk1.8.0_401
export JRE_HOME=$JAVA_HOME/jre
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
使配置文件生效
source /etc/profile
下载hadoop
wget http://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gz --no-check-certificate
mkdir /usr/local/hadoop
mv hadoop-3.3.6.tar.gz /usr/local/hadoop
cd /usr/local/hadoop
tar -zxvf hadoop-3.3.6.tar.gz
cd /usr/local/hadoop/hadoop-3.3.6/
修改 core-site.xml
vi /usr/local/hadoop/hadoop-3.3.6/etc/hadoop/core-site.xml
添加以下 3 项:
<property>
<name>fs.defaultFS</name>
<value>hdfs://127.0.0.1:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<!-- 自定义 hadoop 的工作目录 -->
<value>/usr/local/hadoop/hadoop-3.3.6/tmp</value>
</property>
<property>
<name>hadoop.native.lib</name>
<!-- 禁用Hadoop的本地库 -->
<value>false</value>
</property>
修改 hdfs-site.xml
vi /usr/local/hadoop/hadoop-3.3.6/etc/hadoop/hdfs-site.xml
添加以下 1 项:
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
修改 yarn-site.xml
vi /usr/local/hadoop/hadoop-3.3.6/etc/hadoop/yarn-site.xml
添加以下 3 项:
<property>
<name>yarn.resourcemanager.hostname</name>
<value>127.0.0.1</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<!-- yarn web 页面 -->
<value>0.0.0.0:8088</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<!-- reducer获取数据的方式 -->
<value>mapreduce_shuffle</value>
</property>
修改 mapred-site.xml
vi /usr/local/hadoop/hadoop-3.3.6/etc/hadoop/mapred-site.xml
添加以下 1 项:
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
修改 hadoop-env.sh
vi /usr/local/hadoop/hadoop-3.3.6/etc/hadoop/hadoop-env.sh
在文件末尾添加:
# 将当前用户 root 赋给下面这些变量
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
export JAVA_HOME=/usr/local/java/jdk1.8.0_401
export HADOOP_CONF_DIR=/usr/local/hadoop/hadoop-3.3.6/etc/hadoop
配置 Hadoop 环境变量
# 编辑系统配置文件
vi /etc/profile
在末尾添加以下内容:
export HADOOP_HOME=/usr/local/hadoop/hadoop-3.3.6
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
使环境变量生效:
# 运行配置文件
source /etc/profile
# 检查 PATH 中是否包含 $HADOOP_HOME/bin:$HADOOP_HOME/sbin 对应的目录
echo $PATH
修改 hosts 文件,将当前主机名配进去
# 查看当前主机名
hostname
# 此处结果为 hive
# 修改 hosts 文件,将当前主机名配到 127.0.0.1 后面
vi /etc/hosts
# ping 当前主机名进行检测
ping hive
配置本机 ssh 免密登录
yum -y install openssh-clients
yum install openssh-server
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 0600 ~/.ssh/authorized_keys
验证本机 ssh 到本机:
ssh root@127.0.0.1
# 不用输密码旧登录好了
格式化 HDFS (首次启动前执行)
hdfs namenode -format
启动 Hadoop
被执行的脚本是 /usr/local/hadoop/hadoop-3.3.6/sbin/start-all.sh,前面已经通过 $HADOOP_HOME/sbin 配置到环境变量中了,可以直接执行。
start-all.sh
HDFS 使用测试
在 HDFS 上创建目录
hadoop fs -mkdir /test_1/
# 查看
hadoop fs -ls /
将本地文件上传到 HDFS
# 新建文本文件
vi test_file_1.txt
# 向文本中写入字符串 123
echo 123 >> test_file_1.txt
# 将文本上传到 HDFS
hadoop fs -put test_file_1.txt /test_1/
# 查看文件
hadoop fs -ls /test_1/
查看 HDFS 上的文本文件内容
hadoop fs -cat /test_1/test_file_1.txt
将 HDFS 上的文件下载到本地
# 先删除本地的同名文件
rm -f test_file_1.txt
ll
# 将 HDFS 上的文件下载到本地
hadoop fs -get /test_1/test_file_1.txt
Hadoop Web 页面测试
# 防火墙放行 9870 tcp 端口
firewall-cmd --zone=public --add-port=9870/tcp --permanent
# 防火墙重新加载
firewall-cmd --reload
浏览器访问部署机器IP:9870:
http://IP:9870
或xshell代理docker宿主机IP:端口 如果是代理的就不用处理防火墙了
http://localhost:9870
Yarn Web 页面测试
# 防火墙放行 8088 tcp 端口
firewall-cmd --zone=public --add-port=8088/tcp --permanent
# 防火墙重新加载
firewall-cmd --reload
浏览器访问部署机器IP:8088:
http://localhost:8088
hive
wget http://mirrors.tuna.tsinghua.edu.cn/apache/hive/hive-3.1.3/apache-hive-3.1.3-bin.tar.gz --no-check-certificate
mv apache-hive-3.1.3-bin.tar.gz /usr/local/hive
cd /usr/local/hive
tar -zxvf apache-hive-3.1.3-bin.tar.gz
在 hive 安装目录的 conf 目录下,创建 hive-site.xml 配置文件。并将以下内容写入其中。
同时创建数据库hive_metadata
vi /usr/local/hive/apache-hive-3.1.3-bin/conf/hive-site.xml
<configuration>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<!--hive 元数据库的JDBC驱动类,这里选则 MySQL-->
<value>com.mysql.cj.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<!--hive_metadata 为 hive 元数据在 MySQL 中的库名,以下的IP帐号密码要正确 注意字符集设置,由于是在XML中,URL中的&需要转译为& 172.1是宿主机上的IP 需要创建这个数据库-->
<value>jdbc:mysql://172.17.0.1:3306/hive_metadata?createDatabaseIfNotExist=true&characterEncoding=UTF-8&useSSL=false&allowPublicKeyRetrieval=true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<!--MySQL登录账户名-->
<value>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<!--MySQL登录密码-->
<value>root</value>
</property>
<property>
<!--hive 表数据在 HDFS 的默认位置。创建内部表时,如果不指定 location,表数据则存储与该位置。-->
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse/internal</value>
</property>
<property>
<!--hive 外部表数据在 HDFS 的默认位置。创建外部表时,如果不指定 location,表数据则存储与该位置。-->
<name>hive.metastore.warehouse.external.dir</name>
<value>/user/hive/warehouse/external</value>
</property>
<property>
<name>hive.server2.enable.doAs</name>
<value>false</value>
</property>
<!-- 指定hiveserver2连接的host -->
<property>
<name>hive.server2.thrift.bind.host</name>
<value>hive</value>
</property>
<!-- 指定hiveserver2连接的端口号 -->
<property>
<name>hive.server2.thrift.port</name>
<value>1001</value>
</property>
</configuration>
hive-env.sh
将 hive 安装目录的 conf 目录下的 hive-env.sh.template 复制一份改名为 hive-env.sh 。
cp /usr/local/hive/apache-hive-3.1.3-bin/conf/hive-env.sh.template /usr/local/hive/apache-hive-3.1.3-bin/conf/hive-env.sh
对 ive-env.sh 进行修改,将 HADOOP_HOME 的注释放开,其值改为本机 Hadoop 的安装目录 /usr/local/hadoop/hadoop-3.3.6 即:
vi /usr/local/hive/apache-hive-3.1.3-bin/conf/hive-env.sh
HADOOP_HOME=/usr/local/hadoop/hadoop-3.3.6
放置 MySQL jdbc jar 包
Maven 中央仓库下载地址:
http://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.30/mysql-connector-java-8.0.30.jar
将 mysql-connector-java-8.0.30.jar 上传到 /usr/local/hive/apache-hive-3.1.3-bin/lib 下。
设置环境变量
vi /etc/profile
在文件末尾添加以下内容:
export HIVE_HOME=/usr/local/hive/apache-hive-3.1.3-bin
export PATH=$HIVE_HOME/bin:$PATH
使环境变量生效:
# 运行配置文件
source /etc/profile
# 检查 PATH 中是否包含 $HIVE_HOME/bin 对应的绝对路径
echo $PATH
初始化元数据库
初始化元数据库,指定元数据库类型为 MySQL 。
schematool -initSchema -dbType mysql
这时刚才的数据库中已经有表结构了
注:schematool 命令位于 /usr/local/hive/apache-hive-3.1.3-bin/bin/ ,已经配置在环境变量 path 中,可以直接使用。
启动 Hadoop
Hive 是依赖 MySQL 和 Hadoop 的,所以,先启动 MySQL、Hadoop。
# 查看Hadoop是否启动
jps -l |grep hadoop
# 如果没有启动,则启动Hadoop
start-all.sh
编写后台启动 hive 的脚本
编写后台启动脚本:
vi /usr/local/hive/apache-hive-3.1.3-bin/bin/start-hive-metastore-hiveserver2.sh
写入以下内容:
#!/bin/bash
nohup hive --service metastore >> /usr/local/hive/apache-hive-3.1.3-bin/log/metastore.log 2>&1 &
nohup hive --service hiveserver2 >> /usr/local/hive/apache-hive-3.1.3-bin/log/hiveserver2.log 2>&1 &
# 赋予启动脚本执行权限
chmod +x /usr/local/hive/apache-hive-3.1.3-bin/bin/start-hive-metastore-hiveserver2.sh
# 创建日志目录:
mkdir /usr/local/hive/apache-hive-3.1.3-bin/log
启动 hive
start-hive-metastore-hiveserver2.sh
查看两个日志,无报错即可:
tail -1000f /usr/local/hive/apache-hive-3.1.3-bin/log/metastore.log
tail -1000f /usr/local/hive/apache-hive-3.1.3-bin/log/hiveserver2.log
放行端口
# 防火墙放行 8042 tcp 端口,Hadoop http服务端口,可用于在浏览器查看yarn日志
firewall-cmd --zone=public --add-port=8042/tcp --permanent
# 防火墙放行 10001 tcp 端口,hive jdbc连接端口
firewall-cmd --zone=public --add-port=10001/tcp --permanent
# 防火墙重新加载
firewall-cmd --reload
yarn-site.xml 添加 Hadoop 的类路径
查看 Hadoop 的类路径
hadoop classpath
编辑 Hadoop 的 yarn-site.xml 文件
vi /usr/local/hadoop/hadoop-3.3.6/etc/hadoop/yarn-site.xml
添加以下配置项:
<property>
<name>yarn.application.classpath</name>
<!-- 输入刚才返回的Hadoop classpath路径 -->
<value>/usr/local/hadoop/hadoop-3.3.6/etc/hadoop:/usr/local/hadoop/hadoop-3.3.6/share/hadoop/common/lib/*:/usr/local/hadoop/hadoop-3.3.6/share/hadoop/common/*:/usr/local/hadoop/hadoop-3.3.6/share/hadoop/hdfs:/usr/local/hadoop/hadoop-3.3.6/share/hadoop/hdfs/lib/*:/usr/local/hadoop/hadoop-3.3.6/share/hadoop/hdfs/*:/usr/local/hadoop/hadoop-3.3.6/share/hadoop/mapreduce/*:/usr/local/hadoop/hadoop-3.3.6/share/hadoop/yarn:/usr/local/hadoop/hadoop-3.3.6/share/hadoop/yarn/lib/*:/usr/local/hadoop/hadoop-3.3.6/share/hadoop/yarn/*</value>
</property>
重启 Hadoop 。
stop-all.sh
start-all.sh
使用 hive 自带的客户端工具 beeline 连接 hive
beeline -u jdbc:hive2://127.0.0.1:1001 -n root
注: -u 指的是 hive 的 JDBC URL ;-n 指的是 HDFS 用户名。