环境准备
虚拟机学习方式(网络建议使用NAT进行联网)
时间同步
查看各个机器时间:date
同步时间
方法一:date -s "2021-09-09 11:00:01"
方法二:ntpdate cn.pool.ntp.org 采用网络时间,如果没有,采用yun install ntpdate安装
设置主机名(如果业务影响不能随便设置,记录好各个主机名)
# vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=node-1
# hostname yourhostname
或重启计算机reboot
配置IP、主机名映射(便于操作、维护等)
这里要特别注意,如果客户端运行机(就是操作hdfs的机器)上也要配置hosts,否则文件操作会失败!!!!!
# vi /etc/hosts
192.168.220.129 node-1
192.168.220.130 node-2
192.168.220.131 node-3
配置完成后使用ping命令进行测试:ping node-2
配置SSH免密登录(一般只需要配置主节点到从节点的免密登录即可)
# ssh-keygen -t rsa (四个回车,生成公钥和私钥)
# ssh-copy-id node-2 (拷贝公钥到各从节点)
配置完成后进行测试:ssh node-2查看是否能够跳转到node-2,exit退出node-2
配置防火墙
# service iptables status (查看防火墙状态)
# service iptables stop (关闭防火墙)
# chkconfig iptables off (关闭防火墙开机启动)
centeros7使用如下命令
# firewall-cmd --state (查看防火墙状态)
# systemctl start firewalld (开启防火墙)
# systemctl stop firewalld (关闭防火墙)
# systemctl disable firewalld (关闭防火墙开机启动)
如果是公网,一定注意不能关闭
JDK环境安装
# java -version 查看是否安装java,如果安装了openjdk,需要卸载
# rpm -qa|grep java 检索出来java包
# rpm -e --nodeps ***** 卸载
查找需要的jdk版本进行下载:https://www.oracle.com/java/technologies/javase-downloads.html
下载后解压:tar -zxvf jdk-8u131-linux-x64.tar.gz
修改环境变量:vim /etc/profile
export JAVA_HOME=/usr/java/jdk1.8.0_131
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH
export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
export PATH=$PATH:${JAVA_PATH}
检测是否成功:java -version
Hadoop安装
下载安装包:wget https://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-2.10.1/hadoop-2.10.1.tar.gz
也可以下载源码包,源码包需要自己进行编译打包,过程复杂,但能更好的适配到自己的环境,由于时间有限,这里不进行过多研究。
下载完成后解压到合适的目录
配置文件修改(在主节点机器上进行操作)
etc/hadoop/hadoop-env.sh
修改JAVA_HOME路径:export JAVA_HOME=/usr/java/jdk1.8.0_301/
etc/hadoop/core-site.xml
<configuration>
<!--文件系统,hdfs的namenode地址-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://node-1:9000</value>
</property>
<!--Hadoop运行时产生文件的存储目录,默认为/tmp/hadoop-***-->
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop_data</value>
</property>
</configuration>
hdfs-site.xml
<!-- 指定HDFS副本的数量-->
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>node-2:50090</value>
</property>
</configuration>
mv mapred-site.xml.template mapred-site.xml
<configuration>
<!-- 指定MR运行时框架,这里指定yarn,默认是local-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
yarn-site.xml
<configuration>
<!-- 指定ResourceManager地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>node-1</value>
</property>
<!-- 指定NodeManager上运行的附属服务。需配置成mapreduce_shuffle,才可运行MapReduce程序默认-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
slaves (写上从节点所在的主机名字)
node-1 node-2 node-3
将Hadoop添加到环境变量
# vim /etc/profile
export HADOOP_HOME = /usr/hadoop-2.10.1/
export PATH = $PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
# source /etc/profile
拷贝配置好的安装包及环境变量到其他机器上
# scp -r /usr/hadoop-2.10.1/ root@node-2:/usr/
# scp -r /etc/profile root@node-2:/etc/profile
# source /etc/profile (在其他机器上执行)
题外:
可以通过官网查看各个版本的说明,配置参数名称默认值等,如:
http://hadoop.apache.org/docs/r2.10.1/hadoop-project-dist/hadoop-common/release/2.10.1/RELEASENOTES.2.10.1.html
关于Hadoop的配置文件:
***-default.xml中配置了Hadoop默认的配置选项,如果用户没有更改,这里的选项将会生效。
***-site.xml中配置了用户需要自定义配置的选项
site中的配置选项优先级 > default中的,如果有配置,就会覆盖默认的配置选项。
Hadoop集群启动
格式化HDFS(只进行一次,首次启动之前需要进行格式化,本质是进行文件系统的初始化操作)
格式化操作在HDFS集群在主角色所在的机器中操作(namenode)
# hdfs namenode -format
脚本一键启动(安装目录下的sbin目录中:start-dfs.sh,start-yarn.sh,shop-dfs.sh,stop-dfs.sh)
[root@node-1 sbin]# start-dfs.sh
Starting namenodes on [node-1]
node-1: starting namenode, logging to /usr/hadoop-2.10.1/logs/hadoop-root-namenode-node-1.out
node-1: starting datanode, logging to /usr/hadoop-2.10.1/logs/hadoop-root-datanode-node-1.out
node-3: starting datanode, logging to /usr/hadoop-2.10.1/logs/hadoop-root-datanode-node-3.out
node-2: starting datanode, logging to /usr/hadoop-2.10.1/logs/hadoop-root-datanode-node-2.out
Starting secondary namenodes [node-2]
node-2: starting secondarynamenode, logging to /usr/hadoop-2.10.1/logs/hadoop-root-secondarynamenode-node-2.out
[root@node-1 sbin]# start-yarn.sh
starting yarn daemons
starting resourcemanager, logging to /usr/hadoop-2.10.1/logs/yarn-root-resourcemanager-node-1.out
node-3: starting nodemanager, logging to /usr/hadoop-2.10.1/logs/yarn-root-nodemanager-node-3.out
node-2: starting nodemanager, logging to /usr/hadoop-2.10.1/logs/yarn-root-nodemanager-node-2.out
node-1: starting nodemanager, logging to /usr/hadoop-2.10.1/logs/yarn-root-nodemanager-node-1.out
[root@node-1 sbin]# jps
51921 DataNode
52632 Jps
51754 NameNode
52318 NodeManager
52191 ResourceManager
说明:必须是配置了ssh免密登录以及slaves配置才能使用
单节点逐个启动
# hadoop-daemon.sh start namenode
# hadoop-daemon.sh start datanode
# yarn-daemon.sh start resourcemanager
# yarn-daemon.sh start nodemanager
启动后查看
http://192.168.220.129:50070
主页查看集群状体
主页中Utilities菜单中可以查看文件系统
yarn查看:
http://192.168.220.129:8088/
基础文件操作命令
[root@node-1 sbin]# hdfs dfs -mkdir /hello
[root@node-1 sbin]# hdfs dfs -ls /
Found 1 items
drwxr-xr-x - root supergroup 0 2021-09-08 22:44 /hello
[root@node-1 sbin]# hdfs dfs -put distribute-exclude.sh /hello
[root@node-1 sbin]# hdfs dfs -ls /hello
Found 1 items
-rw-r--r-- 2 root supergroup 2752 2021-09-08 22:47 /hello/distribute-exclude.sh
hadoop fs -rm -r -skipTrash /MR/vendor_name=HUAWEI/dt=20210915/MDT_202109151000.csv # 删除文件
hadoop fs -ls /tmp/data:查看/tmp/data目录
hadoop fs -cat /tmp/a.txt :查看 a.txt,与 -text 一样
hadoop fs -mkdir dir:创建目录dir
hadoop fs -rmr dir:删除目录dir
hdfs dfs -get /MR/HW/city=12505 /root/test; 获取文件