根据实战安装步骤,详细描述hadoop3.2.1、hive3.1.2(包括mysql5.7)、zookeeper3.6、hbase2.2.4、flume1.9.0、sqoop1.4.7各组件安装步骤,记录过程中的各种坑,方便各位同学快速安装部署hadoop伪分布集群。
软件环境
CentOS 7下面配置静态IP,参考链接:
https://www.linuxidc.com/Linux/2017-10/147449.htm
修改主机名和 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-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安装包解压到指定文件夹/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
/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
# 在 /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
配置以下 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
# The java implementation to use.
#export JAVA_HOME=${JAVA_HOME}
export JAVA_HOME=/opt/java/jdk1.8.0_212
#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
#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
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
<configuration>
<property>
<name>dfs.replicationname>
<value>1value>
<description>副本个数,配置默认是3,应小于datanode机器数量description>
property>
configuration>
<configuration>
<property>
<name>mapreduce.framework.namename>
<value>yarnvalue>
property>
configuration>
<configuration>
<property>
<name>yarn.nodemanager.aux-servicesname>
<value>mapreduce_shufflevalue>
property>
configuration>
cd /opt/hadoop
./bin/hdfs namenode -format
成功的话,会看到 “successfully formatted
” 和 “Exitting with status 0
” 的提示,若为 “Exitting with status 1
” 则是出错。
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
Namenode information: http://hadoop:9870
All Applications: http://hadoop:8088
HDFS NameNode web interface: http://hadoop:8042
# 查看 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
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程序,成功运行。
mysql作为hive的元数据存储,hive的元数据主要包括表数据(表ID、表名、表的存储位置)、列数据(列ID、列名、所在表ID、列存储位置)两种。
由于CentOS 的yum源中没有mysql,需要到mysql的官网下载yum repo配置文件。下载命令:
wget https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm
rpm -ivh mysql57-community-release-el7-9.noarch.rpm
执行完成后会在/etc/yum.repos.d/目录下生成两个repo文件mysql-community.repo mysql-community-source.repo
cd /etc/yum.repos.d/
yum install mysql-server -y
systemctl start mysqld #启动MySQL
grep 'temporary password' /var/log/mysqld.log
删除原来安装过的mysql残留的数据
rm -rf /var/lib/mysql
再启动mysql
systemctl start mysqld #启动MySQL
1.mysql -u root -p Ifnp:rtKF52r
2.输入刚获取的临时密码
3.修改密码:ALTER USER 'root'@'localhost' IDENTIFIED BY 'ATSnriet123!';
mysql退出三种方法:
mysql > exit;
mysql > quit;
mysql > \q;
可能是你的帐号不允许从远程登陆,只能在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; 使修改生效。
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;
下载hive3.1.2
http://mirrors.hust.edu.cn/apache/hive/
tar -zxvf apache-hive-3.1.2-bin.tar.gz -C /opt
#修改hive文件夹名
mv /opt/apache-hive-3.1.2-bin /opt/hive
# 设置hadoop环境变量
export Hive_HOME=/opt/hive/
export PATH=$PATH:$Hive_HOME/bin
#环境变量生效
source /etc/profile
首先配置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需要特别注意的是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>
去官网(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里面去就行了。
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
使用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
下载hbase2.21:https://downloads.apache.org/hbase/2.2.4/hbase-2.2.4-bin.tar.gz
tar -zxvf hbase-2.2.4-bin.tar.gz -C /opt
#修改hive文件夹名
mv /opt/hbase-2.2.4-bin /opt/hbase
# 设置hbase环境变量
export HBASE_HOME=/opt/hbase/
export PATH=$PATH:$HBASE_HOME/bin
#环境变量生效
source /etc/profile
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配置文件的路径。
<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上存储数据的位置。
sudo mkdir -p /data/tmp/zookeeper-hbase
此文件存储了HBase集群节点的ip地址,目前只有一台节点,所以只需要填写localhost即可
mv client-facing-thirdparty /root
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
下载flume1.9.0:https://mirrors.tuna.tsinghua.edu.cn/apache/flume/1.9.0/apache-flume-1.9.0-bin.tar.gz
tar -zxvf apache-flume-1.9.0-bin.tar.gz -C /opt
#修改hive文件夹名
mv /opt/apache-flume-1.9.0-bin /opt/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
下载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
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
将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