环境:hadoop 3.1.1
jdk1.8
centos7.5
注意:hadoop3.1.1官方文档明确需要jdk1.7以上版本,但是jdk10以上的版本目录结构发生了变化,jre目录没有了,所以在第一次尝试jdk13时候好像没有启动,并不知道是配置的错误还是Hadoop不能用。
centos 7.5 中自带了jdk是1.8版本的,但是由于不太方便,所以选择重新安装,在这个过程中涉及到jdk环境变量的设置的问题,在这篇文档中一并给与解答,由于自己也是初次配置Hadoop集群,有很大地方还不是很明白,加上官方文档写的很简单,在搭建过程中参照了清华大学出版社,王雪迎的《Hadoop构建数据仓库实践》中的部分内容,将搭建的过程整理如下:
网络环境
使用的虚拟机搭建两个节点,一个master一个slave1
ip分别是192.168.56.101/24 192.168.56.102/24 static ip
1.增加host
分别在虚拟机/etc/hosts文件中增加
192.168.56.101 master
192.168.56.102 slave1
加入后重新登录linux终端,可以看到shell提示发生变化
[grid@master ~]$
2.增加用户(在所有虚拟机上操作)
[root@master grid]# useradd -d /home/grid -m grid #增加grid用户和目录
[root@master grid]# usermod -a -G root #加入root用户组
[root@master grid]# echo XXXXXXX|passwd grid --stdin
3.配置java环境(在所有虚拟机上操作)
下载jdk 本人下载的 jdk-8u231-linux-x64.tar.gz,使用root用户解压到/usr/local/目录下(根据个人情况定),而后修改/etc/profile文件(此文件开机系统自动读取,若改过之后立即生效可使用source命令)
#####java configure#######20191206######
export JAVA_HOME=/usr/local/jdk1.8.0_231
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
###这里一定确保上面的文件都有,而且目录准确
[root@master grid]# source /etc/profile
[root@master grid]# java -version
java version "1.8.0_231"
Java(TM) SE Runtime Environment (build 1.8.0_231-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.231-b11, mixed mode)
###表示java环境配置已经生效
4. 配置SSH免密登录(切换至grid用户)
在master/slave1上
##进入grid用户home目录
[grid@master grid]$ssh-keygen -t rsa
#然后一路回车,使用空字符串生成密钥
[grid@master grid]$ cd ~/.ssh/
[grid@master grid]$ ssh-copy-id 192.168.56.101
[grid@master grid]$ scp /home/grid/.ssh/authorized_keys 192.168.56.102:/home/grid/.ssh/
#上述拷贝密钥对的过程在每台主机上都要进行,确保每台主机上都有其他的密钥对,能够正常通信
[grid@master ~]$ ssh slave1
Last login: Sat Dec 7 23:13:52 2019 from master
Hadoop安装
确保自己登陆在grid用户下
1.准备工作
#在/home/grid目录下
[grid@master ~]$ tar -zxf hadoop-3.1.1.tar.gz
#解压出来的目录将作为我们hadoop的主目录,请确保/home有足够的空间
#建立工作目录,tmp、data 、hdfs和name
[grid@master ~]$ cd hadoop-3.1.1/
[grid@master ~]$ mkdir tmp hdfs hdfs/data hdfs/name
#这几个目录的说明在后面的配置文件中进行说明
2.修改配置文件
配置文件主要以xml文件形式存在,这也是java环境常用的数据存储格式,包括oracle数据库,也可以导成xml格式进行数据存储,包括core-site.xml核心配置文件,hdfs-site.xml hdfs存储的配置文件,yarn-site.xml 资源管理的配置文件,mapred-site.xml文件(mapreduce),以及最后的workers文件(在文中提到的书中使用的Hadoop是v2版本的,他使用的是slaves文件)
core-site.xml
目录 :/home/grid/hadoop-3.1.1/etc/hadoop
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://192.168.56.101:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/home/grid/hadoop-3.1.1/tmp</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
</configuration>
fs.defaultFS:默认文件系统名称,URL形式
hadoop.tmp.dir:临时文件目录
io.file.buffer.size:io文件缓冲区,是内存page(4K)大小的整数倍
hdfs-site.xml
<configuration>
<!-- dfs.namenode.name.dir namenode存储fsimage文件,文件会存储在每一个节点的目录上 -->
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/home/grid/hadoop-3.1.1/hdfs/name</value>
</property>
<!-- dfs.datanode.data.dir存储数据块,必须创建文件夹 -->
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/home/grid/hadoop-3.1.1/hdfs/data</value>
</property>
<!-- dfs.replication重复的份数 -->
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<!-- dfs.namenode.secondary.http-address secondarynamenode的服务地址,这个只有一个namenode在本机上配置,端口不一样,若有多个,填写另一个的地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>192.168.56.101:9001</value>
</property>
<!-- dfs.namenode.servicerpc-address HDFS通信的RPC地址,改参数必须设置,如果设置该值,备份节点、数据节点和其他服务将会连接到指定的位置-->
<property>
<name>dfs.namenode.servicerpc-address</name>
<value>192.168.56.101:10000</value>
</property>
<!-- dfs.webhdfs.enabled 这个就是开启webhdfs功能-->
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>
yarn-site.xml
<configuration>
<!-- yarn.nodemanager.aux-services Nodemanage上的附属服务,需要配置mapreduce_shuffle才能运行mapreduce-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<!-- yarn.resourcemanager.address resourcemanager的地址,客户端向这个地址发送命令,提交应用程序和杀死应用程序-->
<property>
<name>yarn.resourcemanager.address</name>
<value>192.168.56.101:8032</value>
</property>
<!-- scheduler的地址,客户端向这个地址发送命令,申请资源/释放资源-->
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>192.168.56.101:8030</value>
</property>
<!-- tracker的地址,客户端向这个地址发送命令,汇报心跳,领取任务-->
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>192.168.56.101:8031</value>
</property>
<!-- admin的地址,管理员通过这个地址向resourcemanager发送管理指令-->
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>192.168.56.101:8033</value>
</property>
<!-- webapp的地址,用户通过这个地址查看集群状态-->
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>192.168.56.101:8088</value>
</property>
<!-- NodeManager总的可用物理内存,不能小于1024-->
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>1024</value>
</property>
</configuration>
mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>192.168.56.101:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>192.168.56.101:19888</value>
</property>
</configuration>
workers
slave1
#有几个slave写几个
hadoop-env.sh
##增加,就是java环境的
export JAVA_HOME=/usr/local/jdk1.8.0_231
yarn-env.sh
##增加,就是java环境的
export JAVA_HOME=/usr/local/jdk1.8.0_231
至此,hadoop所有的配置文件完成,将hadoop这个包复制到每一个客户端上
/etc/profile最关键的一步,所有的主机都要执行
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HADOOP_HOME/lib
export HADOOP_HOME=/home/grid/hadoop-3.1.1
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_YARN_HOME=$HADOOP_HOME
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
export LD_LIBRARY_PATH=$HADOOP_HOME/lib/native
source /etc/profile
初始化及运行 master用户
[grid@master hadoop]$ hdfs namenode -format
[grid@master hadoop]$ start-dfs.sh
[grid@master hadoop]$ start-yarn.sh
image.png
检验
[grid@master hadoop]$ jps
5409 ResourceManager
4966 NameNode
8969 Jps
5164 SecondaryNameNode
[grid@slave1 ~]$ jps
2579 NodeManager
4713 Jps
2461 DataNode
问题解决
1.关于java error:priority的问题
因为之前安装过jdk13对相关包进行编译,有些内容在安装jdk8后出现错误,就是版本不一致的问题,需要重新将namenode上的配置文件进行复制。
2.关于多次format以及系统重启后无法启动datanode,或者datanode启动后启动yarn后自动停掉
自己排查的是因为HDFS文件clusterID对应不上,可以登录192.168.56.101:9870,检查clusterID,而后对应datanode中的/home/grid/hadoop-3.1.1/hdfs/data/current/VERSION文件中的
clusterID=CID-709cdb20-5a87-4231-bdeb-2bf0911bb8c0
image.png
网友评论