赞
踩
一、准备工作
1.服务器
准备 三台 linux服务器(node-01、node-02、node-03)
全部关闭防火墙:systemctl disable firewalld
全部关闭selinux:vim /etc/selinux/config 把SELINUX=enforcing 改为 SELINUX=disabled
1)ip映射(每台服务器都要执行如下操作)
执行命令: vim /etc/hosts , 文件末端加入如下内容,ip要修改成自己的
192.168.2.101 node-01
192.168.2.102 node-02
192.168.2.103 node-03
2)修改主机名
每台需要执行命令:vim /etc/sysconfig/network,修改如下内容
例如在node-02服务器上,修改为:HOSTNAME=node-02
2. 添加用户
node-01、node-02、node-03上都添加一个admin用户(针对hadoop创建的用户)
执行两个命令 1)adduser admin 2)passwd admin,完成密码修改
3.设置免密登录
注意:免密登录存在一个致命的问题,即免密登录过去后无法获取/etc/profile内的配置信息,所以记得配置hadoop-env.sh文件
创建秘钥=================================
node-01上执行命令:1)su admin 2) ssh-keygen -t dsa -P '' 3) cd /home/admin/.ssh/
4) ls -l , 查看到两个文件 id_dsa、id_dsa.pub 5) cat id_dsa.pub >> authorized_keys
6) scp id_dsa.pub node-02:$(pwd)/node-01.pub ; scp id_dsa.pub node-03:$(pwd)/node-01.pub
node-02上执行命令:1)su admin 2) ssh-keygen -t dsa -P '' 3) cd /home/admin/.ssh/
4) ls -l , 查看到两个文件 id_dsa、id_dsa.pub 5) cat id_dsa.pub >> authorized_keys
6) scp id_dsa.pub node-01:$(pwd)/node-01.pub ; scp id_dsa.pub node-03:$(pwd)/node-01.pub
node-03上执行命令:1)su admin 2) ssh-keygen -t dsa -P '' 3) cd /home/admin/.ssh/
4) ls -l , 查看到两个文件 id_dsa、id_dsa.pub 5) cat id_dsa.pub >> authorized_keys
6) scp id_dsa.pub node-01:$(pwd)/node-01.pub ; scp id_dsa.pub node-02:$(pwd)/node-01.pub
添加秘钥=================================
node-01上执行命令:1)su admin 2) cd /home/admin/.ssh/
3) ls -l , 多出来两个文件 node-02.pub、node-03.pub
4) cat node-02.pub >> authorized_keys ; cat node-03.pub >> authorized_keys
node-02上执行命令:1)su admin 2) cd /home/admin/.ssh/
3) ls -l , 多出来两个文件 node-01.pub、node-03.pub
4) cat node-01.pub >> authorized_keys ; cat node-03.pub >> authorized_keys
node-03上执行命令:1)su admin 2) cd /home/admin/.ssh/
3) ls -l , 多出来两个文件 node-01.pub、node-02.pub
4) cat node-01.pub >> authorized_keys ; cat node-02.pub >> authorized_keys
如果配置的免密登录不生效,可以从以下几点检查:
(1)、各节点~/.ssh目录及其目录下的文件权限:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/*
(2)、如果上述配置后还是不生效,检查/etc/ssh/sshd_config配置,然后执行systemctl restart sshd重启sshd服务:
时间同步=================================
yum install ntpdate
# 直接用域名同步中国上海时间 是阿里云的服务器
timedatectl set-timezone Asia/Shanghai
ntpdate ntp1.aliyun.com
# 查看一下时间是否变化
date -R
4. 下载
jdk-8u301-linux-x64.tar.gz、zookeeper3.7.0.tar.gz、hadoop-3.3.2.tar.gz
分别拷贝到node-01,node-02,node-03三台服务器的中
二、安装软件(3台linux服务做同样操作)
1. JDK
1)删除openjdk(没有可以忽略此步)
先在shell中执行 rpm -qa|grep jdk ,再执行 yum -y remove copy-jdk-configs-*
2)将 jdk-8u301-linux-x64.tar.gz拷贝到 /usr/local 目录中,并解压, tar -zxvf jdk-8u301-linux-x64.tar.gz
3)在shell中 执行 vim /etc/profile,将下面内容放入到文件最下面
# jdk 1.8
export JAVA_HOME=/usr/local/jdk1.8.0_301
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
4)创建软连接, 后续hadoop会用到
ln -s /usr/local/jdk1.8.0_301/bin/java /bin/java
2. Zookeeper
1)将 zookeeper3.7.0.tar.gz拷贝到 /opt 目录中,并解压, tar -zxvf zookeeper3.7.0.tar.gz
2)chown -R admin:admin /home/big_data/zookeeper-3.7.0/
3)在shell中 执行 vim /etc/profile,将下面内容放入到文件最下面
# zookeeper
export ZOOKEEPER_HOME=/home/big_data/zookeeper-3.7.0
export PATH=$PATH:$ZOOKEEPER_HOME/bin
4)执行 cp /home/big_data/zookeeper-3.7.0/conf/zoo_sample.cfg /home/big_data/zookeeper-3.7.0/conf/zoo.cfg,并修改其中内容,详细如下,修改dataDir的值,追加server.1 2 3
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/var/zookeeper/data
clientPort=2181
server.1=node-01:2888:3888
server.2=node-02:2888:3888
server.3=node-03:2888:3888
分别进入到每台的 /var/zookeeper/data 目录中,创建myid文件,写入对应的 1 、2、 3值
3. Hadoop安装及配置
首先登陆到node-01节点,登录用户 hadoop
1)将 hadoop-3.3.2.tar.gz拷贝到 /opt 目录中,并解压, tar -zxvf hadoop-3.3.2.tar.gz
2)配置环境变量
# hadoop 3.3.2
export HADOOP_HOME=/home/big_data/hadoop-3.3.2
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
3)cd /home/big_data/hadoop-3.3.2/etc/hadoop/,修改hadoop-env.sh、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml、workers
==================hadoop-env.sh
尾端追加:
export JAVA_HOME=/usr/local/jdk1.8.0_301
export HADOOP_HOME=/home/big_data/hadoop-3.3.2
export HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop
# 默认在/tmp目录下,linux会定期清理,如果不改,集群stop-all.sh 无法正常关闭
export HADOOP_PID_DIR=/var/hadoop/pid
# 设置hadoop内部应用的环境变量
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export HADOOP_YARN_HOME=$HADOOP_HOME
# 链接库的相关设置
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib:$HADOOP_COMMON_LIB_NATIVE_DIR"
export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native:$HADOOP_COMMON_LIB_NATIVE_DIR
==================core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<!-- 注意逻辑名不能带下划线“_” ,不然hdfs不能正常访问-->
<value>hdfs://dfs-cluster</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/var/hadoop/ha/data</value>
</property>
<property>
<name>hadoop.http.staticuser.user</name>
<value>admin</value>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>node-01:2181,node-02:2181,node-03:2181</value>
</property>
<!-- 伪装/代理成超级用户,后续hiveserver2会用到,这个会有安全问题,不用hive2可以不加 -->
<!-- 所有ip登录的所有用户都会被伪装成为hadoop的admin用户 -->
<property>
<name>hadoop.proxyuser.admin.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.admin.groups</name>
<value>*</value>
</property>
</configuration>
==================hdfs-site.xml
<configuration>
<property>
<name>dfs.nameservices</name>
<value>dfs-cluster</value>
</property>
<property>
<name>dfs.ha.namenodes.dfs-cluster</name>
<value>nn1,nn2, nn3</value>
</property>
<property>
<name>dfs.namenode.rpc-address.dfs-cluster.nn1</name>
<value>node-01:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.dfs-cluster.nn2</name>
<value>node-02:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.dfs-cluster.nn3</name>
<value>node-03:8020</value>
</property>
<property>
<name>dfs.namenode.http-address.dfs-cluster.nn1</name>
<value>node-01:9870</value>
</property>
<property>
<name>dfs.namenode.http-address.dfs-cluster.nn2</name>
<value>node-02:9870</value>
</property>
<property>
<name>dfs.namenode.http-address.dfs-cluster.nn3</name>
<value>node-03:9870</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://node-01:8485;node-02:8485;node-03:8485/dfs-cluster</value>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>${hadoop.tmp.dir}/jn</value>
</property>
<property>
<name>dfs.client.failover.proxy.provider.dfs-cluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/admin/.ssh/id_dsa</value>
</property>
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
</configuration>
==================mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.application.classpath</name> <value>$HADOOP_HOME/share/hadoop/common/*:$HADOOP_HOME/share/hadoop/common/lib/*:$HADOOP_HOME/share/hadoop/hdfs/*:$HADOOP_HOME/share/hadoop/hdfs/lib/*:$HADOOP_HOME/share/hadoop/mapreduce/*:$HADOOP_HOME/share/hadoop/mapreduce/lib/*:$HADOOP_HOME/share/hadoop/yarn/*:$HADOOP_HOME/share/hadoop/yarn/lib/*</value>
</property>
<!-- 下面两个属性是做sqoop2时追加的-->
<property>
<name>mapreduce.jobhistory.address</name>
<value>fireslate.cis.umac.mo:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>fireslate.cis.umac.mo:19888</value>
</property>
</configuration>
==================yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>
JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_HOME,PATH,LANG,TZ,HADOOP_MAPRED_HOME
</value>
</property>
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>yarn-cluster</value>
</property>
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>node-03</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>node-02</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address.rm1</name>
<value>node-03:8088</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address.rm2</name>
<value>node-02:8088</value>
</property>
<property>
<name>hadoop.zk.address</name>
<value>node-01:2181,node-02:2181,node-03:2181</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>2048</value>
</property>
<!-- 启用日志聚集功能 -->
<property>
<description>Whether to enable log aggregation</description>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 日志保存时间 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>-1</value>
</property>
<property>
<name>yarn.nodemanager.remote-app-log-dir</name>
<value>/logs/yarn</value>
</property>
</configuration>
==================workers
node-01
node-02
node-03
4)分发hadoop-3.3.2工程到node-02、node-03
执行如下3条命令:
cd /home;
scp -R /home/big_data/hadoop-3.3.2/ node-02:$(pwd) ;
scp -R /home/big_data/hadoop-3.3.2/ node-03:$(pwd)
三、启动软件(有序)
1. 启动zookeeper(过半成功)
在node-01、node-02、node-03 三台服务器上分别执行命令:
1) su hadoop 2) zkServer.sh start 3)jps 发现有 QuorumPeerMain 即成功
2.启动hadoop
1)启动Journalnode
在node-01、node-02、node-03 三台服务器上分别执行命令:hdfs --daemon start journalnode
全部执行完成后 通过jps命令查看有JournalNode,即成功
2)格式化Namenode
在node-01服务器上执行命令:
a)格式化:hdfs namenode -format
输出的日志倒数第10行左右的末尾,若有 ... has been successfully formated,即成功
b)启动:hdfs --daemon start namenode
在node-02、node-03两台服务器上执行命令:
c)同步数据:hdfs namenode -bootstrapStandby
输出的日志倒数第10行左右的末尾,若有 ... has been successfully formated,即成功
在node-02、node-03两台服务器上执行命令:
d)启动:hdfs --daemon start namenode
3)格式化zkfc
在node-01服务器上执行:
stop-all.sh
hdfs zkfc -formatZK
4)启动Datanode
在node-01、node-02、node-03 三台服务器上分别执行命令:hdfs --daemon start datanode
5)设置namenode主节点
在node-01服务器上执行命令:hdfs haadmin -transitionToActive nn1
注:也可以改成 nn2、nn3, 对应到hdfs-site.xml中dfs.ha.namenodes.mycluster 的某value值即可
另外,执行的时候可能会报错,改成 hdfs haadmin -transitionToActive --forcemanual nn1
主从设置命令:hdfs haadmin -transitionToActive / -transitionToStandby xxx
6)启动yarn集群
在node-01服务器上,执行命令:start-yarn.sh
7) 启动集群(上面的删除线部分忽略)
在node-01服务器上执行:start-all.sh
四、启动确认
进程:在任意一台的shell中执行命令- jps 或 jps -l,会出现如下进程
QuorumPeerMain
JournalNode
NameNode
DataNode
DFSZKFailoverController
ResourceManager
NodeManager
namenode:node-01:9870 、node-02:9870、node-03:9870 两台为standby、一台为active
yarn:node-02:8088、node-03:8088,因为yarn的resourcemanager只配置两台,node-02、03
五、测试确认
创建文件夹:hdfs dfs -mkdir -p /word/count
本地创建一个 word.txt文件,上传:hdfs dfs -put word.txt /word/count
cd $HADOOP_HOME/share/hadoop/
六、总结
hdfs启动:start-dfs.sh
hdfs关闭:stop-dfs.sh
yarn启动:start-yarn.sh
yarn关闭:stop-yarn.sh
启动全部:start-all.sh
关闭全部:stop-all.sh
单节点启动:hadoop-daemon.sh start xxx; hdfs --daemon start xxx;
yarn --daemon start resourcemanager / nodemanager
hadoop dfs、hadoop fs和hdfs dfs的区别_SunnyZ-L的博客-CSDN博客_hdfs命令和hadoop命令的区别
太晚了,先睡觉啦 ... 抽空进行细节完善。
# jdk 1.8
export JAVA_HOME=/usr/local/jdk1.8.0_301
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
# zookeeper
export ZOOKEEPER_HOME=/home/big_data/zookeeper-3.7.0
export PATH=$PATH:$ZOOKEEPER_HOME/bin
# hadoop 3.3.2
export HADOOP_HOME=/home/big_data/hadoop-3.3.2
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
# hbase 2.4.11
export HBASE_HOME=/home/big_data/hbase-2.4.11
export PATH=$PATH:$HBASE_HOME/bin
# hive 3.1.3
export HIVE_HOME=/home/big_data/hive-3.1.3
export PATH=$PATH:$HIVE_HOME/bin
# spark 3.2.1
export SPARK_HOME=/home/big_data/spark-3.2.1
# 先不配置path
export PATH=$PATH:$SPARK_HOME/bin
# scala 2.13.8, spark3.2.1的构建版本
export SCALA_HOME=/usr/local/scala-2.13.8
export PATH=$PATH:$SCALA_HOME/bin
常见问题:
Hadoop停止yarn集群时WARNING: nodemanager did not stop gracefully after 5 seconds - 知乎
# hadoop classpath
编辑 yarn-site.xml
# vim yarn-site.xml
- <configuration>
- <property>
- <name>yarn.application.classpath</name>
- <value>输入刚才返回的Hadoop classpath路径</value>
- </property>
- </configuration>
yarn查看日志方式
yarn application -list -appStates ALL
yarn logs -applicationId xxxx
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。