Hadoop 3.2.1 +Hive+Hbase伪分布式集群搭建

根据实战安装步骤,详细描述hadoop3.2.1、hive3.1.2(包括mysql5.7)、zookeeper3.6、hbase2.2.4、flume1.9.0、sqoop1.4.7各组件安装步骤,记录过程中的各种坑,方便各位同学快速安装部署hadoop伪分布集群。

软件环境

  • java version “1.8.0_212”
  • Apache Hadoop 3.2.1
  • Hive 3.1.2(mysql5.7)
  • Zookeeper 3.6
  • Hbase 2.2.4
  • Flume1.9.0
  • Sqoop1.4.7

Linux 相关设置

设置静态 IP

CentOS 7下面配置静态IP,参考链接:

https://www.linuxidc.com/Linux/2017-10/147449.htm

设置主机名与 IP 地址映射

修改主机名和 IP 地址映射

vi /etc/hostname,修改主机名(如,删掉原有内容,命名为 hadoop)
systemctl restart network,重启网卡
ping hadoop,ping 通证明成功

参考链接:
https://blog.csdn.net/sheldonharris/article/details/81287450
https://blog.csdn.net/q18810146167/article/details/62224082
https://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_linux_043_hostname.html

免密码 ssh 设置

ssh-keygen -t rsa,然后一路回车即可
cp /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys,复制到公共密钥中
ssh localhost,测试

防火墙设置

# 查看防火墙状态
systemctl status firewalld
systemctl is-active firewalld
# 启动防火墙
systemctl start firewalld
systemctl stop firewalld
# 查看IP配置
more /etc/hosts

JDK 安装

官网下载JDK安装包解压到指定文件夹/opt/java/jdk1.8.0_212
添加环境变量
编辑/etc/profile文件,在文件末尾添加以下内容

# 设置 jdk 环境变量
export JAVA_HOME=/opt/java/jdk1.8.0_212
export PATH=$JAVA_HOME/bin:$PATH
#使环境变量生效
source /etc/profile

Hadoop 安装

下载 Hadoop

  • 下载地址: http://hadoop.apache.org/
  • Hadoop 安装路径:/opt/hadoop
# 解压 Hadoop 到指定文件夹
tar -zxvf hadoop-3.2.1.tar.gz -C /opt
#修改hadoop文件夹名
mv /opt/hadoop-3.2.1 /opt/hadoop
# 查看 Hadoop 版本信息
cd /opt/hadoop
./bin/hadoop version

Hadoop 配置

建立目录

# 在 /opt/hadoop 目录下,建立 tmp、hdfs/name、hdfs/data 目录
mkdir /opt/hadoop/tmp 
mkdir /opt/hadoop/hdfs 
mkdir /opt/hadoop/hdfs/data 
mkdir /opt/hadoop/hdfs/name

设置环境变量

# 设置环境变量
vi /etc/profile
# 设置hadoop环境变量
export HADOOP_HOME=/opt/hadoop/
export PATH=$PATH:$HADOOP_HOME/bin
# 使环境变量生效
source /etc/profile
# CentOS版本用
source ~/.bash_profile

修改 Hadoop 配置文件

配置以下 5 个文件:

hadoop/etc/hadoop/hadoop-env.sh
hadoop/etc/hadoop/core-site.xml
hadoop/etc/hadoop/hdfs-site.xml
hadoop/etc/hadoop/mapred-site.xml
hadoop/etc/hadoop/yarn-site.xml

hadoop-env.sh

# The java implementation to use.
#export JAVA_HOME=${JAVA_HOME}
export JAVA_HOME=/opt/java/jdk1.8.0_212

配置start-dfs.sh、stop-dfs.sh(置于开头)

#vim /opt/hadoop/sbin/start-dfs.sh #vim /opt/hadoop/sbin/stop-dfs.sh 
HDFS_DATANODE_USER=root  
HDFS_DATANODE_SECURE_USER=hdfs  
HDFS_NAMENODE_USER=root  
HDFS_SECONDARYNAMENODE_USER=root

配置start-yarn.sh、stop-yarn.sh(置于开头)

#vim /opt/hadoop/sbin/start-yarn.sh #vim /opt/hadoop/sbin/stop-yarn.sh 
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root

core-site.xml

