前置条件:
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