在进行配置之前需要知道、了解Hadoop文件的作用
名称 | 描述 |
---|---|
bin | 存放对Hadoop相关服务(HDFS,YARN)进行操作的脚本 |
etc | Hadoop的配置文件目录,存放Hadoop的配置文件 |
lib | 存放Hadoop的本地库(对数据进行压缩解压缩功能) |
sbin | 存放启动或停止Hadoop相关服务的脚本 |
share | 存放Hadoop的依赖jar包、文档、和官方案例 |
Linux系统必须安装jdk,和Hadoop ,本人使用的是
-------jdk-8u144-linux-x64.tar.gz
-------hadoop-2.7.2.tar.gz
hadoop本地运行模式的基础配置
Grep案例
需求: 1.在hadoop下创建一个文件夹
2.将Hadoop中的xml文件复制到创建的文件夹中
3.执行mapreduce,得到以dfs开头的文件
所有命令的执行都在hadoop解压目录下
[hadoop01@hadoop01 hadoop-2.7.2]$ mkdir input
[hadoop01@hadoop01 hadoop-2.7.2]$ cp etc/hadoop/*.xml input/
[hadoop01@hadoop01 hadoop-2.7.2]$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar grep input output 'dfs[a-z.]+'
[hadoop01@hadoop01 hadoop-2.7.2]$ cat output/*
1 dfsadmin
[hadoop01@hadoop01 hadoop-2.7.2]$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar grep input output 'dfs[a-z.]+'
## bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar 表示执行的命令在哪
## grep 过滤
## input 查找的目标文件
## output 得到结果后保存在哪
## 在input文件夹中查找'dfs[a-z.]+'的文件,并将结果保存在output中
WordCount案例
需求:统计wc.input文件中词语的数量
wc.input
[hadoop01@hadoop01 hadoop-2.7.2]$ vim wc.input
hadoop yarn
hadoop mapreduce
jinghang
jinghang
:wq
执行过程:
[hadoop01@hadoop01 hadoop-2.7.2]$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount wcinput/ wcoutput/
[hadoop01@hadoop01 hadoop-2.7.2]$ cat wcoutput/part-r-00000
hadoop 2
jinghang 2
mapreduce 1
yarn 1
[hadoop01@hadoop01 hadoop-2.7.2]$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount wcinput/ wcoutput/
## bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar 表示执行的命令在哪
## wordcount 统计词语出现的个数
## wcinput/ 统计哪里的文件
## wcoutput/ 输出的结果保存在哪里
## 统计wcinput/下文件中文件词语出现的次数,结果保存在wcoutput/
伪分布式运行模式
1.配置集群
2.测试
3.案例演示
1.配置集群
配置hadoop-env.sh
[hadoop01@hadoop01 hadoop-2.7.2]$ vim etc/hadoop/hadoop-env.sh
export JAVA_HOME=${JAVA_HOME}
修改为
export JAVA_HOME=/opt/module/jdk1.8.0_144
配置 etc/hadoop/core-site.xml
添加namenode的地址
指定Hadoop运行时产生文件的存储目录
<!-- 指定HDFS中NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://主机名:9000</value>
</property>
<!-- 指定Hadoop运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-2.7.2/data/tmp</value>
</property>
配置 etc/hadoop/hdfs-site.xml
指定hdfs副本的数量,默认是3个
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
启动集群,第一次启动时格式化,只格式化一次,多次格式化后,删除data,logs目录后,再次格式化
格式化
[hadoop01@hadoop01 hadoop-2.7.2]$ bin/hdfs namenode -format
启动namenode
[hadoop01@hadoop01 hadoop-2.7.2]$ sbin/hadoop-daemon.sh start namenode
启动datanode
[hadoop01@hadoop01 hadoop-2.7.2]$ sbin/hadoop-daemon.sh start datanode
查看服务是否启动
[hadoop01@hadoop01 hadoop-2.7.2]$ jps
62501 DataNode
62639 Jps
62419 NameNode
服务启动成功后,可在浏览器中查看HDFS文件系统
http://hadoop01(或者主机ip地址):50070
当用主机名访问时,需要在Windows系统的C:\Windows\System32\drivers\etc\hosts文件中添加映射关系
linux的IP地址 Linux的主机名
报错,查看日志文件中的报错信息
/opt/module/hadoop-2.7.2/logs
操作演示:
上传文件到文件系统
[hadoop01@hadoop01 hadoop-2.7.2]$ bin/hdfs dfs -mkdir /input
[hadoop01@hadoop01 hadoop-2.7.2]$ bin/hdfs dfs -put wcinput/wc.input /input
[hadoop01@hadoop01 hadoop-2.7.2]$ bin/hdfs dfs -ls /input/
Found 1 items
-rw-r--r-- 1 hadoop01 supergroup 47 2019-12-18 19:31 /input/wc.input
[hadoop01@hadoop01 hadoop-2.7.2]$ bin/hdfs dfs -mkdir /input
## bin/hdfs dfs 表示操作的时HDFS文件系统
## -mkdir /input 创建文件夹
[hadoop01@hadoop01 hadoop-2.7.2]$ bin/hdfs dfs -put wcinput/wc.input /input
## -put 上传 -get 下载
## wcinput/wc.input 表示本地的目录
## /input 表示在HDFS文件系统的文件夹
## $ bin/hdfs dfs -put wcinput/wc.input /input 将本地目录中的wc.input文件上传到HDFS文件系统中的input文件夹中
上传后:
运行maprecdue程序
[hadoop01@hadoop01 hadoop-2.7.2]$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /input/ /output
[hadoop01@hadoop01 hadoop-2.7.2]$ bin/hdfs dfs -cat /output/part-r-00000
hadoop 2
jinghang 2
mapreduce 1
yarn 1
[hadoop01@hadoop01 hadoop-2.7.2]$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /input/ /output
## bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar 运行的是mapreduce命令
## wordcount 统计词语出现的数次
## /input/ 统计哪个文件
## /output 结果保存在哪
[hadoop01@hadoop01 hadoop-2.7.2]$ bin/hdfs dfs -cat /output/part-r-00000
## 显示结果
配置YARN,并运行MapReduce
配置 etc/hadoop/yarn-env.sh
[hadoop01@hadoop01 hadoop-2.7.2]$ vim etc/hadoop/yarn-env.sh
export JAVA_HOME=${JAVA_HOME}
修改为
export JAVA_HOME=/opt/module/jdk1.8.0_144
配置 etc/hadoop/yarn-site.xml
添加reduce获取数据的方式
指定YARN的rescourcemanager的地址
[hadoop01@hadoop01 hadoop-2.7.2]$ vim etc/hadoop/yarn-site.xml
<configuration>
<!-- Reducer获取数据的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定YARN的ResourceManager的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>主机名</value>
</property>
</configuration>
配置 etc/hadoop/mapred-env.sh
[hadoop01@hadoop01 hadoop-2.7.2]$ vim etc/hadoop/mapred-env.sh
# export JAVA_HOME=/home/y/libexec/jdk1.6.0/
修改为
export JAVA_HOME=/opt/module/jdk1.8.0_144
etc/hadoop目录下mapred-site.xml.template文件改名为mapred-site.xml
并在文件中添加
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
启动ResourceManager
[hadoop01@hadoop01 hadoop-2.7.2]$ sbin/yarn-daemon.sh start resourcemanager
启动NodeManager
[hadoop01@hadoop01 hadoop-2.7.2]$ sbin/yarn-daemon.sh start nodemanager
查看服务是否启动
[hadoop01@hadoop01 hadoop-2.7.2]$ jps
62501 DataNode
65283 ResourceManager
62419 NameNode
65649 Jps
65523 NodeManager
服务启动完毕,可以在浏览器访问YARN
http://Linux主机名(Linux的IP地址):8088
集群操作
删除HDFS上的output文件
[hadoop01@hadoop01 hadoop-2.7.2]$ bin/hdfs dfs -rm -R /output
19/12/18 20:08:56 INFO fs.TrashPolicyDefault: Namenode trash configuration: Deletion interval = 0 minutes, Emptier interval = 0 minutes.
Deleted /output
执行MapReduce
[hadoop01@hadoop01 hadoop-2.7.2]$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /input /output
查看结果
[hadoop01@hadoop01 hadoop-2.7.2]$ bin/hdfs dfs -cat /output/*
hadoop 2
jinghang 2
mapreduce 1
yarn 1
配置历史记录服务器
配置 etc/hadoop/mapred-site.xml
[hadoop01@hadoop01 hadoop-2.7.2]$ vim etc/hadoop/mapred-site.xml
在文件中增加
<!-- 历史服务器端地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>主机名:10020</value>
</property>
<!-- 历史服务器web端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>主机名:19888</value>
</property>
启动历史记录服务器
[hadoop01@hadoop01 hadoop-2.7.2]$ sbin/mr-jobhistory-daemon.sh start historyserver
查看是否启动
[hadoop01@hadoop01 hadoop-2.7.2]$ jps
62501 DataNode
67045 JobHistoryServer
65283 ResourceManager
67114 Jps
62419 NameNode
65523 NodeManager
启动成功后可在浏览器中查看历史记录信息
可以在页面点击,也可以通过端口访问http://Linux主机名(Linux的IP地址):19888
配置日志的聚焦
配置etc/hadoop/yarn-site.xml
[hadoop01@hadoop01 hadoop-2.7.2]$ vim etc/hadoop/yarn-site.xml
在文件中添加
<!-- 日志聚集功能使能 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 日志保留时间设置7天 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
日志功能配置完毕需要重新启动NodeManage\ResourceManager\HistoryManager服务
关闭服务
[hadoop01@hadoop01 hadoop-2.7.2]$ sbin/mr-jobhistory-daemon.sh stop historyserver
[hadoop01@hadoop01 hadoop-2.7.2]$ sbin/yarn-daemon.sh stop nodemanager
[hadoop01@hadoop01 hadoop-2.7.2]$ sbin/yarn-daemon.sh stop resourcemanager
开启服务
[hadoop01@hadoop01 hadoop-2.7.2]$ sbin/mr-jobhistory-daemon.sh start historyserver
[hadoop01@hadoop01 hadoop-2.7.2]$ sbin/yarn-daemon.sh start nodemanager
[hadoop01@hadoop01 hadoop-2.7.2]$ sbin/yarn-daemon.sh start resourcemanager
查看日志信息
[hadoop01@hadoop01 hadoop-2.7.2]$ bin/hdfs dfs -rm -R /output
[hadoop01@hadoop01 hadoop-2.7.2]$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /input /output