hadoop安装
1.准备工作
准备好一台虚拟机,修改静态ip,关闭防火墙,修改ip映射,安装JDK并且配置环境变量,没有jdk会报错。
2.安装hadoop
将hadoop的安装包上传到/usr/local目录下
解压[root@zhiyou101 local]# tar -zxvf hadoop-2.7.3.tar.gz
目录结构:
bin:操作hadoop集群命令
sbin:启动关闭hadoop集群命令
etc:hadoop的配置文件存放目录
lib:hadoop运行时的依赖包
share:hadoop案例存放位置
3.配置环境变量
1)编辑/etc/profile文件
vi /etc/profile
2)在文件末尾添加以下内容
JAVA_HOME=/usr/local/jdk1.8
HADOOP_HOME=/usr/local/hadoop-2.7.3
CLASSPATH=$JAVA_HOME/lib/
PATH=$PATH:$JAVA_HOME/bin/:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export PATH JAVA_HOME CLASSPATH HADOOP_HOME
3)重新加载/etc/profile文件
[root@zhiyou101 hadoop-2.7.3]# source /etc/profile
4)测试
[root@zhiyou101 hadoop-2.7.3]# hadoop version
hadoop运行模式
本地模式
不需要任何配置就可以启动,该模式在学习和测试中使用,计算文件和计算过程都在本地完成
伪分布式
跟完全分布式类似,但是只有一个节点
完全分布式
多节点协同工作,实际生产过程中使用完全分布式
本地模式
grep案例
概述
通过正则表达式找目标文件中匹配的数据,并将匹配的数据放到一个新文件中
将文件上传到linux上
1)在hadoop目录中创建input目录
2)将计算文件上传到input目录下
使用grep案例
1)案例位置
/usr/local/hadoop-2.7.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar
2)计算
[root@zhiyou101 output]# hadoop jar hadoop-mapreduce-examples-2.7.3.jar grep /usr/local/hadoop-2.7.3/input/greptest.txt /usr/local/hadoop-2.7.3/output 'zhi[a-z.]+'
解释上面语句:hadoop jar 运行的jar包路径(当前目录下存在jar,则只需要写名字即可) 案例(这里是grep) 目标文件目录 输出文件目录(不能存在,必须新建的,否则报错) 正则表达式
结果文件在input下part-r-00000文件里
cat part-r-00000正的打印出
tac part-r-00000反着打印出
另一个案例Wordcount案例:统计一样的单词出现的次数
伪分布式,运行在HDFS上
特点
跟完全分布式是一样的,只不过只有一台节点,我们需要将数据上传到HDFS上分布式存储,从HDFS上获取数据使用MapReduce进行分布式计算
配置
伪分布式运行在HDFS上
1)hadoop-env.sh
:set nu 设置多少行
只需要配置JAVA_HOME即可,第25行
export JAVA_HOME=/usr/local/jdk1.8.0_181
2)core-site.xml
要将下面内容写到< configuration>< /configuration>之中
<!-- 指定HDFS中NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://zhiyou101:9000</value>
</property>
<!-- 指定hadoop运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/var/hadoop-2.7.3/data/tmp</value>
</property>
3)hdfs-site.xml
<configuration>
<!-- 指定HDFS中NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://zhiyou101:9000</value>
</property>
<!-- 指定hadoop运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/var/hadoop-2.7.3/data/tmp</value>
</property>
</configuration>
启动hadoop集群
格式化namenode
仅第一次启动时格式化,之后就不要格式化
命令:[root@zhiyou101 current]# hadoop namenode -format
格式化之后,在core-site.xml文件中配置的hadoop运行时目录(/var/hadoop-2.7.3/data/tmp)就已经创建,里边就保存了namenode的信息(下图便是DataNode和namenode启动后)
启动namenode
[root@zhiyou101 sbin]# ./hadoop-daemon.sh start namenode
启动datanode
[root@zhiyou101 sbin]# ./hadoop-daemon.sh start datanode
查看启动结果
1)终端查看
Jps命令
2)浏览器查看
在地址栏上输入:http://zhiyou101:50070
HDFS文件系统
文件系统与Linux文件系统类似,根目录都是/,里边的目录都是我们自定义的
真正的文件还是存放在磁盘上的。
Namenode:/var/hadoop-2.7.3/data/tmp/dfs/name
Datanode:/var/hadoop-2.7.3/data/tmp/dfs/data
关闭
[root@zhiyou101 /]# hadoop-daemon.sh stop datanode
[root@zhiyou101 /]# hadoop-daemon.sh stop namenode
关闭时:先关闭DataNode后关闭namenode
开启是:先开启namenode后开启datanode
九、伪分布式运行在YARN上
总结
后缀名为.sh只需要修改JAVA_HOME
配置
在HDFS上的基础上新增以下配置
1)yarn-env.sh
配置JAVA_HOME
export JAVA_HOME=/usr/local/jdk1.8.0_181
2)yarn-site.xml
<!-- reducer获取数据的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定YARN的ResourceManager的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>zhiyou101</value>
</property>
3)mapred-env.sh
配置JAVA_HOME
export JAVA_HOME=/usr/local/jdk1.8.0_181
4)mapred-site.xml
该文件是没有的,重命名
[root@zhiyou101 hadoop]# cp mapred-site.xml.template mapred-site.xml
<!-- 指定mr运行在yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
启动
先启动HDFS
1)启动nodemanager
[root@zhiyou101 hadoop]# yarn-daemon.sh start nodemanager
2)启动resourcemanager
[root@zhiyou101 hadoop]# yarn-daemon.sh start resourcemanager
3)一键启动yarn
4)停止
[root@zhiyou101 hadoop]# yarn-daemon.sh stop nodemanager
[root@zhiyou101 hadoop]# yarn-daemon.sh stop resourcemanager
stop-yarn.sh
5)查看yarn
1)使用jps命令
2)浏览器查看
http://zhiyou101:8088
操作HDFS
创建目录
[root@zhiyou101 /]# hdfs dfs -mkdir -p /usr/input
上传文件
[root@zhiyou101 input]# hdfs dfs -put wctest.txt /usr/input
查看系统上的测试文件
[root@test221 input]# hdfs dfs -ls /usr/wc/input
[root@test221 input]# hdfs dfs -cat /usr/wc/input/wctest.txt
HDFS上运行mapreduce程序
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount /usr/wc/input/wctest.txt /usr/wc/output
查看结果
[root@test221 hadoop-2.7.3]# hdfs dfs -cat /usr/wc/output/part-r-00000
web端查看
结果下载
[root@test221 hadoop-2.7.3]# hdfs dfs -get /usr/wc/output/part-r-00000 /usr/
删除文件
[root@test221 usr]# hdfs dfs -rmr /usr/wc/output
下载文件
[root@zhiyou101 hadoop-2.7.3]# hdfs dfs -get /usr/output/part-r-00000 目标目录
查看文件
[root@zhiyou101 hadoop-2.7.3]# hdfs dfs -cat /usr/output/part-r-00000
磁盘上数据存放位置
/var/hadoop-2.7.3/data/tmp/dfs/data/current/BP-411223114-192.168.109.101-1554105576719/current/finalized/subdir0/subdir0
历史任务
目的
可以看到YARN上执行过的所有任务
配置
修改mapred-site.xml
<!--添加历史服务-->
<property>
<name>mapreduce.jobhistory.address</name>
<value>zhiyou101:10020</value>
</property>
<!--web网页访问配置-->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>zhiyou101:19888</value>
</property>
查看启动历史服务器文件目录:
[root@test221 usr]#ls sbin/ |grep mr
mr-jobhistory-daemon.sh
启动历史服务器
sbin/mr-jobhistory-daemon.sh start historyserver
查看历史服务器是否启动
jps
查看jobhistory
http://test221:19888/jobhistory
启动历史服务
[root@zhiyou101 sbin]# ./mr-jobhistory-daemon.sh start historyserver