Hadoop 总结 四 配置集群
分析:
至少需要三台虚拟机(主机)(关闭防火墙,静态IP,主机名称)
需要安装好JDK,Hadoop,以及环境变量的配置
需要配置好集群
需要单点启动
需要节点间ssh配置
启动并测试集群
- 虚拟机准备
见前两章,并将hadoop103,hadoop104进行同样的配置
-
编写集群分发脚本
#scp 安全拷贝 方式 #语法:scp -r $pdir/$fname $user@hadoop$host:$pdir/$fname #例:在Hadoop102上将jdk和hadoop的安装文件直接拷贝到hadoop103上 scp -r /opt/module test@hadoop103:/opt/module #例:在hadoop103上将hadoop102节点上的安装文件拷贝到hadoop103上 scp -r test@hadoop102:/opt/module /opt/module #例:在hadoop103上将hadoop102的文件拷贝到hadoop104上 scp -r test@hadoop102:/opt/module/* test@hadoop104:/opt/module
#rsync 远程同步工具 #与scp的区别:rsyn复制文件速度比scp速度快,rsync只对差异的文件做复制覆盖,scp是把所有的文件统统复制过去重名的文件不管是否相同都会直接进行覆盖 #语法:rsync -av $pdir/$fname $user@hadoop$host:$pdir/$fname #举个栗子: rsync -av /opt/module test@hadoop103:/opt/module
群发脚本的分析
1.需要把文件及子目录全部进行复制
2.复制到目标主机需要在相同的目录下,如果不存在目录则创建相同的目录
3.如果有重复的文件则不进行覆盖,只对有更新或者差异的文件进行更新
4.希望test用户能在系统任何位置直接执行该脚本
脚本下载地址:
需要修改的内容:
将hadoop102-104更换为自己集群的主机名,有几个填几个,以空格分隔
其他:
1.将脚本放在家目录的bin文件夹下,如果没有bin文件夹则自己创建bin文件夹
cd ~
mkdir bin
2.将脚本命名,并赋予脚本可执行权限,以xsync为例
chmod +x xsync
3.将脚本复制到bin文件夹下,以便全局调用
sudo cp xsync /bin
4.测试脚本
xsync /home/test/bin
sudo xsync /home/test/bin
- 配置集群间ssh无密码登录
#基本语法:ssh ip或者ssh 在hosts中配置过过得主机映射名 ssh hadoop103
#1.ssh hadoop103 需要输入两次密码 所以在集群间配置ssh互相免密登录
#生成公钥和私钥
ssh -keygen -t rsa
#然后一直按回车键,进行确认
#将公钥拷贝到需要免密登录的主机(节点)上
ssh-copy-id hadoop102
ssh-copy-id hadoop103
ssh-copy-id hadoop104
...
注意:
需要在hadoop103上采用test账号配置一下无密登录到hadoop102、hadoop103、hadoop104服务器上。
需要在hadoop104上采用test账号配置一下无密登录到hadoop102、hadoop103、hadoop104服务器上。
需要在hadoop102上采用root账号,配置一下无密登录到hadoop102、hadoop103、hadoop104
ssh免密登录的原理
-
集群规划部署
NameNode和secondaryNameNode不要安装在同一台服务器上 resourceManager也很占用资源,不要和上面两个配置在同一台服务器上
集群部署设计
hadoop102 hadoop103 hadoop104 HDFS NameNode SecondaryNameNode HDFS DataNode DataNode DataNode YARN NodeManager NodeManager NodeManager YARN ResourceManager 1.由于内存16G只能支持这么多的虚拟机,所以只在三台虚拟机上进行配置
2.根据上面表格中的部署设计,去配置文件
3.hadoop中有默认的配置文件,也提供了可以自定义的配置文件,建议在自定义文件中进行配置集群,默认的配置文件不要修改
4.在hadoop目录下etc/hadoop/中有core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml
- hadoop3.x常用端口说明
Daemon | App | Hadoop2 | Hadoop3 |
---|---|---|---|
NameNode Port | Hadoop HDFS NameNode | 8020 / 9000 | 9820 |
Hadoop HDFS NameNode HTTP UI | 50070 | 9870 | |
Secondary NameNode Port | Secondary NameNode | 50091 | 9869 |
Secondary NameNode HTTP UI | 50090 | 9868 | |
DataNode Port | Hadoop HDFS DataNode IPC | 50020 | 9867 |
Hadoop HDFS DataNode | 50010 | 9866 | |
Hadoop HDFS DataNode HTTP UI | 50075 | 9864 |
-
配置文件
cd $HADOOP_HOME/etc/hadoop
如果集群机器不止三台 那么需要根据具体的部署设计进行修改以下的配置文件
-
核心文件 core-site.xml
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <!-- 指定NameNode的地址 --> <property> <name>fs.defaultFS</name> <value>hdfs://hadoop102:9820</value> </property> <!-- 指定hadoop数据的存储目录 --> <property> <name>hadoop.tmp.dir</name> <value>/opt/module/hadoop-3.1.3/data</value> </property> <!-- 配置HDFS网页登录使用的静态用户为atguigu --> <property> <name>hadoop.http.staticuser.user</name> <value>atguigu</value> </property> <!-- 配置该atguigu(superUser)允许通过代理访问的主机节点 --> <property> <name>hadoop.proxyuser.atguigu.hosts</name> <value>*</value> </property> <!-- 配置该atguigu(superUser)允许通过代理用户所属组 --> <property> <name>hadoop.proxyuser.atguigu.groups</name> <value>*</value> </property> <!-- 配置该atguigu(superUser)允许通过代理的用户--> <property> <name>hadoop.proxyuser.atguigu.groups</name> <value>*</value> </property> </configuration>
-
HDFS文件配置 hdfs-site.xml
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <!-- nn web端访问地址--> <property> <name>dfs.namenode.http-address</name> <value>hadoop102:9870</value> </property> <!-- 2nn web端访问地址--> <property> <name>dfs.namenode.secondary.http-address</name> <value>hadoop104:9868</value> </property> </configuration>
-
YARN配置文件 yarn-site.xml
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <!-- 指定MR走shuffle --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!-- 指定ResourceManager的地址--> <property> <name>yarn.resourcemanager.hostname</name> <value>hadoop103</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> <!-- yarn容器允许分配的最大最小内存 --> <property> <name>yarn.scheduler.minimum-allocation-mb</name> <value>512</value> </property> <property> <name>yarn.scheduler.maximum-allocation-mb</name> <value>4096</value> </property> <!-- yarn容器允许管理的物理内存大小 --> <property> <name>yarn.nodemanager.resource.memory-mb</name> <value>4096</value> </property> <!-- 关闭yarn对物理内存和虚拟内存的限制检查 --> <property> <name>yarn.nodemanager.pmem-check-enabled</name> <value>false</value> </property> <property> <name>yarn.nodemanager.vmem-check-enabled</name> <value>false</value> </property> </configuration>
-
MapReduce配置文件 mapred-site.xml
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <!-- 指定MapReduce程序运行在Yarn上 --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
-
-
分发配置文件到集群其他两台机器
xsync $HADOOP_HOME/etc/hadoop/ #进入hadoop103 hadoop104检查分发的配置文件文件是否成功
-
配置work
vim $HADOOP_HOME/etc/hadoop/workers #在文件中增加以下内容,不能包含多余的空格,空行 hadoop102 hadoop103 hadoop104
-
同步所有节点
xsync $HADOOP_HOME/etc/
-
启动集群
第一次启动集群: 需要在NameNode节点上格式化NameNode hdfs namenode -format
如果需要重新进行格式化NameNode: 1.先停止NameNode和DataNode进程,2.删除所有机器的data和logs目录再进行格式化
#格式化 hdfs namenode -format #启动HDFS $HADOOP_HOME/sbin/start-dfs.sh #在配置resourceManager (hadoop103) 启动YARN $HADOOP_HOME/sbin/start-yarn.sh
在web端查看HDFS的NameNode
浏览器中输入hadoop102:9870,查看HDFS文件数据信息
在web端查看YARN的resourceManeger
浏览器中输入hadoop103:8088,查看YARN的job
-
集群的基本测试
#上传文件 hadoop fs -mkdir /input hadoop fs -put ...(文件路径/文件名)
-
启动或者停止 (常用)
-
整体启动/停止hdfs
start-dfs.sh/stop-dfs.sh
-
整体启动停止YARN
start-yarn.sh/stop-yarn.sh
-