hadoop

前置条件:

Linux + JDK

master-slave架构:

masters: NameNode + ResourceManager

slaves: DataNode/NodeManager

守护进程:

HDFS: NameNode, SecondaryNameNode, DataNode

YARN: ResourceManager, NodeManager, WebAppProxy

MapReduce: Map Reduce Job History Server

适合一次写入多次读取

客户端联系Namenode以获取文件的元数据或修饰属性,而真正的文件I/O操作是直接和Datanode进行交互的。

周期心跳和块状态报告

状态监控:

NodeManager周期执行管理员定制脚本,当脚本检测到unhealthy state,会输出ERROR。

NodeManager检查到输出ERROR,则上报unhealthy,并被ResourceManager加入黑名单。

脚本继续执行,自动恢复。

通过在etc/hadoop/yarn-site.xml配置脚本路径、选项、周期、超时、硬盘健康最小阈值。

配置管理:

只读配置:core-default.xml, hdfs-default.xml, yarn-default.xml and mapred-default.xml.

Site配置:etc/hadoop/core-site.xml, etc/hadoop/hdfs-site.xml, etc/hadoop/yarn-site.xml and etc/hadoop/mapred-site.xml.

配置守护进程的运行环境:

etc/hadoop/hadoop-env.sh:

export JAVA_HOME=${JAVA_HOME}

export HADOOP_NAMENODE_OPTS="-XX:+UseParallelGC"

HADOOP_PID_DIR
HADOOP_LOG_DIR
HADOOP_HEAPSIZE / YARN_HEAPSIZE
HADOOP_PREFIX

etc/hadoop/mapred-env.sh
etc/hadoop/yarn-env.sh

配置守护进程:

 etc/hadoop/core-site.xml
<name>fs.defaultFS</name>  //NameNode URI
<value>hdfs://localhost:9000</value>
etc/hadoop/hdfs-site.xml
<name>dfs.replication</name>
<value>1</value>

etc/hadoop/mapred-site.xml
<name>mapreduce.framework.name</name>
<value>yarn</value>
etc/hadoop/yarn-site.xml
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>

其他:

etc/hadoop/slaves

etc/hadoop/log4j.properties

在默认配置下NameNode的首页地址是http://namenode-name:50070/

YARN服务ResourceManager默认地址是http://localhost:8088/

MapReduce JobHistory Server默认地址是http://localhost:19888/

bin/hadoop fs -help 命令列出所有Hadoop Shell支持的命令。

bin/hadoop fs -help command-name 命令能显示关于某个命令的详细信息。

bin/hadoop dfsadmin -help 命令能列出所有当前支持的命令。比如:-report:报告HDFS的基本统计信息。-safemode:手动让NameNode进入或离开安全模式。

启动:

启动HDFS服务:

  • 格式化文件系统:

$ bin/hdfs namenode -format

  • 启动NameNode和DataNode:

$sbin/hadoop-daemon.sh --config $HADOOP_CONF_DIR --script hdfs start namenode
$sbin/hadoop-daemons.sh --config $HADOOP_CONF_DIR --script hdfs start datanode

or

$ sbin/start-dfs.sh

  • 在HDFS上创建目录:

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

  • 将文件拷贝到分布式文件系统上:

$ bin/hdfs dfs -put etc/hadoop input

  • 执行示例程序:读取输入文件显示匹配正则表达式的字符串

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

  • 将文件在分布式文件系统上取出:

$ bin/hdfs dfs -get output output
$ cat output/*

  • 直接查看分布式文件系统上的文件:

$ bin/hdfs dfs -cat output/*

  • 停止HDFS服务:

$sbin/hadoop-daemon.sh --config $HADOOP_CONF_DIR --script hdfs stop namenode
$sbin/hadoop-daemons.sh --config $HADOOP_CONF_DIR --script hdfs stop datanode

or

$ sbin/stop-dfs.sh

启动YARN:

  • 启动ResourceManager和NodeManager服务:

$sbin/yarn-daemon.sh --config $HADOOP_CONF_DIR start resourcemanager
$sbin/yarn-daemons.sh --config $HADOOP_CONF_DIR start nodemanager
or

$ sbin/start-yarn.sh

  • 启动WebAppProxy:

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

  • 启动MapReduce JobHistory Server:

$sbin/mr-jobhistory-daemon.sh --config $HADOOP_CONF_DIR start historyserver

  • 停止YARN服务:

$sbin/yarn-daemon.sh --config $HADOOP_CONF_DIR stop resourcemanager
$sbin/yarn-daemons.sh --config $HADOOP_CONF_DIR stop nodemanager

or

$ sbin/stop-yarn.sh

  • 停止WebAppProxy:

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

  • 停止MapReduce JobHistory Server:

$sbin/mr-jobhistory-daemon.sh --config $HADOOP_CONF_DIR stop historyserver

NameNode将对文件系统的改动追加保存到本地文件系统上的一个日志文件(edits)。当一个NameNode启动时,它首先从一个映像文件(fsimage)中读取HDFS的状态,接着应用日志文件中的edits操作。然后它将新的HDFS状态写入(fsimage)中,并使用一个空的edits文件开始正常操作。

安全模式下,namenode等待datanode上报数据块状态,防止过早复制数据。

secondary namenode检查点:

fs.checkpoint.period

fs.checkpoint.size

读写:

副本数目可以在创建文件的时候指定,也可以后面更改。副本存放,两机架三副本。

通信协议TCP clientprotocol datanodeprotocol

创建文件时,先在客户端本地缓存,大小达到数据块时,namenode返回datanode的标识和目标数据块,客户端上传临时文件到数据块,文件关闭时,namenode提交到日志进行存储。流水线复制

文件操作:

create path permition

mkdir path permission

chmod

chgroup

chown

ls

lsr

原文地址:https://www.cnblogs.com/aaroncnblogs/p/8629622.html