CDH5.8.3 安装部署

原创
2016/12/06 21:06
阅读数 4.8K

  hadoop的发展真快!倒不是想吹各种功能,只是很多命令、特性都在不断变化。比如以前使用的一些命令,这些命令还堂而皇之地出现在各式hadoop宝书上呢,在不断更新的hadoop面前,时不时的已经被提示Depreciated的了。并且,安装部署的东西就像是大学英语六级一样,时间一长,任凭你玩了几年的hadoop都一样可能被一下细节小地方设置错误或者漏掉。还有就是,一些配置过去只是照搬这各类书籍、博文的个代码示例粘来粘去,每一个配置文件的属性没有安心整理过一次。所以,本文趁着最近刚买了个msi,部署环境的机会,再写一篇安装部署CDH的文章。

 

先去下载个CHD5.8.3。我写这篇博文的时候,其实最新的是5.9.0。根据中国公司的习惯,咱就是不用最新的,气死自己。:)

不过,这里我倒是想把下载地址写一下,请用这个:http://archive.cloudera.com/cdh5/cdh/5/

不要去官网上的的下载链接,超级烦,填表单、链接一级级点下去。就用上面这个archive的。

下了之后将hadoop-2.6.0-cdh5.8.3.tar.gz复制到/opt下,所有用户都可见。解压。

啰嗦一下。openjdk卸掉它,记得当初第一次部署hadoop的时候我嫌麻烦,将就着用openjdk了,并且起初一切很正常,后面就坑在几个地方了,最后妥协只能全部重来。

卸载openjdk的方法就参考别人的文章吧,我不写了:

http://blog.csdn.net/tralonzhang/article/details/7773824

http://www.cnblogs.com/sixiweb/archive/2012/11/25/2787684.html

jdk我下的是tar.gz的,没有用rpm的那个。免安装,自己配路径,和hadoop一起都放在/opt下,方便管理,推荐这样做。

环境变量什么的一会儿和hadoop的环境变量一起说吧。

配置hadoop,最重要和繁琐的就是配置hadoop的/opt/hadoop-2.6.0-cdh5.8.3/etc/hadoop目录下的一对配置文件了。

下面我们一个个来吧。

1.配置hadoop的配置文件

(1)配置环境变量——修改hadoop-env.sh

[root@localhost hadoop]# pwd
/opt/hadoop-2.6.0-cdh5.8.3/etc/hadoop
[root@localhost hadoop]# vim hadoop-env.sh 

配置环境变量JAVA_HOME和HADOOP_HOME。注意,这里的配置都是给hadoop配置的,不是系统本身的环境变量。

export JAVA_HOME=/opt/jdk1.8.0_112
export HADOOP_HOME=/opt/hadoop-2.6.0-cdh5.8.3

(本文出自:https://my.oschina.net/happyBKs/blog/801072)

 

(2)配置访问hdfs的主机名和访问端口——修改core-site.xml。

这里配置的端口号是9000.主机名是master。并且master这个主机名必须在系统centos的/etc/host文件中也要配置上。否则就没有然后了:)

[root@localhost hadoop]# vim core-site.xml

fs.default.name配置项:提供HDFS服务的主机名和端口号。例如,这里配置的是HDFS通过master主机的9000端口号提供服务。这个配置项也指明了NameNode'所运行的节点,即主节点。

<?xml version="1.0" encoding="UTF-8"?>
<?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>fs.default.name</name>
        <value>hdfs://master:9000</value>
    </property>
</configuration>

core-site.xml还可以配置的属性有:

 name value  Description 
 fs.default.name hdfs://hadoopmaster:9000 定义HadoopMaster的URI和端口
 fs.checkpoint.dir /opt/data/hadoop1/hdfs/namesecondary1 定义hadoop的name备份的路径,官方文档说是读取这个,写入dfs.name.dir
 fs.checkpoint.period 1800 定义name备份的备份间隔时间,秒为单位,只对snn生效,默认一小时
 fs.checkpoint.size 33554432 以日志大小间隔做备份间隔,只对snn生效,默认64M
 io.compression.codecs

org.apache.hadoop.io.compress.DefaultCodec,
com.hadoop.compression.lzo.LzoCodec,
com.hadoop.compression.lzo.LzopCodec,
org.apache.hadoop.io.compress.GzipCodec,
org.apache.hadoop.io.compress.BZip2Codec
(排版调整,实际配置不要回车)