vim /opt/hadoop/etc/hadoop/core-site.xml
<configuration>
 <property>
    <name>fs.defaultFSname>
    <value>hdfs://hadoop:9000value>
    <description>HDFS的URI,文件系统://namenode标识:端口号description>
property>

<property>
    <name>hadoop.tmp.dirname>
    <value>/opt/hadoop/tmpvalue>
    <description>namenode上本地的hadoop临时文件夹description>
property>
configuration>

1、name 节点用 fs.defaultFS,不建议使用 fs.default.name;
2、hadoop.tmp.dir 是hadoop文件系统依赖的基础配置,很多路径都依赖它。如果 hdfs-site.xml 中不配置 namenode 和 datanode 的存放位置,默认就放在如下路径中。

NameNode
dfs.name.dir
预设值:${hadoop.tmp.dir}/dfs/name
DataNode
dfs.data.dir
预设值:${hadoop.tmp.dir}/dfs/data

hdfs-site.xml

<configuration> 
   <property>
       <name>dfs.replicationname>
       <value>1value>
       <description>副本个数,配置默认是3,应小于datanode机器数量description>
   property>
configuration>

mapred-site.xml

<configuration>
    <property>
        <name>mapreduce.framework.namename>
        <value>yarnvalue>
    property>
configuration>

yarn-site.xml

<configuration>
    <property>
        <name>yarn.nodemanager.aux-servicesname>
        <value>mapreduce_shufflevalue>
    property>
configuration>

Hadoop 启动及测试

格式化 namenode

cd /opt/hadoop
./bin/hdfs namenode -format

成功的话,会看到 “successfully formatted” 和 “Exitting with status 0” 的提示,若为 “Exitting with status 1” 则是出错。

启动 Hadoop

cd /opt/hadoop/sbin
./start-all.sh

验证启动是否成功

jps

出现如下进程,启动成功

NodeManager
Jps
DataNode
NameNode
SecondaryNameNode
ResourceManager

参考链接:
(防坑笔记)hadoop3.0 (一) 环境部署与伪分布式(hdfs)
https://blog.csdn.net/coffeeandice/article/details/78879151

浏览器访问管理页面(其他电脑访问需修改hosts域名解析)

Namenode information: http://hadoop:9870

All Applications: http://hadoop:8088

HDFS NameNode web interface: http://hadoop:8042

MapReduce 测试自带实例 wordcount

创建测试文件

上传测试文件到 hdfs

