公司需求搭建hadoop环境支持hive的场景,虽然hadoop已经发布了3.x版本,但是hive官方目前只看到支持2.x就选择了安装hadoop2.9.0,以下记录完整的环境搭建以及测试过程以备不时之需。linux用的是redhat6.3,建议使用centos更新的版本,redhat有些功能需要注册收费,毕竟centos才是开源,比如yum。
1.安装虚拟机众人皆知,略过。
2.关闭防火墙:
1)立即关闭,并非永久关闭 service iptables stop 2)永久关闭 iptables -F 关闭防火墙功能 chkconfig iptables off 禁止防火墙启动
另:
#/etc/init.d/iptables status ## 查看防火墙状态
#/etc/init.d/iptable stop ## 本次关闭防火墙
#/etc/init.d/iptable restart ## 重启防火墙
开启:
1
|
chkconfig iptables on |
关闭:
1
|
chkconfig iptables off |
3.改主机别名,ip映射文件:vim /etc/hosts
例如:192.168.1.10 master
192.168.1.11 slave1
192.168.1.12 slave2
配置免密码登录:
a、在master机器上输入 ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa 创建一个无密码的公钥,-t是类型的意思,dsa是生成的密钥类型,-P是密码,’’表示无密码,-f后是秘钥生成后保存的位置 b、在master机器上输入 cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys 将公钥id_dsa.pub添加进keys,这样就可以实现无密登陆ssh c、在master机器上输入 ssh master 测试免密码登陆 d、在slave1主机上执行 mkdir ~/.ssh e、在slave2主机上执行 mkdir ~/.ssh f、在master机器上输入 scp ~/.ssh/authorized_keys root@slave1:~/.ssh/authorized_keys 将主节点的公钥信息导入slave1.hadoop节点,导入时要输入一下slave1.hadoop机器的登陆密码 g、在master机器上输入 scp ~/.ssh/authorized_keys root@slave2:~/.ssh/authorized_keys 将主节点的公钥信息导入slave2.hadoop节点,导入时要输入一下slave2.hadoop机器的登陆密码 h、在三台机器上分别执行 chmod 600 ~/.ssh/authorized_keys 赋予密钥文件权限 i、在master节点上分别输入 ssh slave1和 ssh slave2测试是否配置ssh成功
4.上传下载好的hadoop2.9.0,我存放在/usr/local下,解压:tar -zxvf hadoop-2.9.0.tar.gz。
注:
x : 从 tar 包中把文件提取出来 z : 表示 tar 包是被 gzip 压缩过的,所以解压时需要用 gunzip 解压 v : 显示详细信息 f : 代表后面接的是文件 .但是f后面必须跟上要处理的文件名。也就是说你不能写成这样 tar -zxfv hadoop.tar.gz
5.配置master下的配置文件,然后通过scp方式复制到slave节点上
1)先在/usr/local/创建hadoop文件夹用于存放各种数据日志文件,进入local目录 mkdir hadoop,
然后执行:
vim /usr/local/hadoop-2.9.0/etc/hadoop/core-site.xml,
注意,在网页上复制linux命令时候,有些莫名其妙的错误,比如复制上一个命令就会报错:
-bash: vim /usr/local/hadoop-2.9.0/etc/hadoop/core-site.xml: 没有那个文件或目录
复制下面的就不会报错,问题在vim和 /usr之间的空格上,应该是某些网页上的空格在shell中不支持了
vim /usr/local/hadoop-2.9.0/etc/hadoop/core-site.xml
在<configuration>节点中增加如下内容:
<property> <name>fs.default.name</name> <value>hdfs://master:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/usr/local/hadoop/tmp</value> </property> <property> <name>io.file.buffer.size</name> <value>131702</value> </property>
2)vim /usr/local/hadoop-2.9.0/etc/hadoop/hdfs-site.xml
<configuration> <property> <name>dfs.namenode.name.dir</name> <value>file:///usr/local/hadoop/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:///usr/local/hadoop/dfs/data</value> </property> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.namenode.secondary.http-address</name> <value>master:50090</value> </property> <property> <name>dfs.webhdfs.enabled</name> <value>true</value> </property> </configuration>
3)cp /usr/local/hadoop-2.9.0/etc/hadoop/mapred-site.xml.template /usr/local/hadoop-2.9.0/etc/hadoop/mapred-site.xml
vim /usr/local/hadoop-2.9.0/etc/hadoop/mapred-site.xml
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> <final>true</final> </property> <property> <name>mapreduce.jobtracker.http.address</name> <value>master:50030</value> </property> <property> <name>mapreduce.jobhistory.address</name> <value>master:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>master:19888</value> </property> <property> <name>mapred.job.tracker</name> <value>http://master:9001</value> </property> </configuration>
4)vim /usr/local/hadoop-2.9.0/etc/hadoop/yarn-site.xml
<configuration> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name> <value>org.apache.hadoop.mapred.ShuffleHandler</value> </property> <property> <name>yarn.resourcemanager.address</name> <value>master:8032</value> </property> <property> <name>yarn.resourcemanager.scheduler.address</name> <value>master.hadoop:8030</value> </property> <property> <name>yarn.resourcemanager.resource-tracker.address</name> <value>master:8031</value> </property> <property> <name>yarn.resourcemanager.admin.address</name> <value>master:8033</value> </property> <property> <name>yarn.resourcemanager.webapp.address</name> <value>master:8088</value> </property> <property> <name>yarn.resourcemanager.hostname</name> <value>master</value> </property> <property> <name>yarn.nodemanager.resource.memory-mb</name> <value>2048</value> </property> </configuration>
6.配置/usr/local/hadoop-2.9.0/etc/hadoop目录下hadoop.env.sh、yarn-env.sh的JAVA_HOME
提前修改java环境变量:(记得三台机器都配置)
# 修改配置文件
vi /etc/profile
# 在最后下添加
export JAVA_HOME=/usr/java/jdk1.7.0_75
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
小技巧:查找linux的jdk安装路径which java 或者echo $JAVA_HOME
如果没有配置JAVA_HOME呢?先java -version ,例如版本是1.75那么 find / -name *jdk1.7*,见证奇迹的时刻来了!
取消JAVA_HOME的注释,设置为 export JAVA_HOME${JAVA_HOME}
7、配置/usr/local/hadoop-2.9.0/etc/hadoop目录下的slaves,删除默认的localhost,添加2个slave节点:
slave1.hadoop slave2.hadoop
8.将master服务器上配置好的Hadoop复制到各个节点对应位置上,通过scp传送:
scp -r /usr/local/hadoop-2.9.0 slave1.hadoop:/usr/local/ scp -r /usr/local/hadoop-2.9.0 slave2.hadoop:/usr/local/
9.启动hadoop。在master节点启动hadoop服务,各个从节点会自动启动,进入/usr/local/hadoop-2.9.0/sbin/目录,hadoop的启动和停止都在master上进行;
1)初始化(格式化namenode)进入bin目录,输入命令:./hdfs namenode -format
小技巧:有时候当前目录的命令找不到,输入./就能
2)启动命令:start-all.sh 、停止命令:stop-all.sh
3)在master和salve上分别输入jps命令查看,也可以在web浏览器上访问,输入http://master:50070
hadoop集群搭建完毕,接下来是hive
HIVE环境搭建:
1.下载解压重命名略,配置环境变量:
vi /etc/profile export HIVE_HOME=/usr/local/hive export PATH=$PATH:$HIVE_HOME/bin source /etc/profile
2.进入conf目录
mv hive-default.xml.template hive-site.xml mv hive-env.sh.template hive-env.sh
3.修改配置文件:
修改文件hive-env.sh
# vim hive-env.sh export HADOOP_HOME=/usr/local/hadoop-2.9.0 export HIVE_CONF_DIR=/usr/local/hive/conf export HIVE_AUX_JARS_PATH=/usr/local/hive/lib
修改hive-site.xml文件,修改内容如下:(connectionUserName对应数据库用户名、ConnectionPassword对应密码)
<property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://master:3306/hive?createDatabaseIfNotExist=true</value> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>hivetest</value> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>hivetest</value> </property>
除了上述mysql的配置之外,还需要建立相应的目录,修改hive-site.xml中对应的文件存储目录
在hdfs中新建一下目录,并修改相应的权限:
hadoop fs -mkdir -p /user/hive/warehouse
hadoop fs -mkdir -p /user/hive/tmp
hadoop fs -mkdir -p /user/hive/log
hadoop fs -mkdir -p /user/hive/repl
hadoop fs -mkdir -p /user/hive/cmroot
hadoop fs -chmod -R 777 /user/hive/warehouse
hadoop fs -chmod -R 777 /user/hive/tmp
hadoop fs -chmod -R 777 /user/hive/log
hadoop fs -chmod 777 /user/hive/repl
hadoop fs -chmod 777 /user/hive/cmroot
新建一个iotmp目录,比如/usr/local/hive/tmp:
# cd $HIVE_HOME # mkdir tmp
打开hive-site.xml文件,把所有的${system:java.io.tmpdir}都替换成新建的那个目录,
另外一定要把${system:user.name}也替换成实际的用户名(root),否则还是会报错。
4.勇敢的测试吧:
cd $HIVE_HOME ./schematool -initSchema -dbType mysql 运行报错。。。 org.apache.hadoop.hive.metastore.HiveMetaException: Failed to get schema version. Underlying cause: java.sql.SQLException : Access denied for user 'root'@'master.hadoop' (using password: YES) SQL Error code: 1045 mysql root用户不允许远程访问,需要按照以下方法调整:
重置密码解决MySQL for Linux错误 ERROR 1045 (28000): Access denied for user ‘root’@’localhost’ (using password: YES)
一般这个错误是由密码错误引起,解决的办法自然就是重置密码。
假设我们使用的是root账户。
1.重置密码的第一步就是跳过MySQL的密码认证过程,方法如下:
#vim /etc/my.cnf(注:windows下修改的是my.ini)
在文档内搜索mysqld定位到[mysqld]文本段:
/mysqld(在vim编辑状态下直接输入该命令可搜索文本内容)
在[mysqld]后面任意一行添加“skip-grant-tables”用来跳过密码验证的过程,如下图所示:
保存文档并退出:
#:wq
2.接下来我们需要重启MySQL:
/etc/init.d/mysql restart(有些用户可能需要使用/etc/init.d/mysqld restart)
3.重启之后输入#mysql即可进入mysql。
4.接下来就是用sql来修改root的密码
mysql> use mysql;
mysql> update user set password=password(“你的新密码”) where user=”root”;
mysql> flush privileges;
mysql> quit
到这里root账户就已经重置成新的密码了。
5.编辑my.cnf,去掉刚才添加的内容,然后重启MySQL。大功告成!
增加个测试小步骤可以用beeline测试hiveserver2的jdbc连接:
启动hiveServer2
启动beeline之后 连接
!connect jdbc:hive2://localhost:10000/default
启动的时候连接
/beeline -u jdbc:hive2://localhost:10000 -n hadoop
再次遇到问题:
1、执行#hive命令进入Hive CLI时报如下错误:
Exception in thread “main” java.lang.RuntimeException: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClien
原因:因为没有正常启动Hive 的 Metastore Server服务进程。
解决方法:启动Hive 的 Metastore Server服务进程,执行如下命令:
# hive –service metastore &
2、启动 hiveserver2 服务,启动 beeline -u jdbc:hive2:// 正常 ,启动 beeline -u jdbc:hive2://127.0.0.1:10000 包如下错误:
Error: Failed to open new session: java.lang.RuntimeException: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.authorize.AuthorizationException): User: root is not allowed to impersonate anonymous (state=,code=0)
Beeline version 2.1.0 by Apache Hive
分析 : 访问权限问题
解决 :在hdfs 的配置文件core-site.xml中加入如下配置,root 为位置填入 User:* ,etc hadoop.proxyuser.eamon.hosts
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
3、报错内容如下:
beeline> !connect jdbc:hive2://ip:10000/default Connecting to jdbc:hive
mysql权限问题,自行领悟,调整很多遍,最后暂时用跳过权限skip-grant-tables解决。
4、连不上10000
如果遇到上述三个问题之外,还是无法链接上10000端口的话,记得用以下步骤。
一,先开启 metastore
hive --service metastore &
二,先开启 hiveserver2
hive --service hiveserver2 &
三,可以通过命令netstat -ntulp |grep 10000
可以看到结果
tcp 0 0 0.0.0.0:10000 0.0.0.0:* LISTEN 27799/java
所有的坑统统踩一遍!!!真日了那啥了。
再续问题:
1.切换了数据库,重新建库,美滋滋的用utf-8字符集,建表查数据都没问题然而:
hive>drop table student;
执行删除时候报错:
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException(message:For direct MetaStore DB connections, we don't support retries at the client level.)
居然是mysql数据库字符集出现问题,解决方案:
修改mysql的字符集 alter database hive character set latin1;
问题解决,但是以后会不会有中文字符编码问题待续。。。
问题又来了:
启动HDFS之后一直处于安全模式org.apache.hadoop.hdfs.server.namenode.SafeModeException: Log not rolled. Name node is in safe mode.
获取安全模式的状态: hdfs dfsadmin -safemode get 安全模式打开 hdfs dfsadmin -safemode enter 安全模式关闭 hdfs dfsadmin -safemode leave
至于为什么进入了安全模式呢,反复查看日志发现应该是namenode的启动有问题:
在hadoop集群的时候,集群的运行会进入到安全模式(safeMode)下。在安全模式下运行一段时间后,自动退出。 1.那么,系统在安全模式下干什么了? 当集群启动的时候,会首先进入到安全模式。系统在安全模式下,会检查数据块的完整性。假设我们设置的副本数(即参数dfs.replication)是5,那么在dataNode上就应该有5个副本存在,假设只存在3个副本,那么比率就是3/5=0.6。 在配置文件hdfs-default.xml中定义了一个最小的副本率,见图7-1 我们的副本率0.6明显小于0.999,因此系统会自动的复制副本到其他dataNode,争取是的最小副本率>=0.999。如果系统中有8个副本,超过我们设定的5个副本,那么系统也会删除多于的3个副本。 2.安全模式对我们有什么影响? 这时,不允许客户端进行任何修改文件的操作,包括上传文件、删除文件、重命名、创建文件夹等操作。比如,创建文件时,在源代码中就有对安全模式的判断,如图7-2 当我们在安全模式下进行修改文件操作时,会报出如下错误. 正常情况下,安全模式会运行一段时间自动退出的。只需要我们稍等一会就可以了。到底等多长时间哪,我们可以通过50070端口查看安全模式退出的剩余时间,如图7-4。 虽然不能进行修改文件的操作,但是可以浏览目录结构、查看文件内容的。 3.我们可以控制是否进入或者退出安全模式吗? 在命令行下是可以控制安全模式的进入、退出和查看的, 命令hadoop fs –safemode get 查看安全模式状态 命令hadoop fs –safemode enter 进入安全模式状态 命令hadoop fs –safemode leave 离开安全模式状态 安全模式,是hadoop集群的一种保护机制,在启动时,最好是等待集群自动退出,然后再进行文件操作。
出现问题的原因是我由于一些问题想重新格式化,做了删除tmp下的数据。要梳理清楚这几个目录的关系,清除的时候要彻底然后重新执行:./hdfs name -format,可以参照这个:
1、重新格式化意味着集群的数据会被全部删除,格式化前需考虑数据备份或转移问题;
2、先删除主节点(即namenode节点),Hadoop的临时存储目录tmp、namenode存储永久性元数据目录dfs/name、Hadoop系统日志文件目录log 中的内容 (注意是删除目录下的内容不是目录);
3、删除所有数据节点(即datanode节点) ,Hadoop的临时存储目录tmp、namenode存储永久性元数据目录dfs/name、Hadoop系统日志文件目录log 中的内容;
4、格式化一个新的分布式文件系统:
我是这样干的:
1,先删除master节点Hadoop主目录下tmp、dfs、dfs/name、dfs/node、log 中的内容 (注意是删除目录下的内容不是目录)
2,删除所有node节点(即slave) Hadoop主目录下tmp、dfs、dfs/name、dfs/node、log 中的内容
3,格式化一个新的分布式文件系统:
(注意日志也要干掉)
./bin/hadoop namenode -format
问题又来了,一激动把/tmp下全rm -rf * 了,mysql起不来咯,
报错权限咋咋的不够:chmod 777 /tmp 重启 service mysqld start ,ok
然后继续尝试解决内存溢出问题,调整了内存不溢出了却出了新的问题:
hadoop执行wordcount测试程序停留在 map 0% reduce 0%
根据一位兄台的解决思路得到启发:
在Hive的命令行中执行count(*)和insert的时候总是报错,比如执行select count(*)的时候报“return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask”错误。很显然这个不是真正的问题,这是个很粗的异常,所以下一步需要查看真正JobTracker运行日志。由于是Hadoop2.8.0,而且也没有专门配置,日志的路径是:http://IP:8042,具体如何看日志这里不再赘述,大家可以查其他资料,查看日志后,所有的信息都是INFO级别的,只有一行是ERROR,这行的关键信息是:Could not deallocate container for task attemptId attempt_xxxxx(这里的xxxxx表示随机数),很明显是创建容器的时候出现问题了。网上资料很少,而且很多都是老外写的,总体归结为以下:
1)nodemanager的内存不够;
2)yarn.nodemanager.resource.memory-mb和yarn.scheduler.maximum-allocation-mb的值同倍数调整小了;经过辩证分析很显然这个都不是真正的原因。这个时候我们需要反过头查资料搞清楚这俩参数的含义。yarn.nodemanager.resource.memory-mb:指的是YARN可以分配的最大物理内存,要根据真实服务器的物理内存大小进行调整;yarn.scheduler.maximum-allocation-mb:指的是单个容器(JVM进程)可以申请的最大物理内存,很显然这个值是不能大于参数“yarn.nodemanager.resource.memory-mb”的值的。根据服务器的配置,将2个参数都调整为3072,结果还是不行,愁死人了。
冷静了下,仔细想了下MR作业启动的时候也有内存参数,果不其然,查看了下文件mapred-site.xml后,里边有个参数mapreduce.reduce.memory.mb值是9000,这个参数的含义是:Reduce Task需要的内存。很显然这个是不对的,作业要运行在容器里,容器才3072,作业怎么能是9000呢?于是将该参数调整为1024,重启hadoop,重新在hive命令行执行select count(*)语句,华丽丽的返回了表的行数。
当然了,中间经过的波折比这个多了很多,主要原因是刚接触这个技术,对Hadoop的体系和原理理解的太少。中间顺带解决了很多问题。比如在修改开头两个参数的时候,发现hadoop起不来了,原因是:yarn.nodemanager.resource.memory-mb这个参数的值比其中一台slave服务器的free内存大,如是种种。另外要注意,在有些情况下还会报:There are 2 datanode(s) running and 2 node(s) are excluded in this operation.可能也是这个原因引起的,当然了这个也不是直接异常,需要看具体的job日志才能定位到问题。
除了这个问题本身,最终得出以下结论:当谷歌已经无法解决问题的时候,考虑回归原理,结合环境辩证思考。另外一个就是在任何时候都不能忽略日志,哪怕只有很少的几个单词,在我们学习一个新的技术的时候,优先考虑怎么玩它的日志。好了就到这里了,希望这个能抛砖引玉,减少大家的时间浪费。
根据https://www.alexjf.net/blog/distributed-systems/hadoop-yarn-installation-definitive-guide/#cluster-installation这里貌似挺靠谱的配置,终于看到了希望:
Hadoop job information for Stage-1: number of mappers: 1; number of reducers: 1
2018-05-18 16:42:13,754 Stage-1 map = 0%, reduce = 0%
2018-05-18 16:42:56,830 Stage-1 map = 100%, reduce = 0%, Cumulative CPU 4.52 sec
2018-05-18 16:43:23,864 Stage-1 map = 100%, reduce = 100%, Cumulative CPU 6.8 sec
MapReduce Total cumulative CPU time: 6 seconds 800 msec
Ended Job = job_1526632270337_0001
MapReduce Jobs Launched:
Stage-Stage-1: Map: 1 Reduce: 1 Cumulative CPU: 6.8 sec HDFS Read: 6518 HDFS Write: 2 SUCCESS
Total MapReduce CPU Time Spent: 6 seconds 800 msec
OK
0
Time taken: 156.305 seconds, Fetched: 1 row(s)
贴个配置备用:
mapred-site.xml
<?xml version=”1.0″?>
<?xml-stylesheet type=”text/xsl” href=”configuration.xsl”?>
<!–
Licensed under the Apache License, Version 2.0 (the “License”);
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an “AS IS” BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. See accompanying LICENSE file.
–>
<!– Put site-specific property overrides in this file. –>
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
<final>true</final>
</property>
<property>
<name>mapreduce.jobtracker.http.address</name>
<value>master.hadoop:50030</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>master.hadoop:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master.hadoop:19888</value>
</property>
<property>
<name>mapred.job.tracker</name>
<value>http://master.hadoop:9001</value>
</property>
<!– java heap space
<property>
<name>mapred.child.java.opts</name>
<value>-Xmx2000m</value>
</property>
–>
<property>
<name>yarn.app.mapreduce.am.resource.mb</name>
<value>512</value>
</property>
<property>
<name>yarn.app.mapreduce.am.command-opts</name>
<value>-Xmx768m</value>
</property>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
<description>Execution framework.</description>
</property>
<property>
<name>mapreduce.map.cpu.vcores</name>
<value>1</value>
<description>The number of virtual cores required for each map task.</description>
</property>
<property>
<name>mapreduce.reduce.cpu.vcores</name>
<value>1</value>
<description>The number of virtual cores required for each map task.</description>
</property>
<property>
<name>mapreduce.map.memory.mb</name>
<value>512</value>
<description>Larger resource limit for maps.</description>
</property>
<property>
<name>mapreduce.map.java.opts</name>
<value>-Xmx768m</value>
<description>Heap-size for child jvms of maps.</description>
</property>
<property>
<name>mapreduce.reduce.memory.mb</name>
<value>512</value>
<description>Larger resource limit for reduces.</description>
</property>
<property>
<name>mapreduce.reduce.java.opts</name>
<value>-Xmx768m</value>
<description>Heap-size for child jvms of reduces.</description>
</property>
<property>
<name>mapreduce.jobtracker.address</name>
<value>jobtracker.alexjf.net:8021</value>
</property>
</configuration>
yarn-site.xml:
<?xml version=”1.0″?>
<!–
Licensed under the Apache License, Version 2.0 (the “License”);
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an “AS IS” BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. See accompanying LICENSE file.
–>
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
<final>true</final>
</property>
<property>
<name>mapreduce.jobtracker.http.address</name>
<value>master.hadoop:50030</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>master.hadoop:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master.hadoop:19888</value>
</property>
<property>
<name>mapred.job.tracker</name>
<value>http://master.hadoop:9001</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master.hadoop</value>
<description>The hostname of the RM.</description>
</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>
<!– scheduler configuration, for multi-tasks run in queue, avoid mapreduce-run & pyspark ACCEPTED not run problem –>
<property>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
</property>
<property>
<name>yarn.scheduler.fair.preemption</name>
<value>true</value>
</property>
<!– 下面配置用来设置集群利用率的阀值, 默认值0.8f,最多可以抢占到集群所有资源的80% –>
<property>
<name>yarn.scheduler.fair.preemption.cluster-utilization-threshold</name>
<value>1.0</value>
</property>
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>128</value>
<description>Minimum limit of memory to allocate to each container request at the Resource Manager.</description>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>1024</value>
<description>Maximum limit of memory to allocate to each container request at the Resource Manager.</description>
</property>
<property>
<name>yarn.scheduler.minimum-allocation-vcores</name>
<value>1</value>
<description>The minimum allocation for every container request at the RM, in terms of virtual CPU cores. Requests lower than this won’t take effect, and the specified value will get allocated the minimum.</description>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-vcores</name>
<value>2</value>
<description>The maximum allocation for every container request at the RM, in terms of virtual CPU cores. Requests higher than this won’t take effect, and will get capped to this value.</description>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>1024</value>
<description>Physical memory, in MB, to be made available to running containers</description>
</property>
<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>2</value>
<description>Number of CPU cores that can be allocated for containers.</description>
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
<description>Configuration to enable or disable log aggregation</description>
</property>
</configuration>
如有问题,再续。。。