您的位置:首页 > 运维架构

hadoop2.7文档翻译第一天

2015-11-09 17:59 323 查看

Apache Hadoop 2.7.1 文档要点翻译(仅供学习备忘)

概述:

1. 这个版本的hadoop只能支持jdk7+,低版本不支持了

单节点模式安装

1. 前提条件

系统:Linux

软件:java 和 ssh(为了使用hadoop脚本管理远程hadoop守护进程)

sudo apt-get install ssh

sudo apt-get install rsync

java:/article/8149183.html

ssh:http://jingyan.baidu.com/article/148a1921a220c94d70c3b168.html

2. 下载hadoop

http://www.apache.org/dyn/closer.cgi/hadoop/common/

3. 解压下载的hadoop,编辑etc/hadoop/hadoop-env.sh

加入export JAVA_HOME=”…”

4. 在shell中输入bin/hadoop用来显示hadoop可用的命令类型

本地模式:

1. 默认的,易于debug

2. 下面的例子复制hadoop的conf目录作为输入,找出符合正则表达式的字符串,输出被写道output文件夹

$ mkdir input

$ cp etc/Hadoop/*.xml input

$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.1.jar grep input output 'dfs[a-z.]+'

$ cat output/*

伪分布模式:

1. Hadoop也是运行在单一节点,但是每个hadoop守护进程运行在不同的java进程

2. 编辑etc/hadoop/core-site.xml

<configuration>

<property>

<name>fs.defaultFS</name>

<value>hdfs://localhost:9000</value>

</property>

</configuration>

3. 编辑etc/hadoop/hdfs-site.xml

<configuration>

<property>

<name>dfs.replication</name>

<value>1</value>

</property>

</configuration>

4. 设置没有密码的ssh

先使用$ ssh localhost检验一下有没有密码

如果不能正常连接,则使用以下命令

$ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa

$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

$ export HADOOP\_PREFIX=/usr/local/Hadoop

5. 执行:

5.1 使用$ bin/hdfs namenode –format初始化文件系统

5.2 使用$ sbin/start-dfs.sh启动名字节点和数据节点,hadoop的输出写到$HADOOP_LOG_DIR,默认是 $HADOOP_HOME/logs

5.3 打开http://localhost:50070/浏览名字节点

5.4 创建执行mapreduce所需的hdfs目录

$ bin/hdfs dfs -mkdir /user

$ bin/hdfs dfs -mkdir /user/<username>

5.5 把输入文件复制到分布式的hdfs目录

$ bin/hdfs dfs -put etc/hadoop input

5.6 运行刚说的提供的例子

$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.1.jar grep input output 'dfs[a-z.]+'

5.7 把分布式的文件系统的output文件夹复制到本地,并浏览器内容

$ bin/hdfs dfs -get output output

$ cat output/*

或者直接在hdfs中浏览output文件夹的内容

$ bin/hdfs dfs -cat output/*

5.8 当你做完了,使用$ sbin/stop-dfs.sh关闭守护进程

5.9 在yarn中实现伪分布

1. 完成以上1到4步

2. 编辑etc/hadoop/mapred-site.xml

<configuration>

<property>

<name>mapreduce.framework.name</name>

<value>yarn</value>

</property>

</configuration>

3. 编辑etc/hadoop/yarn-site.xml

<configuration>

<property>

<name>yarn.nodemanager.aux-services</name>

<value>mapreduce_shuffle</value>

</property>

</configuration>

4. 启动ResourceManager和NodeManager

$ sbin/start-yarn.sh

5. 打开http://localhost:8088/浏览ResourceManager

6. 运行一个mapreduce的job

7. 当你完成了,使用stop-yarn.sh关闭守护进程

集群安装:

1. 典型的一个机器作为NameNode,另一个作为ResourceManager,很明显,他们是领导整个集群的,其他的服务一般运行在专用的机器上或者共享的基础设施上,这根据负载情况,其他的机器既是datanode也是nodemanager,他们是奴隶

2. 在非安全模式下配置hadoop

HDFS守护进程:NameNode,SecondaryNameNode,DataNode

YARN守护进程:ResourceManager,NodeManager,WebAppProxy

使用MapReduce的任务历史服务器也会运行,他们经常运行在不同的主机上

编辑etc/Hadoop/hadoop-env.sh

HADOOP_PID_DIR, HADOOP_LOG_DIR, HADOOP_HEAPSIZE / YARN_HEAPSIZE

可以选择编辑/etc/profile.d

HADOOP_PREFIX=/path/to/hadoop

export HADOOP_PREFIX

3. 编辑etc/hadoop/core-site.xml

Parameter Value Notes

fs.defaultFS NameNode URI hdfs://host:port/

io.file.buffer.size 131072 顺序文件的读写缓存区大小

编辑etc/hadoop/hdfs-site.xml

NameNode的编辑如下:

Parameter Value Notes

dfs.namenode.name.dir namenode存储名字空间 如果是多个以逗号隔

和事务日志的地方 开的文件夹,则命名表在所有文件夹里都是重复的

dfs.hosts /

dfs.hosts.exclude 列出允许或隔离的datanode 允许的datanode的列表

dfs.blocksize 268435456 HDFS的块大小

dfs.namenode.handler.count 100 namenode线程

DataNode的编辑如下:

Dfs.datanode.data.dir datanode存储数据的文件夹 可以以逗号隔开(是不是重复的,求帮助)

编辑etc/hadoop/yarn-site.xml,配置ResoureManager和NodeManager

Parameter Value Notes

yarn.acl.enable true /false 允许访问控制表,默认为false

yarn.admin.acl Admin ACL 默认为*,意味着任何人

yarn.log-aggregation-enable false 是否允许日志聚集(????什么意思)

配置ResourceManager

Parameter Value Notes

yarn.resourcemanager.address host:port让客户去提交工作 host:port重写yarn.resourcemanager.hostname.

yarn.resourcemanager.scheduler.address host:port用于ApplicationMasters 与Scheduler对话去获取资源 host:port 重写yarn.resourcemanager.hostname.

yarn.resourcemanager.resource-tracker.address 设置host:port 为了 NodeManagers. host:port重写yarn.resourcemanager.hostname.

yarn.resourcemanager.admin.address 管理命令的host:port host:port重写yarn.resourcemanager.hostname.

yarn.resourcemanager.webapp.address web-ui host:port. host:port重写yarn.resourcemanager.hostname.

yarn.resourcemanager.hostname host.

yarn.resourcemanager.scheduler.class Scheduler class. CapacityScheduler (recommended),

FairScheduler (also recommended),

or FifoScheduler

yarn.scheduler.minimum-allocation-mb 容器所能请求的最小内存 单位: MBs

yarn.scheduler.maximum-allocation-mb 容器所能请求的最大内存 单位: MBs

yarn.resourcemanager.nodes.include-path /yarn.resourcemanager.nodes.exclude-path 列出允许或者不允许的 NodeManagers. 限制nodemanager对resourcemanager的访问

配置NodeManager:

Parameter Value Notes

yarn.nodemanager.resource.memory-mb 对于给定的NodeManager,给出以MB为单位的可用内存 能让容器运行的可用内存

yarn.nodemanager.vmem-pmem-ratio 虚拟地址和物理地址的最大比值 虚拟内存可以超过物理内存,但是要参照这个比例

yarn.nodemanager.local-dirs 以逗号分离的存有中介数据的本地文件系统 多个路径帮助分散磁盘IO

yarn.nodemanager.log-dirs 以逗号分离的存有日志的本地文件目录 多个路径帮助分散磁盘IO

yarn.nodemanager.log.retain-seconds 10800 默认的去保持日志文件在NodeManager的存储时

间,以秒为单位,只有log-aggregation不可用的

时候这个选项可以用

yarn.nodemanager.remote-app-log-dir /logs 只有log-aggregation可用的时候这个选项可以用

HDFS存储日志的地方

yarn.nodemanager.remote-app-log-dir-suffix logs 远程日志的后缀,日志将要被聚集在 ${yarn.nodemanager.remote-app-log-dir}

/${user}/${thisParam} 只有log-aggregation

可用的时候这个选项可以用

yarn.nodemanager.aux-services mapreduce_shuffle MapReduce所需要的shuffle服务

配置History Server(需要被移动到其他地方)

Parameter Value Notes

yarn.log-aggregation.retain-seconds -1 保存一个聚集日志多久,-1表示不删除,不能设置的太小,不然

Namenode将变为垃圾

yarn.log-aggregation.retain-check-interval-seconds -1 检查聚集日志存留时间的时间间隔,设置为0和负数则

检查时间为日志存留时间的1/10,不能设置太小

编辑etc/hadoop/mapred-site.xml

MapReduce应用配置

Parameter Value Notes

mapreduce.framework.name yarn Hadoop YARN的执行框架

mapreduce.map.memory.mb 1536 Maps的资源限制

mapreduce.map.java.opts -Xmx1024M Maps的子的jvm的heap-size

mapreduce.reduce.memory.mb 3072 Reduce的更大的资源限制

mapreduce.reduce.java.opts -Xmx2560M Reduces的子的jvm的heap-size

mapreduce.task.io.sort.mb 512 排序数据时更高的内存限制

mapreduce.task.io.sort.factor 100 排序文件时一次合并更多的流

mapreduce.reduce.shuffle.parallelcopies 50 Reduce并行从大量maps的输出的数量

配置 MapReduce JobHistory Server

Parameter Value Notes

mapreduce.jobhistory.address 任务历史服务器的地址,host:port的形式 默认端口10020.

mapreduce.jobhistory.webapp.address 任务历史服务器Web UI的地址,host:port的形式 默认端口 19888.

mapreduce.jobhistory.intermediate-done-dir /mr-history/tmp MapReduce任务写历史文件

的地方

mapreduce.jobhistory.done-dir /mr-history/done 历史文件被jobhistory管理

的目录.

监测NodeManagers的健康

管理员可以使用hadoop提供的一个周期性运行一个管理员脚本的机制去决定一个节点的健康程度,管理员可以实施检查,如果脚本监测到节点处于不健康状态,他将要输出一个以ERROR开头的字符串,NodeManager周期性的大量产生脚本并且检查他的输出,如果脚本的输出包含ERROR,像上面所说的,节点的状态是不健康的并且被ResourceManager加入了黑名单,不再会有任务安排到这个节点,然而,NodeManager继续去运行脚本,目的是如果节点再次变得健康,ResourceManager将自动从黑名单中移除他,不管一个节点健康与否,他都会展示在web接口中,能被ResourceManager管理(好像就是网页中可以看到???)

下面的参数可以被用来控制在etc/hadoop/yarn-site.xml一个节点的健康监视脚本

Parameter Value Notes

yarn.nodemanager.health-checker.script.path 节点健康脚本 检查节点健康状态的脚本

yarn.nodemanager.health-checker.script.opts 节点健康选项 为检查健康脚本的选将

yarn.nodemanager.health-checker.script.interval-ms 节点健康脚本时间 运行健康检查脚本的时间间隔

yarn.nodemanager.health-checker.script.timeout-ms 节点健康脚本的超时间隔 脚本执行的超时间隔

只有本地磁盘损坏健康检查脚本才可以输出ERROR,NodeManager有能力去周期性的检查本地磁盘的健康(尤其可以检查nodemanager-local-dirs和nodemanager-log-dirs),在达到根据yarn.nodemanager.disk-health-checker.min-healthy-disks属性所推断的可以损坏的目录的阀值之后,整个节点就被标记为不健康并且这个信息会被发送到ResourceManager,启动盘的好坏由健康检查脚本定义(?????这翻译的对么,,)

奴隶文件

列出所有的奴隶主机名或者IP地址在etc/hadoop/slaves中,每一行一个,帮助者脚本将要用etc/hadoop/slaves文件在多个机器上立刻运行命令,这个不是为了基于java的hadoop配置,为了用这个功能,ssh信任必须被建立,(通过无密码的ssh或者其他方法,例如Kerberos)

Hadoop机架意识:

很多hadoop组件是机架感知的并且利用了网络的拓扑去实现安全性,hadoop守护进程通过调用一个管理模块获得集群中奴隶主机的信息,建议在启动HDFS之前配置机架感知

日志:

Hadoop使用Apache log4j (http://logging.apache.org/log4j/2.x/)通过Apache的公共日志框架去记录日志,编辑etc/hadoop/log4j.properties去自定义hadoop 守护进程的日志配置(日志格式或者其他)

操控hadoop集群

一旦所有的必要的配置完成了,把文件分发到在所有的机器上的HADOOP_CONF_DIR目录下,在所有机器上,这应该是同一个目录

一般来说,建议HDFS和YARN作为分开的用户运行,在大多数的安装中,HDFS以“hdfs”运行,YARN以“yarn”运行,

Hadoop安装:

为了启动一个hadoop集群,你需要启动HDFS和YARN集群

第一次你启动HDFS,他必须被格式化,格式化一个文件系统:

[hdfs]$ $HADOOP_PREFIX/bin/hdfs namenode -format <cluster_name>

用下列的命令启动HDFS NameNode

[hdfs]$ $HADOOP_PREFIX/sbin/hadoop-daemon.sh --config $HADOOP_CONF_DIR --script hdfs start namenode

启动一个DataNode

[hdfs]$ $HADOOP_PREFIX/sbin/hadoop-daemons.sh --config $HADOOP_CONF_DIR --script hdfs start datanode

如果etc/hadoop/slaves和ssh信任被配置,所有的HDFS能被统一的脚本启动

[hdfs]$ $HADOOP_PREFIX/sbin/start-dfs.sh

在ResourceManager上启动YARN:

[yarn]$ $HADOOP_YARN_HOME/sbin/yarn-daemon.sh --config $HADOOP_CONF_DIR start resourcemanager

在NodeManager上启动YARN

[yarn]$ $HADOOP_YARN_HOME/sbin/yarn-daemons.sh --config $HADOOP_CONF_DIR start nodemanager

启动一个单独的WebAppProxy上的YARN,如果有多个服务器被用来负载均衡,他应该运行在这些服务器的每一个上

[yarn]$ $HADOOP_YARN_HOME/sbin/yarn-daemon.sh --config $HADOOP_CONF_DIR start proxyserver

如果etc/hadoop/slaves和ssh信任被配置,所有的HDFS能被统一的脚本启动

[yarn]$ $HADOOP_PREFIX/sbin/start-yarn.sh

用下列的命令启动MapReduce JobHistory Server

[mapred]$ $HADOOP_PREFIX/sbin/mr-jobhistory-daemon.sh --config $HADOOP_CONF_DIR start historyserver

关闭hadoop:

停止一个NameNode:

[hdfs]$ $HADOOP_PREFIX/sbin/hadoop-daemon.sh --config $HADOOP_CONF_DIR --script hdfs stop namenode

停止一个DataNode:

[hdfs]$ $HADOOP_PREFIX/sbin/hadoop-daemons.sh --config $HADOOP_CONF_DIR --script hdfs stop datanode

如果etc/hadoop/slaves和ssh信任被配置,所有的HDFS能被统一的脚本停止

[hdfs]$ $HADOOP_PREFIX/sbin/stop-dfs.sh

停止ResourceManager上的Yarn

[yarn]$ $HADOOP_YARN_HOME/sbin/yarn-daemon.sh --config $HADOOP_CONF_DIR stop resourcemanager

停止NodeManager上的Yarn

[yarn]$ $HADOOP_YARN_HOME/sbin/yarn-daemons.sh --config $HADOOP_CONF_DIR stop nodemanager

如果etc/hadoop/slaves和ssh信任被配置,所有的YARN能被统一的脚本停止

[yarn]$ $HADOOP_PREFIX/sbin/stop-yarn.sh

停止WebAppProxy,如果多个服务器被用来负载均衡,他们都应该运行下面的指令

[yarn]$ $HADOOP_YARN_HOME/sbin/yarn-daemon.sh --config $HADOOP_CONF_DIR stop proxyserver

停止MapReduce JobHistory Server 用下面的命令

[mapred]$ $HADOOP_PREFIX/sbin/mr-jobhistory-daemon.sh --config $HADOOP_CONF_DIR stop historyserver

Web接口

一旦hadoop集群启动了,检查web-ui

Daemon Web Interface Notes

NameNode http://nn_host:port/

Default HTTP port is 50070.

ResourceManager http://rm_host:port/

Default HTTP port is 8088.

MapReduce JobHistory Server http://jhs_host:port/

Default HTTP port is 19888.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: