3.5 配置历史服务器
为了查看程序的历史运行情况,需要配置一下历史服务器。具体配置步骤如下:
1)配置mapred-site.xml
[atguigu@hadoop102 hadoop]$ vim mapred-site.xml
在该文件里面增加如下配置。
<!-- 历史服务器端地址 --> <property> <name>mapreduce.jobhistory.address</name> <value>hadoop102:10020</value> </property> <!-- 历史服务器web端地址 --> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>hadoop100:19888</value> </property>
2)分发配置
[atguigu@hadoop102 hadoop]$ xsync $HADOOP_HOME/etc/hadoop/mapred-site.xml
3)在hadoop102启动历史服务器
[atguigu@hadoop102 hadoop]$ mapred --daemon start historyserver
4)查看历史服务器是否启动
[atguigu@hadoop102 hadoop]$ jps
5)查看JobHistory
http://hadoop100:19888/jobhistory
最后
这样我们的Hadoop就配置好了
[root@hadoop100 hadoop-3.1.3]# jps
3488 DataNode
3858 NodeManager
32405 Jps
3341 NameNode
[root@hadoop101 hadoop-3.1.3]# jps
3364 NodeManager
8132 Jps
3210 ResourceManager
2990 DataNode
[root@hadoop102 hadoop-3.1.3]# jps
3056 DataNode
3154 SecondaryNameNode
3336 NodeManager
7230 Jps
常见错误及解决方案
1)防火墙没关闭、或者没有启动YARN
INFO client.RMProxy: Connecting to ResourceManager at hadoop108/192.168.10.108:8032
2)主机名称配置错误
3)IP地址配置错误
4)ssh没有配置好
5)root用户和atguigu两个用户启动集群不统一
6)配置文件修改不细心
7)不识别主机名称
java.net.UnknownHostException: hadoop102: hadoop102
at java.net.InetAddress.getLocalHost(InetAddress.java:1475)
at org.apache.hadoop.mapreduce.JobSubmitter.submitJobInternal(JobSubmitter.java:146)
at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1290)
at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1287)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:415)
解决办法:
(1)在/etc/hosts文件中添加192.168.10.102 hadoop102
(2)主机名称不要起hadoop hadoop000等特殊名称
8)DataNode和NameNode进程同时只能工作一个。
9)执行命令不生效,粘贴Word中命令时,遇到-和长–没区分开。导致命令失效
解决办法:尽量不要粘贴Word中代码。
10)jps发现进程已经没有,但是重新启动集群,提示进程已经开启。
原因是在Linux的根目录下/tmp目录中存在启动的进程临时文件,将集群相关进程删除掉,再重新启动集群。
11)jps不生效
原因:全局变量hadoop java没有生效。解决办法:需要source /etc/profile文件。
12)8088端口连接不上
[atguigu@hadoop102 桌面]$ cat /etc/hosts
注释掉如下代码
#127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
#::1 hadoop102
第二章Linux安装Python3
1、先查看系统python的位置在哪
whereis python
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-akMXpdmX-1639641787981)(C:Users86157AppDataLocalTemps8082686986.png)]
python2.7默认安装是在 /usr/bin目录中,切换到/usr/bin/
cd /usr/bin/ ll python*
从下面的图中我们可以看到,python指向的是python2,python2指向的是python2.7,因此我们可以装个python3,然后将python指向python3,然后python2指向python2.7,那么两个版本的python就能共存了。
2、下载python3的包之前,要先安装相关的依赖包,用于下载编译python3:
yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make
运行了以上命令以后,就安装了编译python3所用到的相关依赖
3、默认的centos7是没有安装pip,先添加epel扩展源
yum -y install epel-release
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ioPbqZWm-1639641787981)(C:Users86157AppDataLocalTemps8082943629.png)]
4、安装pip
yum install python-pip
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NxKtRCte-1639641787982)(C:Users86157AppDataLocalTemps8082913977.png)]
5、用pip装wget
pip install wget
6、用wget下载python3的源码包,或者自己先下载好,上传到服务器再安装,如果网络快可以直接安装
wget https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tar.xz
7、编译python3源码包,解压
xz -d Python-3.6.8.tar.xz tar -xf Python-3.6.8.tar
8、进入解压后的目录,依次执行下面命令进行手动编译
cd Python-3.6.8 ./configure prefix=/usr/local/python3 make && make install
9、安装依赖zlib、zlib-deve
yum install zlib zlib yum install zlib zlib-devel
10、最后没提示出错,就代表正确安装了,在/usr/local/目录下就会有python3目录
11、添加软链接,将原来的链接备份
mv /usr/bin/python /usr/bin/python.bak
12、添加python3的软链接
ln -s /usr/local/python3/bin/python3.6 /usr/bin/python
13、测试是否安装成功了
python -V • 1
14、更改yum配置,因为其要用到python2才能执行,否则会导致yum不能正常使用
vi /usr/bin/yum
15、把第一行的#! /usr/bin/python 修改为如下
#! /usr/bin/python2 • 1
16、还有一个地方也需要修改
vi /usr/libexec/urlgrabber-ext-down
17、把第一行的#! /usr/bin/python 修改如下
#! /usr/bin/python2 • 1
18、启动python2
python2 • 1
19、启动python3
python
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-woCFJ3QO-1639641787983)(C:Users86157AppDataLocalTemps8086692414.png)]
参考文档centos安装python3详细教程_知行合一-CSDN博客_centos python
第三章集成python
任务目的: 统计单词数量
准备工作:
# 创建word.txt vi word.txt # 在word.txt中添加几行单词 hadoop is good spark is fast spark is better python is basics java also good hbase is nosql mysql is relational database mongdb is nosql relational database or nosql is good # 将word.txt上传到hdfs的data文件夹下 hadoop dfs -put word.txt /data
map代码
# !/usr/bin/env python import sys words=[] for i in sys.stdin: i=i.strip() word=i.split(" ") words.append(word) for i in words: for j in i: print(j,1)
reduce代码
# !/usr/bin/env python from operator import itemgetter import sys words=[] num=[] index=-1 for i in sys.stdin: word=i.strip() word=word.split(" ") word[1]=int(word[1]) for i in range(len(words)): if(words[i][0]==word[0]): index=i if(index==-1): words.append(word) if(index!=-1): words[index][1]+=1 index=-1 for i in words: print(i) cat word.txt |python map.py|python reduce.py ['hadoop', 1] ['is', 8] ['good', 3] ['spark', 2] ['fast', 1] ['better', 1] ['python', 1] ['basics', 1] ['java', 1] ['also', 1] ['hbase', 1] ['nosql', 3] ['mysql', 1] ['relational', 2] ['database', 2] ['mongdb', 1] ['or', 1]
hadoop运行mapreduce
说明:mapreduce支持除java以外其他语言进行开发,需要使用_hadoop-streaming-2.7.3.jar_ 这个计算框架运行mapreuce任务。
# 运行mapreduce任务 hadoop jar share/hadoop/tools/lib/hadoop-streaming-3.1.3.jar -files /root/map.py,/root/reduce.py -mapper "python /root/map.py" -reducer "python /root/reduce.py" -input /input -output /out_python //参数说明 hadoop jar +hadoop-streaming-2.7.3.jar所在路径 -file+ 编写的map与reduce代码文件所在路径 -mapper +执行map文件命令 -reducer +执行reduce文件命令 -input +输入文件在hdfs的路径 -output +输出文件所在hdfs的路径
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eZyaPxTX-1639641787983)(C:Users86157Desktoppytest并发编程python调用hadoop成功.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5UGVxQNl-1639641787984)(C:Users86157AppDataLocalTemps9640868477.png)]
在完成作业之后我将文档上传到了我的个人博客
利用python集成hadoop实现并行计算.md - 小岚
参考文档:
(6条消息) mapreduce(python开发)_小爽123的博客-CSDN博客_mapreduce python
(6条消息) Linux系统安装Python3环境(超详细)_L-CSDN博客_linux安装python
index=i if(index==-1): words.append(word) if(index!=-1): words[index][1]+=1 index=-1
for i in words:
print(i)
cat word.txt |python map.py|python reduce.py
[‘hadoop’, 1]
[‘is’, 8]
[‘good’, 3]
[‘spark’, 2]
[‘fast’, 1]
[‘better’, 1]
[‘python’, 1]
[‘basics’, 1]
[‘java’, 1]
[‘also’, 1]
[‘hbase’, 1]
[‘nosql’, 3]
[‘mysql’, 1]
[‘relational’, 2]
[‘database’, 2]
[‘mongdb’, 1]
[‘or’, 1]
**hadoop运行mapreduce** 说明:mapreduce支持除java以外其他语言进行开发,需要使用*hadoop-streaming-2.7.3.jar* 这个计算框架运行mapreuce任务。
运行mapreduce任务
hadoop jar share/hadoop/tools/lib/hadoop-streaming-3.1.3.jar -files /root/map.py,/root/reduce.py -mapper “python /root/map.py” -reducer “python /root/reduce.py” -input /input -output /out_python
//参数说明 hadoop jar +hadoop-streaming-2.7.3.jar所在路径 -file+
编写的map与reduce代码文件所在路径 -mapper +执行map文件命令 -reducer +执行reduce文件命令 -input +输入文件在hdfs的路径 -output +输出文件所在hdfs的路径
[外链图片转存中...(img-eZyaPxTX-1639641787983)] [外链图片转存中...(img-5UGVxQNl-1639641787984)] 在完成作业之后我将文档上传到了我的个人博客 [利用python集成hadoop实现并行计算.md - 小岚](http://8.142.109.15:8090/archives/%E5%88%A9%E7%94%A8python%E9%9B%86%E6%88%90hadoop%E5%AE%9E%E7%8E%B0%E5%B9%B6%E8%A1%8C%E8%AE%A1%E7%AE%97md) 参考文档: [(6条消息) mapreduce(python开发)_小爽123的博客-CSDN博客_mapreduce python](https://blog.csdn.net/qq_45014844/article/details/117438600) [(6条消息) Linux系统安装Python3环境(超详细)_L-CSDN博客_linux安装python](https://blog.csdn.net/L_15156024189/article/details/84831045) [(6条消息) Hadoop的安装和使用_战 胜的博客-CSDN博客_hadoop安装](https://blog.csdn.net/qq_45021180/article/details/104640540?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163964121216780274173287%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=163964121216780274173287&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_click~default-1-104640540.pc_search_insert_es_download&utm_term=%E5%AE%89%E8%A3%85hadoop&spm=1018.2226.3001.4187)