【hive】单节点搭建hadoop和hive

一、背景

需要使用hive远程debug,尝试使用无hadoop部署hive方式一直失败,无果,还是使用有hadoop方式。最终查看linux内存占用6GB,还在后台运行docker的mysql(bitnami/mysql:8.0),基本满意。

版本选择:

(1)hive2 hadoop2 和hive3和hadoop3需要搭配使用,不能像chd的hive2和hadoop3搭配使用,容易出现问题。

本文选择版本,都是官网推荐的版本:
hadoop-3.3.6.tar.gz
apache-hive-3.1.3-bin.tar.gz

二、创建用户和组

shell 复制代码
# hadoop缩写hdp
useradd hdp
groupadd hadoop

后边启动hadoop不能用root用户。

三、配置集群(单节点)互信

bash 复制代码
su hdp && cd .ssh
ssh-keygen
# 一路回车
cat id_rsa.pub >> authorized_keys
vi /etc/hosts
# localhost 行后追加 hdp 

# 配置后测试下
ssh hdp 
ssh localhost

四、hadoop搭建

hadoop官网

下载安装包

本文hadoop安装路径:/opt/hadoop-3.3.6

shell 复制代码
# 解压
tar -xvf hadoop-3.3.6.tar.gz 
# 改名字
mv ... hadoop-3.3.6

# 加个软连接
cd hadoop-3.3.6
ln -s etc/hadoop conf

修改hadoop-env.sh

shell 复制代码
export HADOOP_LOG_DIR=${HADOOP_HOME}/logs
export HADOOP_CLIENT_OPTS="-Xmx2048m $HADOOP_CLIENT_OPTS"

修改core-site.xml,添加:

xml 复制代码
<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hdp:9000</value>
        <description>hdfs内部通讯访问地址</description>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <!--临时文件目录需要自己建立-->
        <value>/var/hadoop/tmp</value>
    </property>
    <property>
        <name>hadoop.proxyuser.hadoop.hosts</name>
        <value>*</value>
    </property>
    <property>
        <name>hadoop.proxyuser.hadoop.groups</name>
        <value>*</value>
</property>
</configuration>

修改hdfs-site.xml,添加:

xml 复制代码
<configuration>
  <property>
      <name>dfs.namenode.name.dir</name>
      <value>/var/hadoop/data/namenode</value>
      <description> namenode 存放name table(fsimage)本地目录需要修改,如果没有需要自己创建文件目录)</description>
  </property>
  <property>
      <name>dfs.datanode.data.dir</name>
      <value>/var/hadoop/data/datanode</value>
      <description>datanode存放block本地目录(需要修改,如果没有需要自己创建文件目录)</description>
  </property>
  <property>
          <!--由于只有一台机器,hdfs的副本数就指定为1-->
          <name>dfs.replication</name>
          <value>1</value>
   </property>
</configuration>

修改yarn-site.xml

xml 复制代码
<configuration>
<property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
</property>
<property>
        <name>yarn.scheduler.maximum-allocation-mb</name>
        <value>2048</value>
</property>
<property>
        <name>yarn.scheduler.minimum-allocation-mb</name>
        <value>2048</value>
</property>
<property>
        <name>yarn.nodemanager.vmem-pmem-ratio</name>
        <value>2.1</value>
</property>
<property>
        <name>mapred.child.java.opts</name>
        <value>-Xmx1024m</value>