Hadoop所使用的编解码器,gzip和bzip2为自带,lzo需安装hadoopgpl或者kevinweil,逗号分隔,snappy也需要单独安装
 io.compression.codec.lzo.class com.hadoop.compression.lzo.LzoCodec LZO所使用的压缩编码器 
 topology.script.file.name /hadoop/bin/RackAware.py 机架感知脚本位置 
 topology.script.number.args 1000 机架感知脚本管理的主机数,IP地址 
 fs.trash.interval 10800 HDFS垃圾箱设置,可以恢复误删除,分钟数,0为禁用,添加该项无需重启hadoop
 hadoop.http.filter.initializers

org.apache.hadoop.security.
AuthenticationFilterInitializer
(排版调整,实际配置不要回车)

需要jobtracker,tasktracker
namenode,datanode等http访问端口用户验证使用,需配置所有节点

 hadoop.http.authentication.type simple | kerberos | #AUTHENTICATION_HANDLER_CLASSNAME# 验证方式,默认为简单,也可自己定义class,需配置所有节点
 hadoop.http.authentication.
token.validity
(排版调整,实际配置不要回车)
36000 验证令牌的有效时间,需配置所有节点
 hadoop.http.authentication.
signature.secret
(排版调整,实际配置不要回车)
默认可不写参数 默认不写在hadoop启动时自动生成私密签名,需配置所有节点
 hadoop.http.authentication.cookie.domain domian.tld http验证所使用的cookie的域名,IP地址访问则该项无效,必须给所有节点都配置域名才可以。
 hadoop.http.authentication.
 simple.anonymous.allowed
(排版调整,实际配置不要回车)
true | false 简单验证专用,默认允许匿名访问,true

 hadoop.http.authentication.
kerberos.principal
(排版调整,实际配置不要回车)

HTTP/localhost@$LOCALHOST Kerberos验证专用,参加认证的实体机必须使用HTTP作为K的Name
 hadoop.http.authentication.
kerberos.keytab
(排版调整,实际配置不要回车)
/home/xianglei/hadoop.keytab Kerberos验证专用,密钥文件存放位置
 hadoop.security.authorization true|false Hadoop服务层级验证安全验证,需配合hadoop-policy.xml使用,配置好以后用dfsadmin,mradmin -refreshServiceAcl刷新生效
 io.file.buffer.size 131072 用作序列化文件处理时读写buffer的大小
 hadoop.security.authentication simple | kerberos hadoop本身的权限验证,非http访问,simple或者kerberos
 hadoop.logfile.size 1000000000 设置日志文件大小,超过则滚动新日志
 hadoop.logfile.count 20 最大日志数
 io.bytes.per.checksum 1024 每校验码所校验的字节数,不要大于io.file.buffer.size
 io.skip.checksum.errors true | false 处理序列化文件时跳过校验码错误,不抛异常。默认false
 io.serializations

org.apache.hadoop.io.
serializer.WritableSerialization

(排版需要。实际配置不要回车)

序列化的编解码器
 io.seqfile.compress.blocksize 1024000 块压缩的序列化文件的最小块大小,字节
 webinterface.private.actions true | false 设为true,则JT和NN的tracker网页会出现杀任务删文件等操作连接,默认是false

 

(3)配置hdfs存放方式——副本数、元数据、数据的存放目录。修改hdfs-site.xml。

hdfs-site.xml

dfs.replication配置项:设置HDFS中 文件副本数为3。

dfs.name.dir配置项:设置NameNode的元数据存放的本地文件系统路径。

dfs.data.dir配置项:设置DataNode存放数据的本地问价系统路径。

<?xml version="1.0" encoding="UTF-8"?>
<?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>dfs.replication</name>
        <value>3</value>
    </property>
    <property>
        <name>dfs.name.dir</name>
        <value>/opt/hdfs/name</value>
    </property>
    <property>
        <name>dfs.data.dir</name>
        <value>/opt/hdfs/data</value>
    </property>
</configuration>

hdfs-site.xml其他配置属性:

 name  value Description 
