Hadoop 安装模式分为三种:
单机模式:单机模式下注意将备份数量设置为1,设置为3是没有意义的
伪分布式:没有测试
完全分布式:
完全分布式需要3台-3台以上的服务器,由NameNode进行控制多台DataNode。
网上的详细配置十分齐全,可以进行参考,但是每份参考文件的配置并不完全相同。
配置文件说明:
hadoop-env.xml:对文件的运行环境进行配置,hadoop是基于java的,所以同样需要JDK
core-site.xml:hadoop的核心配置文件,配置指定集群NameNode,设置hadoop公用变量,创建hadoop的临时目录等
hdfs-site.xml:分布式文件系统配置,包含对存储文件时的文件设置,比如副本数量。配置DataNode的本地路径,dataNode节点路径等。
yarn-site.xml:配置yarn,yarn用于管理分布式系统的CPU利用率,磁盘使用情况等。shuffle过程使用的执行器(可以使用不同的执行器,比如spark)
mapreduce-site.xml:配置数据计算框架(支持多种框架),JobTracker的主机主机端口,存储缓冲数据配置,历史服务器配置等
slaves:存储所有的主机IP
master:并不是所有的配置文件中都包含这个文件,放置NameNode节点的IP
配置规则:
1.JDK(1.8)
2.为你的计算机更名,当然这一步并不是必须的,你可以在每个文件需要IP的地方输入自己的IP
3.SSH免密登录.在hadoop多台机器需要数据交互,内部需要联通
4.hadoop(3.1)压缩包解压
5.hadoop/etc/hadoop 文件下拥有多个配置文件,其中包含上述文件(或者包含其临时文件)
5-1:core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<!-- hserver1为当前机器名或者ip号 -->
<value>hdfs://master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<!-- 以下为存放临时文件的路径 -->
<value>/data/local/hadoop/tmp</value>
</property>
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
</configuration>
5-2:hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.http-address</name>
<!-- master 修改为你的机器名或者ip -->
<value>master:50070</value>
</property>
<property>
<name>dfs.replication</name>
<!-- 备份次数 -->
<value>2</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/data/local/hadoop/hdfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/data/local/hadoop/hdfs/data</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
</configuration>
5-3:yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.resourcemanager.hostname</name>
<!-- 你的机器号或者ip -->
<value>master</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<!-- cpu个数 需要根据当前机器cpu设置 -->
<value>2</value>
</property>
<property>
<name>yarn.application.classpath</name> <value>$HADOOP_CONF_DIR,$HADOOP_COMMON_HOME/share/hadoop/common/*,$HADOOP_COMMON_HOME/share/hadoop/common/lib/*,$HADOOP_HDFS_HOME/share/hadoop/hdfs/*,$HADOOP_HDFS_HOME/share/hadoop/hdfs/lib/*,$HADOOP_YARN_HOME/share/hadoop/yarn/*,$HADOOP_YARN_HOME/share/hadoop/yarn/lib/*</value>
</property> <property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
</configuration>
4.mapreduce-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=/data/local/hadoop/hadoop-3.1.1</value>
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=/data/local/hadoop/hadoop-3.1.1</value>
</property>
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=/data/local/hadoop/hadoop-3.1.1</value>
</property>
</configuration>
5.workers
该文件中存放所有工作的节点,也就是datanode节点。
master
slave1
slave2
6./sbin/start-dfs.sh 和 /sbin/stop-dfs.sh
增加内容
HDFS_DATANODE_USER=root
HDFS_DATANODE_SECURE_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
7./sbin/start-yarn.sh 和 /sbin/stop-yarn.sh
增加内容
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
8.配置hadoop环境,该环境变量并不是必须的,配置之后能够直接使用hadoop命令进行hadoop系统的查看
打开linux系统下的 /etc/profile 文件
export HADOOP_HOME=/home/shang/soft/hadoop //使用自己hadoop的存储位置
export PATH=$HADOOP_HOME/bin:$PATH //注意这行数据最后放在所有数据最后的,以保证能够取得其中所引用的所有数据
配置完成后使文件立即生效,使用 sources 命令
8.hadoop系统格式化
当你HADOOP_NAME配置成功的时候,这个命令可以在linux系统的任意位置使用
命令如下: hadoop namenode -format (出现提问输入y)/ hdfs namenode -format 这两个命令都是可以的
9.hadoop文件夹下sbin目录下,使用 start-all.sh 启动整个hadoop分布式系统,如果配置了hadoop环境变量,能够直接在任何位置使用hadoop的启动命令
10.结果如下:通过java 包下的 jps命令
NameNode节点:
NameNode
ResourceManager
SecondaryNameNode
jps
所有的DataNode节点:
jps
DataNode
NodeManager
出现上述结果,配置正确。
11.测试hadoop:
11-1.尝试上传文件 hadoop fs -get 本地文件 上传路径
11-2:访问hadoop 的NameNode 50070(hdfs web访问端口)/8088端口(yarn访问端口)(前提是你没有在配置文件改变这些端口)
12.问题剖析:
12-1:启动是出现任何Exception 请检查配置文件
12-2:hadoop 命令不可用 检查HADOOP_NAME 环境变量
12-3:如果有多次format(格式化),删除为hadoop、data、name 创建的所有临时文件夹重新创建
12-4:没了,想不起来了