Hadoop运行模式
[TOC]
Hadoop运行模式 Hadoop运行模式包括:本地模式
、伪分布式模式
以及完全分布式模式
。
Hadoop官方网站
全文内容在atguigu
用户登录模式进行,命令执行根目录为/opt/module/hadoop-2.7.2
本地运行模式 官方Grep案例 Standalone Operation By default, Hadoop is configured to run in a non-distributed mode, as a single Java process. This is useful for debugging. The following example copies the unpacked conf directory to use as input and then finds and displays every match of the given regular expression. Output is written to the given output directory.
默认情况下,Hadoop被配置为以非分布式模式运行,作为单个Java进程。这对于调试非常有用。 下面的示例复制解压缩的conf目录以用作输入,然后查找并显示给定正则表达式的每个匹配项。输出被写到给定的输出目录。
1 2 3 4 $ mkdir input $ cp etc/hadoop/*.xml input $ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.1.jar grep input output 'dfs[a-z.]+' $ cat output/*
实操 1 $ cd /opt/module/hadoop-2.7.2/
创建在hadoop-2.7.2文件下面创建一个input文件夹
1 $ cp etc/hadoop/*.xml input
1 2 3 4 5 6 7 8 $ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar grep input output 'dfs[a-z.]+' $ cd output $ ll 总用量 4 -rw-r--r--. 1 atguigu atguigu 11 7月 24 22:41 part-r-00000 -rw-r--r--. 1 atguigu atguigu 0 7月 24 22:41 _SUCCESS
官方WordCount案例 1 $ cd /opt/module/hadoop-2.7.2/
创建在hadoop-2.7.2文件下面创建一个wcinput文件夹
大数据全部需要输出输路径
在wcinput文件下创建一个wc.input文件
1 2 $ cd wcinput $ touch wc.input
在文件中输入如下内容
1 2 3 4 5 6 hadoop yarn hadoop mapreduce atguigu atguigu `Esc` :wq
回到Hadoop目录/opt/module/hadoop-2.7.2
1 $ cd /opt/module/hadoop-2.7.2/
1 $ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount wcinput wcoutput
1 2 3 4 5 6 7 8 9 10 11 12 $ ll 总用量 4 -rw-r--r--. 1 atguigu atguigu 38 7月 24 22:50 part-r-00000 -rw-r--r--. 1 atguigu atguigu 0 7月 24 22:50 _SUCCESS $ cat wcoutput/part-r-00000 atguigu 2 hadoop 2 mapreduce 1 yarn 1
伪分布式模式 所有配置是按照集群搭建的,只有1台服务器。用于学习和简单测试。
Pseudo-Distributed Operation-官网指南 Hadoop can also be run on a single-node in a pseudo-distributed mode where each Hadoop daemon runs in a separate Java process.
Hadoop还可以以伪分布式模式在单节点上运行,其中每个Hadoop守护进程在单独的Java进程中运行。
Use the following:
etc/hadoop/core-site.xml :
1 2 3 4 5 6 <configuration > <property > <name > fs.defaultFS</name > <value > hdfs://localhost:9000</value > </property > </configuration >
etc/hadoop/hdfs-site.xml :
1 2 3 4 5 6 <configuration > <property > <name > dfs.replication</name > <value > 1</value > </property > </configuration >
Now check that you can ssh to the localhost without a passphrase: 现在检查是否可以在不使用口令的情况下ssh到本地主机:
If you cannot ssh to localhost without a passphrase, execute the following commands: 如果没有口令就不能ssh到本地主机,请执行以下命令:
1 2 3 $ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa $ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys $ chmod 0600 ~/.ssh/authorized_keys
The following instructions are to run a MapReduce job locally. If you want to execute a job on YARN, see YARN on Single Node. 下面的说明用于在本地运行MapReduce作业。如果要在纱线上执行作业,请参阅单节点上的YARN。
Format the filesystem: 格式文件系统:
1 $ bin/hdfs namenode -format
Start NameNode daemon and DataNode daemon: 启动NameNode守护进程和DataNode守护进程:
The hadoop daemon log output is written to the $HADOOP_LOG_DIR
directory (defaults to $HADOOP_HOME/logs
).
Browse the web interface for the NameNode; by default it is available at: 浏览web界面找到NameNode;默认情况下可在:
NameNode - http://localhost:9870/
Make the HDFS directories required to execute MapReduce jobs: 创建执行MapReduce作业所需的HDFS目录:
1 2 $ bin/hdfs dfs -mkdir /user $ bin/hdfs dfs -mkdir p/user/<username>
Copy the input files into the distributed filesystem: 将输入文件复制到分布式文件系统:
1 2 $ bin/hdfs dfs -mkdir input $ bin/hdfs dfs -put etc/hadoop/*.xml input
Run some of the examples provided: 运行提供的一些示例:
1 $ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.1.jar grep input output 'dfs[a-z.]+'
Examine the output files: Copy the output files from the distributed filesystem to the local filesystem and examine them: 检查输出文件:将分布式文件系统的输出文件复制到本地文件系统,检查:
1 2 $ bin/hdfs dfs -get output output $ cat output/*
or
View the output files on the distributed filesystem: 查看分布式文件系统的输出文件:
1 $ bin/hdfs dfs -cat output/*
When you’re done, stop the daemons with: 当你完成时,停止守护进程:
You can run a MapReduce job on YARN in a pseudo-distributed mode by setting a few parameters and running ResourceManager daemon and NodeManager daemon in addition. 通过设置一些参数并另外运行ResourceManager守护进程和NodeManager守护进程,您可以在YARN上以伪分布式模式运行MapReduce作业。
The following instructions assume that 1. ~ 4. steps of the above instructions are already executed.
Configure parameters as follows:
etc/hadoop/mapred-site.xml :
1 2 3 4 5 6 7 8 9 10 <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 >
etc/hadoop/yarn-site.xml :
1 2 3 4 5 6 7 8 9 10 <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_MAPRED_HOME</value > </property > </configuration >
Start ResourceManager daemon and NodeManager daemon: 启动ResourceManager守护进程和NodeManager守护进程:
Browse the web interface for the ResourceManager; by default it is available at: 浏览ResourceManager的网页界面;默认情况下可在:
ResourceManager - http://localhost:8088/
Run a MapReduce job.运行一个MapReduce作业。
When you’re done, stop the daemons with: 当你完成时,停止守护进程:
配置代码直接复制粘贴即可。
启动HDFS并运行MapReduce程序 分析
配置集群
启动、测试集群增、删、查
执行WordCount案例
1. 配置集群
Linux系统中获取JDK的安装路径:
1 2 $ echo $JAVA_HOME /opt/module/jdk1.8.0_144
修改JAVA_HOME 路径:
1 2 3 $ vim etc/hadoop/hadoop-env.sh export JAVA_HOME=/opt/module/jdk1.8.0_144
1 $ vim etc/hadoop/core-site.xml
1 2 3 4 5 6 7 8 9 10 11 <property > <name > fs.defaultFS</name > <value > hdfs://hadoop100:9000</value > </property > <property > <name > hadoop.tmp.dir</name > <value > /opt/module/hadoop-2.7.2/data/tmp</value > </property >
hdfs可以设置主机名和端口号 默认hadoop.tmp.dir /tmp/hadoop-${user.name},要改变目录
1 $ vim etc/hadoop/hdfs-site.xml
1 2 3 4 5 <property > <name > dfs.replication</name > <value > 1</value > </property >
可以不配置,默认副本数是3。 本机只有一份,当增加节点的时候,自动向其他节点备份。
2.启动集群
(1)格式化NameNode (第一次启动时格式化,以后就不要总格式化)
1 $ bin/hdfs namenode -format
如果提示重新格式化,一定是数据没有清除掉,需要删除data和log文件夹。
所有启动命令都在sbin
1 2 3 $ sbin/hadoop-daemon.sh start namenode starting namenode, logging to /opt/module/hadoop-2.7.2/logs/hadoop-atguigu-namenode-hadoop100.out
1 2 3 $ sbin/hadoop-daemon.sh start datanode starting datanode, logging to /opt/module/hadoop-2.7.2/logs/hadoop-atguigu-datanode-hadoop100.out
3.查看集群
1 2 3 4 5 $jps 3875 NameNode 3972 DataNode 4045 Jps
jps
是JDK中的命令,不是Linux命令。不安装JDK不能使用jps
浏览器输入本机ip:50070
,如192.168.228.100:50070
http://192.168.228.100:50070/dfshealth.html#tab-overview
1 $ bin/hdfs dfs -mkdir -p /user/atguigu/input
在遇到Bug时,经常根据日志提示信息去分析问题、解决Bug。
当前目录:/opt/module/hadoop-2.7.2/logs
1 2 3 4 5 6 7 8 9 10 11 12 $ cd /opt/module/hadoop-2.7.2/logs/$ ll 总用量 96 -rw-rw-r--. 1 atguigu atguigu 26004 7月 25 00:20 hadoop-atguigu-datanode-hadoop100.log -rw-rw-r--. 1 atguigu atguigu 718 7月 24 23:43 hadoop-atguigu-datanode-hadoop100.out -rw-rw-r--. 1 atguigu atguigu 49270 7月 25 00:20 hadoop-atguigu-namenode-hadoop100.log -rw-rw-r--. 1 atguigu atguigu 5007 7月 24 23:56 hadoop-atguigu-namenode-hadoop100.out -rw-rw-r--. 1 atguigu atguigu 785 7月 24 23:39 hadoop-atguigu-namenode-hadoop100.out.1 -rw-rw-r--. 1 atguigu atguigu 0 7月 24 23:39 SecurityAuth-atguigu.audit $ cat hadoop-atguigu-datanode-hadoop101.log
web端也可以查看。
(4)思考:为什么不能一直格式化NameNode,格式化NameNode,要注意什么?
1 2 3 4 5 6 7 8 9 $ cd data/tmp/dfs/name/current/$ cat VERSIONclusterID=CID-7a74910c-94d8-4b2a-889e-177f9d474dd5 $ cd data/tmp/dfs/data/current/$ cat VERSIONclusterID=CID-7a74910c-94d8-4b2a-889e-177f9d474dd5
格式化NameNode,会产生新的集群id,导致NameNode和DataNode的集群id不一致,集群找不到已往数据。 格式NameNode时,一定要先删除DataNode里面的信息(默认在/tmo,如果配置了该目录,删除指定文件夹)数据和log日志,然后再格式化NameNode。
4.操作集群
(1)在HDFS文件系统上创建一个input文件夹
1 $ bin/hdfs dfs -mkdir -p /user/atguigu/input
1 $ bin/hdfs dfs -put wcinput/wc.input /user/atguigu/input/
1 2 $ bin/hdfs dfs -ls /user/atguigu/input/ $ bin/hdfs dfs -cat /user/atguigu/ input/wc.input
1 $ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/atguigu/input/ /user/atguigu/output
路径为hdfs上的路径
命令行查看:
1 2 3 4 5 6 $ bin/hdfs dfs -cat /user/atguigu/output/* atguigu 2 hadoop 2 mapreduce 1 yarn 1
浏览器查看:
1 $ hdfs dfs -get /user/atguigu/output/part-r-00000 ./wcoutput/
1 $ hdfs dfs -rm -r /user/atguigu/output
启动YARN并运行MapReduce程序 分析
配置集群在YARN上运行MR
启动、测试集群增、删、查
在YARN上执行WordCount案例
1. 配置集群
Linux系统中获取JDK的安装路径:
1 2 $ echo $JAVA_HOME /opt/module/jdk1.8.0_144
修改JAVA_HOME 路径:
1 2 3 $ vim etc/hadoop/yarn-env.sh export JAVA_HOME=/opt/module/jdk1.8.0_144
1 $ vim etc/hadoop/yarn-site.xml
1 2 3 4 5 6 7 8 9 10 11 <property > <name > yarn.nodemanager.aux-services</name > <value > mapreduce_shuffle</value > </property > <property > <name > yarn.resourcemanager.hostname</name > <value > hadoop100</value > </property >
1 2 3 $ vim etc/hadoop/mapred-env.sh export JAVA_HOME=/opt/module/jdk1.8.0_144
配置一下JAVA_HOME
(4)配置:mapred-site.xml
(mapred-site.xml.template
重新命名)
1 2 $ mv mapred-site.xml.template mapred-site.xml $ vim mapred-site.xml
1 2 3 4 5 <property > <name > mapreduce.framework.name</name > <value > yarn</value > </property >
mapreduce.framework.name默认在local运行。
2. 启动集群
(1)启动前必须保证NameNode和DataNode已经启动
(2)启动ResourceManager
1 2 3 $ sbin/yarn-daemon.sh start resourcemanager starting resourcemanager, logging to /opt/module/hadoop-2.7.2/logs/yarn-atguigu-resourcemanager-hadoop100.out
1 2 3 $ sbin/yarn-daemon.sh start nodemanager starting nodemanager, logging to /opt/module/hadoop-2.7.2/logs/yarn-atguigu-nodemanager-hadoop100.out
3. 集群操作
浏览器输入本机ip:8088
,如192.168.228.100:8088
http://192.168.228.100:8088/cluster
1 $ bin/hdfs dfs -rm -r /user/atguigu/output
1 $ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/atguigu/input /user/atguigu/output
1 bin/hdfs dfs -cat /user/atguigu/output/*
配置历史服务器 为了查看程序的历史运行情况,需要配置一下历史服务器。具体配置步骤如下:
1.配置mapred-site.xml
1 $ vim etc/hadoop/mapred-site.xml
在该文件里面增加如下配置。
1 2 3 4 5 6 7 8 9 10 <property > <name > mapreduce.jobhistory.address</name > <value > hadoop100:10020</value > </property > <property > <name > mapreduce.jobhistory.webapp.address</name > <value > hadoop100:19888</value > </property >
2.启动历史服务器 1 2 3 $ sbin/mr-jobhistory-daemon.sh start historyserver starting historyserver, logging to /opt/module/hadoop-2.7.2/logs/mapred-atguigu-historyserver-hadoop100.out
3.查看历史服务器是否启动 1 2 3 4 5 6 7 8 $ jps 5505 JobHistoryServer 3875 NameNode 3972 DataNode 5624 Jps 4670 ResourceManager 4911 NodeManager
4.查看JobHistory 此时回到yarn页面时候点击history可以进入查看到历史界面。
http://192.168.228.100:19888/jobhistory
配置日志的聚集 日志聚集概念:应用运行完成以后,将程序运行日志信息上传到HDFS系统上。 日志聚集功能好处:可以方便的查看到程序运行详情,方便开发调试。
开启日志聚集功能,需要重新启动NodeManager 、ResourceManager和HistoryManager。
开启日志聚集功能具体步骤如下:
1.关闭NodeManager 、ResourceManager和HistoryManager 1 2 3 4 5 6 7 8 $ sbin/yarn-daemon.sh stop resourcemanager $ sbin/yarn-daemon.sh stop nodemanager $ sbin/mr-jobhistory-daemon.sh stop historyserver $ jps 5793 Jps 3875 NameNode 3972 DataNode
2.配置yarn-site.xml 1 $ vim etc/hadoop/yarn-site.xml
在该文件里面增加如下配置。
1 2 3 4 5 6 7 8 9 10 <property > <name > yarn.log-aggregation-enable</name > <value > true</value > </property > <property > <name > yarn.log-aggregation.retain-seconds</name > <value > 604800</value > </property >
yarn.log-aggregation-enable默认是flase关闭。 日志保留时间是按秒数计算的。
3.启动NodeManager 、ResourceManager和HistoryManager 1 2 3 $ sbin/yarn-daemon.sh start resourcemanager $ sbin/yarn-daemon.sh start nodemanager $ sbin/mr-jobhistory-daemon.sh start historyserver
4.删除HDFS上已经存在的输出文件 1 $ bin/hdfs dfs -rm -r /user/atguigu/output
5.执行WordCount程序 1 $ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/atguigu/input /user/atguigu/output
6.查看日志 http://hadoop100:19888/jobhistory
7.杀死job 查看当前正在执行的进程:
执行杀死进程的命令:
1 $ hadoop job -kill job_1595621119100_0002
如果正确执行,则系统提示:
Killed job job_201212111628_11166
8.删除application 1 2 3 bin/yarn application -kill <applicationId> bin/yarn application -kill application_1595621119100_0001
配置文件的说明 Hadoop配置文件分两类:默认配置文件和自定义配置文件,只有用户想修改某一默认配置值时,才需要修改自定义配置文件,更改相应属性值。
默认配置文件
要获取的默认文件
文件存放在Hadoop的jar包中的位置
core-default.xml
hadoop-common-2.7.2.jar/ core-default.xml
hdfs-default.xml
hadoop-hdfs-2.7.2.jar/ hdfs-default.xml
yarn-default.xml
hadoop-yarn-common-2.7.2.jar/ yarn-default.xml
mapred-default.xml
hadoop-mapreduce-client-core-2.7.2.jar/ mapred-default.xml
官网可以获得默认配置信息https://hadoop.apache.org/docs/r2.7.2/
自定义配置文件 core-site.xml
、hdfs-site.xml
、yarn-site.xml
、mapred-site.xml
四个配置文件存放在$HADOOP_HOME/etc/hadoop
这个路径上,用户可以根据项目需求重新进行修改配置。
完全分布式运行模式※ 分析
准备3台客户机(关闭防火墙、静态ip、主机名称)
安装JDK
环境变量
安装Hadoop
配置环境变量
配置集群
单点启动
配置ssh
群起
测试集群
jps不能用可能是因为java_home或者没有source。echo $PATH
查看路径
虚拟机准备 克隆虚拟机,见Hadoop环境搭建
复制虚拟机需要改ip和主机名
1 2 3 4 5 6 7 8 $ vim /etc/udev/rules.d/70-persistent-net.rules $ vim /etc/sysconfig/network-scripts/ifcfg-eth0 $ vim /etc/sysconfig/network $ vim /etc/hosts hadoop102 192.168.228.102 hadoop103 192.168.228.103 hadoop104 192.168.228.104
编写集群分发脚本xsync
scp(secure copy)安全拷贝 scp定义 scp可以实现服务器与服务器之间的数据拷贝。(from server1 to server2)
基本语法 1 2 $ scp -r $pdir /$fname $user @hadoop$host :$pdir /$fname 命令 递归 要拷贝的文件路径/名称 目的用户@主机:目的路径/名称
案例实操
在hadoop100上,将hadoop100中/opt/module目录下的软件拷贝到hadoop102上。
1 [atguigu@hadoop100 /]$ scp -r /opt/module root@hadoop102:/opt/module
opt是root用户所有目录,别的用户没有权限写入,所以目标用户需要写入,修改拷贝目标位置权限。
在hadoop103上,将hadoop100服务器上的/opt/module目录下的软件拷贝到hadoop103上。
1 [atguigu@hadoop103 opt]$ sudo scp -r atguigu@hadoop100:/opt/module root@hadoop103:/opt/module
在hadoop103上操作将hadoop100中/opt/module目录下的软件拷贝到hadoop104上。
1 [atguigu@hadoop103 opt]$ scp -r atguigu@hadoop100:/opt/module root@hadoop104:/opt/module
拷贝过来的/opt/module目录,别忘了在hadoop102、hadoop103、hadoop104上修改所有文件的,所有者和所有者组。
1 $ sudo chown atguigu:atguigu -R /opt/module
将hadoop100中/etc/profile文件拷贝到hadoop102的/etc/profile上。
1 [atguigu@hadoop100 ~]$ sudo scp /etc/profile root@hadoop102:/etc/profile
将hadoop100中/etc/profile文件拷贝到hadoop103的/etc/profile上。
1 [atguigu@hadoop100 ~]$ sudo scp /etc/profile root@hadoop103:/etc/profile
将hadoop100中/etc/profile文件拷贝到hadoop104的/etc/profile上。
1 [atguigu@hadoop100 ~]$ sudo scp /etc/profile root@hadoop104:/etc/profile
同样拷贝software文件夹,并更改atguigu权限。
拷贝过来的配置文件别忘了source一下/etc/profile
。
rsync 远程同步工具 rsync主要用于备份和镜像。 具有速度快、避免复制相同内容和支持符号链接的优点。
rsync和scp区别:用rsync做文件的复制要比scp的速度快,rsync只对差异文件做更新。scp是把所有文件都复制过去。
基本语法 1 2 $ rsync -rvl $pdir /$fname $user @hadoop$host :$pdir /$fname 命令 选项参数 要拷贝的文件路径/名称 目的用户@主机:目的路径/名称 选项参数说明
选项
功能
-r
递归
-v
显示复制过程
-l
拷贝符号连接
案例实操
把hadoop100机器上的/opt/software目录同步到hadoop102服务器的root用户下的/opt/目录
1 $ sudo rsync -rvl /opt/software/ root@hadoop102:/opt/software
xsync集群分发脚本 需求 循环复制文件到所有节点的相同目录下。
例如hadoop102目录中etc/hadoop下一个配置文件发生改变,让所有节点都同步更新。
需求分析
1 $ rsync -rvl /opt/module root@hadoop103:/opt/
xsync要同步的文件名称
在/home/atguigu/bin这个目录下存放的脚本,atguigu用户可以在系统任何地方直接执行。
脚本实现
在/home/atguigu目录下创建bin目录,并在bin目录下xsync创建文件,文件内容如下:
1 2 3 4 [atguigu@hadoop102 ~]$ mkdir bin [atguigu@hadoop102 ~]$ cd bin/ [atguigu@hadoop102 bin]$ touch xsync [atguigu@hadoop102 bin]$ vim xsync
在该文件中编写如下代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 # !/bin/bash # 1 获取输入参数个数,如果没有参数,直接退出 pcount=$# if((pcount==0)); then echo no args; exit; fi # 2 获取文件名称 p1=$1 fname=`basename $p1` echo fname=$fname # 3 获取上级目录到绝对路径 pdir=`cd -P $(dirname $p1); pwd` echo pdir=$pdir # 4 获取当前用户名称 user=`whoami` # 5 循环 for((host=103; host<105; host++)); do echo ------------------- hadoop$host -------------- rsync -rvl $pdir/$fname $user@hadoop$host:$pdir done
1 [atguigu@hadoop102 bin]$ sudo chmod 777 xsync
1 [atguigu@hadoop102 ~]$ xsync bin/
如果将xsync放到/home/atguigu/bin目录下仍然不能实现全局使用,可以将xsync移动到/usr/local/bin目录下。
集群配置 集群部署规划
hadoop102
hadoop103
hadoop104
HDFS
NameNode DataNode
DataNode
SecondaryNameNode DataNode
YARN
NodeManager
ResourceManager NodeManager
NodeManager
NameNode和SecondaryNameNode占用内存1:1,避免放在一台服务器。 ResourceManager是整个集群的保障,需要避开上述两个资源。
配置集群 核心配置文件
1 [atguigu@hadoop102 hadoop]$ vim core-site.xml
在该文件中编写如下配置
1 2 3 4 5 6 7 8 9 10 11 <property > <name > fs.defaultFS</name > <value > hdfs://hadoop102:9000</value > </property > <property > <name > hadoop.tmp.dir</name > <value > /opt/module/hadoop-2.7.2/data/tmp</value > </property >
HDFS配置文件
1 2 [atguigu@hadoop102 hadoop]$ vim hadoop-env.sh export JAVA_HOME=/opt/module/jdk1.8.0_144
1 [atguigu@hadoop102 hadoop]$ vim hdfs-site.xml
在该文件中编写如下配置
1 2 3 4 5 6 7 8 9 10 <property > <name > dfs.replication</name > <value > 3</value > </property > <property > <name > dfs.namenode.secondary.http-address</name > <value > hadoop104:50090</value > </property >
YARN配置文件
1 2 [atguigu@hadoop102 hadoop]$ vim yarn-env.sh export JAVA_HOME=/opt/module/jdk1.8.0_144
1 [atguigu@hadoop102 hadoop]$ vim yarn-site.xml
在该文件中增加如下配置
1 2 3 4 5 6 7 8 9 10 11 <property > <name > yarn.nodemanager.aux-services</name > <value > mapreduce_shuffle</value > </property > <property > <name > yarn.resourcemanager.hostname</name > <value > hadoop103</value > </property >
MapReduce配置文件
1 2 [atguigu@hadoop102 hadoop]$ vim mapred-env.sh export JAVA_HOME=/opt/module/jdk1.8.0_144
1 2 [atguigu@hadoop102 hadoop]$ cp mapred-site.xml.template mapred-site.xml [atguigu@hadoop102 hadoop]$ vim mapred-site.xml
在该文件中增加如下配置
1 2 3 4 5 <property > <name > mapreduce.framework.name</name > <value > yarn</value > </property >
在集群上分发配置好的Hadoop配置文件 1 [atguigu@hadoop102 hadoop]$ xsync /opt/module/hadoop-2.7.2/
查看文件分发情况 1 2 3 [atguigu@hadoop103 hadoop]$ cat /opt/module/hadoop-2.7.2/etc/hadoop/core-site.xml [atguigu@hadoop104 ~]$ cat /opt/module/hadoop-2.7.2/etc/hadoop/core-site.xml
集群单点启动
格式化前需要先停止服务然后把data和logs全部清除 ,对应每个机器都需要执行。
(1)如果集群是第一次启动,需要格式化NameNode
1 2 3 [atguigu@hadoop102 hadoop-2.7.2]$ rm -rf data/ logs/ [atguigu@hadoop102 hadoop-2.7.2]$ bin/hdfs namenode -format
1 2 3 4 [atguigu@hadoop102 hadoop-2.7.2]$ sbin/hadoop-daemon.sh start namenode [atguigu@hadoop102 hadoop-2.7.2]$ jps 4246 Jps 4175 NameNode
(3)在hadoop102、hadoop103以及hadoop104上分别启动DataNode
1 2 3 4 5 6 7 8 9 10 11 12 13 [atguigu@hadoop102 hadoop-2.7.2]$ sbin/hadoop-daemon.sh start datanode [atguigu@hadoop102 hadoop-2.7.2]$ jps 4334 Jps 4271 DataNode 4175 NameNode [atguigu@hadoop103 hadoop-2.7.2]$ sbin/hadoop-daemon.sh start datanode [atguigu@hadoop103 hadoop-2.7.2]$ jps 4080 DataNode 4114 Jps [atguigu@hadoop104 hadoop-2.7.2]$ sbin/hadoop-daemon.sh start datanode [atguigu@hadoop104 hadoop-2.7.2]$ jps 4071 DataNode 4107 Jps
(4)思考:每次都一个一个节点启动,如果节点数增加到1000个怎么办?
SSH无密登录配置 配置SSH 基本语法
ssh连接时出现Host key verification failed的解决方法 1 2 3 4 5 [atguigu@hadoop102 opt] $ ssh 192.168.1.103 The authenticity of host '192.168.1.103 (192.168.1.103)' can't be established. RSA key fingerprint is cf:1e:de:d7:d0:4c:2d:98:60:b4:fd:ae:b1:2d:ad:06. Are you sure you want to continue connecting (yes/no)? Host key verification failed.
解决方案如下:直接输入yes
无密钥配置 免密登录原理
生成公钥和私钥: 1 2 [atguigu@hadoop102 .ssh]$ ssh-keygen -t rsa 然后敲(三个回车),就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 [atguigu@hadoop102 hadoop-2.7.2]$ cd [atguigu@hadoop102 ~]$ ls -all 总用量 60 drwx------. 8 atguigu atguigu 4096 7月 26 03:14 . drwxr-xr-x. 4 root root 4096 7月 23 06:26 .. -rw-------. 1 atguigu atguigu 703 7月 23 07:22 .bash_history -rw-r--r--. 1 atguigu atguigu 18 5月 11 2016 .bash_logout -rw-r--r--. 1 atguigu atguigu 176 5月 11 2016 .bash_profile -rw-r--r--. 1 atguigu atguigu 124 5月 11 2016 .bashrc drwxrwxr-x. 2 atguigu atguigu 4096 7月 26 00:37 bin drwxr-xr-x. 2 atguigu atguigu 4096 11月 12 2010 .gnome2 drwxr-xr-x. 4 atguigu atguigu 4096 5月 8 04:58 .mozilla drwxrwxr-x. 2 atguigu atguigu 4096 7月 26 03:14 .oracle_jre_usage drwx------. 2 atguigu atguigu 4096 7月 26 00:46 .ssh drwxr-xr-x. 2 atguigu atguigu 4096 7月 26 01:14 .vim -rw-------. 1 atguigu atguigu 5052 7月 26 03:07 .viminfo -rw-------. 1 atguigu atguigu 55 7月 25 23:32 .Xauthority [atguigu@hadoop102 ~]$ cd .ssh [atguigu@hadoop102 .ssh]$ ll 总用量 4 -rw-r--r--. 1 atguigu atguigu 814 7月 26 00:46 known_hosts [atguigu@hadoop102 .ssh]$ ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/atguigu/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/atguigu/.ssh/id_rsa. Your public key has been saved in /home/atguigu/.ssh/id_rsa.pub. The key fingerprint is: b8:d7:d0:14:8a:c4:e0:4b:46:8c:d0:0a:2e:63:4a:84 atguigu@hadoop102 The key's randomart image is: +--[ RSA 2048]----+ |oo ooo. . | |E.oo.... . . | |+. + . . . | |++ o . . o | |=. . . S . | |. . o | | . . . | | . | | | +-----------------+
将公钥拷贝到要免密登录的目标机器上 1 2 3 [atguigu@hadoop102 .ssh]$ ssh-copy-id hadoop102 [atguigu@hadoop102 .ssh]$ ssh-copy-id hadoop103 [atguigu@hadoop102 .ssh]$ ssh-copy-id hadoop104
还需要在hadoop102上采用root账号,配置一下无密登录到hadoop102、hadoop103、hadoop104; 还需要在hadoop103上采用atguigu账号配置一下无密登录到hadoop102、hadoop103、hadoop104服务器上。 复制之后会多出来一个authorized_keys授权公钥,对自己也需要配置。 NameNode(hadoop102)需要配置ssh分配任务,还需要root配置ssh;ResourceManager(hadoop103)也需要配置ssh。
.ssh文件夹下(~/.ssh)的文件功能解释
文件名
作用
known_hosts
记录ssh访问过计算机的公钥(public key)
id_rsa
生成的私钥
id_rsa.pub
生成的公钥
authorized_keys
存放授权过得无密登录服务器公钥
群起集群 配置slaves
代表datanode的地址,如果写一个主机名和一个ip将会在一台机器启动两个datanode。
1 2 3 4 5 6 7 8 9 [atguigu@hadoop102 hadoop]$ vim slaves hadoop102 hadoop103 hadoop104
该文件中添加的内容结尾不允许有空格,文件中不允许有空行。
同步所有节点配置文件
1 [atguigu@hadoop102 hadoop]$ xsync slaves
启动集群
如果出现启动datanode或者namenode立马停止,检查root或者其他用户是否有相同进程正在运行。(查看日志文件)
如果集群是第一次启动,需要格式化NameNode 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 [atguigu@hadoop102 hadoop-2.7.2]$ sbin/hadoop-daemon.sh stop datanode stopping datanode [atguigu@hadoop102 hadoop-2.7.2]$ sbin/hadoop-daemon.sh stop namenode stopping namenode [atguigu@hadoop102 hadoop-2.7.2]$ jps 4688 Jps [atguigu@hadoop103 hadoop-2.7.2]$ sbin/hadoop-daemon.sh stop datanode stopping datanode [atguigu@hadoop103 hadoop-2.7.2]$ jps 4680 Jps [atguigu@hadoop104 hadoop-2.7.2]$ sbin/hadoop-daemon.sh stop datanode stopping datanode [atguigu@hadoop104 hadoop-2.7.2]$ jps 4363 Jps
(注意格式化之前,一定要先停止上次启动的所有namenode和datanode进程,然后再删除data和log数据)
1 2 3 4 5 [atguigu@hadoop102 hadoop-2.7.2]$ bin/hdfs namenode -format [atguigu@hadoop102 hadoop-2.7.2]$ hadoop namenode -format
启动HDFS 1 2 3 4 5 6 7 8 9 10 11 12 13 14 [atguigu@hadoop102 hadoop-2.7.2]$ sbin/start-dfs.sh [atguigu@hadoop102 hadoop-2.7.2]$ jps 4166 NameNode 4482 Jps 4263 DataNode [atguigu@hadoop103 hadoop-2.7.2]$ jps 3218 DataNode 3288 Jps [atguigu@hadoop104 hadoop-2.7.2]$ jps 3221 DataNode 3283 SecondaryNameNode 3364 Jps
启动YARN 1 [atguigu@hadoop103 hadoop-2.7.2]$ sbin/start-yarn.sh
NameNode和ResourceManger如果不是同一台机器,不能在NameNode上启动 YARN,应该在ResouceManager所在的机器上启动YARN。
Web端查看SecondaryNameNode
集群基本测试 上传文件到集群
1 2 [atguigu@hadoop102 hadoop-2.7.2]$ hdfs dfs -mkdir -p /user/atguigu/input [atguigu@hadoop102 hadoop-2.7.2]$ hdfs dfs -put wcinput/wc.input /user/atguigu/input
1 [atguigu@hadoop102 hadoop-2.7.2]$ bin/hadoop fs -put /opt/software/hadoop-2.7.2.tar.gz /user/atguigu/input
大文件点击下载会下载整个文件。
上传文件后查看文件存放在什么位置
1 2 [atguigu@hadoop102 subdir0]$ pwd /opt/module/hadoop-2.7.2/data/tmp/dfs/data/current/BP-1347968132-192.168.228.102-1595708538420/current/finalized/subdir0/subdir0
1 2 3 4 5 [atguigu@hadoop102 subdir0]$ cat blk_1073741825 hadoop yarn hadoop mapreduce atguigu atguigu
拼接 找到存储路径之后,把分块的文件追加到新的文件。
1 2 3 4 5 6 7 8 9 10 -rw-rw-r--. 1 atguigu atguigu 1366 7月 26 05:30 blk_1073741825 -rw-rw-r--. 1 atguigu atguigu 19 7月 26 05:30 blk_1073741825_1001.meta -rw-rw-r--. 1 atguigu atguigu 134217728 7月 26 05:32 blk_1073741826 -rw-rw-r--. 1 atguigu atguigu 1048583 7月 26 05:32 blk_1073741826_1002.meta -rw-rw-r--. 1 atguigu atguigu 63439959 7月 26 05:33 blk_1073741827 -rw-rw-r--. 1 atguigu atguigu 495635 7月 26 05:33 blk_1073741827_1003.meta [atguigu@hadoop102 subdir0]$ cat blk_1073741836>>tmp.file [atguigu@hadoop102 subdir0]$ cat blk_1073741837>>tmp.file [atguigu@hadoop102 subdir0]$ tar -zxvf tmp.file
解压后发现是hadoop-2.7.2,数据完整。
下载 1 [atguigu@hadoop102 hadoop-2.7.2]$ bin/hadoop fs -get /user/atguigu/input/hadoop-2.7.2.tar.gz ./
集群启动/停止方式总结 各个服务组件逐一启动/停止 分别启动/停止HDFS组件 1 $ sbin/hadoop-daemon.sh start/stop namenode/datanode/secondarynamenode
启动/停止YARN 1 $ sbin/yarn-daemon.sh start/stop resourcemanager/odemanager
各个模块分开启动/停止(配置ssh是前提)常用 整体启动/停止HDFS 1 2 $ sbin/start-dfs.sh $ sbin/stop-dfs.sh
整体启动/停止YARN 1 2 $ sbin/start-yarn.sh $ sbin/stop-yarn.sh
傻瓜式启动停止 1 2 $ sbin/start-all.sh $ sbin/stop-all.sh
不建议使用这种方式,先启动hdfs后启动yarn。
集群时间同步 时间同步的方式:找一个机器,作为时间服务器,所有的机器与这台集群时间进行定时的同步,比如,每隔十分钟,同步一次时间。
NTP是网络时间协议(Network Time Protocol),它是用来同步网络中各个计算机的时间的协议。
时间服务器配置(必须root用户)
1 2 3 4 5 6 7 [root@hadoop102 ~] ntp-4.2.6p5-10.el6.centos.x86_64 fontpackages-filesystem-1.41-1.1.el6.noarch ntpdate-4.2.6p5-10.el6.centos.x86_64 [root@hadoop102 ~]
修改内容如下
a)修改1(授权192.168.1.0-192.168.1.255网段上的所有机器可以从这台机器上查询和同步时间)
1 2 3 4 5 改为(去掉备注) restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
b)修改2(集群在局域网中,不使用其他互联网上的时间)
1 2 3 4 5 6 7 8 9 10 11 server 0.centos.pool.ntp.org iburst server 1.centos.pool.ntp.org iburst server 2.centos.pool.ntp.org iburst server 3.centos.pool.ntp.org iburst 改为(注释掉)
c)添加3(当该节点丢失网络连接,依然可以采用本地时间作为时间服务器为集群中的其他节点提供时间同步)
1 2 server 127.127.1.0 fudge 127.127.1.0 stratum 10
(3)修改/etc/sysconfig/ntpd 文件
1 2 3 4 5 [root@hadoop102 ~] 增加内容如下(让硬件时间与系统时间一起同步) SYNC_HWCLOCK=yes
1 2 3 [root@hadoop102 ~] ntpd 已停 [root@hadoop102 桌面]
北京
其他机器配置(必须root用户)
1 2 3 4 5 [root@hadoop103 ~] 编写定时任务如下: */10 * * * * /usr/sbin/ntpdate hadoop102