# 查看 hdfs 上的目录
hadoop fs -ls /
# 创建input目录,源数据的存放地
hadoop fs -mkdir /input
# 如果有output目录,删除;把结果集输出到这里,事先不能存在
hadoop fs -rm -r /output
# 把提前准备好的文本文件上传到 hdfs 的 /input 目录
hadoop fs -put /home/hadoop/data/*.txt /input

执行程序 WordCount

cd /opt/hadoop/share/hadoop/mapreduce/
hadoop jar hadoop-mapreduce-examples-3.2.1.jar wordcount /input /output
# 查看 hdfs 上 /output 生成的结果
hadoop fs -ls /output
# 输出词频统计结果
hadoop fs -cat /output/part-r-00000

错误处理

找不到或无法加载主类org.apache.hadoop.mapreduce.v2.app.MRAppMaster

解决办法:在命令行下输入如下命令,并将返回的地址复制。

hadoop classpath

# 编辑yarn-site.xml

vim /opt/hadoop/etc/hadoop/yarn-site.xml

将返回的地址添加如下配置的value中

<configuration>
    <property>
        <name>yarn.application.classpathname>
        <value>/opt/hadoop//etc/hadoop:/opt/hadoop//share/hadoop/common/lib/*:/opt/hadoop//share/hadoop/common/*:/opt/hadoop//share/hadoop/hdfs:/opt/hadoop//share/hadoop/hdfs/lib/*:/opt/hadoop//share/hadoop/hdfs/*:/opt/hadoop//share/hadoop/mapreduce/lib/*:/opt/hadoop//share/hadoop/mapreduce/*:/opt/hadoop//share/hadoop/yarn:/opt/hadoop//share/hadoop/yarn/lib/*:/opt/hadoop//share/hadoop/yarn/*value>
    property>
configuration>

在所有的Master和Slave节点进行如上设置,设置完毕后重启Hadoop集群,重新运行刚才的MapReduce程序,成功运行。

hive安装

mysql安装

mysql作为hive的元数据存储,hive的元数据主要包括表数据(表ID、表名、表的存储位置)、列数据(列ID、列名、所在表ID、列存储位置)两种。

安装YUM Repo

由于CentOS 的yum源中没有mysql,需要到mysql的官网下载yum repo配置文件。下载命令:

wget https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm

repo的安装:

rpm -ivh mysql57-community-release-el7-9.noarch.rpm

执行完成后会在/etc/yum.repos.d/目录下生成两个repo文件mysql-community.repo mysql-community-source.repo

使用yum命令即可完成安装

cd /etc/yum.repos.d/
yum install mysql-server -y

启动msyql

systemctl start mysqld #启动MySQL

获取安装时的临时密码(在第一次登录时就是用这个密码):

grep 'temporary password' /var/log/mysqld.log

倘若没有获取临时密码

删除原来安装过的mysql残留的数据

rm -rf /var/lib/mysql

再启动mysql

systemctl start mysqld #启动MySQL

登录mysql

1.mysql -u root -p Ifnp:rtKF52r
2.输入刚获取的临时密码
3.修改密码:ALTER USER 'root'@'localhost' IDENTIFIED BY 'ATSnriet123!'; 

退出mysql

mysql退出三种方法:
mysql > exit;
mysql > quit;
mysql > \q;

msql设置外部客户端访问

可能是你的帐号不允许从远程登陆,只能在localhost。这个时候只要在localhost的那台电脑,登入MySQL后,更改 "mysql" 数据库里的 "user" 表里的 "host" 项,从"localhost"改称"%"
mysql -u root -p
mysql>use mysql;
mysql>update user set host = '%' where user = 'root'  and host='localhost';
mysql>select host, user from user;
然后重启MySQL服务。或再执行 执行一个语句 mysql>flush privileges; 使修改生效。

创建hive数据库用于存储元数据

create database hive;
#创建hive用户名密码
use mysql;
CREATE USER 'hive'@'%' IDENTIFIED BY 'ATSnriet123!';
Grant all privileges on *.* to 'hive'@'%' identified by 'ATSnriet123!' with grant option;
flush privileges; 

hive安装

下载hive3.1.2
http://mirrors.hust.edu.cn/apache/hive/

解压 Hive到指定文件夹

tar -zxvf apache-hive-3.1.2-bin.tar.gz -C /opt
#修改hive文件夹名
mv /opt/apache-hive-3.1.2-bin /opt/hive

添加hive环境

# 设置hadoop环境变量
export Hive_HOME=/opt/hive/
export PATH=$PATH:$Hive_HOME/bin
#环境变量生效
source /etc/profile

配置

hive-env.sh

首先配置hive-env.sh

#hadoop根目录
HADOOP_HOME=/opt/hadoop/
#hive配置文件目录  
export HIVE_CONF_DIR=/opt/hive/conf
#hive依赖目录
export HIVE_AUX_JARS_PATH=/opt/hive/lib

hive-site.xml

配置hive-site.xml需要特别注意的是javax.jdo.option.ConnectionDriverName老版本填com.mysql.jdbc.Driver 现在应该填com.mysql.cj.jdbc.Driver,不然会报错。

<configuration>
    <property>
    	
        <name>javax.jdo.option.ConnectionUserNamename>
        <value>hivevalue>
    property>
    <property>
    
        <name>javax.jdo.option.ConnectionPasswordname>
        <value>ATSnriet123!value>
    property>
   <property>
   
        <name>javax.jdo.option.ConnectionURLname>mysql
        <value>jdbc:mysql://192.168.10.107:3306/hive?useSSL=falsevalue>
    property>
    <property>
    
        <name>javax.jdo.option.ConnectionDriverNamename>
        <value>com.mysql.cj.jdbc.Drivervalue>
    property>
       <property>
        <name>hive.support.concurrencyname>
    <value>truevalue>
 property>
    
configuration>

复制JDBC驱动包

去官网(https://dev.mysql.com/downloads/connector/j/)载一个jdbc的驱动包 在MySQL
Connetors下选择Connector/J,进入jdbc下载页面。 选择Platform
Independent,下载第一个后缀为tar的包。
将mysql-connector-java.8.0.19.jar复制到hive的lib里面去就行了。

删除slf4j-log4j

hadoop的comment/lib下有个slf4j-log4j。 hive的lib下也有一个slf4j-log4j。
当你配置完环境变量后,hive就会找到两个这样的文件,于是他就不知道用那个了。然后便报错。
不过,需要注意的是,你只可以删hive的slf4j-log4j!因为删了hadoop的slf4j-log4j在你start-dfs.sh的时候会报错!

mv /opt/hive/lib/log4j-slf4j-impl-2.10.0.jar /root/log4j-slf4j-backup.jar

初始化

这一步特别简单,只要执行下面代码就行了。
只要前面没有出错,这一步就不会有问题。
不然能让人头皮发麻

cd /opt/hive
./bin/schematool -dbType mysql -initSchema

初始化结束后在数据库中多了很多表,用于存放hive的元数据,感兴趣可以看看。
在hdfs上也多出一些文件夹/usr/hive/warehouse

此处报错 java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)

解决方法:删除hive中低版本的guava-*.jar包,将hadoop中的guava-*-jre.jar复制到hive的lib目录下即可**

cd /opt/hive/lib
rm guava-*.jar
cd /opt/hadoop/share/hadoop/common/lib 
cp guava-*-jre.jar /opt/hive/lib

开启hive

hive

zookeeper安装

安装

使用tar解压要安装的目录即可,以3.6.0版本为例

这里以解压到/usr/myapp,实际安装根据自己的想安装的目录修改(注意如果修改,那后边的命令和配置文件中的路径都要相应修改)

tar -zxf apache-zookeeper-3.6.0-bin.tar.gz -C /opt
mv /opt/apache-zookeeper-3.6.0-bin /opt/zookeeper

配置

在主目录下创建data和logs两个目录用于存储数据和日志:

cd /opt/zookeeper
mkdir data
mkdir logs

在conf目录下新建zoo.cfg文件,写入以下内容保存:

tickTime=2000
dataDir=/opt/zookeeper/data
dataLogDir=/opt/zookeeper/logs
clientPort=2181

启动和停止

进入bin目录,启动、停止、重启分和查看当前节点状态(包括集群中是何角色)别执行:

./zkServer.sh start
./zkServer.sh stop
./zkServer.sh restart
./zkServer.sh status

Hbase安装

下载hbase2.21:https://downloads.apache.org/hbase/2.2.4/hbase-2.2.4-bin.tar.gz

解压 hbase到指定文件夹

tar -zxvf hbase-2.2.4-bin.tar.gz -C /opt
#修改hive文件夹名
mv /opt/hbase-2.2.4-bin /opt/hbase

添加hbase环境

# 设置hbase环境变量
export HBASE_HOME=/opt/hbase/
export PATH=$PATH:$HBASE_HOME/bin
#环境变量生效
source /etc/profile

配置 hbase-env.sh

cd /opt/hase/conf
vim  hbase-env.sh
#新增配置
export JAVA_HOME=/opt/jdk/jdk1.8.0_212
export HBASE_MANAGES_ZK=true
export HBASE_CLASSPATH=/opt/hbase/conf
配置项说明:
JAVA_HOME为java程序所在位置;
HBASE_MANAGES_ZK表示是否使用HBase自带的zookeeper环境;
HBASE_CLASSPATH指向hbase配置文件的路径。

配置hbase-site.xml

<configuration>

<property>
        <name>hbase.rootdirname>
        <value>hdfs://hadoop:9000/hbasevalue>
    property>
    
    <property>
        <name>hbase.cluster.distributedname>
        <value>truevalue>
    property>

    
    <property>
        <name>hbase.zookeeper.quorumname>
        <value>hadoop:2181value>
    property>

    <property>
        <name>hbase.master.info.portname>
        <value>16011value>
    property>
    <property>
        <name>dfs.replicationname>
        <value>1value>
    property>
    <property>
        <name>hbase.unsafe.stream.capability.enforcename>
        <value>falsevalue>
    property>
    <property>
        <name>hbase.tmp.dirname>
        <value>/opt/hbase/tmpvalue>
    property>configuration>

配置项说明:

hbase.master:HBase主节点地址。

hbase.rootdir:HBase文件所存储的位置。

hbase.cluster.distributed:HBase是否为分布式模式。

hbase.zookeeper.quorum:这里是配置ZooKeeper的服务器的地方。

hbase.zookeeper.property.dataDir:这里表示HBase在ZooKeeper上存储数据的位置。

创建zookeeper存储位置

sudo mkdir -p /data/tmp/zookeeper-hbase

编辑/opt/hbase/conf/regionservers文件

此文件存储了HBase集群节点的ip地址,目前只有一台节点,所以只需要填写localhost即可

删除重复的slf4j包

mv client-facing-thirdparty /root

启动hbase

cd /opt/hbase/bin
./start-hbase.sh

查看安装状态

输入jps,查看HBase相关进程是否存在,

5856 SecondaryNameNode
10241 HRegionServer
6050 ResourceManager
9971 HQuorumPeer
10100 HMaster
10677 Jps
5641 DataNode
5470 NameNode
6367 NodeManager

进入HBase Shell接口,进一步测试HBase安装是否正常

hbase shell

flume安装

下载flume1.9.0:https://mirrors.tuna.tsinghua.edu.cn/apache/flume/1.9.0/apache-flume-1.9.0-bin.tar.gz

解压 flume到指定文件夹

tar -zxvf apache-flume-1.9.0-bin.tar.gz -C /opt
#修改hive文件夹名
mv /opt/apache-flume-1.9.0-bin /opt/flume

配置flume的文件

mv flume-env.sh.template  flume-env.sh
vim flume-env.sh

配置内容如下:

export JAVA_HOME=/opt/jdk/jdk1.8.0_212
export JAVA_OPTS="-Xms100m -Xmx2000m -Dcom.sun.management.jmxremote"

配置环境变量

vim /etc/profile
#flume
export FLUME_HOME=/opt/flume
export FLUME_CONF_DIR=$FLUME_HOME/conf
export PATH=$PATH:$FLUME_HOME/bin
#使配置作用生效:
Source /etc/profile

查看配置效果

flume-ng version

错误: 找不到或无法加载主类 org.apache.flume.tools.GetJavaProperty
如果系统里安装了hbase,会出现错误: 找不到或无法加载主类org.apache.flume.tools.GetJavaProperty。如果没有安装hbase,这一步可以略过。

#1、将hbase的hbase.env.sh的这一行配置注释掉,即在export前加一个#
 #export HBASE_CLASSPATH=/opt/hbase/conf
#2、或者将HBASE_CLASSPATH改为JAVA_CLASSPATH,配置如下
 export JAVA_CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

sqoop安装

下载sqoop1.4.7:https://mirrors.tuna.tsinghua.edu.cn/apache/sqoop/1.4.7/sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz

解压 flume到指定文件夹

tar -zxvf sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz-C /opt
#修改hive文件夹名
mv /opt/sqoop-1.4.7.bin__hadoop-2.6.0 /opt/sqoop

配置环境变量

vim /etc/profile
export SQOOP_HOME=/opt/sqoop
export PATH=$PATH:$SQOOP_HOME/bin

修改配置文件

cd /opt/sqoop/conf
cp sqoop-env-template.sh  sqoop-env.sh
#添加hadoop、hive、hbase的路径
#Set path to where bin/hadoop is available
export HADOOP_COMMON_HOME=/opt/hadoop  #设置Hadoop 安装目录
 
#Set path to where hadoop-*-core.jar is available
export HADOOP_MAPRED_HOME=/opt/hadoop  #设置Hadoop 安装目录
 
#set the path to where bin/hbase is available
export HBASE_HOME=/opt/hbase #设置hbase安装目录

#Set the path to where bin/hive is available
export HIVE_HOME=/opt/hive  #设置Hive安装目录

#Set the path for where zookeper config dir is
export ZOOCFGDIR=/opt/zookeeper

拷贝mysql的库文件

将MySQL8 驱动包mysql-connector-java-8.0.19.jar,拷贝至Sqoop 安装目录下的lib 文件夹(/opt/sqoop/lib)

测试连接

sqoop list-databases --connect jdbc:mysql://hadoop:3306 --username root --password 123456 

出现异常:找不到org/apache/commons/lang/StringUtils
解决方法:在apache 上下载commons-lang-2.6.jar包并上传到lib下即可
下载地址:http://mirrors.tuna.tsinghua.edu.cn/apache//commons/lang/binaries/commons-lang-2.6-bin.zip

你可能感兴趣的:(伪分布式集群,hbase,hive,大数据,hadoop,hive,hbase)