</property>
<property>
        <name>yarn.application.classpath</name>
        <value>/opt/hadoop-3.3.6/conf:/opt/hadoop-3.3.6/share/hadoop/common/lib/*:/opt/hadoop-3.3.6/share/hadoop/common/*:/opt/hadoop-3.3.6/share/hadoop/hdfs:/opt/hadoop-3.3.6/share/hadoop/hdfs/lib/*:/opt/hadoop-3.3.6/share/hadoop/hdfs/*:/opt/hadoop-3.3.6/share/hadoop/mapreduce/*:/opt/hadoop-3.3.6/share/hadoop/yarn:/opt/hadoop-3.3.6/share/hadoop/yarn/lib/*:/opt/hadoop-3.3.6/share/hadoop/yarn/*</value>
</property>
</configuration>

yarn.application.classpath是使用hadoop classpath生成的,一定要有此配置。

修改mapred-site.xml,添加:

xml 复制代码
<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>
bash 复制代码
touch init-env.sh

添加如下内容,本文使用的hadoop安装路径的是:/opt/hadoop-3.3.6

shell 复制代码
#!/bin/bash
# 移除老的环境变量
# 如果本机已经安装过hadoop一定要注意,将旧hadoop环境变量移除,可以使用printenv 或者env 查看已经有的环境变量
unset HADOOP_HDFS_HOME
unset HADOOP_YARN_HOME
unset HADOOP_CLASSPATH
unset HADOOP_MAPRED_HOME
unset HADOOP_HOME
unset HADOOP_CONF_DIR
# 添加新的环境变量
export HADOOP_HOME=/opt/hadoop-3.3.6
export HADOOP_CONF_DIR=$HADOOP_HOME/conf
export HADOOP_LOG_DIR=/var/hadoop/log
export PATH=$HADOOP_HOME/bin:$PATH

加载环境变量

bash 复制代码
source init-env.sh
# 测试下:
env
echo $HADOOP_HOME
echo $HADOOP_CONF_DIR

初始化namenode

bash 复制代码
# 删除hdfs-site.xml中配置的namenode和datanode本地路径
rm -rf /var/hadoop/data/namenode/* /var/hadoop/data/datanode/*
hdfs namenode  -format

启动和停止hadoop

bash 复制代码
chown -R hdp:hadoop $HADOOP_HOME
# 必须使用非root账户登录
su hdp
$HADOOP_HOME/sbin/start-all.sh
# 使用jps查看下java进程情况:
NameNode
ResourceManager
NodeManager
SecondaryNameNode
DataNode

# 停止
$HADOOP_HOME/sbin/stop-all.sh

# 可以在console查看日志的脚本,即单独启动yarn或者hdfs:
start-dfs.sh
start-yarn.sh

hdfs web
yarn web

使用命令行确认下hdfs和yarn是否可用:

bash 复制代码
hdfs dfs -mkdir /tmp
hdfs dfs -ls /
yarn application -list

六、hive搭建

本文hive安装位置:/opt/hive-3.1.3/
hive官网

bash 复制代码
tar -xvf apache-hive-3.1.3-bin.tar.gz
mv apache-hive-3.1.3-bin hive-3.1.3
cd hive-3.1.3 && mkdir logs
cp hive-env.sh.template hive-env.sh
touch hive-site.xml
# 不手动添加的话,hive不打印日志!!!
cp hive-log4j2.properties.template hive-log4j2.properties
cp hive-exec-log4j2.properties.template hive-exec-log4j2.properties

修改hive-env.sh

shell 复制代码
HADOOP_HOME=/opt/hadoop-3.3.6

修改hive-site.xml,添加:

本文hive使用mysql作为metastore,提前在mysql中创建好数据库hive3_local

xml 复制代码
<configuration>
<!-- 数据库连接JDBC的URL地址,&amp; 是urlencode后的表达-->
<property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://mysql-ip:3306/hive3_local?createDatabaseIfNotExist=true&amp;useSSL=false</value>
</property>
    <!-- 数据库连接driver,即MySQL驱动-->
<property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>com.mysql.cj.jdbc.Driver</value>
</property>
    <!-- MySQL数据库用户名-->
<property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>root</value>
</property>
    <!-- MySQL数据库密码-->
<property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>密码</value>
</property>
<property>
    <!--hive表在hdfs的位置-->
    <name>hive.metastore.warehouse.dir</name>
    <value>/user/hive/warehouse</value>
</property>
<property>
    <name>hive.security.authorization.enabled</name>
    <value>false</value>
</property>
<property>
    <name>hive.security.authorization.createtable.owner.grants</name>
    <value>ALL</value>
</property>
<property>
    <name>hive.server2.enable.doAs</name>
    <value>false</value>
</property>
</configuration>
bash 复制代码
touch init-env.sh

添加如下内容

shell 复制代码
#!/bin/bash
export HIVE_HOME=/opt/hive-3.1.3
export HIVE_CONF_DIR=$HIVE_HOME/conf
export PATH=$HIVE_HOME/bin:$PATH

加载hive环境变量。

bash 复制代码
source init-env.sh

初始化metastore

把数据库jdbc驱动复制到lib目录下,本文是mysql-connector-j-8.0.31.jar

bash 复制代码
# 进入hive的bin目录
./schematool -dbType mysql -initSchema

配置hive启动脚本

bash 复制代码
touch start-all.sh

添加如下内容:

shell 复制代码
#!/bin/bash
nohup $HIVE_HOME/bin/hive --service metastore &
nohup $HIVE_HOME/bin/hive --service hiveserver2 &

启动hive,注:一定要确保hadoop已经成功启动,才能启动hive,否则连接hive beeline会卡死但是不报错!!!

bash 复制代码
chown -R hdp:hadoop $HIVE_HOME
su hdp
source /opt/hadoop-3.3.6/conf/init-env.sh
source /opt/hive-3.1.3/conf/init-env.sh
sh start-all.sh

# 查看进程,可以看到两个RunJar。
jps
153216 RunJar
152044 RunJar

配置hive停止脚本

bash 复制代码
touch stop-all.sh

添加如下内容:

shell 复制代码
jps | grep RunJar | awk '{print $1}' | xargs kill -9

判断linux端口使用已经监听:

bash 复制代码
# hive的metastore端口号9083
netstat -ntulp |grep 9083
# 出现端口信息,说明metastore已经启动成功了。
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
tcp6       0      0 :::9083                 :::*                    LISTEN      152044/java
# 使用如上获取的ip获取具体进程启动命令:
ps -ef | grep 152044
hdp      152044  36213  0 4月09 pts/1   00:01:01 /usr/hdp/3.0.1.0-187/jdk1.8/bin/java -Dproc_jar -Xmx2048m -Dproc_metastore -Dlog4j2.formatMsgNoLookups=true -Dlog4j.configurationFile=hive-log4j2.properties -Djava.util.logging.config.file=/opt/hive-3.1.3/conf/parquet-logging.properties -Dyarn.log.dir=/opt/hadoop-3.3.6/logs -Dyarn.log.file=hadoop.log -Dyarn.home.dir=/opt/hadoop-3.3.6 -Dyarn.root.logger=INFO,console -Djava.library.path=/opt/hadoop-3.3.6/lib/native -Dhadoop.log.dir=/opt/hadoop-3.3.6/logs -Dhadoop.log.file=hadoop.log -Dhadoop.home.dir=/opt/hadoop-3.3.6 -Dhadoop.id.str=hdp -Dhadoop.root.logger=INFO,console -Dhadoop.policy.file=hadoop-policy.xml -Dhadoop.security.logger=INFO,NullAppender org.apache.hadoop.util.RunJar /opt/hive-3.1.3/lib/hive-metastore-3.1.3.jar org.apache.hadoop.hive.metastore.HiveMetaStore


# hive的hiveserver2端口号10000
netstat -ntulp | grep 10000
# 出现端口信息,说明hiveserver已经启动成功了。
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
tcp6       0      0 :::10000                :::*                    LISTEN      152045/java
# 使用如上获取的ip获取具体进程启动命令:
ps -ef | grep 152045
hdp      152045  36213  0 4月09 pts/1   00:04:30 /usr/hdp/3.0.1.0-187/jdk1.8/bin/java -Dproc_jar -Xmx2048m -Dproc_hiveserver2 -Dlog4j2.formatMsgNoLookups=true -Dlog4j.configurationFile=hive-log4j2.properties -Djava.util.logging.config.file=/opt/hive-3.1.3/conf/parquet-logging.properties -Djline.terminal=jline.UnsupportedTerminal -Dyarn.log.dir=/opt/hadoop-3.3.6/logs -Dyarn.log.file=hadoop.log -Dyarn.home.dir=/opt/hadoop-3.3.6 -Dyarn.root.logger=INFO,console -Djava.library.path=/opt/hadoop-3.3.6/lib/native -Dhadoop.log.dir=/opt/hadoop-3.3.6/logs -Dhadoop.log.file=hadoop.log -Dhadoop.home.dir=/opt/hadoop-3.3.6 -Dhadoop.id.str=hdp -Dhadoop.root.logger=INFO,console -Dhadoop.policy.file=hadoop-policy.xml -Dhadoop.security.logger=INFO,NullAppender org.apache.hadoop.util.RunJar /opt/hive-3.1.3/lib/hive-service-3.1.3.jar org.apache.hive.service.server.HiveServer2

beeline链接hive

shell 复制代码
beeline
# 输入`!verbose`,设置打印日志verbose
!verbose
# 使用hive用户登录,不输入密码(空密码),直接回车。
!connect jdbc:hive2://localhost:10000 hive

七、参考文档

hadoop和hive单机部署
Hive2 新版连接工具 beeline 详解
找不到或无法加载主类 org.apache.hadoop.mapreduce.v2.app.MRAppMaster
DBeaver连接Hive错误总结
User: hadoop is not allowed to impersonate anonymous
return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask
hive设置权限
hive 入门 修改hive日志路径
Hadoop常见端口号及配置文件

相关推荐
朱阿朱11 小时前
大数据Hadoop(MapReduce)
大数据·hadoop·mapreduce
sunxunyong13 小时前
hive/doris查询表的创建和更新时间
数据仓库·hive·hadoop
明月与玄武16 小时前
构建高可用大数据平台:Hadoop与Spark分布式集群搭建指南
hadoop·分布式·spark·大数据测试
小钻风336618 小时前
JavaWeb注解的原理
数据仓库·hive·hadoop
CXH72819 小时前
hadoop伪分布式部署
大数据·hadoop·分布式
程序员老周6662 天前
从MySQL快速上手大数据Hive
大数据·数据库·hive·hadoop·mysql·mapreduce·数据工程师
lqlj22332 天前
Hadoop案例——流量统计
大数据·hadoop·分布式
IT成长日记2 天前
【Hadoop入门】Hadoop生态之Hive简介
大数据·hive·hadoop
刘翔在线犯法2 天前
Hadoop的序列化和反序列化
大数据·hadoop·分布式
麻芝汤圆2 天前
利用Hadoop MapReduce实现流量统计分析
大数据·开发语言·hadoop·分布式·servlet·mapreduce