dfs.default.chunk.view.size 32768 namenode的http访问页面中针对每个文件的内容显示大小,通常无需设置。
dfs.datanode.du.reserved 1073741824 每块磁盘所保留的空间大小,需要设置一些,主要是给非hdfs文件使用,默认是不保留,0字节
dfs.name.dir /opt/data1/hdfs/name,
/opt/data2/hdfs/name,
/nfs/data/hdfs/name
NN所使用的元数据保存,一般建议在nfs上保留一份,作为1.0的HA方案使用,也可以在一台服务器的多块硬盘上使用
dfs.web.ugi nobody,nobody NN,JT等所使用的web tracker页面服务器所使用的用户和组
dfs.permissions true | false dfs权限是否打开,我一般设置false,通过开发工具培训别人界面操作避免误操作,设置为true有时候会遇到数据因为权限访问不了。
dfs.permissions.supergroup supergroup 设置hdfs超级权限的组,默认是supergroup,启动hadoop所使用的用户通常是superuser。
dfs.data.dir /opt/data1/hdfs/data,
/opt/data2/hdfs/data,
/opt/data3/hdfs/data,
...
真正的datanode数据保存路径,可以写多块硬盘,逗号分隔
dfs.datanode.data.dir.perm 755 datanode所使用的本地文件夹的路径权限,默认755
dfs.replication 3 hdfs数据块的复制份数,默认3,理论上份数越多跑数速度越快,但是需要的存储空间也更多。有钱人可以调5或者6
dfs.replication.max 512 有时dn临时故障恢复后会导致数据超过默认备份数。复制份数的最多数,通常没什么用,不用写配置文件里。
dfs.replication.min 1 最小份数,作用同上。
dfs.block.size 134217728 每个文件块的大小,我们用128M,默认是64M。这个计算需要128*1024^2,我碰上过有人直接写128000000,十分浪漫。
dfs.df.interval 60000 磁盘用量统计自动刷新时间,单位是毫秒。
dfs.client.block.write.retries 3 数据块写入的最多重试次数,在此次数之前不会捕获失败。
dfs.heartbeat.interval 3 DN的心跳检测时间间隔。秒
dfs.namenode.handler.count 10 NN启动后展开的线程数。
dfs.balance.bandwidthPerSec 1048576 做balance时所使用的每秒最大带宽,使用字节作为单位,而不是bit
dfs.hosts /opt/hadoop/conf/hosts.allow 一个主机名列表文件,这里的主机是允许连接NN的,必须写绝对路径,文件内容为空则认为全都可以。
dfs.hosts.exclude /opt/hadoop/conf/hosts.deny 基本原理同上,只不过这里放的是禁止访问NN的主机名称列表。这在从集群中摘除DN会比较有用。
dfs.max.objects 0 dfs最大并发对象数,HDFS中的文件,目录块都会被认为是一个对象。0表示不限制
dfs.replication.interval 3 NN计算复制块的内部间隔时间,通常不需写入配置文件。默认就好
dfs.support.append true | false 新的hadoop支持了文件的APPEND操作,这个就是控制是否允许文件APPEND的,但是默认是false,理由是追加还有bug。
dfs.datanode.failed.volumes.tolerated 0 能够导致DN挂掉的坏硬盘最大数,默认0就是只要有1个硬盘坏了,DN就会shutdown。
dfs.secondary.http.address 0.0.0.0:50090 SNN的tracker页面监听地址和端口
dfs.datanode.address 0.0.0.0:50010 DN的服务监听端口,端口为0的话会随机监听端口,通过心跳通知NN
dfs.datanode.http.address 0.0.0.0:50075 DN的tracker页面监听地址和端口
dfs.datanode.ipc.address 0.0.0.0:50020 DN的IPC监听端口,写0的话监听在随机端口通过心跳传输给NN
dfs.datanode.handler.count 3 DN启动的服务线程数
dfs.http.address 0.0.0.0:50070 NN的tracker页面监听地址和端口
dfs.https.enable true | false NN的tracker是否监听在HTTPS协议,默认false
dfs.datanode.https.address 0.0.0.0:50475 DN的HTTPS的tracker页面监听地址和端口
dfs.https.address 0.0.0.0:50470 NN的HTTPS的tracker页面监听地址和端口
dfs.datanode.max.xcievers 2048 相当于linux下的打开文件最大数量,文档中无此参数,当出现DataXceiver报错的时候,需要调大。默认256

dfs.name.dir
Determines where on the local filesystem the DFS name node should store the name table(fsimage). If this is a comma-delimited list of directories then the name table is replicated in all of the directories, for redundancy.
这个参数用于确定将HDFS文件系统的元信息保存在什么目录下。
如果这个参数设置为多个目录,那么这些目录下都保存着元信息的多个备份。

 

