是什么是hadoop?
(1) 框架核心设计: HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算
(2) 思想 : 分布式,分而治之,并行结算 ,计算向数据移动
(3) 模块:分布式文件存储系统HDFS: 提供了高可扩展性,高可靠性,和高吞吐率的数据存储服务
分布式计算框架MapReduce: 计算向数据 移动 分布式资源框里框架YARN: 负责集群资源的管理和调度
(4)存储模型:字节
--文件线性切割成块(Block):偏移量offset(byte)
-- Block 分选存储在集群节点中
--单一文件Block大小一致,文件和文件可以不一致
--Block可以设置副本数,副本分散在不同节点中
--文件上传可以设置副Block大小和副本数
--已上传的文件Block副本数可以调整,大小不变
--只支持一次写入,多次读取,同一时刻还有一个写入者,可以Append追加数据
(5)架构模型
--文件元数据MetaData,文件数据
--(主) NameNode节点保存文件元数据:单节点posix
--(从) DateNode节点保存文件Block数据:多节点
--DataNode和NameNode保持心跳,提交block列表
--HdfsClient和NameNode交换元数据信息
--HdfsClint和DataNode交换文件Block数据
(6)NameNode(NN)
-基于内存存储:不会和存盘发生交换
-主要功能
接受客户端的读写f㐏
接受Namenode汇报的Block列表信息
-NameNOde保存metadata信息包括
文件owership和permissions
文件大小,时间
(Block列表:Block偏移量),位置信息
Block每副本位置(有DatNode上报)
(7)DataNode(DN)
--本地磁盘目录存储数据(Block),文件形式
--同时存储Block的元数据信息文件
--启动DN时会向NN汇报block信息
--通过向NN发送心跳保持与其联系(3秒一次),如果NN 10分钟没有收到DN的心跳,则认为其已经lost,并copy其上的Block到其他的DN
(8)SecondaryNameNode (SNN)
-不是NN的备份,但可以做备份,主要作用是帮助NN合并edits log,减少NN启动时间
--合并时机
根据配置文件设置的间隔时间fs.checkpoint.period 默认3600秒
根据配置文件设置edits log大小 fs.checkpoint.size 规定edits文件的最大值默认为是64MB
用户登录配置
生成秘钥: ssh-keygen -t rsa生成ssh秘钥。dsa 复制到authorized_keys: cp id_rsa.pub authorized_keys 登录: ssh localhost安装hadloop
下载 http://archive.cloudera.com/cdh5/cdh/5/ 并解压到本地
/Users/wlx/work/tool/hadoop-2.5.0-cdh5.3.6
配置 etc/hadoop/ hadoop-env.sh
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home export HADOOP_PID_DIR=/Users/wlx/bigdater/hadoop-2.5.0-cdh5.3.6/hdfs/tmp
配置 etc/hadoop/ /core-site.xml 指定临时目录和文件系
<configuration> <property> //告诉所有集群节点,NameNode节点位置(所有集群配置都一置) <name>fs.defaultFS</name> <value>hdfs://localhost:9000</value> </property> <property>//hadloop 默认临时文件地址 <name>hadoop.tmp.dir</name><value>/Users/wlx/bigdater/hadoop-2.5.0-cdh5.3.6/hdfs/tmp</value> </property></configuration>
配置 ect/hadoop/hdfs-site.xml 由于是一台Mac电脑,所以数据的副本设置为1,默认是3
<configuration> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>/Users/wlx/bigdater/hadoop-2.5.0-cdh5.3.6/hdfs/tmp/name</value> </property> <property> <name>dfs.namenode.data.dir</name> <value>/Users/wlx/bigdater/hadoop-2.5.0-cdh5.3.6/hdfs/tmp/data</value> </property> <property> <name>dfs.permissions.enabled</name> <value>false</value> </property> </configuration>
配置etc/hadoop/mapred-env.sh
export HADOOP_MAPRED_PID_DIR=/home/hadoop/bigdater/hadoop-2.5.0-cdh5.3.6/hdfs/tmp
配置 etc/hadoop/yarn-env.sh
export YARN_PID_DIR=/home/hadoop/bigdater/hadoop-2.5.0-cdh5.3.6/hdfs/tmp
配置 创建mapred-site.xml文件,直接执行命令cp mapred-site.xml.templete mapred-site.xml ,配置数据处理的框架为yarn
<property> <name>mapreduce.framework.name</name> <value>yarn</value> </property>
配置 yarn-site.xml文件,配置数据处理框架yarn
<property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property>
配置slaves指定datanode节点,将localhost改成主机名
localhost
修改环境变量文件,并使其立即生效 source ~/.base_profile"
###### hadoop 2.5.0 export HADOOP_HOME=/Users/wlx/work/tool/hadoop-2.5.0-cdh5.3.6 export HADOOP_PREFIX=$HADOOP_HOME export HADOOP_COMMON_HOME=$HADOOP_PREFIX export HADOOP_CONF_DIR=$HADOOP_PREFIX/etc/hadoop export HADOOP_HDFS_HOME=$HADOOP_PREFIX export HADOOP_MAPRED_HOME=$HADOOP_PREFIX export HADOOP_YARN_HOME=$HADOOP_PREFIX export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
常用对于附件和文件夹的增删命令
hdfs dfsadmin -report观察集群配置情况,如图所示,含有三个从节点 hadoop fs -ls / hadoop fs -put file / hadoop fs -mkdir /dirname hadoop fs -text /filename hadoop fs -rm /filename
横向扩展,如果要新加集群的配置方法
新起一台虚拟机 修改hosts文件 修改nn主机hadoop目录下etc/hadoop/slaves文件加入主机名 同样方式分发hosts, profile, software 在新加的主机上执行hadoop-daemon.sh start datanode
配置完成后,随意地方打上命令 hadoop ,如果有反应,就表示环境配置好了,如下查看版本
zhouguang:~ wlx$ hadoop version Hadoop 2.5.0-cdh5.3.6 Subversion http://github.com/cloudera/hadoop -r 6743ef286bfdd317b600adbdb154f982cf2fac7a Compiled by jenkins on 2015-07-28T22:14Z Compiled with protoc 2.5.0 From source with checksum 9c7775296a534f91809cc23d2d15ffcc This command was run using /Users/wlx/work/tool/hadoop-2.5.0-cdh5.3.6/share/hadoop/common/hadoop-common-2.5.0-cdh5.3.6.jar zhouguang:~ wlx$
启动 start-all.sh
zhouguang:~ wlx$ start-all.sh This script is Deprecated. Instead use start-dfs.sh and start-yarn.sh17/11/10 17:47:16 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicableStarting namenodes on [localhost]localhost: starting namenode, logging to /Users/wlx/work/tool/hadoop-2.5.0-cdh5.3.6/logs/hadoop-wlx-namenode-zhouguang.local.outlocalhost: starting datanode, logging to /Users/wlx/work/tool/hadoop-2.5.0-cdh5.3.6/logs/hadoop-wlx-datanode-zhouguang.local.outStarting secondary namenodes [0.0.0.0]0.0.0.0: starting secondarynamenode, logging to /Users/wlx/work/tool/hadoop-2.5.0-cdh5.3.6/logs/hadoop-wlx-secondarynamenode-zhouguang.local.out17/11/10 17:47:33 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicablestarting yarn daemonsstarting resourcemanager, logging to /Users/wlx/work/tool/hadoop-2.5.0-cdh5.3.6//logs/yarn-wlx-resourcemanager-zhouguang.local.outlocalhost: starting nodemanager, logging to /Users/wlx/work/tool/hadoop-2.5.0-cdh5.3.6/logs/yarn-wlx-nodemanager-zhouguang.local.out
zhouguang:~ wlx$ jps 60657 DataNode 60977 Launcher 60978 Jps 60933 NodeManager 60582 NameNode 60854 ResourceManager 682 60749 SecondaryNameNode zhouguang:~ wlx$
通过Web访问 http://localhost:50070/
设置上传默认路径
zhouguang:~ wlx$ hdfs dfs -mkdir -p /user/zhouguang 17/11/10 17:54:37 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
上传文件
说明:test问价夹下有两个文件,my.text 和 JVM底层调优.avi ,第二个文件有196MB, 上传之后,hdsf会切割成块,每个块默认大小为128MB, 所以会有两个块存储起来
zhouguang:test wlx$ ls -al total 402776 drwxr-xr-x 4 wlx staff 136 11 10 18:01 . drwxr-xr-x+ 74 wlx staff 2516 11 10 17:58 .. -rw-r--r--@ 1 wlx staff 206216978 8 26 21:26 JVM底层调优.avi -rwxr-xr-x@ 1 wlx staff 15 11 10 18:01 my.text zhouguang:test wlx$ hdfs dfs -put JVM底层调优.avi /user/zhouguang 17/11/10 23:06:06 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
通过Web查看