OpenEuler-Hadoop安装配置
服务器:华为TaiShan-200 (鲲鹏920) 2台
操作系统:OpenEuler_20.03LTS arm64
用户:root
集群规划:分布式
配置JAVA环境变量
所有节点都要配置
安装JAVA:
dnf install openjdk-8-jdk
找到安装路径:
update-alternatives --config java
例如:
设置环境变量:
vi /etc/profile
在文件末尾键入(注意JAVA_HOME的目录):
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.272.b10-7.oe1.aarch64 export JRE_HOME=$JAVA_HOME/jre export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib
保存生效:
source /etc/profile
由于其他因素(例如PATH被覆盖等问题),PATH可能在系统重启后失效,需要重新加载
具体参考:每次重启需要source /etc/profile的原因-环境变量_ningyanggege的博客-CSDN博客_/etc/profile 重启
主节点
下载Hadoop:
wget https://dlcdn.apache.org/hadoop/common/hadoop-3.3.1/hadoop-3.3.1-aarch64.tar.gz
官方地址:Apache Hadoop
hadoop-3.3.1-aarch64.tar.gz
:选择匹配的架构下载解压文件:
tar -zxvf hadoop-3.3.1-aarch64.tar.gz -C /opt/
/opt/
:此目录可自选解压后即可删除下载文件:
rm hadoop-3.3.1-aarch64.tar.gz
移动到解压的目录,重命名和修改用户权限
移动:
cd /opt/
重命名:
mv hadoop-3.3.1 hadoop
修改权限:
chown -R hadoop ./hadoop
(ROOT用户不必修改)设置环境变量:
vi /etc/profile
在文件末尾键入(注意HADOOP_HOME的目录):
export HADOOP_HOME=/opt/hadoop export CLASSPATH=$($HADOOP_HOME/bin/hadoop classpath):$CLASSPATH export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
保存生效:
source /etc/profile
部署配置文件修改:
修改文件中的**<configuration></configuration>**部分
node1,node2,端口,/opt/hadoop/data 请根据实际自行修改
core-site.xml
vi /opt/hadoop/etc/hadoop/core-site.xml
<configuration> <!--指定NameNode的地址--> <property> <name>fs.defaultFS</name> <!--主节点名:端口--> <value>hdfs://node1:8020</value> </property> <!--指定hadoop数据的存储目录--> <property> <name>hadoop.tmp.dir</name> <value>/opt/hadoop/data</value> </property> <!-- 配置 HDFS 网页登录使用的静态用户为 root (非必须,可以不要)--> <property> <name>hadoop.http.staticuser.user</name> <value>root</value> </property> </configuration>
Hadoop数据的存储目录可指定多个目录,用逗号隔开
经测试:namenode存放目录不可与datanode存放目录冲突,原因未知
hdfs-site.xml
vi /opt/hadoop/etc/hadoop/hdfs-site.xml
<configuration> <!--nn web端访问地址--> <property> <name>dfs.namenode.http-address</name> <value>ndoe1:9870</value> </property> <!--2nn web端访问地址--> <property> <name>dfs.namenode.secondary.http-address</name> <value>node2:9868</value> </property> <!-- 当集群结点小于等于3,写文件操作容易出错,所以添加以下内容 --> <property> <name>dfs.client.block.write.replace-datanode-on-failure.enable</name> <value>true</value> </property> <property> <name>dfs.client.block.write.replace-datanode-on-failure.policy</name> <value>NEVER</value> </property> <property> <name>dfs.client.block.write.replace-datanode-on-failure.best-effort</name> <value>false</value> </property> <!--hdfs 读写权限设定--> <property> <name>dfs.permissions.enabled</name> <value>false</value> <description> If "true", enable permission checking in HDFS. If "false", permission checking is turned off, but all other behavior is unchanged. Switching from one parameter value to the other does not change the mode, owner or group of files or directories. </description> </property> </configuration>
datanode默认存放目录同hadoop.tmp.dir
若需修改目录,在本文件插入如下文本:
<property> <name>dfs.datanode.data.dir</name> <value>/home/hadoop_tmp</value> </property>
多目录可用逗号隔开
yarn-site.xml
vi /opt/hadoop/etc/hadoop/yarn-site.xml
<configuration> <!--指定MR走shuffle --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!--指定ResourceManager的地址--> <property> <name>yarn.resourcemanager.hostname</name> <value>node2</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_MAPRED_HOME</value> </property> <!--开启日志聚集功能--> <property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property> <!--设置日志聚集服务器地址--> <property> <name>yarn.log.server.url</name> <value>http://node1:19888/jobhistory/logs</value> </property> <!--设置日志保留时间为7天--> <property> <name>yarn.log-aggregation.retain-seconds</name> <value>604800</value> </property> </configuration>
mapred-site.xml
vi /opt/hadoop/etc/hadoop/mapred-site.xml
<configuration> <!--指定MapReduce程序运行在Yarn上--> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <!--历史服务器端地址--> <property> <name>mapreduce.jobhistory.address</name> <value>node1:10020</value> </property> <!--历史服务器web端地址--> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>node1:19888</value> </property> </configuration>
添加JAVA_HOME路径至文件hadoop-env.sh,yarn-env.sh,mapred-env.sh
例如:
vi /opt/hadoop/etc/hadoop/hadoop-env.sh
添加节点主机名:
vi /opt/hadoop/etc/hadoop/workers
node1 node2
添加节点hosts映射(其他节点也进行修改):
vi /etc/hosts
192.168.1.10 node1 192.168.1.11 node2
根据实际情况自行修改:ip 节点名
ssh无密码访问
主节点生成公钥
cd ~/.ssh # 如果没有该目录,先执行一次ssh localhost rm ./id_rsa* # 删除之前生成的公匙(如果有) ssh-keygen -t rsa # 一直按回车就可以
传递公钥给其他节点:
scp ~/.ssh/id_rsa.pub root@node2:/root
非root用户将root改为其他用户名,注意传输文件的权限问题
scp文件传输指令:scp 需要传输的文件目录 远程用户名@远程ip:保存路径
其他节点授权公钥
mkdir ~/.ssh # 如果不存在该文件夹需先创建,若已存在则忽略 cat ~/id_rsa.pub >> ~/.ssh/authorized_keys rm ~/id_rsa.pub # 用完就可以删掉了
集群分发至其他节点(拷贝主节点Hadoop至其他节点)
参考教程使用rsync进行拷贝,本教程使用scp
scp 是 secure copy 的简写,用于在 Linux 下进行远程拷贝文件,类似于 cp 命令,不过 cp 只能在本机中拷贝。
rsync指令和scp的区别:前者只传差异文件,后者不论是否有差异都传。scp -r /opt/hadoop root@node2:/opt/
其他节点激活环境:
source /etc/profile
关闭防火墙或开放指定端口,配置路由端口映射(过程略)
初始化
bin/hdfs namenode -format
常用的启动、关闭服务的指令:
sbin/start-dfs.sh # 任意虚拟机均可执行 sbin/start-yarn.sh # 只能在node1中执行(yarn-site.xml文件中的配置决定) bin/mapred --daemon start historyserver # node1中执行 bin/mapred --daemon stop historyserver # node1中执行 sbin/stop-yarn.sh # 只能在node1中执行(yarn-site.xml文件中的配置决定) sbin/stop-dfs.sh # 任意虚拟机均可执行
初始化只需一次,重复初始化可能导致节点无法正常启动
类似问题参考:[DataNode节点无法启动问题解决方法 - 知乎 (zhihu.com)](https://zhuanlan.zhihu.com/p/340827380#:~:text=在Hadoop日常运维过程中,比较常见的一个问题就是DataNode节点无法启动。 无法启动的一个原因可能为,HDFS重复的进行格式化。 执行文件系统格式化时,会在NameNode节点的data目录(即配置文件中dfs.name.dir在本地系统的路径)中保存一个current%2FVERSION文件,记录当前的clusterID,标识了当前NameNode的版本。)
- 删除同配置文件中的hadoop.tmp.dir,dfs.datanode.data.dir等目录
- 或修改问题节点上述目录下的VERSION文件中的clusterID与NameNode中的一致
存在指令start-all.sh,但不建议使用
错误纠正
ERROR: Attempting to operate on hdfs namenode as root
参考:
在**start-dfs.sh,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两个文件顶部添加以下参数
YARN_RESOURCEMANAGER_USER=root HADOOP_SECURE_DN_USER=yarn YARN_NODEMANAGER_USER=root
注意所有节点都要修改