(4)配置mapreduce框架——修改mapred-site.xml。

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>
    </property>
</configuration>

该配置指明Mapreduce计算框架是基于YARN进行工作的。

顺便说一下:

mapred代表的是hadoop旧API,而mapreduce代表的是hadoop新的API

以下是mapred-site.xml的配置属性列表:

name value Description
hadoop.job.history.location   job历史文件保存路径,无可配置参数,也不用写在配置文件里,默认在logs的history文件夹下。
hadoop.job.history.user.location   用户历史文件存放位置
io.sort.factor 30 这里处理流合并时的文件排序数,我理解为排序时打开的文件数
io.sort.mb 600 排序所使用的内存数量,单位兆,默认1,我记得是不能超过mapred.child.java.opt设置,否则会OOM
mapred.job.tracker hadoopmaster:9001 连接jobtrack服务器的配置项,默认不写是local,map数1,reduce数1
mapred.job.tracker.http.address 0.0.0.0:50030 jobtracker的tracker页面服务监听地址
mapred.job.tracker.handler.count 15 jobtracker服务的线程数
mapred.task.tracker.report.address 127.0.0.1:0 tasktracker监听的服务器,无需配置,且官方不建议自行修改
mapred.local.dir /data1/hdfs/mapred/local,
/data2/hdfs/mapred/local,
...
mapred做本地计算所使用的文件夹,可以配置多块硬盘,逗号分隔
mapred.system.dir /data1/hdfs/mapred/system,
/data2/hdfs/mapred/system,
...
mapred存放控制文件所使用的文件夹,可配置多块硬盘,逗号分隔。
mapred.temp.dir /data1/hdfs/mapred/temp,
/data2/hdfs/mapred/temp,
...
mapred共享的临时文件夹路径,解释同上。
mapred.local.dir.minspacestart 1073741824 本地运算文件夹剩余空间低于该值则不在本地做计算。字节配置,默认0
mapred.local.dir.minspacekill 1073741824 本地计算文件夹剩余空间低于该值则不再申请新的任务,字节数,默认0
mapred.tasktracker.expiry.interval 60000 TT在这个时间内没有发送心跳,则认为TT已经挂了。单位毫秒
mapred.map.tasks 2 默认每个job所使用的map数,意思是假设设置dfs块大小为64M,需要排序一个60M的文件,也会开启2个map线程,当jobtracker设置为本地是不起作用。
mapred.reduce.tasks 1 解释同上
mapred.jobtracker.restart.recover true | false 重启时开启任务恢复,默认false
mapred.jobtracker.taskScheduler org.apache.hadoop.mapred.
CapacityTaskScheduler

org.apache.hadoop.mapred.
JobQueueTaskScheduler

org.apache.hadoop.mapred.
FairScheduler
重要的东西,开启任务管理器,不设置的话,hadoop默认是FIFO调度器,其他可以使用公平和计算能力调度器
mapred.reduce.parallel.copies 10 reduce在shuffle阶段使用的并行复制数,默认5
mapred.child.java.opts

-Xmx2048m

-Djava.library.path=
/opt/hadoopgpl/native/
Linux-amd64-64

每个TT子进程所使用的虚拟机内存大小
tasktracker.http.threads 50 TT用来跟踪task任务的http server的线程数
mapred.task.tracker.http.address 0.0.0.0:50060 TT默认监听的httpIP和端口,默认可以不写。端口写0则随机使用。
mapred.output.compress true | false 任务结果采用压缩输出,默认false,建议false
mapred.output.compression.codec org.apache.hadoop.io.
compress.DefaultCodec
输出结果所使用的编解码器,也可以用gz或者bzip2或者lzo或者snappy等
mapred.compress.map.output true | false map输出结果在进行网络交换前是否以压缩格式输出,默认false,建议true,可以减小带宽占用,代价是会慢一些。
mapred.map.output.compression.codec com.hadoop.compression.
lzo.LzoCodec
map阶段压缩输出所使用的编解码器
map.sort.class org.apache.hadoop.util.
QuickSort
map输出排序所使用的算法,默认快排。
mapred.hosts conf/mhost.allow 允许连接JT的TT服务器列表,空值全部允许
mapred.hosts.exclude conf/mhost.deny 禁止连接JT的TT列表,节点摘除是很有作用。
mapred.queue.names ETL,rush,default 配合调度器使用的队列名列表,逗号分隔
mapred.tasktracker.map.
tasks.maximum
12 每服务器允许启动的最大map槽位数。
mapred.tasktracker.reduce.
tasks.maximum
6 每服务器允许启动的最大reduce槽位数

 

