ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
[toc] ## 零 hadoop集群基础 hadoop是分布式大数据组件 : * 大数据 大数据是海量数据的处理和分析的技术,需要用分布式框架 * 分布式 分布式则是通过多个主机的进程协同在一起,构成整个应用 hadoop常用模块 * hdfs-分布式存储模块,使用了虚拟的文件系统,架构在Linux之上 * mapreduce-分布式计算模块 Hadoop三种集群模式 * 本地模式 单机模式,进程都不需要启动 * 伪分布式 在单机上启动多个hadoop实例组成伪集群的方式 * 完全分布式 在多个机器上安卓hadoop,组成真正的集群模式 ## 一 hadoop本地模式 ### 单机环境部署 **准备环境** ```sh mkdir -p /server/tools cd /server/tools #上传jdk和hadoop安装包 [root@hadoop-1 tools]# ll total 372880 -rw-r--r-- 1 root root 214092195 Nov 29 11:24 hadoop-2.7.3.tar.gz -rw-r--r-- 1 root root 167733100 Nov 29 11:24 jdk-8u121-linux-x64.rpm ``` **安装软件** ```sh #安装jdk软件 rpm -ivh jdk-8u121-linux-x64.rpm #安装hadoop tar xf hadoop-2.7.3.tar.gz -C /opt/ cd /opt/ ln -s hadoop-2.7.3/ hadoop cd /opt/hadoop/etc/ mv hadoop/ local cp -r hadoop/ pseudo cp -r hadoop/ full ln -s local/ hadoop #设置环境变量 [root@hadoop-1 ~]# tail -5 /etc/profile # ----java环境变量---- export JAVA_HOME=/usr/java/jdk1.8.0_121/ # ----hadoop环境变量---- export HADOOP_HOME=/opt/hadoop/ export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin [root@hadoop-1 ~]# source /etc/profile ``` **安装验证** ```sh [root@hadoop-1 ~]# java -version java version "1.8.0_121" ........ [root@hadoop-1 ~]# hadoop version Hadoop 2.7.3 ........ ``` ### 单机环境使用 单机环境部署好后,不需要启动hadoop,可以直接使用hadoop命令,hdfs和linux共用一套文件系统,用法如下: **建立测试数据** ```sh mkdir /test cd /test echo bbbb >b.txt ``` **操作数据** hdfs的文件操作,基本上就是在linux的命令前加上hdfs前缀,如:`hfds -dfs -CMD` ```sh #显示文件 hdfs dfs -ls # 查看文件 hdfs dfs -cat b.txt # 删除文件 hdfs dfs -rm b.txt # 创建目录 hdfs dfs -mkdir a.txt ``` ## 二 hadoop伪分布式 伪分布式和单机的区别,就是使用了另外一套配置文件而已 ### 伪分布式配置 **修改软连接** ```sh cd /opt/hadoop/etc/ ln -sf pseudo hadoop ``` **修改core-site文件** ``` cat >hadoop/core-site.xml <<EOF <?xml version="1.0"?> <configuration> <property> <name>fs.defaultFS</name> <value>hdfs://localhost/</value> </property> </configuration> EOF ``` **修改hdfs-site文件** ``` cat >hadoop/hdfs-site.xml <<EOF <?xml version="1.0"?> <configuration> <property> <name>dfs.replication</name> <value>1</value> </property> </configuration> EOF ``` **修改mapred-site文件** ``` cat >hadoop/mapred-site.xml <<EOF <?xml version="1.0"?> <configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration> EOF ``` **修改yarn-site文件** ``` cat >hadoop/yarn-site.xml <<EOF <?xml version="1.0"?> <configuration> <property> <name>yarn.resourcemanager.hostname</name> <value>localhost</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> </configuration> EOF ``` ### 伪分布式启动 **设置ssh免秘钥** ```sh ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa ssh-copy-id hadoop-1 ``` **初始化hdfs** ```sh hdfs namenode -format ``` **修改hadoop.set配置** ```sh #修改第25行的JAVA_HOME配置 sed -i "s#\(export JAVA_HOME=\).*#\1`echo $JAVA_HOME`#g" hadoop/hadoop-env.sh ``` 启动程序并验证 ```sh sh /opt/hadoop/sbin/start-all.sh [root@hadoop-1 etc]# jps ...... DataNode ...... ResourceManager ...... NodeManager ...... NameNode ...... SecondaryNameNode # 只要出现这5个程序,表示hadoop启动成功 #创建文件测试 [root@hadoop-1 etc]# hdfs dfs -mkdir /abcd ``` 浏览器验证 在浏览器输入`10.0.0.11:50070`进入hadoop的webUI页面,可以进行网页浏览操作 ## 三 hadoop完全分布式 完全分布式和伪分布式的区别是 * `NameNode` `SecondaryNameNode` `ResourceManager `三个服务放在管理节点上启动 * `NodeManager ` `DataNode`两个服务在所有数据节点上启动 * 需要再各配置文件中指定服务器信息 * master服务器到slave服务器的互信(ssh免密) ### 配置文件修改 **修改软连接** ```sh cd /opt/hadoop/etc/ ln -sf full hadoop ``` **修改slaves文件** ```sh cat >>hadoop/slaves <<EOF 10.0.0.12 10.0.0.13 10.0.0.14 EOF ``` **修改core-site文件** ``` cat >hadoop/core-site.xml <<EOF <?xml version="1.0" encoding="UTF-8"?> <configuration> <property> <name>fs.defaultFS</name> <value>hdfs://10.0.0.11:8020</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/home/centos/hadoop</value> </property> </configuration> EOF ``` **修改hdfs-site文件** ``` cat >hadoop/hdfs-site.xml <<EOF <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>dfs.replication</name> <value>3</value> </property> </configuration> EOF ``` **修改mapred-site文件** ``` cat >hadoop/mapred-site.xml <<EOF <?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration> EOF ``` **修改yarn-site文件** ``` cat >hadoop/yarn-site.xml <<EOF <?xml version="1.0"?> <configuration> <property> <name>yarn.resourcemanager.hostname</name> <value>10.0.0.11</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> </configuration> EOF ``` ### 互信和分发配置 **ssh互信** ```sh ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa ssh-copy-id hadoop@10.0.0.11 ssh-copy-id hadoop@10.0.0.12 ssh-copy-id hadoop@10.0.0.13 ssh-copy-id hadoop@10.0.0.14 ``` **分发配置** ```sh scp -r /opt/hadoop/etc/full /opt/hadoop/etc/hadoop hadoop@10.0.0.12:/opt/hadoop/etc/ scp -r /opt/hadoop/etc/full /opt/hadoop/etc/hadoop hadoop@10.0.0.13:/opt/hadoop/etc/ scp -r /opt/hadoop/etc/full /opt/hadoop/etc/hadoop hadoop@10.0.0.14:/opt/hadoop/etc/ ``` **格式化HDFS并启动hadoop** ```sh hdfs namenode -format sh /opt/hadoop/sbin/start-all.sh ``` **验证安装结果** ```sh # master上启动的服务 [root@hadoop-1 etc]# jps ...... NameNode ...... SecondaryNameNode ...... ResourceManager # slaves上启动的服务 [root@hadoop-2 etc]# jps ...... NodeManager ...... DataNode ```