Hadoop 三种部署模式
前置准备资料
百度网盘:https://pan.baidu.com/s/1dVpeexyk1s-eneMCBaIlng?pwd=wjex 提取码: wjex
单机模式搭建
CentOS修改静态ip地址
查看默认路由,和网卡号
ip addr
当前ip地址为172.16.84.10
,网卡号为ens160
那么默认路由为172.16.84.2
在安装时也可以查看默认路由
切换root用户,修改如下文件:
vi /etc/sysconfig/network-scripts/ifcfg-ens160
TYPE=Ethernet
BOOTPROTO=static //static静态IP地址,dhcp动态IP地址
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
NAME=eno16777736
UUID=34bbe4fa-f0b9-4ced-828a-f7f7e1094e4a
DEVICE=eno16777736
ONBOOT=yes //将ONBOOT="no"改为ONBOOT="yes",开启网卡自动连接
PEERDNS=yes
PEERROUTES=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPADDR=192.168.179.3 //ip地址
NETMASK=255.255.255.0 //子网掩码
GATEWAY=192.168.179.2 //网关
DNS1=8.8.8.8 //修改DNS服务器
修改完成后 :wq!
保存退出(注意 在ipv4中 每一段最大只能0~255):
重启 network 服务:
service network restart
重新查看一下ip地址:
ip addr
使用sshl工具连接
关闭防火墙
Centos7默认安装了firewalld,如果没有安装的话,可以使⽤如下命令进⾏安装:
yum install firewalld firewalld-config
暂时启动/关闭防火墙:
启动防⽕墙:
systemctl start firewalld
禁⽤防⽕墙 :
systemctl stop firewalld
启动/关闭防火墙:
查看firewalld状态:
systemctl status firewalld #查看防火墙状态
显示running
,既防火墙开启了
关闭防火墙,关闭后重新查看:
systemctl start firewalld #打开防火墙
systemctl stop firewalld #关闭防火墙
systemctl status firewalld #查看防火墙状态
systemctl disable firewalld.service #关闭开机启动防火墙
systemctl enable firewalld.service #开机启动防火墙
常用端口放行 (放行8080端口,不需要则跳过):
firewall-cmd --zone=public --add-port=8080/tcp --permanent
重启防火墙:
firewall-cmd --reload
ssh免密登录
登录本机:
ssh localhost
按照以上的登陆方式:每次登陆都需要输入密码,很不方便,因此我们需要配置成SSH无密码登陆,更方便一点。具体操作如下:
输入 exit
命令退出之前的 ssh,回到我们原先的终端窗口,然后利用 ssh-keygen 生成密钥,并将密钥加入到授权中
exit # 退出之前的 ssh localhost
cd ~/.ssh/ # 若没有该目录,请先执行一次ssh localhost
ssh-keygen -t rsa # 会有提示,一直按回车即可
cat ./id_rsa.pub >> ./authorized_keys # 加入授权
chmod 600 authorized_keys # 更改文件权限
安装Java环境
连接SFTP
:
将下载好的JDK
、Hadoop
上传至/opt
切换/opt
cd /opt
将JDK
解压到/opt/softWare
tar -zxvf jdk-8u202-linux-arm64-vfp-hflt.tar.gz -C /opt/softWare
配置Java环境变量:
cd ~
vi ~/.bash_profile
打开文件后,在文件末尾处添加以下内容( jdk 版本根据个人安装版本进行填写),保存并退出:
export JAVA_HOME=/usr/jdk1.8.0_202 #替换为自己的JDK目录
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/bil/dt.jar:$JAVA_HOME/lib/tools.jar
使配置生效:
source ~/.bash_profile
查看Java版本:
java -version
安装Hadoop环境
切换目录/opt
:
cd /opt
将Hadoop解压到/opt/softWare
tar -zxvf hadoop-3.1.3.tar.gz -C /opt/softWare
配置Hadoop文件:
vi ~/.bash_profile
在后面添加如下内容:
export HADOOP_HOME=/opt/softWare/hadoop-3.1.3 #替换成自己的hadoop目录
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
完成后保存退出:wq!
使配置生效:
source ~/.bash_profile
查看Hadoop版本:
hadoop version
单机模式搭建
- Hadoop 默认模式为非分布式模式(本地模式),无需进行其他配置即可运行。即 Hadoop 安装成功后即可使用。我们可以执行一些例子来感受一下 Hadoop 的运行。Hadoop 附带了丰富的例子,运行以下命令可以看到所有例子,包括 wordcount、terasort、join、grep 等:
- 我们选择运行 grep 例子,我们将 input 文件夹中的所有文件作为输入,筛选其中符合正则表达式 dfs[a-z.]+ 的单词并统计单词出现的次数,然后将结果输出到 output 文件夹中,具体执行命令如下:
切换到hadoop目录:
cd /usr/local/hadoop-3.1.3
在当前目录下,创建input目录:
mkdir ./input
将配置文件作为输入复制到input目录下
cp ./etc/hadoop/*.xml ./input
运行实例:
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar grep ./input/ ./output 'dfs[a-z.]+'
查看运行结果:
cat ./output/*
在本地运行MapReduce
切换目录到/usr/local/hadoop-3.1.3
使HDFS目录成为执行MapReduce作业所需的目录:
bin/hdfs dfs -mkdir /user
bin/hdfs dfs -mkdir /user/<username>
将输入文件复制到分布式文件系统中:
bin/hdfs dfs -mkdir input
bin/hdfs dfs -put etc/hadoop/*.xml input
运行提供的一些示例:
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.4.jar grep input output 'dfs[a-z.]+'
检查输出文件:将输出文件从分布式文件系统复制到本地文件系统并检查它们:
bin/hdfs dfs -get output output
cat output/*
或
查看分布式文件系统上的输出文件:
bin/hdfs dfs -cat output/*
完成后,使用以下命令停止守护程序:
sbin/stop-dfs.sh
伪分布式搭建
接单机配置的文件
修改Hadoop文件
- Hadoop 可以在单节点上以伪分布式的方式运行,Hadoop 进程以分离的 Java 进程来运行,节点既作为 NameNode 也作为 DataNode,同时,其读取的是 HDFS 中的文件。
- Hadoop 的配置文件位于
/hadoop-3.1.3/etc/hadoop/
中,伪分布式需要修改 2 个配置文件core-site.xml
和hdfs-site.xml
。Hadoop的配置文件是 xml 格式,每个配置以声明 property 的 name 和 value 的方式来实现。
切换目录:
cd /opt/softWare/hadoop-3.1.3/
修改配置文件 core-site.xml
修改core-site文件:
vi ./etc/hadoop/core-site.xml
添加内容:
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/opt/softWare/hadoop-3.1.3/tmp</value>
</property>
</configuration>
注:
- 首先,hadoop.tmp.dir 是 hadoop文件系统依赖的基本配置,很多配置路径都依赖它,它的默认位置是在 /tmp/user下面,注意这是个临时目录!!!
- 因此,它的持久化配置很重要的! 如果选择默认,一旦因为断电等外在因素影响,/tmp/{$user}下的所有东西都会丢失,哇咔咔。。。趟过坑的应该知道多么酸爽。。。
配置 hadoop.tmp.dir 路径到持久化目录
修改配置文件 hdfs-site.xml
修改hdfs-site.xml:
vi ./etc/hadoop/hdfs-site.xml
添加内容:
<configuration>
<!--测试环境指定HDFS刮本的数量1-->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<!--任何⽤户都可以在 HDFS 中的任何位置创建/删除⽂件/⽬录-->
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
<!--是保存FsImage镜像的⽬录-->
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/opt/softWare/hadoop-3.1.3/tmp/dfs/name</value>
</property>
<!--是存放HDFS⽂件系统数据⽂件的⽬录-->
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/opt/softWare/hadoop-3.1.3/tmp/dfs/data</value>
</property>
</configuration>
注:
- 这是一个hadoop 权限问题hdfs-site.xml,dfs.permissions 是可用于启用/禁用 HDFS ACL(简单权限)的属性。将 dfs.permission 设置为 false 后,任何用户都可以在 HDFS 中的任何位置创建/删除文件/目录。
- dfs.namenode.name.dir是保存FsImage镜像的目录,作用是存放hadoop的名称节点namenode里的metadata
- dfs.datanode.data.dir是存放HDFS文件系统数据文件的目录,作用是存放hadoop的数据节点datanode里的多个数据块。
修改配置文件 hadoop-env.sh
修改 hadoop-env.sh:
添加JDK目录路径,大概54行左右
vi ./etc/hadoop/hadoop-env.sh
配置完之后,执行 NameNode 格式化
注意当前目录是/opt/softWare/hadoop-3.1.3
格式化文件系统:
./bin/hdfs namenode -format
看到successfuly formatted
,即成功格式化
启动 NameNode 守护程序和 DataNode 守护程序:
./sbin/start-dfs.sh
Hadoop守护程序日志输出被写入$HADOOP_LOG_DIR
目录(默认为$HADOOP_HOME/logs
)
浏览 NameNode 的 Web 界面;默认情况下,它位于:
- 名称节点
http://localhost:9870/
- localhost 替换成ip地址也可以访问
在单机伪分布式中运行MapReduce
方法是设置一些参数并另外运行 ResourceManager 守护程序和 NodeManager 守护进程。
切换目录/opt/softWare/hadoop-3.1.3
设置mapred:
vi etc/hadoop/mapred-site.xml
添加:
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.application.classpath</name>
<value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*</value>
</property>
</configuration>
设置yarn:
vi etc/hadoop/yarn-site.xml
添加:
<configuration>
<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>
</configuration>
启动资源管理器守护程序和节点管理器守护程序:
sbin/start-yarn.sh
浏览资源管理器的 Web 界面;默认情况下,它位于:
http://localhost:8088/
将localhost
替换成ip地址:
运行 MapReduce 作业,完成后,使用以下命令停止守护程序:
sbin/stop-yarn.sh
至此伪分布式已经搭建完成