安装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/
cp jdk-8u401-linux-x64.tar.gz /usr/local/java
解压
cd /usr/local/java
tar -zxvf  jdk-8u401-linux-x64.tar.gz
# 用vi命令打开全局配置文件/etc/profile
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

systemctl start sshd


ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
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

mkdir /usr/local/hive
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-site.xml

在 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&amp;characterEncoding=UTF-8&amp;useSSL=false&amp;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 用户名。