(5)配置Yarn的ResouceManager服务的主机名和端口号等——修改yarn-site.xml

yarn-site.xml

以下配置项指明了ResourceManager服务的主机名和端口号,另外还指明了mapreduce_shuffle的类。

<?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>

<!-- Site specific YARN configuration properties -->
    <property>
        <name>yarn.resourcemanager.address</name>
        <value>master:8080</value>
    </property>
    <property>
        <name>yarn.resourcemanager.resource-tracker.address</name>
        <value>master:8082</value>
    </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>
</configuration>

为了能够运行MapReduce程序,需要让各个NodeManager在启动时加载shuffle server,shuffle server实际上是Jetty/Netty Server,Reduce Task通过该server从各个NodeManager上远程拷贝Map Task产生的中间结果。上面增加的两个配置均用于指定shuffle serve。如果YARN集群有多个节点,你还要配置yarn.resourcemanager.address等参数,具体参考Cloudera的这篇文档:Deploying MapReduce v2 (YARN) on a Cluster

 

ResourceManager相关配置参数
(1) yarn.resourcemanager.address
参数解释:ResourceManager 对客户端暴露的地址。客户端通过该地址向RM提交应用程序,杀死应用程序等。
默认值:${yarn.resourcemanager.hostname}:8032
(2) yarn.resourcemanager.scheduler.address
参数解释:ResourceManager 对ApplicationMaster暴露的访问地址。ApplicationMaster通过该地址向RM申请资源、释放资源等。
默认值:${yarn.resourcemanager.hostname}:8030
(3) yarn.resourcemanager.resource-tracker.address
参数解释:ResourceManager 对NodeManager暴露的地址.。NodeManager通过该地址向RM汇报心跳,领取任务等。
默认值:${yarn.resourcemanager.hostname}:8031
(4) yarn.resourcemanager.admin.address
参数解释:ResourceManager 对管理员暴露的访问地址。管理员通过该地址向RM发送管理命令等。
默认值:${yarn.resourcemanager.hostname}:8033
(5) yarn.resourcemanager.webapp.address
参数解释:ResourceManager对外web ui地址。用户可通过该地址在浏览器中查看集群各类信息。
默认值:${yarn.resourcemanager.hostname}:8088
(6) yarn.resourcemanager.scheduler.class
参数解释:启用的资源调度器主类。目前可用的有FIFO、Capacity Scheduler和Fair Scheduler。
默认值:
org.apache.Hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler
(7) yarn.resourcemanager.resource-tracker.client.thread-count
参数解释:处理来自NodeManager的RPC请求的Handler数目。
默认值:50
(8) yarn.resourcemanager.scheduler.client.thread-count
参数解释:处理来自ApplicationMaster的RPC请求的Handler数目。
默认值:50
(9) yarn.scheduler.minimum-allocation-mb/ yarn.scheduler.maximum-allocation-mb
参数解释:单个可申请的最小/最大内存资源量。比如设置为1024和3072,则运行MapRedce作业时,每个Task最少可申请1024MB内存,最多可申请3072MB内存。
默认值:1024/8192
(10) yarn.scheduler.minimum-allocation-vcores / yarn.scheduler.maximum-allocation-vcores
参数解释:单个可申请的最小/最大虚拟CPU个数。比如设置为1和4,则运行MapRedce作业时,每个Task最少可申请1个虚拟CPU,最多可申请4个虚拟CPU。什么是虚拟CPU,可阅读我的这篇文章:“YARN 资源调度器剖析”。
默认值:1/32
(11) yarn.resourcemanager.nodes.include-path /yarn.resourcemanager.nodes.exclude-path
参数解释:NodeManager黑白名单。如果发现若干个NodeManager存在问题,比如故障率很高,任务运行失败率高,则可以将之加入黑名单中。注意,这两个配置参数可以动态生效。(调用一个refresh命令即可)
默认值:“”
(12) yarn.resourcemanager.nodemanagers.heartbeat-interval-ms
参数解释:NodeManager心跳间隔
默认值:1000(毫秒)
2.    NodeManager相关配置参数
(1) yarn.nodemanager.resource.memory-mb
参数解释:NodeManager总的可用物理内存。注意,该参数是不可修改的,一旦设置,整个运行过程中不可动态修改。另外,该参数的默认值是8192MB,即使你的机器内存不够8192MB,YARN也会按照这些内存来使用(傻不傻?),因此,这个值通过一定要配置。不过,Apache已经正在尝试将该参数做成可动态修改的。
默认值:8192
(2) yarn.nodemanager.vmem-pmem-ratio
参数解释:每使用1MB物理内存,最多可用的虚拟内存数。
默认值:2.1
(3) yarn.nodemanager.resource.cpu-vcores
参数解释:NodeManager总的可用虚拟CPU个数。
默认值:8
(4) yarn.nodemanager.local-dirs
参数解释:中间结果存放位置,类似于1.0中的mapred.local.dir。注意,这个参数通常会配置多个目录,已分摊磁盘IO负载。
默认值:${hadoop.tmp.dir}/nm-local-dir
(5) yarn.nodemanager.log-dirs
参数解释:日志存放地址(可配置多个目录)。
默认值:${yarn.log.dir}/userlogs
(6) yarn.nodemanager.log.retain-seconds
参数解释:NodeManager上日志最多存放时间(不启用日志聚集功能时有效)。
默认值:10800(3小时)
(7) yarn.nodemanager.aux-services
参数解释:NodeManager上运行的附属服务。需配置成mapreduce_shuffle,才可运行MapReduce程序

 

