概述:学习hadoop大数据,安装hadoop生态圈的相关软件全过程
本文是根据网上的安装教程,结合小白自身安装经历,一步一步踩坑安装成功的。在安装过程中出现了诸多问题,如环境配置、版本不一致、权限等。折腾了两天之后,成功安装了hadoop/hive/scala/spark/zookeeper/hbase,因此写此博客保存安装记录,以便后续再安装更熟练,也分享给大家安装经历。本文适合完全没有安装过hadoop及其相关组件的用户,高手请忽略。我们开始吧!
准备
安装环境:
Windows10+VMWare15(ubuntu18.04)
hadoop相关组件各版本:
hadoop3.2.1,hive3.1.2,scala2.12.10,spark3.0.0,zookeeper3.5.7,hbase2.0.6
安装包地址:
用国内镜像源,推荐一个速度快的,清华镜像 https://mirrors.tuna.tsinghua.edu.cn/apache
注意:hadoop3.2.1,hive3.1.2,spark3.0.0,zookeeper3.5.7可以在清华镜像网中下载,而没有hbase2.0.6这个版本(下载地址https://archive.apache.org/dist/hbase/2.0.6/ )
scala下载地址:https://www.scala-lang.org/download/2.12.10.html
额外需要安装:jdk-8u181,mysql5.7
备注:以下省略了部分Linux命令,这些省略的命令以图片的形式展示了其结果,另外,默认看此博客的游客会vim。如果不熟悉,建议先补一下这些基本知识。
开始安装
上述的hadoop相关组件安装包和jdk8可以提前先下载好,mysql可以通过命令行下载(后面安装时会说明)。现在开始,我们一步一步来安装。
JDK1.8u181
由于hadoop依赖jdk,因此我们需要先安装好JVM环境。将jdk包移到如下目录,解压包: sudo tar -zxvf jdk-8u181-linux-x64.tar.gz
配置环境变量:
sudo vim /etc/profile
末尾加上
export JAVA_HOME=/usr/lib/jdk/jdk1.8.0_181
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
终端输入: source /etc/profile
测试是否成功安装:java -version
hadoop3.2.1
先创建hadoop用户:sudo useradd -m hadoop -s /bin/bash
给hadoop设置密码:sudo passwd hadoop
将hadoop赋予sudo权限:sudo adduser hadoop sudo
安装openssh-server:
sudo apt update
sudo apt install openssh-server
切换到hadoop用户:su - hadoop
登录本机:ssh localhost
cd ~/.ssh/ 若没有该目录,要先执行一次ssh localhost
ssh-keygen -t rsa
会有提示,都按回车就可以(即不设密码,免密登录)
cat ./id_rsa.pub >> ./authorized_keys 加入授权
解压缩hadoop:sudo tar -zxvf hadoop-3.2.1.tar.gz (注意目录位置)
注意:由于我是已经安装完了,上述组件都安装好了。忽略tomcat。
修改权限(-R后面是跟的hadoop用户),
sudo chown -R hadoop ./hadoop/ 意思是将./hadoop的属主给hadoop用户
添加到环境变量
export HADOOP_HOME=/usr/local/hadoop/hadoop-3.2.1
export PATH=$PAHT:$HADOOP_HOME/bin
source /etc/profile
测试是否安装成功
hadoop version
同理,其余组件都如此解压后,配置环境变量,这里附上最终的环境变量截图:输入cat /etc/profile
注意:安装顺序是jdk,hadoop,scala,spark,zookeeper,hbase。
理由:hadoop依赖jdk,spark依赖scala
小结:至此,我们只做了jdk和6个组件的解压和环境变量配置。下面开始6个组件的自定义配置。由于我是安装好了的,所以一起讲了,本应该一个组件安装配置完后再安装下一个。
hadoop3.2.1自定义配置
/usr/local/hadoop/hadoop-3.2.1/etc/hadoop目录下修改配置文件
core-site.xml
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop/hadoop-3.2.1/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>localhost:2181</value>
</property>
</configuration>
hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop/hadoop-3.2.1/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/hadoop-3.2.1/tmp/dfs/data</value>
</property>
</configuration>
mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
yarn-site.xml
<configuration>
<!--nomenodeManager获取数据的方式是shuffle-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>localhost</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!--指定Yarn的老大(ResourceManager)的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>localhost:2181</value>
</property>
</configuration>
修改JAVA环境变量(cd /usr/local/hadoop/hadoop-3.2.1/etc/hadoop)
sudo vim ./hadoop-env.sh
修改在 export JAVA_HOME=/usr/lib/jdk/jdk1.8.0_181
然后执行 hdfs namenode -foramt
最后输入 start-dfs.sh和start-yarn.sh
web管理:浏览器输出就会出现相应的正确界面
http://localhost:9870
http://localhost:9864
http://localhost:9868
http://localhost:8042
小结:hadoop全部配置完成
hive自定义配置
hive依赖与hadoop,请务必完成hadoop的配置。hive还需要mysql做元数据,故要先安装mysql。
sudo apt install mysql-server
sudo apt install mysql-client
下载后查看版本 mysql -V
sudo cat /etc/mysql/debian.cnf (默认的账号和密码)
复制user后的账号和password的密码 (再在终端输入mysql -u 账号 -p 回车后再输入密码)
注意:终端的复制和粘贴是ctrl+shift+c/v
修改密码:
select user,host from mysql.user; 查看用户
修改root用户的密码为root (mysql5.7.29)
alter user 'root'@'localhost' identified with mysql_native_password by 'root';
flush privileges;
创建hive用户,密码为hive
create user 'hive'@'%' identified by 'hive';
grant all privileges on *.* to 'hive'@'%' with grant option;
flush privileges;
exit;
默认情况下,ubuntu系统中Mysql只允许本地登录,需要修改配置文件将地址绑定注释
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
将 bind-address = 127.0.0.1注释
重启mysql服务 sudo service mysql restart
建立Hive专用的元数据库,用刚才创建的hive,密码我设置的是hive
mysql -u hive -p
create database hive(这是hive数据库里面是空的)
现在才真正进行hive相关的配置:(环境变量之前都配置好了的,以后组件同理,现在只管文件配置)
在hive的conf目录下的hive-site.xml增加如下配置
一个是系统默认,一个是自定义的,hive优先以自定义为准
sudo cp hive-default.xml.template hive-default.xml
新建一个文件 touch hive-site.xml,并粘贴如下内容:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true</value>
<description>JDBC connect string for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
<description>Driver class name for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hive</value>
<description>username to use against metastore database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>hive</value>
<description>password to use against metastore database</description>
</property>
</configuration>
查看hive是否安装成功:
(前提测试安装成功 java -version hadoop version mysql -V)
启动hive前先启动hadoop start-dfs.sh start-yarn.sh
再输入 hive
可能出现有如下报错:
报错:Exception in thread "main" java.lang.RuntimeException: org.apache.hadoop.hdfs.server.namenode.SafeModeException: Cannot create directory
解决:退出安全模式,hdfs dfsadmin -safemode leave
再输入hive
报错:Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;
原因:
com.google.common.base.Preconditions.checkArgument,因为hive内依赖的guava.jar和hadoop内的版本不一致造成的
检验方法:
1、查看hadoop安装目录下的 share/hadoop/common/lib内的guava.jar版本
2、查看hive安装目录下内的 guava.jar的版本,若两者不一致,删除版本低的,并拷贝高版本的
问题解决了
下载mysql连接java的驱动 https://dev.mysql.com/downloads/connector/j/
移动到hive的lib目录/usr/local/hive/apache-hive-3.1.2-bin/lib
初始化
schematool -initSchema -dbType mysql
若出现以下:
Initialization script completed
Sat Feb 29 14:11:37 CST 2020 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
schemaTool completed
注意:发出警告,关于ssh验证
设置useSSL=false, 这里有个坑 就是hive的配置文件是.XML格式,而在xml文件中&;才表示&,所以正确的做法是在Hive的配置文件中,如hive-site.xml进行如下设置
<value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true&useSSL=false</value>
最后成功:
Logging initialized using configuration in jar:file:/usr/local/hive/apache-hive-3.1.2-bin/lib/hive-common-3.1.2.jar!/hive-log4j2.properties Async: true
Hive Session ID = e3de9ae1-59cb-423b-b5a6-447299343d19
Hive-on-MR is deprecated in Hive 2 and may not be available in the future versions. Consider using a different execution engine (i.e. spark, tez) or using Hive 1.X releases.
进入 mysql,use hive; 再show tables;就可以看见很多表了
最后:一定要记得将mysql-connector-java-5.1.42-bin.jar放到hive目录的lib目录下
小结:hive全部配置完成
scala和spark自定义配置
scala是一门语言,只需要进行环境变量配置即可
验证安装是否成功
scala -version 进入scala终端
:quit 退出scala终端
spark环境变量配置好后,配置spark-env.sh:
进入 /usr/local/spark/spark-3.0.0-preview2-bin-hadoop3.2/conf
执行 sudo cp spark-env.sh.template spark-env.sh
执行 sudo vim spark-env.sh
在最后输入:
export JAVA_HOME=/usr/lib/jdk/jdk1.8.0_181
export HADOOP_HOME=/usr/local/hadoop/hadoop-3.2.1
export HADOOP_CONF_DIR=/usr/local/hadoop/hadoop-3.2.1/etc/hadoop
export SCALA_HOME=/usr/local/scala/scala-2.12.10
export SPARK_HOME=/usr/local/spark/spark-3.0.0-preview2-bin-hadoop3.2
export SPARK_MASTER_IP=127.0.0.1
export SPARK_MASTER_PORT=7077
export SPARK_MASTER_WEBUI_PORT=8099
export SPARK_WORKER_CORES=3
export SPARK_WORKER_INSTANCES=1
export SPARK_WORKER_MEMORY=5G
export SPARK_WORKER_WEBUI_PORT=8081
export SPARK_EXECUTOR_CORES=1
export SPARK_EXECUTOR_MEMORY=1G
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$HADOOP_HOME/lib/native
配置Slave
进入 /usr/local/spark/spark-3.0.0-preview2-bin-hadoop3.2/conf
sudo cp slaves.template slaves
默认是 localhost
验证安装是否成功:
需要先启动hadoop伪分布式:启动hdfs文件系统和yarn资源调度器
start-dfs.sh
start-yarn.sh
进入 /usr/local/spark/spark-3.0.0-preview2-bin-hadoop3.2/sbin
sudo ./start-master.sh
sudo ./start-slaves.sh
浏览器输入 http://localhost:8099/ 成功
终端输入 spark-shell 进入scala环境
spark-shell的web界面 http://127.0.0.1:4040/jobs/
退出终端 :quit 之后再进入上述网址失效
小结:spark全部配置完成
Zookeeper自定义配置
配置好环境变量之后,配置zoo.cfg文件(/usr/local/zookeeper/apache-zookeeper-3.5.7-bin/conf目录下)
打开Zookeeper安装路径进入conf文件夹下复制zoo_sample.cfg取名为zoo.cfg
sudo cp zoo_sample.cfg zoo.cfg
使用vim命令查看发现没有dir和log文件目录所以我们要创建后配置。退出到Zookeeper目录创建dataDir和dataLogDir文件夹
sudo mkdir dataDir
sudo mkdir dataLogDir
创建后进入zoo.cfg文件中进行配置
dataDir=/usr/local/zookeeper/apache-zookeeper-3.5.7-bin/dataDir
dataLogDir=/usr/local/zookeeper/apache-zookeeper-3.5.7-bin/dataLogDir
测试是否成功 zkServer.sh start
测试是否启动正常 zkServer.sh status
最后一行必须要有 Mode: standalone才表示成功了
jps后要有QuorumPeerMain进程才成功了
若jps没有QuorumPeerMain
进入/usr/local/zookeeper/apache-zookeeper-3.5.7-bin/bin
删除 dataLogDir下的version-2文件夹
重启 zkServer.sh stop zkServer.sh start
查看2181端口是否启用 ss -tnl | grep "2181"
使用客户端连接
zkCli.sh -server localhost:2181
输出一堆内容,连接成功后,就进入了命令窗口,输入 ls / 查看根目录 (好像是配置了hbase之后才有hbase的)
输入 quit 退出
小结:zookeeper全部配置完成
HBase自定义配置
这是我用时最久的一步,因为碰到了版本不匹配问题!
Hbase依赖于HDFS,zookeeper
配置好环境变量后,配置 /usr/local/hbase/hbase-2.2.3/conf/hbase-env.sh
export JAVA_HOME=/usr/lib/jdk/jdk1.8.0_181
export HBASE_MANAGES_ZK=false
HBASE_MANAGES_ZK 环境变量用来设置是使用hbase默认自带的 Zookeeper还是使用独立的ZooKeeper。HBASE_MANAGES_ZK=false 时使用独立的,为true时使用默认自带的。
配置 hbase-site.xml
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://localhost:9000/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>localhost:2181</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/usr/local/zookeeper/apache-zookeeper-3.5.7-bin/dataDir</value>
</property>
<property>
<name>hbase.unsafe.stream.capability.enforce</name>
<value>false</value>
</property>
</configuration>
查看版本 hbase version
终端输入 start-hbase.sh 再输入 hbase shell 进入hbase终端
在hbase命令行中输入list出现如下结果则成功:
web管理:localhost:16010
可能出现的问题:
1、可能报错:SLF4J: Class path contains multiple SLF4J bindings.
解决:slf4j冲突,删除一个,保留Hadoop的lib目录下的那个,OK了。
2、可能报错:HADOOP_ORG.APACHE.HADOOP.HBASE.UTIL.GETJAVAPROPERTY_USER:错误的替换
解决:是hadoop与hbase不兼容(hadoop3.2.1和hbase2.2.*,hbase2.1.*好像都不兼容,我试了,折腾好久)。下载hbase2.0.6与hadoop3.2.1兼容,OK了。
3、在hbase shell中输入任何命令,都报错ERROR,但是ERROR后面有没有错误的信息,或者出现ERROR: KeeperErrorCode = NoNode for /hbase/master。可能是由于start-hbase.sh虽然你在终端输入了,但是其实并没有正确的启动就输入了habse shell,如果是这样,你如果再输入stop-hbase.sh,会返回no hbase master found。原因在于启动过程中出现了异常。
解决:查看日志文件/usr/local/hbase/hbase-2.0.6/logs/hbase-hadoop-master-onrVM.log,有如下部分:
java.lang.IllegalStateException: The procedure WAL relies on the ability to hsync for proper operation during component failures, but the underlying filesystem does not support doing so. Please check the config value of 'hbase.procedure.store.wal.use.hsync' to set the desired level of robustness and ensure the config value of 'hbase.wal.dir' points to a FileSystem mount that can provide it.
在hbase-site.xml配置文件中,加入如下配置,OK了。
<property>
<name>hbase.unsafe.stream.capability.enforce</name>
<value>false</value>
</property>
小结:Hbase全部配置完成。
总结:
1、以上,jdk,hadoop,mysql,hive,scala,spark,zookeeper,hbase全部配置完成。这可能是最简单的配置了,到此总算调通了,这里纯粹是为了安装而安装,根据网上安装教程加上自己踩坑,通过查阅资料解决问题,迈出了进入Big Data的第一步。随着后面学习,逐渐了解配置参数的含义,进行配置文件的优化和部署。
2、查看日志文件很重要,不然可能连哪里出错都不知道。我在hbase shell中输入命令报空ERROR,找了很久资料都没有找到,KeeperErrorCode = NoNode for /hbase/master问题网上解决方案完全不适合自己。后来才在一篇博文中看到查看hbase日志文件,才找到java.lang.IllegalStateException,从而解决问题。
3、第一次写长篇博文,有诸多不足之处,排版问题、措辞问题等,欢迎批评指正。文中有不足、错误之处,请在评论区留言,谢谢!
来源:CSDN
作者:Masquerade2020
链接:https://blog.csdn.net/weixin_42414461/article/details/104632190