(6)指明主节点同时运行的DataNode和NodeManager——修改slaves
在slaves文件中添加你的节点ip或者host:

master

这里我们追加一个master。
如果有多个NodeManager,可一次添加到该文件中,每个占一行。

 

2.配置linux系统的各项配置

(1)配置系统环境变量:

    export HISTCONTROL=ignoreboth
else
    export HISTCONTROL=ignoredups
fi

export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL

# By default, we want umask to get set. This sets it for login shell
# Current threshold for system reserved uid/gids is 200
# You could check uidgid reservation validity in
# /usr/share/doc/setup-*/uidgid file
if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
    umask 002
else
    umask 022
fi

for i in /etc/profile.d/*.sh ; do
    if [ -r "$i" ]; then
        if [ "${-#*i}" != "$-" ]; then
            . "$i"
        else
            . "$i" >/dev/null
        fi
    fi
done

unset i
unset -f pathmunge


export JAVA_HOME=/opt/jdk1.8.0_112
export PATH=$PATH:$JAVA_HOME/bin

export HADOOP_HOME=/opt/hadoop-2.6.0-cdh5.8.3
export PATH=$PATH:$HADOOP_HOME/bin

便忘了,source一下。

[root@localhost hadoop]# source /etc/profile

小插曲,sh  执行shell脚本和source 某个文件有什么不同吗?sh某个shell脚本运行在某个子shell的环境下,运行完就退出了;而source某个文件,是将该文件中的脚本语句放到当前bash环境下执行,这是最本质的不同噢。

如果不能理解,请在一个脚本中写一句cd 某个目录的语句。比较一下就明白了。sh执行它,你的bash所在目录不会发生变化,因为cd的目录切换发生在子shell的环境中,执行完就退出了,你还是在你原先的目录;而source执行它,则是将cd语句放到你当前的bash下执行,你会发现的所在目录切换到cd所指向的目录去了。

 

(2)配置主机系统host。

[root@localhost hadoop]# vim /etc/host

看图做吧。

 

(3)防火墙开房hdfs的50070端口。

不然,你不能从远端访问你的hdfs。也就是说,如果不配置防火墙开发50070端口,一会儿启动hdfs服务之后,你发现,你只能在虚拟机里的linux上查看hdfs服务,而笔记本的浏览器无法访问。

 

注意上面两张图的差别,一个配置的是“运行时”,一个是“永久”。不要只配置了“运行时”哦,不然下次重启虚拟机之后,你会很郁闷怎么又不行了,当你打开防火墙配置之后,会发现,之前的配置没了。

 

 

最后象征性的试试dfs的各个命令,作为hadoop配置之后的验证:

格式化

[root@localhost hadoop]# hadoop namenode -format

 

 

16/11/28 06:03:32 INFO common.Storage: Storage directory /opt/hdfs/name has been successfully formatted.

 

 

 

 

 

启动namenode:

[root@localhost sbin]# ./hadoop-daemon.sh start namenode
starting namenode, logging to /opt/hadoop-2.6.0-cdh5.8.3/logs/hadoop-hadoop-namenode-localhost.localdomain.out
[root@localhost sbin]# jps
4155 Jps
4092 NameNode
[root@localhost sbin]# 

 

 

可以查看启动日志:

 

启动datanode

[root@localhost hadoop-2.6.0-cdh5.8.3]# sbin/hadoop-daemon.sh start datanode

 

启动yarn:

[root@localhost hadoop-2.6.0-cdh5.8.3]# sbin/start-yarn.sh

 

查看一下jvm上的相关进程,发现本节点上已经运行了NameNode、DataNode等进程。

[hadoop@localhost ~]$ su
Password: 
[root@localhost hadoop]# jps
4945 NodeManager
3412 NameNode
18884 Jps
4491 ResourceManager
3500 DataNode

 

 

试着在hfds上创建个目录。

 

 

 

[root@localhost hadoop-2.6.0-cdh5.8.3]# bin/hadoop fs -mkdir /myhome

用本地浏览器访问远程虚拟机的hdfs:

ip地址是虚拟机的ip。这个管理接口默认的端口是50070.注意:别忘了虚拟机要为这个端口开放防火墙噢!!!!!

查看一下hdfs上的文件及目录。

[root@localhost hadoop-2.6.0-cdh5.8.3]# bin/hadoop fs -ls /
16/12/04 06:42:04 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Found 1 items
drwxr-xr-x   - root supergroup          0 2016-12-04 06:18 /myhome

 

再试试递归查看hfds上的文件及目录

[root@localhost hadoop-2.6.0-cdh5.8.3]# bin/hadoop fs -mkdir /myhome/happyBKs
16/12/04 06:46:28 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
[root@localhost hadoop-2.6.0-cdh5.8.3]# 
[root@localhost hadoop-2.6.0-cdh5.8.3]# bin/hadoop fs -lsr /
lsr: DEPRECATED: Please use 'ls -R' instead.
16/12/04 06:46:40 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
drwxr-xr-x   - root supergroup          0 2016-12-04 06:46 /myhome
drwxr-xr-x   - root supergroup          0 2016-12-04 06:46 /myhome/happyBKs
[root@localhost hadoop-2.6.0-cdh5.8.3]# 

 

上面的命令用的是fs。用dfs也可以。不过,这些命令在新版的hadoop上都已经被DEPRECATED了!就是不推荐使用这种命令查看hdfs文件系统了。

[root@localhost hadoop-2.6.0-cdh5.8.3]# bin/hadoop dfs -ls /
DEPRECATED: Use of this script to execute hdfs command is deprecated.
Instead use the hdfs command for it.

16/12/04 06:49:04 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Found 1 items
drwxr-xr-x   - root supergroup          0 2016-12-04 06:46 /myhome

[root@localhost hadoop-2.6.0-cdh5.8.3]# bin/hdfs dfs -ls /
16/12/04 06:51:58 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Found 1 items
drwxr-xr-x   - root supergroup          0 2016-12-04 06:46 /myhome
[root@localhost hadoop-2.6.0-cdh5.8.3]# 

现在推荐使用的是:hdfs dfs -ls ,这个现在很多今年新版的hadoop书籍上还没有改成用这个命令。这里算是特别推荐一下官方推荐的使用方式吧。

[root@localhost hadoop-2.6.0-cdh5.8.3]# hdfs dfs -ls /
16/12/06 05:00:53 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Found 1 items
drwxr-xr-x   - root supergroup          0 2016-12-04 06:46 /myhome

还有,特别说明一下,上面的每个命令运行时都会报个警告。这个很坑,是发布的编译版本造成的。

有个WARN提示hadoop不能加载本地库,网上搜了下,这个问题基本上是由于在apache hadoop官网上下载的hadoopXXX.bin.tar.gz实在32位的机器上编译的(蛋疼吧),我集群使用的64bit的,加载.so文件时出错,当然基本上不影响使用hadoop(如果你使用mahout做一些机器学习的任务时有可能会遇到麻烦,加载不成功,任务直接退出,所以还是有必要解决掉这个warn的)。

 

 

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
20 收藏
2
分享
返回顶部
顶部